1 /* *INDENT-OFF* */ /* ATTRIBUTE_PRINTF confuses indent, avoid running it 2 for now. */ 3 /* I/O, string, cleanup, and other random utilities for GDB. 4 Copyright (C) 1986-2020 Free Software Foundation, Inc. 5 6 This file is part of GDB. 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 3 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 20 21 #ifndef UTILS_H 22 #define UTILS_H 23 24 #include "exceptions.h" 25 #include "gdbsupport/array-view.h" 26 #include "gdbsupport/scoped_restore.h" 27 #include <chrono> 28 29 #ifdef HAVE_LIBXXHASH 30 #include <xxhash.h> 31 #endif 32 33 struct completion_match_for_lcd; 34 class compiled_regex; 35 36 /* String utilities. */ 37 38 extern bool sevenbit_strings; 39 40 /* Modes of operation for strncmp_iw_with_mode. */ 41 42 enum class strncmp_iw_mode 43 { 44 /* Do a strcmp() type operation on STRING1 and STRING2, ignoring any 45 differences in whitespace. Returns 0 if they match, non-zero if 46 they don't (slightly different than strcmp()'s range of return 47 values). */ 48 NORMAL, 49 50 /* Like NORMAL, but also apply the strcmp_iw hack. I.e., 51 string1=="FOO(PARAMS)" matches string2=="FOO". */ 52 MATCH_PARAMS, 53 }; 54 55 /* Helper for strcmp_iw and strncmp_iw. Exported so that languages 56 can implement both NORMAL and MATCH_PARAMS variants in a single 57 function and defer part of the work to strncmp_iw_with_mode. 58 59 LANGUAGE is used to implement some context-sensitive 60 language-specific comparisons. For example, for C++, 61 "string1=operator()" should not match "string2=operator" even in 62 MATCH_PARAMS mode. 63 64 MATCH_FOR_LCD is passed down so that the function can mark parts of 65 the symbol name as ignored for completion matching purposes (e.g., 66 to handle abi tags). */ 67 extern int strncmp_iw_with_mode 68 (const char *string1, const char *string2, size_t string2_len, 69 strncmp_iw_mode mode, enum language language, 70 completion_match_for_lcd *match_for_lcd = NULL); 71 72 /* Do a strncmp() type operation on STRING1 and STRING2, ignoring any 73 differences in whitespace. STRING2_LEN is STRING2's length. 74 Returns 0 if STRING1 matches STRING2_LEN characters of STRING2, 75 non-zero otherwise (slightly different than strncmp()'s range of 76 return values). Note: passes language_minimal to 77 strncmp_iw_with_mode, and should therefore be avoided if a more 78 suitable language is available. */ 79 extern int strncmp_iw (const char *string1, const char *string2, 80 size_t string2_len); 81 82 /* Do a strcmp() type operation on STRING1 and STRING2, ignoring any 83 differences in whitespace. Returns 0 if they match, non-zero if 84 they don't (slightly different than strcmp()'s range of return 85 values). 86 87 As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO". 88 This "feature" is useful when searching for matching C++ function 89 names (such as if the user types 'break FOO', where FOO is a 90 mangled C++ function). 91 92 Note: passes language_minimal to strncmp_iw_with_mode, and should 93 therefore be avoided if a more suitable language is available. */ 94 extern int strcmp_iw (const char *string1, const char *string2); 95 96 extern int strcmp_iw_ordered (const char *, const char *); 97 98 /* Return true if the strings are equal. */ 99 100 extern bool streq (const char *, const char *); 101 102 /* A variant of streq that is suitable for use as an htab 103 callback. */ 104 105 extern int streq_hash (const void *, const void *); 106 107 extern int subset_compare (const char *, const char *); 108 109 /* Compare C strings for std::sort. */ 110 111 static inline bool 112 compare_cstrings (const char *str1, const char *str2) 113 { 114 return strcmp (str1, str2) < 0; 115 } 116 117 /* A wrapper for bfd_errmsg to produce a more helpful error message 118 in the case of bfd_error_file_ambiguously recognized. 119 MATCHING, if non-NULL, is the corresponding argument to 120 bfd_check_format_matches, and will be freed. */ 121 122 extern std::string gdb_bfd_errmsg (bfd_error_type error_tag, char **matching); 123 124 /* Reset the prompt_for_continue clock. */ 125 void reset_prompt_for_continue_wait_time (void); 126 /* Return the time spent in prompt_for_continue. */ 127 std::chrono::steady_clock::duration get_prompt_for_continue_wait_time (); 128 129 /* Parsing utilities. */ 130 131 extern int parse_pid_to_attach (const char *args); 132 133 extern int parse_escape (struct gdbarch *, const char **); 134 135 /* A wrapper for an array of char* that was allocated in the way that 136 'buildargv' does, and should be freed with 'freeargv'. */ 137 138 class gdb_argv 139 { 140 public: 141 142 /* A constructor that initializes to NULL. */ 143 144 gdb_argv () 145 : m_argv (NULL) 146 { 147 } 148 149 /* A constructor that calls buildargv on STR. STR may be NULL, in 150 which case this object is initialized with a NULL array. */ 151 152 explicit gdb_argv (const char *str) 153 : m_argv (NULL) 154 { 155 reset (str); 156 } 157 158 /* A constructor that takes ownership of an existing array. */ 159 160 explicit gdb_argv (char **array) 161 : m_argv (array) 162 { 163 } 164 165 gdb_argv (const gdb_argv &) = delete; 166 gdb_argv &operator= (const gdb_argv &) = delete; 167 168 ~gdb_argv () 169 { 170 freeargv (m_argv); 171 } 172 173 /* Call buildargv on STR, storing the result in this object. Any 174 previous state is freed. STR may be NULL, in which case this 175 object is reset with a NULL array. If buildargv fails due to 176 out-of-memory, call malloc_failure. Therefore, the value is 177 guaranteed to be non-NULL, unless the parameter itself is 178 NULL. */ 179 180 void reset (const char *str); 181 182 /* Return the underlying array. */ 183 184 char **get () 185 { 186 return m_argv; 187 } 188 189 /* Return the underlying array, transferring ownership to the 190 caller. */ 191 192 ATTRIBUTE_UNUSED_RESULT char **release () 193 { 194 char **result = m_argv; 195 m_argv = NULL; 196 return result; 197 } 198 199 /* Return the number of items in the array. */ 200 201 int count () const 202 { 203 return countargv (m_argv); 204 } 205 206 /* Index into the array. */ 207 208 char *operator[] (int arg) 209 { 210 gdb_assert (m_argv != NULL); 211 return m_argv[arg]; 212 } 213 214 /* Return the arguments array as an array view. */ 215 216 gdb::array_view<char *> as_array_view () 217 { 218 return gdb::array_view<char *> (this->get (), this->count ()); 219 } 220 221 /* The iterator type. */ 222 223 typedef char **iterator; 224 225 /* Return an iterator pointing to the start of the array. */ 226 227 iterator begin () 228 { 229 return m_argv; 230 } 231 232 /* Return an iterator pointing to the end of the array. */ 233 234 iterator end () 235 { 236 return m_argv + count (); 237 } 238 239 bool operator!= (std::nullptr_t) 240 { 241 return m_argv != NULL; 242 } 243 244 bool operator== (std::nullptr_t) 245 { 246 return m_argv == NULL; 247 } 248 249 private: 250 251 /* The wrapped array. */ 252 253 char **m_argv; 254 }; 255 256 257 /* Cleanup utilities. */ 258 259 /* A deleter for a hash table. */ 260 struct htab_deleter 261 { 262 void operator() (htab *ptr) const 263 { 264 htab_delete (ptr); 265 } 266 }; 267 268 /* A unique_ptr wrapper for htab_t. */ 269 typedef std::unique_ptr<htab, htab_deleter> htab_up; 270 271 extern void init_page_info (void); 272 273 /* Temporarily set BATCH_FLAG and the associated unlimited terminal size. 274 Restore when destroyed. */ 275 276 struct set_batch_flag_and_restore_page_info 277 { 278 public: 279 280 set_batch_flag_and_restore_page_info (); 281 ~set_batch_flag_and_restore_page_info (); 282 283 DISABLE_COPY_AND_ASSIGN (set_batch_flag_and_restore_page_info); 284 285 private: 286 287 /* Note that this doesn't use scoped_restore, because it's important 288 to control the ordering of operations in the destruction, and it 289 was simpler to avoid introducing a new ad hoc class. */ 290 unsigned m_save_lines_per_page; 291 unsigned m_save_chars_per_line; 292 int m_save_batch_flag; 293 }; 294 295 296 /* Path utilities. */ 297 298 extern int gdb_filename_fnmatch (const char *pattern, const char *string, 299 int flags); 300 301 extern void substitute_path_component (char **stringp, const char *from, 302 const char *to); 303 304 std::string ldirname (const char *filename); 305 306 extern int count_path_elements (const char *path); 307 308 extern const char *strip_leading_path_elements (const char *path, int n); 309 310 /* GDB output, ui_file utilities. */ 311 312 struct ui_file; 313 314 extern int query (const char *, ...) ATTRIBUTE_PRINTF (1, 2); 315 extern int nquery (const char *, ...) ATTRIBUTE_PRINTF (1, 2); 316 extern int yquery (const char *, ...) ATTRIBUTE_PRINTF (1, 2); 317 318 extern void begin_line (void); 319 320 extern void wrap_here (const char *); 321 322 extern void reinitialize_more_filter (void); 323 324 extern bool pagination_enabled; 325 326 extern struct ui_file **current_ui_gdb_stdout_ptr (void); 327 extern struct ui_file **current_ui_gdb_stdin_ptr (void); 328 extern struct ui_file **current_ui_gdb_stderr_ptr (void); 329 extern struct ui_file **current_ui_gdb_stdlog_ptr (void); 330 331 /* Flush STREAM. This is a wrapper for ui_file_flush that also 332 flushes any output pending from uses of the *_filtered output 333 functions; that output is kept in a special buffer so that 334 pagination and styling are handled properly. */ 335 extern void gdb_flush (struct ui_file *); 336 337 /* The current top level's ui_file streams. */ 338 339 /* Normal results */ 340 #define gdb_stdout (*current_ui_gdb_stdout_ptr ()) 341 /* Input stream */ 342 #define gdb_stdin (*current_ui_gdb_stdin_ptr ()) 343 /* Serious error notifications */ 344 #define gdb_stderr (*current_ui_gdb_stderr_ptr ()) 345 /* Log/debug/trace messages that should bypass normal stdout/stderr 346 filtering. For moment, always call this stream using 347 *_unfiltered. In the very near future that restriction shall be 348 removed - either call shall be unfiltered. (cagney 1999-06-13). */ 349 #define gdb_stdlog (*current_ui_gdb_stdlog_ptr ()) 350 351 /* Truly global ui_file streams. These are all defined in main.c. */ 352 353 /* Target output that should bypass normal stdout/stderr filtering. 354 For moment, always call this stream using *_unfiltered. In the 355 very near future that restriction shall be removed - either call 356 shall be unfiltered. (cagney 1999-07-02). */ 357 extern struct ui_file *gdb_stdtarg; 358 extern struct ui_file *gdb_stdtargerr; 359 extern struct ui_file *gdb_stdtargin; 360 361 /* Set the screen dimensions to WIDTH and HEIGHT. */ 362 363 extern void set_screen_width_and_height (int width, int height); 364 365 /* More generic printf like operations. Filtered versions may return 366 non-locally on error. As an extension over plain printf, these 367 support some GDB-specific format specifiers. Particularly useful 368 here are the styling formatters: '%p[', '%p]' and '%ps'. See 369 ui_out::message for details. */ 370 371 extern void fputs_filtered (const char *, struct ui_file *); 372 373 extern void fputs_unfiltered (const char *, struct ui_file *); 374 375 extern int fputc_filtered (int c, struct ui_file *); 376 377 extern int fputc_unfiltered (int c, struct ui_file *); 378 379 extern int putchar_filtered (int c); 380 381 extern int putchar_unfiltered (int c); 382 383 extern void puts_filtered (const char *); 384 385 extern void puts_unfiltered (const char *); 386 387 extern void puts_filtered_tabular (char *string, int width, int right); 388 389 extern void puts_debug (char *prefix, char *string, char *suffix); 390 391 extern void vprintf_filtered (const char *, va_list) ATTRIBUTE_PRINTF (1, 0); 392 393 extern void vfprintf_filtered (struct ui_file *, const char *, va_list) 394 ATTRIBUTE_PRINTF (2, 0); 395 396 extern void fprintf_filtered (struct ui_file *, const char *, ...) 397 ATTRIBUTE_PRINTF (2, 3); 398 399 extern void fprintfi_filtered (int, struct ui_file *, const char *, ...) 400 ATTRIBUTE_PRINTF (3, 4); 401 402 extern void printf_filtered (const char *, ...) ATTRIBUTE_PRINTF (1, 2); 403 404 extern void printfi_filtered (int, const char *, ...) ATTRIBUTE_PRINTF (2, 3); 405 406 extern void vprintf_unfiltered (const char *, va_list) ATTRIBUTE_PRINTF (1, 0); 407 408 extern void vfprintf_unfiltered (struct ui_file *, const char *, va_list) 409 ATTRIBUTE_PRINTF (2, 0); 410 411 extern void fprintf_unfiltered (struct ui_file *, const char *, ...) 412 ATTRIBUTE_PRINTF (2, 3); 413 414 extern void printf_unfiltered (const char *, ...) ATTRIBUTE_PRINTF (1, 2); 415 416 extern void print_spaces (int, struct ui_file *); 417 418 extern void print_spaces_filtered (int, struct ui_file *); 419 420 extern char *n_spaces (int); 421 422 extern void fputstr_filtered (const char *str, int quotr, 423 struct ui_file * stream); 424 425 extern void fputstr_unfiltered (const char *str, int quotr, 426 struct ui_file * stream); 427 428 extern void fputstrn_filtered (const char *str, int n, int quotr, 429 struct ui_file * stream); 430 431 typedef int (*do_fputc_ftype) (int c, ui_file *stream); 432 433 extern void fputstrn_unfiltered (const char *str, int n, int quotr, 434 do_fputc_ftype do_fputc, 435 struct ui_file * stream); 436 437 /* Return nonzero if filtered printing is initialized. */ 438 extern int filtered_printing_initialized (void); 439 440 /* Like fprintf_filtered, but styles the output according to STYLE, 441 when appropriate. */ 442 443 extern void fprintf_styled (struct ui_file *stream, 444 const ui_file_style &style, 445 const char *fmt, 446 ...) 447 ATTRIBUTE_PRINTF (3, 4); 448 449 extern void vfprintf_styled (struct ui_file *stream, 450 const ui_file_style &style, 451 const char *fmt, 452 va_list args) 453 ATTRIBUTE_PRINTF (3, 0); 454 455 /* Like vfprintf_styled, but do not process gdb-specific format 456 specifiers. */ 457 extern void vfprintf_styled_no_gdbfmt (struct ui_file *stream, 458 const ui_file_style &style, 459 bool filter, 460 const char *fmt, va_list args) 461 ATTRIBUTE_PRINTF (4, 0); 462 463 /* Like fputs_filtered, but styles the output according to STYLE, when 464 appropriate. */ 465 466 extern void fputs_styled (const char *linebuffer, 467 const ui_file_style &style, 468 struct ui_file *stream); 469 470 /* Unfiltered variant of fputs_styled. */ 471 472 extern void fputs_styled_unfiltered (const char *linebuffer, 473 const ui_file_style &style, 474 struct ui_file *stream); 475 476 /* Like fputs_styled, but uses highlight_style to highlight the 477 parts of STR that match HIGHLIGHT. */ 478 479 extern void fputs_highlighted (const char *str, const compiled_regex &highlight, 480 struct ui_file *stream); 481 482 /* Reset the terminal style to the default, if needed. */ 483 484 extern void reset_terminal_style (struct ui_file *stream); 485 486 /* Display the host ADDR on STREAM formatted as ``0x%x''. */ 487 extern void gdb_print_host_address_1 (const void *addr, struct ui_file *stream); 488 489 /* Wrapper that avoids adding a pointless cast to all callers. */ 490 #define gdb_print_host_address(ADDR, STREAM) \ 491 gdb_print_host_address_1 ((const void *) ADDR, STREAM) 492 493 /* Return the address only having significant bits. */ 494 extern CORE_ADDR address_significant (gdbarch *gdbarch, CORE_ADDR addr); 495 496 /* Convert CORE_ADDR to string in platform-specific manner. 497 This is usually formatted similar to 0x%lx. */ 498 extern const char *paddress (struct gdbarch *gdbarch, CORE_ADDR addr); 499 500 /* Return a string representation in hexadecimal notation of ADDRESS, 501 which is suitable for printing. */ 502 503 extern const char *print_core_address (struct gdbarch *gdbarch, 504 CORE_ADDR address); 505 506 /* Callback hash_f and eq_f for htab_create_alloc or htab_create_alloc_ex. */ 507 extern hashval_t core_addr_hash (const void *ap); 508 extern int core_addr_eq (const void *ap, const void *bp); 509 510 extern CORE_ADDR string_to_core_addr (const char *my_string); 511 512 extern void fprintf_symbol_filtered (struct ui_file *, const char *, 513 enum language, int); 514 515 extern void throw_perror_with_name (enum errors errcode, const char *string) 516 ATTRIBUTE_NORETURN; 517 518 extern void perror_warning_with_name (const char *string); 519 520 extern void print_sys_errmsg (const char *, int); 521 522 /* Warnings and error messages. */ 523 524 extern void (*deprecated_error_begin_hook) (void); 525 526 /* Message to be printed before the warning message, when a warning occurs. */ 527 528 extern const char *warning_pre_print; 529 530 extern void error_stream (const string_file &) ATTRIBUTE_NORETURN; 531 532 extern void demangler_vwarning (const char *file, int line, 533 const char *, va_list ap) 534 ATTRIBUTE_PRINTF (3, 0); 535 536 extern void demangler_warning (const char *file, int line, 537 const char *, ...) ATTRIBUTE_PRINTF (3, 4); 538 539 540 /* Misc. utilities. */ 541 542 /* Allocation and deallocation functions for the libiberty hash table 543 which use obstacks. */ 544 void *hashtab_obstack_allocate (void *data, size_t size, size_t count); 545 void dummy_obstack_deallocate (void *object, void *data); 546 547 #ifdef HAVE_WAITPID 548 extern pid_t wait_to_die_with_timeout (pid_t pid, int *status, int timeout); 549 #endif 550 551 extern int myread (int, char *, int); 552 553 /* Resource limits used by getrlimit and setrlimit. */ 554 555 enum resource_limit_kind 556 { 557 LIMIT_CUR, 558 LIMIT_MAX 559 }; 560 561 /* Check whether GDB will be able to dump core using the dump_core 562 function. Returns zero if GDB cannot or should not dump core. 563 If LIMIT_KIND is LIMIT_CUR the user's soft limit will be respected. 564 If LIMIT_KIND is LIMIT_MAX only the hard limit will be respected. */ 565 566 extern int can_dump_core (enum resource_limit_kind limit_kind); 567 568 /* Print a warning that we cannot dump core. */ 569 570 extern void warn_cant_dump_core (const char *reason); 571 572 /* Dump core trying to increase the core soft limit to hard limit 573 first. */ 574 575 extern void dump_core (void); 576 577 /* Copy NBITS bits from SOURCE to DEST starting at the given bit 578 offsets. Use the bit order as specified by BITS_BIG_ENDIAN. 579 Source and destination buffers must not overlap. */ 580 581 extern void copy_bitwise (gdb_byte *dest, ULONGEST dest_offset, 582 const gdb_byte *source, ULONGEST source_offset, 583 ULONGEST nbits, int bits_big_endian); 584 585 /* A fast hashing function. This can be used to hash data in a fast way 586 when the length is known. If no fast hashing library is available, falls 587 back to iterative_hash from libiberty. START_VALUE can be set to 588 continue hashing from a previous value. */ 589 590 static inline unsigned int 591 fast_hash (const void *ptr, size_t len, unsigned int start_value = 0) 592 { 593 #ifdef HAVE_LIBXXHASH 594 return XXH64 (ptr, len, start_value); 595 #else 596 return iterative_hash (ptr, len, start_value); 597 #endif 598 } 599 600 #endif /* UTILS_H */ 601