1 /* General utility routines for GDB, the GNU debugger. 2 3 Copyright (C) 1986-2019 Free Software Foundation, Inc. 4 5 This file is part of GDB. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 #include "defs.h" 21 #include <ctype.h> 22 #include "common/gdb_wait.h" 23 #include "event-top.h" 24 #include "gdbthread.h" 25 #include "fnmatch.h" 26 #include "gdb_bfd.h" 27 #ifdef HAVE_SYS_RESOURCE_H 28 #include <sys/resource.h> 29 #endif /* HAVE_SYS_RESOURCE_H */ 30 31 #ifdef TUI 32 #include "tui/tui.h" /* For tui_get_command_dimension. */ 33 #endif 34 35 #ifdef __GO32__ 36 #include <pc.h> 37 #endif 38 39 #include <signal.h> 40 #include "gdbcmd.h" 41 #include "serial.h" 42 #include "bfd.h" 43 #include "target.h" 44 #include "gdb-demangle.h" 45 #include "expression.h" 46 #include "language.h" 47 #include "charset.h" 48 #include "annotate.h" 49 #include "filenames.h" 50 #include "symfile.h" 51 #include "gdb_obstack.h" 52 #include "gdbcore.h" 53 #include "top.h" 54 #include "main.h" 55 #include "solist.h" 56 57 #include "inferior.h" /* for signed_pointer_to_address */ 58 59 #include "gdb_curses.h" 60 61 #include "readline/readline.h" 62 63 #include <chrono> 64 65 #include "gdb_usleep.h" 66 #include "interps.h" 67 #include "gdb_regex.h" 68 #include "common/job-control.h" 69 #include "common/selftest.h" 70 #include "common/gdb_optional.h" 71 #include "cp-support.h" 72 #include <algorithm> 73 #include "common/pathstuff.h" 74 #include "cli/cli-style.h" 75 #include "common/scope-exit.h" 76 77 void (*deprecated_error_begin_hook) (void); 78 79 /* Prototypes for local functions */ 80 81 static void vfprintf_maybe_filtered (struct ui_file *, const char *, 82 va_list, int) ATTRIBUTE_PRINTF (2, 0); 83 84 static void fputs_maybe_filtered (const char *, struct ui_file *, int); 85 86 static void prompt_for_continue (void); 87 88 static void set_screen_size (void); 89 static void set_width (void); 90 91 /* Time spent in prompt_for_continue in the currently executing command 92 waiting for user to respond. 93 Initialized in make_command_stats_cleanup. 94 Modified in prompt_for_continue and defaulted_query. 95 Used in report_command_stats. */ 96 97 static std::chrono::steady_clock::duration prompt_for_continue_wait_time; 98 99 /* A flag indicating whether to timestamp debugging messages. */ 100 101 static int debug_timestamp = 0; 102 103 /* Nonzero means that strings with character values >0x7F should be printed 104 as octal escapes. Zero means just print the value (e.g. it's an 105 international character, and the terminal or window can cope.) */ 106 107 int sevenbit_strings = 0; 108 static void 109 show_sevenbit_strings (struct ui_file *file, int from_tty, 110 struct cmd_list_element *c, const char *value) 111 { 112 fprintf_filtered (file, _("Printing of 8-bit characters " 113 "in strings as \\nnn is %s.\n"), 114 value); 115 } 116 117 /* String to be printed before warning messages, if any. */ 118 119 const char *warning_pre_print = "\nwarning: "; 120 121 int pagination_enabled = 1; 122 static void 123 show_pagination_enabled (struct ui_file *file, int from_tty, 124 struct cmd_list_element *c, const char *value) 125 { 126 fprintf_filtered (file, _("State of pagination is %s.\n"), value); 127 } 128 129 130 /* Cleanup utilities. 131 132 These are not defined in cleanups.c (nor declared in cleanups.h) 133 because while they use the "cleanup API" they are not part of the 134 "cleanup API". */ 135 136 /* This function is useful for cleanups. 137 Do 138 139 foo = xmalloc (...); 140 old_chain = make_cleanup (free_current_contents, &foo); 141 142 to arrange to free the object thus allocated. */ 143 144 void 145 free_current_contents (void *ptr) 146 { 147 void **location = (void **) ptr; 148 149 if (location == NULL) 150 internal_error (__FILE__, __LINE__, 151 _("free_current_contents: NULL pointer")); 152 if (*location != NULL) 153 { 154 xfree (*location); 155 *location = NULL; 156 } 157 } 158 159 160 161 /* Print a warning message. The first argument STRING is the warning 162 message, used as an fprintf format string, the second is the 163 va_list of arguments for that string. A warning is unfiltered (not 164 paginated) so that the user does not need to page through each 165 screen full of warnings when there are lots of them. */ 166 167 void 168 vwarning (const char *string, va_list args) 169 { 170 if (deprecated_warning_hook) 171 (*deprecated_warning_hook) (string, args); 172 else 173 { 174 gdb::optional<target_terminal::scoped_restore_terminal_state> term_state; 175 if (target_supports_terminal_ours ()) 176 { 177 term_state.emplace (); 178 target_terminal::ours_for_output (); 179 } 180 if (filtered_printing_initialized ()) 181 wrap_here (""); /* Force out any buffered output. */ 182 gdb_flush (gdb_stdout); 183 if (warning_pre_print) 184 fputs_unfiltered (warning_pre_print, gdb_stderr); 185 vfprintf_unfiltered (gdb_stderr, string, args); 186 fprintf_unfiltered (gdb_stderr, "\n"); 187 } 188 } 189 190 /* Print an error message and return to command level. 191 The first argument STRING is the error message, used as a fprintf string, 192 and the remaining args are passed as arguments to it. */ 193 194 void 195 verror (const char *string, va_list args) 196 { 197 throw_verror (GENERIC_ERROR, string, args); 198 } 199 200 void 201 error_stream (const string_file &stream) 202 { 203 error (("%s"), stream.c_str ()); 204 } 205 206 /* Emit a message and abort. */ 207 208 static void ATTRIBUTE_NORETURN 209 abort_with_message (const char *msg) 210 { 211 if (current_ui == NULL) 212 fputs (msg, stderr); 213 else 214 fputs_unfiltered (msg, gdb_stderr); 215 216 abort (); /* NOTE: GDB has only three calls to abort(). */ 217 } 218 219 /* Dump core trying to increase the core soft limit to hard limit first. */ 220 221 void 222 dump_core (void) 223 { 224 #ifdef HAVE_SETRLIMIT 225 struct rlimit rlim = { (rlim_t) RLIM_INFINITY, (rlim_t) RLIM_INFINITY }; 226 227 setrlimit (RLIMIT_CORE, &rlim); 228 #endif /* HAVE_SETRLIMIT */ 229 230 abort (); /* NOTE: GDB has only three calls to abort(). */ 231 } 232 233 /* Check whether GDB will be able to dump core using the dump_core 234 function. Returns zero if GDB cannot or should not dump core. 235 If LIMIT_KIND is LIMIT_CUR the user's soft limit will be respected. 236 If LIMIT_KIND is LIMIT_MAX only the hard limit will be respected. */ 237 238 int 239 can_dump_core (enum resource_limit_kind limit_kind) 240 { 241 #ifdef HAVE_GETRLIMIT 242 struct rlimit rlim; 243 244 /* Be quiet and assume we can dump if an error is returned. */ 245 if (getrlimit (RLIMIT_CORE, &rlim) != 0) 246 return 1; 247 248 switch (limit_kind) 249 { 250 case LIMIT_CUR: 251 if (rlim.rlim_cur == 0) 252 return 0; 253 /* Fall through. */ 254 255 case LIMIT_MAX: 256 if (rlim.rlim_max == 0) 257 return 0; 258 } 259 #endif /* HAVE_GETRLIMIT */ 260 261 return 1; 262 } 263 264 /* Print a warning that we cannot dump core. */ 265 266 void 267 warn_cant_dump_core (const char *reason) 268 { 269 fprintf_unfiltered (gdb_stderr, 270 _("%s\nUnable to dump core, use `ulimit -c" 271 " unlimited' before executing GDB next time.\n"), 272 reason); 273 } 274 275 /* Check whether GDB will be able to dump core using the dump_core 276 function, and print a warning if we cannot. */ 277 278 static int 279 can_dump_core_warn (enum resource_limit_kind limit_kind, 280 const char *reason) 281 { 282 int core_dump_allowed = can_dump_core (limit_kind); 283 284 if (!core_dump_allowed) 285 warn_cant_dump_core (reason); 286 287 return core_dump_allowed; 288 } 289 290 /* Allow the user to configure the debugger behavior with respect to 291 what to do when an internal problem is detected. */ 292 293 const char internal_problem_ask[] = "ask"; 294 const char internal_problem_yes[] = "yes"; 295 const char internal_problem_no[] = "no"; 296 static const char *const internal_problem_modes[] = 297 { 298 internal_problem_ask, 299 internal_problem_yes, 300 internal_problem_no, 301 NULL 302 }; 303 304 /* Print a message reporting an internal error/warning. Ask the user 305 if they want to continue, dump core, or just exit. Return 306 something to indicate a quit. */ 307 308 struct internal_problem 309 { 310 const char *name; 311 int user_settable_should_quit; 312 const char *should_quit; 313 int user_settable_should_dump_core; 314 const char *should_dump_core; 315 }; 316 317 /* Report a problem, internal to GDB, to the user. Once the problem 318 has been reported, and assuming GDB didn't quit, the caller can 319 either allow execution to resume or throw an error. */ 320 321 static void ATTRIBUTE_PRINTF (4, 0) 322 internal_vproblem (struct internal_problem *problem, 323 const char *file, int line, const char *fmt, va_list ap) 324 { 325 static int dejavu; 326 int quit_p; 327 int dump_core_p; 328 std::string reason; 329 330 /* Don't allow infinite error/warning recursion. */ 331 { 332 static char msg[] = "Recursive internal problem.\n"; 333 334 switch (dejavu) 335 { 336 case 0: 337 dejavu = 1; 338 break; 339 case 1: 340 dejavu = 2; 341 abort_with_message (msg); 342 default: 343 dejavu = 3; 344 /* Newer GLIBC versions put the warn_unused_result attribute 345 on write, but this is one of those rare cases where 346 ignoring the return value is correct. Casting to (void) 347 does not fix this problem. This is the solution suggested 348 at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509. */ 349 if (write (STDERR_FILENO, msg, sizeof (msg)) != sizeof (msg)) 350 abort (); /* NOTE: GDB has only three calls to abort(). */ 351 exit (1); 352 } 353 } 354 355 /* Create a string containing the full error/warning message. Need 356 to call query with this full string, as otherwize the reason 357 (error/warning) and question become separated. Format using a 358 style similar to a compiler error message. Include extra detail 359 so that the user knows that they are living on the edge. */ 360 { 361 std::string msg = string_vprintf (fmt, ap); 362 reason = string_printf ("%s:%d: %s: %s\n" 363 "A problem internal to GDB has been detected,\n" 364 "further debugging may prove unreliable.", 365 file, line, problem->name, msg.c_str ()); 366 } 367 368 /* Fall back to abort_with_message if gdb_stderr is not set up. */ 369 if (current_ui == NULL) 370 { 371 fputs (reason.c_str (), stderr); 372 abort_with_message ("\n"); 373 } 374 375 /* Try to get the message out and at the start of a new line. */ 376 gdb::optional<target_terminal::scoped_restore_terminal_state> term_state; 377 if (target_supports_terminal_ours ()) 378 { 379 term_state.emplace (); 380 target_terminal::ours_for_output (); 381 } 382 if (filtered_printing_initialized ()) 383 begin_line (); 384 385 /* Emit the message unless query will emit it below. */ 386 if (problem->should_quit != internal_problem_ask 387 || !confirm 388 || !filtered_printing_initialized ()) 389 fprintf_unfiltered (gdb_stderr, "%s\n", reason.c_str ()); 390 391 if (problem->should_quit == internal_problem_ask) 392 { 393 /* Default (yes/batch case) is to quit GDB. When in batch mode 394 this lessens the likelihood of GDB going into an infinite 395 loop. */ 396 if (!confirm || !filtered_printing_initialized ()) 397 quit_p = 1; 398 else 399 quit_p = query (_("%s\nQuit this debugging session? "), 400 reason.c_str ()); 401 } 402 else if (problem->should_quit == internal_problem_yes) 403 quit_p = 1; 404 else if (problem->should_quit == internal_problem_no) 405 quit_p = 0; 406 else 407 internal_error (__FILE__, __LINE__, _("bad switch")); 408 409 fputs_unfiltered (_("\nThis is a bug, please report it."), gdb_stderr); 410 if (REPORT_BUGS_TO[0]) 411 fprintf_unfiltered (gdb_stderr, _(" For instructions, see:\n%s."), 412 REPORT_BUGS_TO); 413 fputs_unfiltered ("\n\n", gdb_stderr); 414 415 if (problem->should_dump_core == internal_problem_ask) 416 { 417 if (!can_dump_core_warn (LIMIT_MAX, reason.c_str ())) 418 dump_core_p = 0; 419 else if (!filtered_printing_initialized ()) 420 dump_core_p = 1; 421 else 422 { 423 /* Default (yes/batch case) is to dump core. This leaves a GDB 424 `dropping' so that it is easier to see that something went 425 wrong in GDB. */ 426 dump_core_p = query (_("%s\nCreate a core file of GDB? "), 427 reason.c_str ()); 428 } 429 } 430 else if (problem->should_dump_core == internal_problem_yes) 431 dump_core_p = can_dump_core_warn (LIMIT_MAX, reason.c_str ()); 432 else if (problem->should_dump_core == internal_problem_no) 433 dump_core_p = 0; 434 else 435 internal_error (__FILE__, __LINE__, _("bad switch")); 436 437 if (quit_p) 438 { 439 if (dump_core_p) 440 dump_core (); 441 else 442 exit (1); 443 } 444 else 445 { 446 if (dump_core_p) 447 { 448 #ifdef HAVE_WORKING_FORK 449 if (fork () == 0) 450 dump_core (); 451 #endif 452 } 453 } 454 455 dejavu = 0; 456 } 457 458 static struct internal_problem internal_error_problem = { 459 "internal-error", 1, internal_problem_ask, 1, internal_problem_ask 460 }; 461 462 void 463 internal_verror (const char *file, int line, const char *fmt, va_list ap) 464 { 465 internal_vproblem (&internal_error_problem, file, line, fmt, ap); 466 throw_quit (_("Command aborted.")); 467 } 468 469 static struct internal_problem internal_warning_problem = { 470 "internal-warning", 1, internal_problem_ask, 1, internal_problem_ask 471 }; 472 473 void 474 internal_vwarning (const char *file, int line, const char *fmt, va_list ap) 475 { 476 internal_vproblem (&internal_warning_problem, file, line, fmt, ap); 477 } 478 479 static struct internal_problem demangler_warning_problem = { 480 "demangler-warning", 1, internal_problem_ask, 0, internal_problem_no 481 }; 482 483 void 484 demangler_vwarning (const char *file, int line, const char *fmt, va_list ap) 485 { 486 internal_vproblem (&demangler_warning_problem, file, line, fmt, ap); 487 } 488 489 void 490 demangler_warning (const char *file, int line, const char *string, ...) 491 { 492 va_list ap; 493 494 va_start (ap, string); 495 demangler_vwarning (file, line, string, ap); 496 va_end (ap); 497 } 498 499 /* Dummy functions to keep add_prefix_cmd happy. */ 500 501 static void 502 set_internal_problem_cmd (const char *args, int from_tty) 503 { 504 } 505 506 static void 507 show_internal_problem_cmd (const char *args, int from_tty) 508 { 509 } 510 511 /* When GDB reports an internal problem (error or warning) it gives 512 the user the opportunity to quit GDB and/or create a core file of 513 the current debug session. This function registers a few commands 514 that make it possible to specify that GDB should always or never 515 quit or create a core file, without asking. The commands look 516 like: 517 518 maint set PROBLEM-NAME quit ask|yes|no 519 maint show PROBLEM-NAME quit 520 maint set PROBLEM-NAME corefile ask|yes|no 521 maint show PROBLEM-NAME corefile 522 523 Where PROBLEM-NAME is currently "internal-error" or 524 "internal-warning". */ 525 526 static void 527 add_internal_problem_command (struct internal_problem *problem) 528 { 529 struct cmd_list_element **set_cmd_list; 530 struct cmd_list_element **show_cmd_list; 531 char *set_doc; 532 char *show_doc; 533 534 set_cmd_list = XNEW (struct cmd_list_element *); 535 show_cmd_list = XNEW (struct cmd_list_element *); 536 *set_cmd_list = NULL; 537 *show_cmd_list = NULL; 538 539 set_doc = xstrprintf (_("Configure what GDB does when %s is detected."), 540 problem->name); 541 542 show_doc = xstrprintf (_("Show what GDB does when %s is detected."), 543 problem->name); 544 545 add_prefix_cmd (problem->name, 546 class_maintenance, set_internal_problem_cmd, set_doc, 547 set_cmd_list, 548 concat ("maintenance set ", problem->name, " ", 549 (char *) NULL), 550 0/*allow-unknown*/, &maintenance_set_cmdlist); 551 552 add_prefix_cmd (problem->name, 553 class_maintenance, show_internal_problem_cmd, show_doc, 554 show_cmd_list, 555 concat ("maintenance show ", problem->name, " ", 556 (char *) NULL), 557 0/*allow-unknown*/, &maintenance_show_cmdlist); 558 559 if (problem->user_settable_should_quit) 560 { 561 set_doc = xstrprintf (_("Set whether GDB should quit " 562 "when an %s is detected"), 563 problem->name); 564 show_doc = xstrprintf (_("Show whether GDB will quit " 565 "when an %s is detected"), 566 problem->name); 567 add_setshow_enum_cmd ("quit", class_maintenance, 568 internal_problem_modes, 569 &problem->should_quit, 570 set_doc, 571 show_doc, 572 NULL, /* help_doc */ 573 NULL, /* setfunc */ 574 NULL, /* showfunc */ 575 set_cmd_list, 576 show_cmd_list); 577 578 xfree (set_doc); 579 xfree (show_doc); 580 } 581 582 if (problem->user_settable_should_dump_core) 583 { 584 set_doc = xstrprintf (_("Set whether GDB should create a core " 585 "file of GDB when %s is detected"), 586 problem->name); 587 show_doc = xstrprintf (_("Show whether GDB will create a core " 588 "file of GDB when %s is detected"), 589 problem->name); 590 add_setshow_enum_cmd ("corefile", class_maintenance, 591 internal_problem_modes, 592 &problem->should_dump_core, 593 set_doc, 594 show_doc, 595 NULL, /* help_doc */ 596 NULL, /* setfunc */ 597 NULL, /* showfunc */ 598 set_cmd_list, 599 show_cmd_list); 600 601 xfree (set_doc); 602 xfree (show_doc); 603 } 604 } 605 606 /* Return a newly allocated string, containing the PREFIX followed 607 by the system error message for errno (separated by a colon). */ 608 609 static std::string 610 perror_string (const char *prefix) 611 { 612 char *err; 613 614 err = safe_strerror (errno); 615 return std::string (prefix) + ": " + err; 616 } 617 618 /* Print the system error message for errno, and also mention STRING 619 as the file name for which the error was encountered. Use ERRCODE 620 for the thrown exception. Then return to command level. */ 621 622 void 623 throw_perror_with_name (enum errors errcode, const char *string) 624 { 625 std::string combined = perror_string (string); 626 627 /* I understand setting these is a matter of taste. Still, some people 628 may clear errno but not know about bfd_error. Doing this here is not 629 unreasonable. */ 630 bfd_set_error (bfd_error_no_error); 631 errno = 0; 632 633 throw_error (errcode, _("%s."), combined.c_str ()); 634 } 635 636 /* See throw_perror_with_name, ERRCODE defaults here to GENERIC_ERROR. */ 637 638 void 639 perror_with_name (const char *string) 640 { 641 throw_perror_with_name (GENERIC_ERROR, string); 642 } 643 644 /* Same as perror_with_name except that it prints a warning instead 645 of throwing an error. */ 646 647 void 648 perror_warning_with_name (const char *string) 649 { 650 std::string combined = perror_string (string); 651 warning (_("%s"), combined.c_str ()); 652 } 653 654 /* Print the system error message for ERRCODE, and also mention STRING 655 as the file name for which the error was encountered. */ 656 657 void 658 print_sys_errmsg (const char *string, int errcode) 659 { 660 char *err; 661 char *combined; 662 663 err = safe_strerror (errcode); 664 combined = (char *) alloca (strlen (err) + strlen (string) + 3); 665 strcpy (combined, string); 666 strcat (combined, ": "); 667 strcat (combined, err); 668 669 /* We want anything which was printed on stdout to come out first, before 670 this message. */ 671 gdb_flush (gdb_stdout); 672 fprintf_unfiltered (gdb_stderr, "%s.\n", combined); 673 } 674 675 /* Control C eventually causes this to be called, at a convenient time. */ 676 677 void 678 quit (void) 679 { 680 if (sync_quit_force_run) 681 { 682 sync_quit_force_run = 0; 683 quit_force (NULL, 0); 684 } 685 686 #ifdef __MSDOS__ 687 /* No steenking SIGINT will ever be coming our way when the 688 program is resumed. Don't lie. */ 689 throw_quit ("Quit"); 690 #else 691 if (job_control 692 /* If there is no terminal switching for this target, then we can't 693 possibly get screwed by the lack of job control. */ 694 || !target_supports_terminal_ours ()) 695 throw_quit ("Quit"); 696 else 697 throw_quit ("Quit (expect signal SIGINT when the program is resumed)"); 698 #endif 699 } 700 701 /* See defs.h. */ 702 703 void 704 maybe_quit (void) 705 { 706 if (sync_quit_force_run) 707 quit (); 708 709 quit_handler (); 710 711 if (deprecated_interactive_hook) 712 deprecated_interactive_hook (); 713 } 714 715 716 /* Called when a memory allocation fails, with the number of bytes of 717 memory requested in SIZE. */ 718 719 void 720 malloc_failure (long size) 721 { 722 if (size > 0) 723 { 724 internal_error (__FILE__, __LINE__, 725 _("virtual memory exhausted: can't allocate %ld bytes."), 726 size); 727 } 728 else 729 { 730 internal_error (__FILE__, __LINE__, _("virtual memory exhausted.")); 731 } 732 } 733 734 /* My replacement for the read system call. 735 Used like `read' but keeps going if `read' returns too soon. */ 736 737 int 738 myread (int desc, char *addr, int len) 739 { 740 int val; 741 int orglen = len; 742 743 while (len > 0) 744 { 745 val = read (desc, addr, len); 746 if (val < 0) 747 return val; 748 if (val == 0) 749 return orglen - len; 750 len -= val; 751 addr += val; 752 } 753 return orglen; 754 } 755 756 void 757 print_spaces (int n, struct ui_file *file) 758 { 759 fputs_unfiltered (n_spaces (n), file); 760 } 761 762 /* Print a host address. */ 763 764 void 765 gdb_print_host_address_1 (const void *addr, struct ui_file *stream) 766 { 767 fprintf_filtered (stream, "%s", host_address_to_string (addr)); 768 } 769 770 /* See utils.h. */ 771 772 char * 773 make_hex_string (const gdb_byte *data, size_t length) 774 { 775 char *result = (char *) xmalloc (length * 2 + 1); 776 char *p; 777 size_t i; 778 779 p = result; 780 for (i = 0; i < length; ++i) 781 p += xsnprintf (p, 3, "%02x", data[i]); 782 *p = '\0'; 783 return result; 784 } 785 786 787 788 /* An RAII class that sets up to handle input and then tears down 789 during destruction. */ 790 791 class scoped_input_handler 792 { 793 public: 794 795 scoped_input_handler () 796 : m_quit_handler (&quit_handler, default_quit_handler), 797 m_ui (NULL) 798 { 799 target_terminal::ours (); 800 ui_register_input_event_handler (current_ui); 801 if (current_ui->prompt_state == PROMPT_BLOCKED) 802 m_ui = current_ui; 803 } 804 805 ~scoped_input_handler () 806 { 807 if (m_ui != NULL) 808 ui_unregister_input_event_handler (m_ui); 809 } 810 811 DISABLE_COPY_AND_ASSIGN (scoped_input_handler); 812 813 private: 814 815 /* Save and restore the terminal state. */ 816 target_terminal::scoped_restore_terminal_state m_term_state; 817 818 /* Save and restore the quit handler. */ 819 scoped_restore_tmpl<quit_handler_ftype *> m_quit_handler; 820 821 /* The saved UI, if non-NULL. */ 822 struct ui *m_ui; 823 }; 824 825 826 827 /* This function supports the query, nquery, and yquery functions. 828 Ask user a y-or-n question and return 0 if answer is no, 1 if 829 answer is yes, or default the answer to the specified default 830 (for yquery or nquery). DEFCHAR may be 'y' or 'n' to provide a 831 default answer, or '\0' for no default. 832 CTLSTR is the control string and should end in "? ". It should 833 not say how to answer, because we do that. 834 ARGS are the arguments passed along with the CTLSTR argument to 835 printf. */ 836 837 static int ATTRIBUTE_PRINTF (1, 0) 838 defaulted_query (const char *ctlstr, const char defchar, va_list args) 839 { 840 int retval; 841 int def_value; 842 char def_answer, not_def_answer; 843 const char *y_string, *n_string; 844 845 /* Set up according to which answer is the default. */ 846 if (defchar == '\0') 847 { 848 def_value = 1; 849 def_answer = 'Y'; 850 not_def_answer = 'N'; 851 y_string = "y"; 852 n_string = "n"; 853 } 854 else if (defchar == 'y') 855 { 856 def_value = 1; 857 def_answer = 'Y'; 858 not_def_answer = 'N'; 859 y_string = "[y]"; 860 n_string = "n"; 861 } 862 else 863 { 864 def_value = 0; 865 def_answer = 'N'; 866 not_def_answer = 'Y'; 867 y_string = "y"; 868 n_string = "[n]"; 869 } 870 871 /* Automatically answer the default value if the user did not want 872 prompts or the command was issued with the server prefix. */ 873 if (!confirm || server_command) 874 return def_value; 875 876 /* If input isn't coming from the user directly, just say what 877 question we're asking, and then answer the default automatically. This 878 way, important error messages don't get lost when talking to GDB 879 over a pipe. */ 880 if (current_ui->instream != current_ui->stdin_stream 881 || !input_interactive_p (current_ui) 882 /* Restrict queries to the main UI. */ 883 || current_ui != main_ui) 884 { 885 target_terminal::scoped_restore_terminal_state term_state; 886 target_terminal::ours_for_output (); 887 wrap_here (""); 888 vfprintf_filtered (gdb_stdout, ctlstr, args); 889 890 printf_filtered (_("(%s or %s) [answered %c; " 891 "input not from terminal]\n"), 892 y_string, n_string, def_answer); 893 gdb_flush (gdb_stdout); 894 895 return def_value; 896 } 897 898 if (deprecated_query_hook) 899 { 900 target_terminal::scoped_restore_terminal_state term_state; 901 return deprecated_query_hook (ctlstr, args); 902 } 903 904 /* Format the question outside of the loop, to avoid reusing args. */ 905 std::string question = string_vprintf (ctlstr, args); 906 std::string prompt 907 = string_printf (_("%s%s(%s or %s) %s"), 908 annotation_level > 1 ? "\n\032\032pre-query\n" : "", 909 question.c_str (), y_string, n_string, 910 annotation_level > 1 ? "\n\032\032query\n" : ""); 911 912 /* Used to add duration we waited for user to respond to 913 prompt_for_continue_wait_time. */ 914 using namespace std::chrono; 915 steady_clock::time_point prompt_started = steady_clock::now (); 916 917 scoped_input_handler prepare_input; 918 919 while (1) 920 { 921 char *response, answer; 922 923 gdb_flush (gdb_stdout); 924 response = gdb_readline_wrapper (prompt.c_str ()); 925 926 if (response == NULL) /* C-d */ 927 { 928 printf_filtered ("EOF [assumed %c]\n", def_answer); 929 retval = def_value; 930 break; 931 } 932 933 answer = response[0]; 934 xfree (response); 935 936 if (answer >= 'a') 937 answer -= 040; 938 /* Check answer. For the non-default, the user must specify 939 the non-default explicitly. */ 940 if (answer == not_def_answer) 941 { 942 retval = !def_value; 943 break; 944 } 945 /* Otherwise, if a default was specified, the user may either 946 specify the required input or have it default by entering 947 nothing. */ 948 if (answer == def_answer 949 || (defchar != '\0' && answer == '\0')) 950 { 951 retval = def_value; 952 break; 953 } 954 /* Invalid entries are not defaulted and require another selection. */ 955 printf_filtered (_("Please answer %s or %s.\n"), 956 y_string, n_string); 957 } 958 959 /* Add time spend in this routine to prompt_for_continue_wait_time. */ 960 prompt_for_continue_wait_time += steady_clock::now () - prompt_started; 961 962 if (annotation_level > 1) 963 printf_filtered (("\n\032\032post-query\n")); 964 return retval; 965 } 966 967 968 /* Ask user a y-or-n question and return 0 if answer is no, 1 if 969 answer is yes, or 0 if answer is defaulted. 970 Takes three args which are given to printf to print the question. 971 The first, a control string, should end in "? ". 972 It should not say how to answer, because we do that. */ 973 974 int 975 nquery (const char *ctlstr, ...) 976 { 977 va_list args; 978 int ret; 979 980 va_start (args, ctlstr); 981 ret = defaulted_query (ctlstr, 'n', args); 982 va_end (args); 983 return ret; 984 } 985 986 /* Ask user a y-or-n question and return 0 if answer is no, 1 if 987 answer is yes, or 1 if answer is defaulted. 988 Takes three args which are given to printf to print the question. 989 The first, a control string, should end in "? ". 990 It should not say how to answer, because we do that. */ 991 992 int 993 yquery (const char *ctlstr, ...) 994 { 995 va_list args; 996 int ret; 997 998 va_start (args, ctlstr); 999 ret = defaulted_query (ctlstr, 'y', args); 1000 va_end (args); 1001 return ret; 1002 } 1003 1004 /* Ask user a y-or-n question and return 1 iff answer is yes. 1005 Takes three args which are given to printf to print the question. 1006 The first, a control string, should end in "? ". 1007 It should not say how to answer, because we do that. */ 1008 1009 int 1010 query (const char *ctlstr, ...) 1011 { 1012 va_list args; 1013 int ret; 1014 1015 va_start (args, ctlstr); 1016 ret = defaulted_query (ctlstr, '\0', args); 1017 va_end (args); 1018 return ret; 1019 } 1020 1021 /* A helper for parse_escape that converts a host character to a 1022 target character. C is the host character. If conversion is 1023 possible, then the target character is stored in *TARGET_C and the 1024 function returns 1. Otherwise, the function returns 0. */ 1025 1026 static int 1027 host_char_to_target (struct gdbarch *gdbarch, int c, int *target_c) 1028 { 1029 char the_char = c; 1030 int result = 0; 1031 1032 auto_obstack host_data; 1033 1034 convert_between_encodings (target_charset (gdbarch), host_charset (), 1035 (gdb_byte *) &the_char, 1, 1, 1036 &host_data, translit_none); 1037 1038 if (obstack_object_size (&host_data) == 1) 1039 { 1040 result = 1; 1041 *target_c = *(char *) obstack_base (&host_data); 1042 } 1043 1044 return result; 1045 } 1046 1047 /* Parse a C escape sequence. STRING_PTR points to a variable 1048 containing a pointer to the string to parse. That pointer 1049 should point to the character after the \. That pointer 1050 is updated past the characters we use. The value of the 1051 escape sequence is returned. 1052 1053 A negative value means the sequence \ newline was seen, 1054 which is supposed to be equivalent to nothing at all. 1055 1056 If \ is followed by a null character, we return a negative 1057 value and leave the string pointer pointing at the null character. 1058 1059 If \ is followed by 000, we return 0 and leave the string pointer 1060 after the zeros. A value of 0 does not mean end of string. */ 1061 1062 int 1063 parse_escape (struct gdbarch *gdbarch, const char **string_ptr) 1064 { 1065 int target_char = -2; /* Initialize to avoid GCC warnings. */ 1066 int c = *(*string_ptr)++; 1067 1068 switch (c) 1069 { 1070 case '\n': 1071 return -2; 1072 case 0: 1073 (*string_ptr)--; 1074 return 0; 1075 1076 case '0': 1077 case '1': 1078 case '2': 1079 case '3': 1080 case '4': 1081 case '5': 1082 case '6': 1083 case '7': 1084 { 1085 int i = host_hex_value (c); 1086 int count = 0; 1087 while (++count < 3) 1088 { 1089 c = (**string_ptr); 1090 if (isdigit (c) && c != '8' && c != '9') 1091 { 1092 (*string_ptr)++; 1093 i *= 8; 1094 i += host_hex_value (c); 1095 } 1096 else 1097 { 1098 break; 1099 } 1100 } 1101 return i; 1102 } 1103 1104 case 'a': 1105 c = '\a'; 1106 break; 1107 case 'b': 1108 c = '\b'; 1109 break; 1110 case 'f': 1111 c = '\f'; 1112 break; 1113 case 'n': 1114 c = '\n'; 1115 break; 1116 case 'r': 1117 c = '\r'; 1118 break; 1119 case 't': 1120 c = '\t'; 1121 break; 1122 case 'v': 1123 c = '\v'; 1124 break; 1125 1126 default: 1127 break; 1128 } 1129 1130 if (!host_char_to_target (gdbarch, c, &target_char)) 1131 error (_("The escape sequence `\\%c' is equivalent to plain `%c'," 1132 " which has no equivalent\nin the `%s' character set."), 1133 c, c, target_charset (gdbarch)); 1134 return target_char; 1135 } 1136 1137 /* Print the character C on STREAM as part of the contents of a literal 1138 string whose delimiter is QUOTER. Note that this routine should only 1139 be called for printing things which are independent of the language 1140 of the program being debugged. 1141 1142 printchar will normally escape backslashes and instances of QUOTER. If 1143 QUOTER is 0, printchar won't escape backslashes or any quoting character. 1144 As a side effect, if you pass the backslash character as the QUOTER, 1145 printchar will escape backslashes as usual, but not any other quoting 1146 character. */ 1147 1148 static void 1149 printchar (int c, do_fputc_ftype do_fputc, ui_file *stream, int quoter) 1150 { 1151 c &= 0xFF; /* Avoid sign bit follies */ 1152 1153 if (c < 0x20 || /* Low control chars */ 1154 (c >= 0x7F && c < 0xA0) || /* DEL, High controls */ 1155 (sevenbit_strings && c >= 0x80)) 1156 { /* high order bit set */ 1157 do_fputc ('\\', stream); 1158 1159 switch (c) 1160 { 1161 case '\n': 1162 do_fputc ('n', stream); 1163 break; 1164 case '\b': 1165 do_fputc ('b', stream); 1166 break; 1167 case '\t': 1168 do_fputc ('t', stream); 1169 break; 1170 case '\f': 1171 do_fputc ('f', stream); 1172 break; 1173 case '\r': 1174 do_fputc ('r', stream); 1175 break; 1176 case '\033': 1177 do_fputc ('e', stream); 1178 break; 1179 case '\007': 1180 do_fputc ('a', stream); 1181 break; 1182 default: 1183 { 1184 do_fputc ('0' + ((c >> 6) & 0x7), stream); 1185 do_fputc ('0' + ((c >> 3) & 0x7), stream); 1186 do_fputc ('0' + ((c >> 0) & 0x7), stream); 1187 break; 1188 } 1189 } 1190 } 1191 else 1192 { 1193 if (quoter != 0 && (c == '\\' || c == quoter)) 1194 do_fputc ('\\', stream); 1195 do_fputc (c, stream); 1196 } 1197 } 1198 1199 /* Print the character C on STREAM as part of the contents of a 1200 literal string whose delimiter is QUOTER. Note that these routines 1201 should only be call for printing things which are independent of 1202 the language of the program being debugged. */ 1203 1204 void 1205 fputstr_filtered (const char *str, int quoter, struct ui_file *stream) 1206 { 1207 while (*str) 1208 printchar (*str++, fputc_filtered, stream, quoter); 1209 } 1210 1211 void 1212 fputstr_unfiltered (const char *str, int quoter, struct ui_file *stream) 1213 { 1214 while (*str) 1215 printchar (*str++, fputc_unfiltered, stream, quoter); 1216 } 1217 1218 void 1219 fputstrn_filtered (const char *str, int n, int quoter, 1220 struct ui_file *stream) 1221 { 1222 for (int i = 0; i < n; i++) 1223 printchar (str[i], fputc_filtered, stream, quoter); 1224 } 1225 1226 void 1227 fputstrn_unfiltered (const char *str, int n, int quoter, 1228 do_fputc_ftype do_fputc, struct ui_file *stream) 1229 { 1230 for (int i = 0; i < n; i++) 1231 printchar (str[i], do_fputc, stream, quoter); 1232 } 1233 1234 1235 /* Number of lines per page or UINT_MAX if paging is disabled. */ 1236 static unsigned int lines_per_page; 1237 static void 1238 show_lines_per_page (struct ui_file *file, int from_tty, 1239 struct cmd_list_element *c, const char *value) 1240 { 1241 fprintf_filtered (file, 1242 _("Number of lines gdb thinks are in a page is %s.\n"), 1243 value); 1244 } 1245 1246 /* Number of chars per line or UINT_MAX if line folding is disabled. */ 1247 static unsigned int chars_per_line; 1248 static void 1249 show_chars_per_line (struct ui_file *file, int from_tty, 1250 struct cmd_list_element *c, const char *value) 1251 { 1252 fprintf_filtered (file, 1253 _("Number of characters gdb thinks " 1254 "are in a line is %s.\n"), 1255 value); 1256 } 1257 1258 /* Current count of lines printed on this page, chars on this line. */ 1259 static unsigned int lines_printed, chars_printed; 1260 1261 /* True if pagination is disabled for just one command. */ 1262 1263 static bool pagination_disabled_for_command; 1264 1265 /* Buffer and start column of buffered text, for doing smarter word- 1266 wrapping. When someone calls wrap_here(), we start buffering output 1267 that comes through fputs_filtered(). If we see a newline, we just 1268 spit it out and forget about the wrap_here(). If we see another 1269 wrap_here(), we spit it out and remember the newer one. If we see 1270 the end of the line, we spit out a newline, the indent, and then 1271 the buffered output. */ 1272 1273 static bool filter_initialized = false; 1274 1275 /* Contains characters which are waiting to be output (they have 1276 already been counted in chars_printed). */ 1277 static std::string wrap_buffer; 1278 1279 /* String to indent by if the wrap occurs. Must not be NULL if wrap_column 1280 is non-zero. */ 1281 static const char *wrap_indent; 1282 1283 /* Column number on the screen where wrap_buffer begins, or 0 if wrapping 1284 is not in effect. */ 1285 static int wrap_column; 1286 1287 /* The style applied at the time that wrap_here was called. */ 1288 static ui_file_style wrap_style; 1289 1290 1291 /* Initialize the number of lines per page and chars per line. */ 1292 1293 void 1294 init_page_info (void) 1295 { 1296 if (batch_flag) 1297 { 1298 lines_per_page = UINT_MAX; 1299 chars_per_line = UINT_MAX; 1300 } 1301 else 1302 #if defined(TUI) 1303 if (!tui_get_command_dimension (&chars_per_line, &lines_per_page)) 1304 #endif 1305 { 1306 int rows, cols; 1307 1308 #if defined(__GO32__) 1309 rows = ScreenRows (); 1310 cols = ScreenCols (); 1311 lines_per_page = rows; 1312 chars_per_line = cols; 1313 #else 1314 /* Make sure Readline has initialized its terminal settings. */ 1315 rl_reset_terminal (NULL); 1316 1317 /* Get the screen size from Readline. */ 1318 rl_get_screen_size (&rows, &cols); 1319 lines_per_page = rows; 1320 chars_per_line = cols; 1321 1322 /* Readline should have fetched the termcap entry for us. 1323 Only try to use tgetnum function if rl_get_screen_size 1324 did not return a useful value. */ 1325 if (((rows <= 0) && (tgetnum ((char *) "li") < 0)) 1326 /* Also disable paging if inside Emacs. $EMACS was used 1327 before Emacs v25.1, $INSIDE_EMACS is used since then. */ 1328 || getenv ("EMACS") || getenv ("INSIDE_EMACS")) 1329 { 1330 /* The number of lines per page is not mentioned in the terminal 1331 description or EMACS evironment variable is set. This probably 1332 means that paging is not useful, so disable paging. */ 1333 lines_per_page = UINT_MAX; 1334 } 1335 1336 /* If the output is not a terminal, don't paginate it. */ 1337 if (!ui_file_isatty (gdb_stdout)) 1338 lines_per_page = UINT_MAX; 1339 #endif 1340 } 1341 1342 /* We handle SIGWINCH ourselves. */ 1343 rl_catch_sigwinch = 0; 1344 1345 set_screen_size (); 1346 set_width (); 1347 } 1348 1349 /* Return nonzero if filtered printing is initialized. */ 1350 int 1351 filtered_printing_initialized (void) 1352 { 1353 return filter_initialized; 1354 } 1355 1356 set_batch_flag_and_restore_page_info::set_batch_flag_and_restore_page_info () 1357 : m_save_lines_per_page (lines_per_page), 1358 m_save_chars_per_line (chars_per_line), 1359 m_save_batch_flag (batch_flag) 1360 { 1361 batch_flag = 1; 1362 init_page_info (); 1363 } 1364 1365 set_batch_flag_and_restore_page_info::~set_batch_flag_and_restore_page_info () 1366 { 1367 batch_flag = m_save_batch_flag; 1368 chars_per_line = m_save_chars_per_line; 1369 lines_per_page = m_save_lines_per_page; 1370 1371 set_screen_size (); 1372 set_width (); 1373 } 1374 1375 /* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE. */ 1376 1377 static void 1378 set_screen_size (void) 1379 { 1380 int rows = lines_per_page; 1381 int cols = chars_per_line; 1382 1383 if (rows <= 0) 1384 rows = INT_MAX; 1385 1386 if (cols <= 0) 1387 cols = INT_MAX; 1388 1389 /* Update Readline's idea of the terminal size. */ 1390 rl_set_screen_size (rows, cols); 1391 } 1392 1393 /* Reinitialize WRAP_BUFFER. */ 1394 1395 static void 1396 set_width (void) 1397 { 1398 if (chars_per_line == 0) 1399 init_page_info (); 1400 1401 wrap_buffer.clear (); 1402 filter_initialized = true; 1403 } 1404 1405 static void 1406 set_width_command (const char *args, int from_tty, struct cmd_list_element *c) 1407 { 1408 set_screen_size (); 1409 set_width (); 1410 } 1411 1412 static void 1413 set_height_command (const char *args, int from_tty, struct cmd_list_element *c) 1414 { 1415 set_screen_size (); 1416 } 1417 1418 /* See utils.h. */ 1419 1420 void 1421 set_screen_width_and_height (int width, int height) 1422 { 1423 lines_per_page = height; 1424 chars_per_line = width; 1425 1426 set_screen_size (); 1427 set_width (); 1428 } 1429 1430 /* The currently applied style. */ 1431 1432 static ui_file_style applied_style; 1433 1434 /* Emit an ANSI style escape for STYLE. If STREAM is nullptr, emit to 1435 the wrap buffer; otherwise emit to STREAM. */ 1436 1437 static void 1438 emit_style_escape (const ui_file_style &style, 1439 struct ui_file *stream = nullptr) 1440 { 1441 applied_style = style; 1442 1443 if (stream == nullptr) 1444 wrap_buffer.append (style.to_ansi ()); 1445 else 1446 fputs_unfiltered (style.to_ansi ().c_str (), stream); 1447 } 1448 1449 /* See utils.h. */ 1450 1451 bool 1452 can_emit_style_escape (struct ui_file *stream) 1453 { 1454 if (stream != gdb_stdout 1455 || !cli_styling 1456 || !ui_file_isatty (stream)) 1457 return false; 1458 const char *term = getenv ("TERM"); 1459 /* Windows doesn't by default define $TERM, but can support styles 1460 regardless. */ 1461 #ifndef _WIN32 1462 if (term == nullptr || !strcmp (term, "dumb")) 1463 return false; 1464 #else 1465 /* But if they do define $TERM, let us behave the same as on Posix 1466 platforms, for the benefit of programs which invoke GDB as their 1467 back-end. */ 1468 if (term && !strcmp (term, "dumb")) 1469 return false; 1470 #endif 1471 return true; 1472 } 1473 1474 /* Set the current output style. This will affect future uses of the 1475 _filtered output functions. */ 1476 1477 static void 1478 set_output_style (struct ui_file *stream, const ui_file_style &style) 1479 { 1480 if (!can_emit_style_escape (stream)) 1481 return; 1482 1483 /* Note that we don't pass STREAM here, because we want to emit to 1484 the wrap buffer, not directly to STREAM. */ 1485 emit_style_escape (style); 1486 } 1487 1488 /* See utils.h. */ 1489 1490 void 1491 reset_terminal_style (struct ui_file *stream) 1492 { 1493 if (can_emit_style_escape (stream)) 1494 { 1495 /* Force the setting, regardless of what we think the setting 1496 might already be. */ 1497 applied_style = ui_file_style (); 1498 wrap_buffer.append (applied_style.to_ansi ()); 1499 } 1500 } 1501 1502 /* Wait, so the user can read what's on the screen. Prompt the user 1503 to continue by pressing RETURN. 'q' is also provided because 1504 telling users what to do in the prompt is more user-friendly than 1505 expecting them to think of Ctrl-C/SIGINT. */ 1506 1507 static void 1508 prompt_for_continue (void) 1509 { 1510 char cont_prompt[120]; 1511 /* Used to add duration we waited for user to respond to 1512 prompt_for_continue_wait_time. */ 1513 using namespace std::chrono; 1514 steady_clock::time_point prompt_started = steady_clock::now (); 1515 bool disable_pagination = pagination_disabled_for_command; 1516 1517 /* Clear the current styling. */ 1518 if (can_emit_style_escape (gdb_stdout)) 1519 emit_style_escape (ui_file_style (), gdb_stdout); 1520 1521 if (annotation_level > 1) 1522 printf_unfiltered (("\n\032\032pre-prompt-for-continue\n")); 1523 1524 strcpy (cont_prompt, 1525 "--Type <RET> for more, q to quit, " 1526 "c to continue without paging--"); 1527 if (annotation_level > 1) 1528 strcat (cont_prompt, "\n\032\032prompt-for-continue\n"); 1529 1530 /* We must do this *before* we call gdb_readline_wrapper, else it 1531 will eventually call us -- thinking that we're trying to print 1532 beyond the end of the screen. */ 1533 reinitialize_more_filter (); 1534 1535 scoped_input_handler prepare_input; 1536 1537 /* Call gdb_readline_wrapper, not readline, in order to keep an 1538 event loop running. */ 1539 gdb::unique_xmalloc_ptr<char> ignore (gdb_readline_wrapper (cont_prompt)); 1540 1541 /* Add time spend in this routine to prompt_for_continue_wait_time. */ 1542 prompt_for_continue_wait_time += steady_clock::now () - prompt_started; 1543 1544 if (annotation_level > 1) 1545 printf_unfiltered (("\n\032\032post-prompt-for-continue\n")); 1546 1547 if (ignore != NULL) 1548 { 1549 char *p = ignore.get (); 1550 1551 while (*p == ' ' || *p == '\t') 1552 ++p; 1553 if (p[0] == 'q') 1554 /* Do not call quit here; there is no possibility of SIGINT. */ 1555 throw_quit ("Quit"); 1556 if (p[0] == 'c') 1557 disable_pagination = true; 1558 } 1559 1560 /* Now we have to do this again, so that GDB will know that it doesn't 1561 need to save the ---Type <return>--- line at the top of the screen. */ 1562 reinitialize_more_filter (); 1563 pagination_disabled_for_command = disable_pagination; 1564 1565 dont_repeat (); /* Forget prev cmd -- CR won't repeat it. */ 1566 } 1567 1568 /* Initialize timer to keep track of how long we waited for the user. */ 1569 1570 void 1571 reset_prompt_for_continue_wait_time (void) 1572 { 1573 using namespace std::chrono; 1574 1575 prompt_for_continue_wait_time = steady_clock::duration::zero (); 1576 } 1577 1578 /* Fetch the cumulative time spent in prompt_for_continue. */ 1579 1580 std::chrono::steady_clock::duration 1581 get_prompt_for_continue_wait_time () 1582 { 1583 return prompt_for_continue_wait_time; 1584 } 1585 1586 /* Reinitialize filter; ie. tell it to reset to original values. */ 1587 1588 void 1589 reinitialize_more_filter (void) 1590 { 1591 lines_printed = 0; 1592 chars_printed = 0; 1593 pagination_disabled_for_command = false; 1594 } 1595 1596 /* Flush the wrap buffer to STREAM, if necessary. */ 1597 1598 static void 1599 flush_wrap_buffer (struct ui_file *stream) 1600 { 1601 if (stream == gdb_stdout && !wrap_buffer.empty ()) 1602 { 1603 fputs_unfiltered (wrap_buffer.c_str (), stream); 1604 wrap_buffer.clear (); 1605 } 1606 } 1607 1608 /* Indicate that if the next sequence of characters overflows the line, 1609 a newline should be inserted here rather than when it hits the end. 1610 If INDENT is non-null, it is a string to be printed to indent the 1611 wrapped part on the next line. INDENT must remain accessible until 1612 the next call to wrap_here() or until a newline is printed through 1613 fputs_filtered(). 1614 1615 If the line is already overfull, we immediately print a newline and 1616 the indentation, and disable further wrapping. 1617 1618 If we don't know the width of lines, but we know the page height, 1619 we must not wrap words, but should still keep track of newlines 1620 that were explicitly printed. 1621 1622 INDENT should not contain tabs, as that will mess up the char count 1623 on the next line. FIXME. 1624 1625 This routine is guaranteed to force out any output which has been 1626 squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be 1627 used to force out output from the wrap_buffer. */ 1628 1629 void 1630 wrap_here (const char *indent) 1631 { 1632 /* This should have been allocated, but be paranoid anyway. */ 1633 if (!filter_initialized) 1634 internal_error (__FILE__, __LINE__, 1635 _("failed internal consistency check")); 1636 1637 flush_wrap_buffer (gdb_stdout); 1638 if (chars_per_line == UINT_MAX) /* No line overflow checking. */ 1639 { 1640 wrap_column = 0; 1641 } 1642 else if (chars_printed >= chars_per_line) 1643 { 1644 puts_filtered ("\n"); 1645 if (indent != NULL) 1646 puts_filtered (indent); 1647 wrap_column = 0; 1648 } 1649 else 1650 { 1651 wrap_column = chars_printed; 1652 if (indent == NULL) 1653 wrap_indent = ""; 1654 else 1655 wrap_indent = indent; 1656 wrap_style = applied_style; 1657 } 1658 } 1659 1660 /* Print input string to gdb_stdout, filtered, with wrap, 1661 arranging strings in columns of n chars. String can be 1662 right or left justified in the column. Never prints 1663 trailing spaces. String should never be longer than 1664 width. FIXME: this could be useful for the EXAMINE 1665 command, which currently doesn't tabulate very well. */ 1666 1667 void 1668 puts_filtered_tabular (char *string, int width, int right) 1669 { 1670 int spaces = 0; 1671 int stringlen; 1672 char *spacebuf; 1673 1674 gdb_assert (chars_per_line > 0); 1675 if (chars_per_line == UINT_MAX) 1676 { 1677 fputs_filtered (string, gdb_stdout); 1678 fputs_filtered ("\n", gdb_stdout); 1679 return; 1680 } 1681 1682 if (((chars_printed - 1) / width + 2) * width >= chars_per_line) 1683 fputs_filtered ("\n", gdb_stdout); 1684 1685 if (width >= chars_per_line) 1686 width = chars_per_line - 1; 1687 1688 stringlen = strlen (string); 1689 1690 if (chars_printed > 0) 1691 spaces = width - (chars_printed - 1) % width - 1; 1692 if (right) 1693 spaces += width - stringlen; 1694 1695 spacebuf = (char *) alloca (spaces + 1); 1696 spacebuf[spaces] = '\0'; 1697 while (spaces--) 1698 spacebuf[spaces] = ' '; 1699 1700 fputs_filtered (spacebuf, gdb_stdout); 1701 fputs_filtered (string, gdb_stdout); 1702 } 1703 1704 1705 /* Ensure that whatever gets printed next, using the filtered output 1706 commands, starts at the beginning of the line. I.e. if there is 1707 any pending output for the current line, flush it and start a new 1708 line. Otherwise do nothing. */ 1709 1710 void 1711 begin_line (void) 1712 { 1713 if (chars_printed > 0) 1714 { 1715 puts_filtered ("\n"); 1716 } 1717 } 1718 1719 1720 /* Like fputs but if FILTER is true, pause after every screenful. 1721 1722 Regardless of FILTER can wrap at points other than the final 1723 character of a line. 1724 1725 Unlike fputs, fputs_maybe_filtered does not return a value. 1726 It is OK for LINEBUFFER to be NULL, in which case just don't print 1727 anything. 1728 1729 Note that a longjmp to top level may occur in this routine (only if 1730 FILTER is true) (since prompt_for_continue may do so) so this 1731 routine should not be called when cleanups are not in place. */ 1732 1733 static void 1734 fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream, 1735 int filter) 1736 { 1737 const char *lineptr; 1738 1739 if (linebuffer == 0) 1740 return; 1741 1742 /* Don't do any filtering if it is disabled. */ 1743 if (stream != gdb_stdout 1744 || !pagination_enabled 1745 || pagination_disabled_for_command 1746 || batch_flag 1747 || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX) 1748 || top_level_interpreter () == NULL 1749 || top_level_interpreter ()->interp_ui_out ()->is_mi_like_p ()) 1750 { 1751 flush_wrap_buffer (stream); 1752 fputs_unfiltered (linebuffer, stream); 1753 return; 1754 } 1755 1756 auto buffer_clearer 1757 = make_scope_exit ([&] () 1758 { 1759 wrap_buffer.clear (); 1760 wrap_column = 0; 1761 wrap_indent = ""; 1762 }); 1763 1764 /* Go through and output each character. Show line extension 1765 when this is necessary; prompt user for new page when this is 1766 necessary. */ 1767 1768 lineptr = linebuffer; 1769 while (*lineptr) 1770 { 1771 /* Possible new page. Note that PAGINATION_DISABLED_FOR_COMMAND 1772 might be set during this loop, so we must continue to check 1773 it here. */ 1774 if (filter && (lines_printed >= lines_per_page - 1) 1775 && !pagination_disabled_for_command) 1776 prompt_for_continue (); 1777 1778 while (*lineptr && *lineptr != '\n') 1779 { 1780 int skip_bytes; 1781 1782 /* Print a single line. */ 1783 if (*lineptr == '\t') 1784 { 1785 wrap_buffer.push_back ('\t'); 1786 /* Shifting right by 3 produces the number of tab stops 1787 we have already passed, and then adding one and 1788 shifting left 3 advances to the next tab stop. */ 1789 chars_printed = ((chars_printed >> 3) + 1) << 3; 1790 lineptr++; 1791 } 1792 else if (*lineptr == '\033' 1793 && skip_ansi_escape (lineptr, &skip_bytes)) 1794 { 1795 wrap_buffer.append (lineptr, skip_bytes); 1796 /* Note that we don't consider this a character, so we 1797 don't increment chars_printed here. */ 1798 lineptr += skip_bytes; 1799 } 1800 else 1801 { 1802 wrap_buffer.push_back (*lineptr); 1803 chars_printed++; 1804 lineptr++; 1805 } 1806 1807 if (chars_printed >= chars_per_line) 1808 { 1809 unsigned int save_chars = chars_printed; 1810 1811 /* If we change the style, below, we'll want to reset it 1812 before continuing to print. If there is no wrap 1813 column, then we'll only reset the style if the pager 1814 prompt is given; and to avoid emitting style 1815 sequences in the middle of a run of text, we track 1816 this as well. */ 1817 ui_file_style save_style; 1818 bool did_paginate = false; 1819 1820 chars_printed = 0; 1821 lines_printed++; 1822 if (wrap_column) 1823 { 1824 save_style = wrap_style; 1825 if (can_emit_style_escape (stream)) 1826 emit_style_escape (ui_file_style (), stream); 1827 /* If we aren't actually wrapping, don't output 1828 newline -- if chars_per_line is right, we 1829 probably just overflowed anyway; if it's wrong, 1830 let us keep going. */ 1831 fputc_unfiltered ('\n', stream); 1832 } 1833 else 1834 { 1835 save_style = applied_style; 1836 flush_wrap_buffer (stream); 1837 } 1838 1839 /* Possible new page. Note that 1840 PAGINATION_DISABLED_FOR_COMMAND might be set during 1841 this loop, so we must continue to check it here. */ 1842 if (lines_printed >= lines_per_page - 1 1843 && !pagination_disabled_for_command) 1844 { 1845 prompt_for_continue (); 1846 did_paginate = true; 1847 } 1848 1849 /* Now output indentation and wrapped string. */ 1850 if (wrap_column) 1851 { 1852 fputs_unfiltered (wrap_indent, stream); 1853 if (can_emit_style_escape (stream)) 1854 emit_style_escape (save_style, stream); 1855 /* FIXME, this strlen is what prevents wrap_indent from 1856 containing tabs. However, if we recurse to print it 1857 and count its chars, we risk trouble if wrap_indent is 1858 longer than (the user settable) chars_per_line. 1859 Note also that this can set chars_printed > chars_per_line 1860 if we are printing a long string. */ 1861 chars_printed = strlen (wrap_indent) 1862 + (save_chars - wrap_column); 1863 wrap_column = 0; /* And disable fancy wrap */ 1864 } 1865 else if (did_paginate && can_emit_style_escape (stream)) 1866 emit_style_escape (save_style, stream); 1867 } 1868 } 1869 1870 if (*lineptr == '\n') 1871 { 1872 chars_printed = 0; 1873 wrap_here ((char *) 0); /* Spit out chars, cancel 1874 further wraps. */ 1875 lines_printed++; 1876 fputc_unfiltered ('\n', stream); 1877 lineptr++; 1878 } 1879 } 1880 1881 buffer_clearer.release (); 1882 } 1883 1884 void 1885 fputs_filtered (const char *linebuffer, struct ui_file *stream) 1886 { 1887 fputs_maybe_filtered (linebuffer, stream, 1); 1888 } 1889 1890 /* See utils.h. */ 1891 1892 void 1893 fputs_styled (const char *linebuffer, const ui_file_style &style, 1894 struct ui_file *stream) 1895 { 1896 /* This just makes it so we emit somewhat fewer escape 1897 sequences. */ 1898 if (style.is_default ()) 1899 fputs_maybe_filtered (linebuffer, stream, 1); 1900 else 1901 { 1902 set_output_style (stream, style); 1903 fputs_maybe_filtered (linebuffer, stream, 1); 1904 set_output_style (stream, ui_file_style ()); 1905 } 1906 } 1907 1908 int 1909 putchar_unfiltered (int c) 1910 { 1911 char buf = c; 1912 1913 ui_file_write (gdb_stdout, &buf, 1); 1914 return c; 1915 } 1916 1917 /* Write character C to gdb_stdout using GDB's paging mechanism and return C. 1918 May return nonlocally. */ 1919 1920 int 1921 putchar_filtered (int c) 1922 { 1923 return fputc_filtered (c, gdb_stdout); 1924 } 1925 1926 int 1927 fputc_unfiltered (int c, struct ui_file *stream) 1928 { 1929 char buf = c; 1930 1931 ui_file_write (stream, &buf, 1); 1932 return c; 1933 } 1934 1935 int 1936 fputc_filtered (int c, struct ui_file *stream) 1937 { 1938 char buf[2]; 1939 1940 buf[0] = c; 1941 buf[1] = 0; 1942 fputs_filtered (buf, stream); 1943 return c; 1944 } 1945 1946 /* puts_debug is like fputs_unfiltered, except it prints special 1947 characters in printable fashion. */ 1948 1949 void 1950 puts_debug (char *prefix, char *string, char *suffix) 1951 { 1952 int ch; 1953 1954 /* Print prefix and suffix after each line. */ 1955 static int new_line = 1; 1956 static int return_p = 0; 1957 static const char *prev_prefix = ""; 1958 static const char *prev_suffix = ""; 1959 1960 if (*string == '\n') 1961 return_p = 0; 1962 1963 /* If the prefix is changing, print the previous suffix, a new line, 1964 and the new prefix. */ 1965 if ((return_p || (strcmp (prev_prefix, prefix) != 0)) && !new_line) 1966 { 1967 fputs_unfiltered (prev_suffix, gdb_stdlog); 1968 fputs_unfiltered ("\n", gdb_stdlog); 1969 fputs_unfiltered (prefix, gdb_stdlog); 1970 } 1971 1972 /* Print prefix if we printed a newline during the previous call. */ 1973 if (new_line) 1974 { 1975 new_line = 0; 1976 fputs_unfiltered (prefix, gdb_stdlog); 1977 } 1978 1979 prev_prefix = prefix; 1980 prev_suffix = suffix; 1981 1982 /* Output characters in a printable format. */ 1983 while ((ch = *string++) != '\0') 1984 { 1985 switch (ch) 1986 { 1987 default: 1988 if (isprint (ch)) 1989 fputc_unfiltered (ch, gdb_stdlog); 1990 1991 else 1992 fprintf_unfiltered (gdb_stdlog, "\\x%02x", ch & 0xff); 1993 break; 1994 1995 case '\\': 1996 fputs_unfiltered ("\\\\", gdb_stdlog); 1997 break; 1998 case '\b': 1999 fputs_unfiltered ("\\b", gdb_stdlog); 2000 break; 2001 case '\f': 2002 fputs_unfiltered ("\\f", gdb_stdlog); 2003 break; 2004 case '\n': 2005 new_line = 1; 2006 fputs_unfiltered ("\\n", gdb_stdlog); 2007 break; 2008 case '\r': 2009 fputs_unfiltered ("\\r", gdb_stdlog); 2010 break; 2011 case '\t': 2012 fputs_unfiltered ("\\t", gdb_stdlog); 2013 break; 2014 case '\v': 2015 fputs_unfiltered ("\\v", gdb_stdlog); 2016 break; 2017 } 2018 2019 return_p = ch == '\r'; 2020 } 2021 2022 /* Print suffix if we printed a newline. */ 2023 if (new_line) 2024 { 2025 fputs_unfiltered (suffix, gdb_stdlog); 2026 fputs_unfiltered ("\n", gdb_stdlog); 2027 } 2028 } 2029 2030 2031 /* Print a variable number of ARGS using format FORMAT. If this 2032 information is going to put the amount written (since the last call 2033 to REINITIALIZE_MORE_FILTER or the last page break) over the page size, 2034 call prompt_for_continue to get the users permision to continue. 2035 2036 Unlike fprintf, this function does not return a value. 2037 2038 We implement three variants, vfprintf (takes a vararg list and stream), 2039 fprintf (takes a stream to write on), and printf (the usual). 2040 2041 Note also that a longjmp to top level may occur in this routine 2042 (since prompt_for_continue may do so) so this routine should not be 2043 called when cleanups are not in place. */ 2044 2045 static void 2046 vfprintf_maybe_filtered (struct ui_file *stream, const char *format, 2047 va_list args, int filter) 2048 { 2049 std::string linebuffer = string_vprintf (format, args); 2050 fputs_maybe_filtered (linebuffer.c_str (), stream, filter); 2051 } 2052 2053 2054 void 2055 vfprintf_filtered (struct ui_file *stream, const char *format, va_list args) 2056 { 2057 vfprintf_maybe_filtered (stream, format, args, 1); 2058 } 2059 2060 void 2061 vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args) 2062 { 2063 std::string linebuffer = string_vprintf (format, args); 2064 if (debug_timestamp && stream == gdb_stdlog) 2065 { 2066 using namespace std::chrono; 2067 int len, need_nl; 2068 2069 steady_clock::time_point now = steady_clock::now (); 2070 seconds s = duration_cast<seconds> (now.time_since_epoch ()); 2071 microseconds us = duration_cast<microseconds> (now.time_since_epoch () - s); 2072 2073 len = linebuffer.size (); 2074 need_nl = (len > 0 && linebuffer[len - 1] != '\n'); 2075 2076 std::string timestamp = string_printf ("%ld.%06ld %s%s", 2077 (long) s.count (), 2078 (long) us.count (), 2079 linebuffer.c_str (), 2080 need_nl ? "\n": ""); 2081 fputs_unfiltered (timestamp.c_str (), stream); 2082 } 2083 else 2084 fputs_unfiltered (linebuffer.c_str (), stream); 2085 } 2086 2087 void 2088 vprintf_filtered (const char *format, va_list args) 2089 { 2090 vfprintf_maybe_filtered (gdb_stdout, format, args, 1); 2091 } 2092 2093 void 2094 vprintf_unfiltered (const char *format, va_list args) 2095 { 2096 vfprintf_unfiltered (gdb_stdout, format, args); 2097 } 2098 2099 void 2100 fprintf_filtered (struct ui_file *stream, const char *format, ...) 2101 { 2102 va_list args; 2103 2104 va_start (args, format); 2105 vfprintf_filtered (stream, format, args); 2106 va_end (args); 2107 } 2108 2109 void 2110 fprintf_unfiltered (struct ui_file *stream, const char *format, ...) 2111 { 2112 va_list args; 2113 2114 va_start (args, format); 2115 vfprintf_unfiltered (stream, format, args); 2116 va_end (args); 2117 } 2118 2119 /* Like fprintf_filtered, but prints its result indented. 2120 Called as fprintfi_filtered (spaces, stream, format, ...); */ 2121 2122 void 2123 fprintfi_filtered (int spaces, struct ui_file *stream, const char *format, 2124 ...) 2125 { 2126 va_list args; 2127 2128 va_start (args, format); 2129 print_spaces_filtered (spaces, stream); 2130 2131 vfprintf_filtered (stream, format, args); 2132 va_end (args); 2133 } 2134 2135 /* See utils.h. */ 2136 2137 void 2138 fprintf_styled (struct ui_file *stream, const ui_file_style &style, 2139 const char *format, ...) 2140 { 2141 va_list args; 2142 2143 set_output_style (stream, style); 2144 va_start (args, format); 2145 vfprintf_filtered (stream, format, args); 2146 va_end (args); 2147 set_output_style (stream, ui_file_style ()); 2148 } 2149 2150 2151 void 2152 printf_filtered (const char *format, ...) 2153 { 2154 va_list args; 2155 2156 va_start (args, format); 2157 vfprintf_filtered (gdb_stdout, format, args); 2158 va_end (args); 2159 } 2160 2161 2162 void 2163 printf_unfiltered (const char *format, ...) 2164 { 2165 va_list args; 2166 2167 va_start (args, format); 2168 vfprintf_unfiltered (gdb_stdout, format, args); 2169 va_end (args); 2170 } 2171 2172 /* Like printf_filtered, but prints it's result indented. 2173 Called as printfi_filtered (spaces, format, ...); */ 2174 2175 void 2176 printfi_filtered (int spaces, const char *format, ...) 2177 { 2178 va_list args; 2179 2180 va_start (args, format); 2181 print_spaces_filtered (spaces, gdb_stdout); 2182 vfprintf_filtered (gdb_stdout, format, args); 2183 va_end (args); 2184 } 2185 2186 /* Easy -- but watch out! 2187 2188 This routine is *not* a replacement for puts()! puts() appends a newline. 2189 This one doesn't, and had better not! */ 2190 2191 void 2192 puts_filtered (const char *string) 2193 { 2194 fputs_filtered (string, gdb_stdout); 2195 } 2196 2197 void 2198 puts_unfiltered (const char *string) 2199 { 2200 fputs_unfiltered (string, gdb_stdout); 2201 } 2202 2203 /* Return a pointer to N spaces and a null. The pointer is good 2204 until the next call to here. */ 2205 char * 2206 n_spaces (int n) 2207 { 2208 char *t; 2209 static char *spaces = 0; 2210 static int max_spaces = -1; 2211 2212 if (n > max_spaces) 2213 { 2214 if (spaces) 2215 xfree (spaces); 2216 spaces = (char *) xmalloc (n + 1); 2217 for (t = spaces + n; t != spaces;) 2218 *--t = ' '; 2219 spaces[n] = '\0'; 2220 max_spaces = n; 2221 } 2222 2223 return spaces + max_spaces - n; 2224 } 2225 2226 /* Print N spaces. */ 2227 void 2228 print_spaces_filtered (int n, struct ui_file *stream) 2229 { 2230 fputs_filtered (n_spaces (n), stream); 2231 } 2232 2233 /* C++/ObjC demangler stuff. */ 2234 2235 /* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language 2236 LANG, using demangling args ARG_MODE, and print it filtered to STREAM. 2237 If the name is not mangled, or the language for the name is unknown, or 2238 demangling is off, the name is printed in its "raw" form. */ 2239 2240 void 2241 fprintf_symbol_filtered (struct ui_file *stream, const char *name, 2242 enum language lang, int arg_mode) 2243 { 2244 char *demangled; 2245 2246 if (name != NULL) 2247 { 2248 /* If user wants to see raw output, no problem. */ 2249 if (!demangle) 2250 { 2251 fputs_filtered (name, stream); 2252 } 2253 else 2254 { 2255 demangled = language_demangle (language_def (lang), name, arg_mode); 2256 fputs_filtered (demangled ? demangled : name, stream); 2257 if (demangled != NULL) 2258 { 2259 xfree (demangled); 2260 } 2261 } 2262 } 2263 } 2264 2265 /* True if CH is a character that can be part of a symbol name. I.e., 2266 either a number, a letter, or a '_'. */ 2267 2268 static bool 2269 valid_identifier_name_char (int ch) 2270 { 2271 return (isalnum (ch) || ch == '_'); 2272 } 2273 2274 /* Skip to end of token, or to END, whatever comes first. Input is 2275 assumed to be a C++ operator name. */ 2276 2277 static const char * 2278 cp_skip_operator_token (const char *token, const char *end) 2279 { 2280 const char *p = token; 2281 while (p != end && !isspace (*p) && *p != '(') 2282 { 2283 if (valid_identifier_name_char (*p)) 2284 { 2285 while (p != end && valid_identifier_name_char (*p)) 2286 p++; 2287 return p; 2288 } 2289 else 2290 { 2291 /* Note, ordered such that among ops that share a prefix, 2292 longer comes first. This is so that the loop below can 2293 bail on first match. */ 2294 static const char *ops[] = 2295 { 2296 "[", 2297 "]", 2298 "~", 2299 ",", 2300 "-=", "--", "->", "-", 2301 "+=", "++", "+", 2302 "*=", "*", 2303 "/=", "/", 2304 "%=", "%", 2305 "|=", "||", "|", 2306 "&=", "&&", "&", 2307 "^=", "^", 2308 "!=", "!", 2309 "<<=", "<=", "<<", "<", 2310 ">>=", ">=", ">>", ">", 2311 "==", "=", 2312 }; 2313 2314 for (const char *op : ops) 2315 { 2316 size_t oplen = strlen (op); 2317 size_t lencmp = std::min<size_t> (oplen, end - p); 2318 2319 if (strncmp (p, op, lencmp) == 0) 2320 return p + lencmp; 2321 } 2322 /* Some unidentified character. Return it. */ 2323 return p + 1; 2324 } 2325 } 2326 2327 return p; 2328 } 2329 2330 /* Advance STRING1/STRING2 past whitespace. */ 2331 2332 static void 2333 skip_ws (const char *&string1, const char *&string2, const char *end_str2) 2334 { 2335 while (isspace (*string1)) 2336 string1++; 2337 while (string2 < end_str2 && isspace (*string2)) 2338 string2++; 2339 } 2340 2341 /* True if STRING points at the start of a C++ operator name. START 2342 is the start of the string that STRING points to, hence when 2343 reading backwards, we must not read any character before START. */ 2344 2345 static bool 2346 cp_is_operator (const char *string, const char *start) 2347 { 2348 return ((string == start 2349 || !valid_identifier_name_char (string[-1])) 2350 && strncmp (string, CP_OPERATOR_STR, CP_OPERATOR_LEN) == 0 2351 && !valid_identifier_name_char (string[CP_OPERATOR_LEN])); 2352 } 2353 2354 /* If *NAME points at an ABI tag, skip it and return true. Otherwise 2355 leave *NAME unmodified and return false. (see GCC's abi_tag 2356 attribute), such names are demangled as e.g., 2357 "function[abi:cxx11]()". */ 2358 2359 static bool 2360 skip_abi_tag (const char **name) 2361 { 2362 const char *p = *name; 2363 2364 if (startswith (p, "[abi:")) 2365 { 2366 p += 5; 2367 2368 while (valid_identifier_name_char (*p)) 2369 p++; 2370 2371 if (*p == ']') 2372 { 2373 p++; 2374 *name = p; 2375 return true; 2376 } 2377 } 2378 return false; 2379 } 2380 2381 /* See utils.h. */ 2382 2383 int 2384 strncmp_iw_with_mode (const char *string1, const char *string2, 2385 size_t string2_len, strncmp_iw_mode mode, 2386 enum language language, 2387 completion_match_for_lcd *match_for_lcd) 2388 { 2389 const char *string1_start = string1; 2390 const char *end_str2 = string2 + string2_len; 2391 bool skip_spaces = true; 2392 bool have_colon_op = (language == language_cplus 2393 || language == language_rust 2394 || language == language_fortran); 2395 2396 while (1) 2397 { 2398 if (skip_spaces 2399 || ((isspace (*string1) && !valid_identifier_name_char (*string2)) 2400 || (isspace (*string2) && !valid_identifier_name_char (*string1)))) 2401 { 2402 skip_ws (string1, string2, end_str2); 2403 skip_spaces = false; 2404 } 2405 2406 /* Skip [abi:cxx11] tags in the symbol name if the lookup name 2407 doesn't include them. E.g.: 2408 2409 string1: function[abi:cxx1](int) 2410 string2: function 2411 2412 string1: function[abi:cxx1](int) 2413 string2: function(int) 2414 2415 string1: Struct[abi:cxx1]::function() 2416 string2: Struct::function() 2417 2418 string1: function(Struct[abi:cxx1], int) 2419 string2: function(Struct, int) 2420 */ 2421 if (string2 == end_str2 2422 || (*string2 != '[' && !valid_identifier_name_char (*string2))) 2423 { 2424 const char *abi_start = string1; 2425 2426 /* There can be more than one tag. */ 2427 while (*string1 == '[' && skip_abi_tag (&string1)) 2428 ; 2429 2430 if (match_for_lcd != NULL && abi_start != string1) 2431 match_for_lcd->mark_ignored_range (abi_start, string1); 2432 2433 while (isspace (*string1)) 2434 string1++; 2435 } 2436 2437 if (*string1 == '\0' || string2 == end_str2) 2438 break; 2439 2440 /* Handle the :: operator. */ 2441 if (have_colon_op && string1[0] == ':' && string1[1] == ':') 2442 { 2443 if (*string2 != ':') 2444 return 1; 2445 2446 string1++; 2447 string2++; 2448 2449 if (string2 == end_str2) 2450 break; 2451 2452 if (*string2 != ':') 2453 return 1; 2454 2455 string1++; 2456 string2++; 2457 2458 while (isspace (*string1)) 2459 string1++; 2460 while (string2 < end_str2 && isspace (*string2)) 2461 string2++; 2462 continue; 2463 } 2464 2465 /* Handle C++ user-defined operators. */ 2466 else if (language == language_cplus 2467 && *string1 == 'o') 2468 { 2469 if (cp_is_operator (string1, string1_start)) 2470 { 2471 /* An operator name in STRING1. Check STRING2. */ 2472 size_t cmplen 2473 = std::min<size_t> (CP_OPERATOR_LEN, end_str2 - string2); 2474 if (strncmp (string1, string2, cmplen) != 0) 2475 return 1; 2476 2477 string1 += cmplen; 2478 string2 += cmplen; 2479 2480 if (string2 != end_str2) 2481 { 2482 /* Check for "operatorX" in STRING2. */ 2483 if (valid_identifier_name_char (*string2)) 2484 return 1; 2485 2486 skip_ws (string1, string2, end_str2); 2487 } 2488 2489 /* Handle operator(). */ 2490 if (*string1 == '(') 2491 { 2492 if (string2 == end_str2) 2493 { 2494 if (mode == strncmp_iw_mode::NORMAL) 2495 return 0; 2496 else 2497 { 2498 /* Don't break for the regular return at the 2499 bottom, because "operator" should not 2500 match "operator()", since this open 2501 parentheses is not the parameter list 2502 start. */ 2503 return *string1 != '\0'; 2504 } 2505 } 2506 2507 if (*string1 != *string2) 2508 return 1; 2509 2510 string1++; 2511 string2++; 2512 } 2513 2514 while (1) 2515 { 2516 skip_ws (string1, string2, end_str2); 2517 2518 /* Skip to end of token, or to END, whatever comes 2519 first. */ 2520 const char *end_str1 = string1 + strlen (string1); 2521 const char *p1 = cp_skip_operator_token (string1, end_str1); 2522 const char *p2 = cp_skip_operator_token (string2, end_str2); 2523 2524 cmplen = std::min (p1 - string1, p2 - string2); 2525 if (p2 == end_str2) 2526 { 2527 if (strncmp (string1, string2, cmplen) != 0) 2528 return 1; 2529 } 2530 else 2531 { 2532 if (p1 - string1 != p2 - string2) 2533 return 1; 2534 if (strncmp (string1, string2, cmplen) != 0) 2535 return 1; 2536 } 2537 2538 string1 += cmplen; 2539 string2 += cmplen; 2540 2541 if (*string1 == '\0' || string2 == end_str2) 2542 break; 2543 if (*string1 == '(' || *string2 == '(') 2544 break; 2545 } 2546 2547 continue; 2548 } 2549 } 2550 2551 if (case_sensitivity == case_sensitive_on && *string1 != *string2) 2552 break; 2553 if (case_sensitivity == case_sensitive_off 2554 && (tolower ((unsigned char) *string1) 2555 != tolower ((unsigned char) *string2))) 2556 break; 2557 2558 /* If we see any non-whitespace, non-identifier-name character 2559 (any of "()<>*&" etc.), then skip spaces the next time 2560 around. */ 2561 if (!isspace (*string1) && !valid_identifier_name_char (*string1)) 2562 skip_spaces = true; 2563 2564 string1++; 2565 string2++; 2566 } 2567 2568 if (string2 == end_str2) 2569 { 2570 if (mode == strncmp_iw_mode::NORMAL) 2571 { 2572 /* Strip abi tag markers from the matched symbol name. 2573 Usually the ABI marker will be found on function name 2574 (automatically added because the function returns an 2575 object marked with an ABI tag). However, it's also 2576 possible to see a marker in one of the function 2577 parameters, for example. 2578 2579 string2 (lookup name): 2580 func 2581 symbol name: 2582 function(some_struct[abi:cxx11], int) 2583 2584 and for completion LCD computation we want to say that 2585 the match was for: 2586 function(some_struct, int) 2587 */ 2588 if (match_for_lcd != NULL) 2589 { 2590 while ((string1 = strstr (string1, "[abi:")) != NULL) 2591 { 2592 const char *abi_start = string1; 2593 2594 /* There can be more than one tag. */ 2595 while (skip_abi_tag (&string1) && *string1 == '[') 2596 ; 2597 2598 if (abi_start != string1) 2599 match_for_lcd->mark_ignored_range (abi_start, string1); 2600 } 2601 } 2602 2603 return 0; 2604 } 2605 else 2606 return (*string1 != '\0' && *string1 != '('); 2607 } 2608 else 2609 return 1; 2610 } 2611 2612 /* See utils.h. */ 2613 2614 int 2615 strncmp_iw (const char *string1, const char *string2, size_t string2_len) 2616 { 2617 return strncmp_iw_with_mode (string1, string2, string2_len, 2618 strncmp_iw_mode::NORMAL, language_minimal); 2619 } 2620 2621 /* See utils.h. */ 2622 2623 int 2624 strcmp_iw (const char *string1, const char *string2) 2625 { 2626 return strncmp_iw_with_mode (string1, string2, strlen (string2), 2627 strncmp_iw_mode::MATCH_PARAMS, language_minimal); 2628 } 2629 2630 /* This is like strcmp except that it ignores whitespace and treats 2631 '(' as the first non-NULL character in terms of ordering. Like 2632 strcmp (and unlike strcmp_iw), it returns negative if STRING1 < 2633 STRING2, 0 if STRING2 = STRING2, and positive if STRING1 > STRING2 2634 according to that ordering. 2635 2636 If a list is sorted according to this function and if you want to 2637 find names in the list that match some fixed NAME according to 2638 strcmp_iw(LIST_ELT, NAME), then the place to start looking is right 2639 where this function would put NAME. 2640 2641 This function must be neutral to the CASE_SENSITIVITY setting as the user 2642 may choose it during later lookup. Therefore this function always sorts 2643 primarily case-insensitively and secondarily case-sensitively. 2644 2645 Here are some examples of why using strcmp to sort is a bad idea: 2646 2647 Whitespace example: 2648 2649 Say your partial symtab contains: "foo<char *>", "goo". Then, if 2650 we try to do a search for "foo<char*>", strcmp will locate this 2651 after "foo<char *>" and before "goo". Then lookup_partial_symbol 2652 will start looking at strings beginning with "goo", and will never 2653 see the correct match of "foo<char *>". 2654 2655 Parenthesis example: 2656 2657 In practice, this is less like to be an issue, but I'll give it a 2658 shot. Let's assume that '$' is a legitimate character to occur in 2659 symbols. (Which may well even be the case on some systems.) Then 2660 say that the partial symbol table contains "foo$" and "foo(int)". 2661 strcmp will put them in this order, since '$' < '('. Now, if the 2662 user searches for "foo", then strcmp will sort "foo" before "foo$". 2663 Then lookup_partial_symbol will notice that strcmp_iw("foo$", 2664 "foo") is false, so it won't proceed to the actual match of 2665 "foo(int)" with "foo". */ 2666 2667 int 2668 strcmp_iw_ordered (const char *string1, const char *string2) 2669 { 2670 const char *saved_string1 = string1, *saved_string2 = string2; 2671 enum case_sensitivity case_pass = case_sensitive_off; 2672 2673 for (;;) 2674 { 2675 /* C1 and C2 are valid only if *string1 != '\0' && *string2 != '\0'. 2676 Provide stub characters if we are already at the end of one of the 2677 strings. */ 2678 char c1 = 'X', c2 = 'X'; 2679 2680 while (*string1 != '\0' && *string2 != '\0') 2681 { 2682 while (isspace (*string1)) 2683 string1++; 2684 while (isspace (*string2)) 2685 string2++; 2686 2687 switch (case_pass) 2688 { 2689 case case_sensitive_off: 2690 c1 = tolower ((unsigned char) *string1); 2691 c2 = tolower ((unsigned char) *string2); 2692 break; 2693 case case_sensitive_on: 2694 c1 = *string1; 2695 c2 = *string2; 2696 break; 2697 } 2698 if (c1 != c2) 2699 break; 2700 2701 if (*string1 != '\0') 2702 { 2703 string1++; 2704 string2++; 2705 } 2706 } 2707 2708 switch (*string1) 2709 { 2710 /* Characters are non-equal unless they're both '\0'; we want to 2711 make sure we get the comparison right according to our 2712 comparison in the cases where one of them is '\0' or '('. */ 2713 case '\0': 2714 if (*string2 == '\0') 2715 break; 2716 else 2717 return -1; 2718 case '(': 2719 if (*string2 == '\0') 2720 return 1; 2721 else 2722 return -1; 2723 default: 2724 if (*string2 == '\0' || *string2 == '(') 2725 return 1; 2726 else if (c1 > c2) 2727 return 1; 2728 else if (c1 < c2) 2729 return -1; 2730 /* PASSTHRU */ 2731 } 2732 2733 if (case_pass == case_sensitive_on) 2734 return 0; 2735 2736 /* Otherwise the strings were equal in case insensitive way, make 2737 a more fine grained comparison in a case sensitive way. */ 2738 2739 case_pass = case_sensitive_on; 2740 string1 = saved_string1; 2741 string2 = saved_string2; 2742 } 2743 } 2744 2745 /* See utils.h. */ 2746 2747 bool 2748 streq (const char *lhs, const char *rhs) 2749 { 2750 return !strcmp (lhs, rhs); 2751 } 2752 2753 /* See utils.h. */ 2754 2755 int 2756 streq_hash (const void *lhs, const void *rhs) 2757 { 2758 return streq ((const char *) lhs, (const char *) rhs); 2759 } 2760 2761 2762 2763 /* 2764 ** subset_compare() 2765 ** Answer whether string_to_compare is a full or partial match to 2766 ** template_string. The partial match must be in sequence starting 2767 ** at index 0. 2768 */ 2769 int 2770 subset_compare (const char *string_to_compare, const char *template_string) 2771 { 2772 int match; 2773 2774 if (template_string != (char *) NULL && string_to_compare != (char *) NULL 2775 && strlen (string_to_compare) <= strlen (template_string)) 2776 match = 2777 (startswith (template_string, string_to_compare)); 2778 else 2779 match = 0; 2780 return match; 2781 } 2782 2783 static void 2784 show_debug_timestamp (struct ui_file *file, int from_tty, 2785 struct cmd_list_element *c, const char *value) 2786 { 2787 fprintf_filtered (file, _("Timestamping debugging messages is %s.\n"), 2788 value); 2789 } 2790 2791 2792 void 2793 initialize_utils (void) 2794 { 2795 add_setshow_uinteger_cmd ("width", class_support, &chars_per_line, _("\ 2796 Set number of characters where GDB should wrap lines of its output."), _("\ 2797 Show number of characters where GDB should wrap lines of its output."), _("\ 2798 This affects where GDB wraps its output to fit the screen width.\n\ 2799 Setting this to \"unlimited\" or zero prevents GDB from wrapping its output."), 2800 set_width_command, 2801 show_chars_per_line, 2802 &setlist, &showlist); 2803 2804 add_setshow_uinteger_cmd ("height", class_support, &lines_per_page, _("\ 2805 Set number of lines in a page for GDB output pagination."), _("\ 2806 Show number of lines in a page for GDB output pagination."), _("\ 2807 This affects the number of lines after which GDB will pause\n\ 2808 its output and ask you whether to continue.\n\ 2809 Setting this to \"unlimited\" or zero causes GDB never pause during output."), 2810 set_height_command, 2811 show_lines_per_page, 2812 &setlist, &showlist); 2813 2814 add_setshow_boolean_cmd ("pagination", class_support, 2815 &pagination_enabled, _("\ 2816 Set state of GDB output pagination."), _("\ 2817 Show state of GDB output pagination."), _("\ 2818 When pagination is ON, GDB pauses at end of each screenful of\n\ 2819 its output and asks you whether to continue.\n\ 2820 Turning pagination off is an alternative to \"set height unlimited\"."), 2821 NULL, 2822 show_pagination_enabled, 2823 &setlist, &showlist); 2824 2825 add_setshow_boolean_cmd ("sevenbit-strings", class_support, 2826 &sevenbit_strings, _("\ 2827 Set printing of 8-bit characters in strings as \\nnn."), _("\ 2828 Show printing of 8-bit characters in strings as \\nnn."), NULL, 2829 NULL, 2830 show_sevenbit_strings, 2831 &setprintlist, &showprintlist); 2832 2833 add_setshow_boolean_cmd ("timestamp", class_maintenance, 2834 &debug_timestamp, _("\ 2835 Set timestamping of debugging messages."), _("\ 2836 Show timestamping of debugging messages."), _("\ 2837 When set, debugging messages will be marked with seconds and microseconds."), 2838 NULL, 2839 show_debug_timestamp, 2840 &setdebuglist, &showdebuglist); 2841 } 2842 2843 /* See utils.h. */ 2844 2845 CORE_ADDR 2846 address_significant (gdbarch *gdbarch, CORE_ADDR addr) 2847 { 2848 /* Clear insignificant bits of a target address and sign extend resulting 2849 address, avoiding shifts larger or equal than the width of a CORE_ADDR. 2850 The local variable ADDR_BIT stops the compiler reporting a shift overflow 2851 when it won't occur. Skip updating of target address if current target 2852 has not set gdbarch significant_addr_bit. */ 2853 int addr_bit = gdbarch_significant_addr_bit (gdbarch); 2854 2855 if (addr_bit && (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))) 2856 { 2857 CORE_ADDR sign = (CORE_ADDR) 1 << (addr_bit - 1); 2858 addr &= ((CORE_ADDR) 1 << addr_bit) - 1; 2859 addr = (addr ^ sign) - sign; 2860 } 2861 2862 return addr; 2863 } 2864 2865 const char * 2866 paddress (struct gdbarch *gdbarch, CORE_ADDR addr) 2867 { 2868 /* Truncate address to the size of a target address, avoiding shifts 2869 larger or equal than the width of a CORE_ADDR. The local 2870 variable ADDR_BIT stops the compiler reporting a shift overflow 2871 when it won't occur. */ 2872 /* NOTE: This assumes that the significant address information is 2873 kept in the least significant bits of ADDR - the upper bits were 2874 either zero or sign extended. Should gdbarch_address_to_pointer or 2875 some ADDRESS_TO_PRINTABLE() be used to do the conversion? */ 2876 2877 int addr_bit = gdbarch_addr_bit (gdbarch); 2878 2879 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT)) 2880 addr &= ((CORE_ADDR) 1 << addr_bit) - 1; 2881 return hex_string (addr); 2882 } 2883 2884 /* This function is described in "defs.h". */ 2885 2886 const char * 2887 print_core_address (struct gdbarch *gdbarch, CORE_ADDR address) 2888 { 2889 int addr_bit = gdbarch_addr_bit (gdbarch); 2890 2891 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT)) 2892 address &= ((CORE_ADDR) 1 << addr_bit) - 1; 2893 2894 /* FIXME: cagney/2002-05-03: Need local_address_string() function 2895 that returns the language localized string formatted to a width 2896 based on gdbarch_addr_bit. */ 2897 if (addr_bit <= 32) 2898 return hex_string_custom (address, 8); 2899 else 2900 return hex_string_custom (address, 16); 2901 } 2902 2903 /* Callback hash_f for htab_create_alloc or htab_create_alloc_ex. */ 2904 2905 hashval_t 2906 core_addr_hash (const void *ap) 2907 { 2908 const CORE_ADDR *addrp = (const CORE_ADDR *) ap; 2909 2910 return *addrp; 2911 } 2912 2913 /* Callback eq_f for htab_create_alloc or htab_create_alloc_ex. */ 2914 2915 int 2916 core_addr_eq (const void *ap, const void *bp) 2917 { 2918 const CORE_ADDR *addr_ap = (const CORE_ADDR *) ap; 2919 const CORE_ADDR *addr_bp = (const CORE_ADDR *) bp; 2920 2921 return *addr_ap == *addr_bp; 2922 } 2923 2924 /* Convert a string back into a CORE_ADDR. */ 2925 CORE_ADDR 2926 string_to_core_addr (const char *my_string) 2927 { 2928 CORE_ADDR addr = 0; 2929 2930 if (my_string[0] == '0' && tolower (my_string[1]) == 'x') 2931 { 2932 /* Assume that it is in hex. */ 2933 int i; 2934 2935 for (i = 2; my_string[i] != '\0'; i++) 2936 { 2937 if (isdigit (my_string[i])) 2938 addr = (my_string[i] - '0') + (addr * 16); 2939 else if (isxdigit (my_string[i])) 2940 addr = (tolower (my_string[i]) - 'a' + 0xa) + (addr * 16); 2941 else 2942 error (_("invalid hex \"%s\""), my_string); 2943 } 2944 } 2945 else 2946 { 2947 /* Assume that it is in decimal. */ 2948 int i; 2949 2950 for (i = 0; my_string[i] != '\0'; i++) 2951 { 2952 if (isdigit (my_string[i])) 2953 addr = (my_string[i] - '0') + (addr * 10); 2954 else 2955 error (_("invalid decimal \"%s\""), my_string); 2956 } 2957 } 2958 2959 return addr; 2960 } 2961 2962 #if GDB_SELF_TEST 2963 2964 static void 2965 gdb_realpath_check_trailer (const char *input, const char *trailer) 2966 { 2967 gdb::unique_xmalloc_ptr<char> result = gdb_realpath (input); 2968 2969 size_t len = strlen (result.get ()); 2970 size_t trail_len = strlen (trailer); 2971 2972 SELF_CHECK (len >= trail_len 2973 && strcmp (result.get () + len - trail_len, trailer) == 0); 2974 } 2975 2976 static void 2977 gdb_realpath_tests () 2978 { 2979 /* A file which contains a directory prefix. */ 2980 gdb_realpath_check_trailer ("./xfullpath.exp", "/xfullpath.exp"); 2981 /* A file which contains a directory prefix. */ 2982 gdb_realpath_check_trailer ("../../defs.h", "/defs.h"); 2983 /* A one-character filename. */ 2984 gdb_realpath_check_trailer ("./a", "/a"); 2985 /* A file in the root directory. */ 2986 gdb_realpath_check_trailer ("/root_file_which_should_exist", 2987 "/root_file_which_should_exist"); 2988 /* A file which does not have a directory prefix. */ 2989 gdb_realpath_check_trailer ("xfullpath.exp", "xfullpath.exp"); 2990 /* A one-char filename without any directory prefix. */ 2991 gdb_realpath_check_trailer ("a", "a"); 2992 /* An empty filename. */ 2993 gdb_realpath_check_trailer ("", ""); 2994 } 2995 2996 #endif /* GDB_SELF_TEST */ 2997 2998 /* Allocation function for the libiberty hash table which uses an 2999 obstack. The obstack is passed as DATA. */ 3000 3001 void * 3002 hashtab_obstack_allocate (void *data, size_t size, size_t count) 3003 { 3004 size_t total = size * count; 3005 void *ptr = obstack_alloc ((struct obstack *) data, total); 3006 3007 memset (ptr, 0, total); 3008 return ptr; 3009 } 3010 3011 /* Trivial deallocation function for the libiberty splay tree and hash 3012 table - don't deallocate anything. Rely on later deletion of the 3013 obstack. DATA will be the obstack, although it is not needed 3014 here. */ 3015 3016 void 3017 dummy_obstack_deallocate (void *object, void *data) 3018 { 3019 return; 3020 } 3021 3022 /* Simple, portable version of dirname that does not modify its 3023 argument. */ 3024 3025 std::string 3026 ldirname (const char *filename) 3027 { 3028 std::string dirname; 3029 const char *base = lbasename (filename); 3030 3031 while (base > filename && IS_DIR_SEPARATOR (base[-1])) 3032 --base; 3033 3034 if (base == filename) 3035 return dirname; 3036 3037 dirname = std::string (filename, base - filename); 3038 3039 /* On DOS based file systems, convert "d:foo" to "d:.", so that we 3040 create "d:./bar" later instead of the (different) "d:/bar". */ 3041 if (base - filename == 2 && IS_ABSOLUTE_PATH (base) 3042 && !IS_DIR_SEPARATOR (filename[0])) 3043 dirname[base++ - filename] = '.'; 3044 3045 return dirname; 3046 } 3047 3048 /* See utils.h. */ 3049 3050 void 3051 gdb_argv::reset (const char *s) 3052 { 3053 char **argv = buildargv (s); 3054 3055 if (s != NULL && argv == NULL) 3056 malloc_failure (0); 3057 3058 freeargv (m_argv); 3059 m_argv = argv; 3060 } 3061 3062 int 3063 compare_positive_ints (const void *ap, const void *bp) 3064 { 3065 /* Because we know we're comparing two ints which are positive, 3066 there's no danger of overflow here. */ 3067 return * (int *) ap - * (int *) bp; 3068 } 3069 3070 #define AMBIGUOUS_MESS1 ".\nMatching formats:" 3071 #define AMBIGUOUS_MESS2 \ 3072 ".\nUse \"set gnutarget format-name\" to specify the format." 3073 3074 std::string 3075 gdb_bfd_errmsg (bfd_error_type error_tag, char **matching) 3076 { 3077 char **p; 3078 3079 /* Check if errmsg just need simple return. */ 3080 if (error_tag != bfd_error_file_ambiguously_recognized || matching == NULL) 3081 return bfd_errmsg (error_tag); 3082 3083 std::string ret (bfd_errmsg (error_tag)); 3084 ret += AMBIGUOUS_MESS1; 3085 3086 for (p = matching; *p; p++) 3087 { 3088 ret += " "; 3089 ret += *p; 3090 } 3091 ret += AMBIGUOUS_MESS2; 3092 3093 xfree (matching); 3094 3095 return ret; 3096 } 3097 3098 /* Return ARGS parsed as a valid pid, or throw an error. */ 3099 3100 int 3101 parse_pid_to_attach (const char *args) 3102 { 3103 unsigned long pid; 3104 char *dummy; 3105 3106 if (!args) 3107 error_no_arg (_("process-id to attach")); 3108 3109 dummy = (char *) args; 3110 pid = strtoul (args, &dummy, 0); 3111 /* Some targets don't set errno on errors, grrr! */ 3112 if ((pid == 0 && dummy == args) || dummy != &args[strlen (args)]) 3113 error (_("Illegal process-id: %s."), args); 3114 3115 return pid; 3116 } 3117 3118 /* Substitute all occurences of string FROM by string TO in *STRINGP. *STRINGP 3119 must come from xrealloc-compatible allocator and it may be updated. FROM 3120 needs to be delimited by IS_DIR_SEPARATOR or DIRNAME_SEPARATOR (or be 3121 located at the start or end of *STRINGP. */ 3122 3123 void 3124 substitute_path_component (char **stringp, const char *from, const char *to) 3125 { 3126 char *string = *stringp, *s; 3127 const size_t from_len = strlen (from); 3128 const size_t to_len = strlen (to); 3129 3130 for (s = string;;) 3131 { 3132 s = strstr (s, from); 3133 if (s == NULL) 3134 break; 3135 3136 if ((s == string || IS_DIR_SEPARATOR (s[-1]) 3137 || s[-1] == DIRNAME_SEPARATOR) 3138 && (s[from_len] == '\0' || IS_DIR_SEPARATOR (s[from_len]) 3139 || s[from_len] == DIRNAME_SEPARATOR)) 3140 { 3141 char *string_new; 3142 3143 string_new 3144 = (char *) xrealloc (string, (strlen (string) + to_len + 1)); 3145 3146 /* Relocate the current S pointer. */ 3147 s = s - string + string_new; 3148 string = string_new; 3149 3150 /* Replace from by to. */ 3151 memmove (&s[to_len], &s[from_len], strlen (&s[from_len]) + 1); 3152 memcpy (s, to, to_len); 3153 3154 s += to_len; 3155 } 3156 else 3157 s++; 3158 } 3159 3160 *stringp = string; 3161 } 3162 3163 #ifdef HAVE_WAITPID 3164 3165 #ifdef SIGALRM 3166 3167 /* SIGALRM handler for waitpid_with_timeout. */ 3168 3169 static void 3170 sigalrm_handler (int signo) 3171 { 3172 /* Nothing to do. */ 3173 } 3174 3175 #endif 3176 3177 /* Wrapper to wait for child PID to die with TIMEOUT. 3178 TIMEOUT is the time to stop waiting in seconds. 3179 If TIMEOUT is zero, pass WNOHANG to waitpid. 3180 Returns PID if it was successfully waited for, otherwise -1. 3181 3182 Timeouts are currently implemented with alarm and SIGALRM. 3183 If the host does not support them, this waits "forever". 3184 It would be odd though for a host to have waitpid and not SIGALRM. */ 3185 3186 pid_t 3187 wait_to_die_with_timeout (pid_t pid, int *status, int timeout) 3188 { 3189 pid_t waitpid_result; 3190 3191 gdb_assert (pid > 0); 3192 gdb_assert (timeout >= 0); 3193 3194 if (timeout > 0) 3195 { 3196 #ifdef SIGALRM 3197 #if defined (HAVE_SIGACTION) && defined (SA_RESTART) 3198 struct sigaction sa, old_sa; 3199 3200 sa.sa_handler = sigalrm_handler; 3201 sigemptyset (&sa.sa_mask); 3202 sa.sa_flags = 0; 3203 sigaction (SIGALRM, &sa, &old_sa); 3204 #else 3205 sighandler_t ofunc; 3206 3207 ofunc = signal (SIGALRM, sigalrm_handler); 3208 #endif 3209 3210 alarm (timeout); 3211 #endif 3212 3213 waitpid_result = waitpid (pid, status, 0); 3214 3215 #ifdef SIGALRM 3216 alarm (0); 3217 #if defined (HAVE_SIGACTION) && defined (SA_RESTART) 3218 sigaction (SIGALRM, &old_sa, NULL); 3219 #else 3220 signal (SIGALRM, ofunc); 3221 #endif 3222 #endif 3223 } 3224 else 3225 waitpid_result = waitpid (pid, status, WNOHANG); 3226 3227 if (waitpid_result == pid) 3228 return pid; 3229 else 3230 return -1; 3231 } 3232 3233 #endif /* HAVE_WAITPID */ 3234 3235 /* Provide fnmatch compatible function for FNM_FILE_NAME matching of host files. 3236 Both FNM_FILE_NAME and FNM_NOESCAPE must be set in FLAGS. 3237 3238 It handles correctly HAVE_DOS_BASED_FILE_SYSTEM and 3239 HAVE_CASE_INSENSITIVE_FILE_SYSTEM. */ 3240 3241 int 3242 gdb_filename_fnmatch (const char *pattern, const char *string, int flags) 3243 { 3244 gdb_assert ((flags & FNM_FILE_NAME) != 0); 3245 3246 /* It is unclear how '\' escaping vs. directory separator should coexist. */ 3247 gdb_assert ((flags & FNM_NOESCAPE) != 0); 3248 3249 #ifdef HAVE_DOS_BASED_FILE_SYSTEM 3250 { 3251 char *pattern_slash, *string_slash; 3252 3253 /* Replace '\' by '/' in both strings. */ 3254 3255 pattern_slash = (char *) alloca (strlen (pattern) + 1); 3256 strcpy (pattern_slash, pattern); 3257 pattern = pattern_slash; 3258 for (; *pattern_slash != 0; pattern_slash++) 3259 if (IS_DIR_SEPARATOR (*pattern_slash)) 3260 *pattern_slash = '/'; 3261 3262 string_slash = (char *) alloca (strlen (string) + 1); 3263 strcpy (string_slash, string); 3264 string = string_slash; 3265 for (; *string_slash != 0; string_slash++) 3266 if (IS_DIR_SEPARATOR (*string_slash)) 3267 *string_slash = '/'; 3268 } 3269 #endif /* HAVE_DOS_BASED_FILE_SYSTEM */ 3270 3271 #ifdef HAVE_CASE_INSENSITIVE_FILE_SYSTEM 3272 flags |= FNM_CASEFOLD; 3273 #endif /* HAVE_CASE_INSENSITIVE_FILE_SYSTEM */ 3274 3275 return fnmatch (pattern, string, flags); 3276 } 3277 3278 /* Return the number of path elements in PATH. 3279 / = 1 3280 /foo = 2 3281 /foo/ = 2 3282 foo/bar = 2 3283 foo/ = 1 */ 3284 3285 int 3286 count_path_elements (const char *path) 3287 { 3288 int count = 0; 3289 const char *p = path; 3290 3291 if (HAS_DRIVE_SPEC (p)) 3292 { 3293 p = STRIP_DRIVE_SPEC (p); 3294 ++count; 3295 } 3296 3297 while (*p != '\0') 3298 { 3299 if (IS_DIR_SEPARATOR (*p)) 3300 ++count; 3301 ++p; 3302 } 3303 3304 /* Backup one if last character is /, unless it's the only one. */ 3305 if (p > path + 1 && IS_DIR_SEPARATOR (p[-1])) 3306 --count; 3307 3308 /* Add one for the file name, if present. */ 3309 if (p > path && !IS_DIR_SEPARATOR (p[-1])) 3310 ++count; 3311 3312 return count; 3313 } 3314 3315 /* Remove N leading path elements from PATH. 3316 N must be non-negative. 3317 If PATH has more than N path elements then return NULL. 3318 If PATH has exactly N path elements then return "". 3319 See count_path_elements for a description of how we do the counting. */ 3320 3321 const char * 3322 strip_leading_path_elements (const char *path, int n) 3323 { 3324 int i = 0; 3325 const char *p = path; 3326 3327 gdb_assert (n >= 0); 3328 3329 if (n == 0) 3330 return p; 3331 3332 if (HAS_DRIVE_SPEC (p)) 3333 { 3334 p = STRIP_DRIVE_SPEC (p); 3335 ++i; 3336 } 3337 3338 while (i < n) 3339 { 3340 while (*p != '\0' && !IS_DIR_SEPARATOR (*p)) 3341 ++p; 3342 if (*p == '\0') 3343 { 3344 if (i + 1 == n) 3345 return ""; 3346 return NULL; 3347 } 3348 ++p; 3349 ++i; 3350 } 3351 3352 return p; 3353 } 3354 3355 /* See utils.h. */ 3356 3357 void 3358 copy_bitwise (gdb_byte *dest, ULONGEST dest_offset, 3359 const gdb_byte *source, ULONGEST source_offset, 3360 ULONGEST nbits, int bits_big_endian) 3361 { 3362 unsigned int buf, avail; 3363 3364 if (nbits == 0) 3365 return; 3366 3367 if (bits_big_endian) 3368 { 3369 /* Start from the end, then work backwards. */ 3370 dest_offset += nbits - 1; 3371 dest += dest_offset / 8; 3372 dest_offset = 7 - dest_offset % 8; 3373 source_offset += nbits - 1; 3374 source += source_offset / 8; 3375 source_offset = 7 - source_offset % 8; 3376 } 3377 else 3378 { 3379 dest += dest_offset / 8; 3380 dest_offset %= 8; 3381 source += source_offset / 8; 3382 source_offset %= 8; 3383 } 3384 3385 /* Fill BUF with DEST_OFFSET bits from the destination and 8 - 3386 SOURCE_OFFSET bits from the source. */ 3387 buf = *(bits_big_endian ? source-- : source++) >> source_offset; 3388 buf <<= dest_offset; 3389 buf |= *dest & ((1 << dest_offset) - 1); 3390 3391 /* NBITS: bits yet to be written; AVAIL: BUF's fill level. */ 3392 nbits += dest_offset; 3393 avail = dest_offset + 8 - source_offset; 3394 3395 /* Flush 8 bits from BUF, if appropriate. */ 3396 if (nbits >= 8 && avail >= 8) 3397 { 3398 *(bits_big_endian ? dest-- : dest++) = buf; 3399 buf >>= 8; 3400 avail -= 8; 3401 nbits -= 8; 3402 } 3403 3404 /* Copy the middle part. */ 3405 if (nbits >= 8) 3406 { 3407 size_t len = nbits / 8; 3408 3409 /* Use a faster method for byte-aligned copies. */ 3410 if (avail == 0) 3411 { 3412 if (bits_big_endian) 3413 { 3414 dest -= len; 3415 source -= len; 3416 memcpy (dest + 1, source + 1, len); 3417 } 3418 else 3419 { 3420 memcpy (dest, source, len); 3421 dest += len; 3422 source += len; 3423 } 3424 } 3425 else 3426 { 3427 while (len--) 3428 { 3429 buf |= *(bits_big_endian ? source-- : source++) << avail; 3430 *(bits_big_endian ? dest-- : dest++) = buf; 3431 buf >>= 8; 3432 } 3433 } 3434 nbits %= 8; 3435 } 3436 3437 /* Write the last byte. */ 3438 if (nbits) 3439 { 3440 if (avail < nbits) 3441 buf |= *source << avail; 3442 3443 buf &= (1 << nbits) - 1; 3444 *dest = (*dest & (~0 << nbits)) | buf; 3445 } 3446 } 3447 3448 void 3449 _initialize_utils (void) 3450 { 3451 add_internal_problem_command (&internal_error_problem); 3452 add_internal_problem_command (&internal_warning_problem); 3453 add_internal_problem_command (&demangler_warning_problem); 3454 3455 #if GDB_SELF_TEST 3456 selftests::register_test ("gdb_realpath", gdb_realpath_tests); 3457 #endif 3458 } 3459