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