1 /* GDB CLI commands. 2 3 Copyright (C) 2000-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 "arch-utils.h" 22 #include "readline/tilde.h" 23 #include "completer.h" 24 #include "target.h" /* For baud_rate, remote_debug and remote_timeout. */ 25 #include "gdbsupport/gdb_wait.h" /* For shell escape implementation. */ 26 #include "gdbcmd.h" 27 #include "gdb_regex.h" /* Used by apropos_command. */ 28 #include "gdb_vfork.h" 29 #include "linespec.h" 30 #include "expression.h" 31 #include "frame.h" 32 #include "value.h" 33 #include "language.h" 34 #include "filenames.h" /* For DOSish file names. */ 35 #include "objfiles.h" 36 #include "source.h" 37 #include "disasm.h" 38 #include "tracepoint.h" 39 #include "gdbsupport/filestuff.h" 40 #include "location.h" 41 #include "block.h" 42 43 #include "ui-out.h" 44 #include "interps.h" 45 46 #include "top.h" 47 #include "cli/cli-decode.h" 48 #include "cli/cli-script.h" 49 #include "cli/cli-setshow.h" 50 #include "cli/cli-cmds.h" 51 #include "cli/cli-style.h" 52 #include "cli/cli-utils.h" 53 #include "cli/cli-style.h" 54 55 #include "extension.h" 56 #include "gdbsupport/pathstuff.h" 57 58 #ifdef TUI 59 #include "tui/tui.h" /* For tui_active et.al. */ 60 #endif 61 62 #include <fcntl.h> 63 #include <algorithm> 64 #include <string> 65 66 /* Prototypes for local utility functions */ 67 68 static void print_sal_location (const symtab_and_line &sal); 69 70 static void ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals, 71 const char *format, ...) 72 ATTRIBUTE_PRINTF (2, 3); 73 74 static void filter_sals (std::vector<symtab_and_line> &); 75 76 77 /* See cli-cmds.h. */ 78 unsigned int max_user_call_depth; 79 80 /* Define all cmd_list_elements. */ 81 82 /* Chain containing all defined commands. */ 83 84 struct cmd_list_element *cmdlist; 85 86 /* Chain containing all defined info subcommands. */ 87 88 struct cmd_list_element *infolist; 89 90 /* Chain containing all defined enable subcommands. */ 91 92 struct cmd_list_element *enablelist; 93 94 /* Chain containing all defined disable subcommands. */ 95 96 struct cmd_list_element *disablelist; 97 98 /* Chain containing all defined stop subcommands. */ 99 100 struct cmd_list_element *stoplist; 101 102 /* Chain containing all defined delete subcommands. */ 103 104 struct cmd_list_element *deletelist; 105 106 /* Chain containing all defined detach subcommands. */ 107 108 struct cmd_list_element *detachlist; 109 110 /* Chain containing all defined kill subcommands. */ 111 112 struct cmd_list_element *killlist; 113 114 /* Chain containing all defined set subcommands */ 115 116 struct cmd_list_element *setlist; 117 118 /* Chain containing all defined unset subcommands */ 119 120 struct cmd_list_element *unsetlist; 121 122 /* Chain containing all defined show subcommands. */ 123 124 struct cmd_list_element *showlist; 125 126 /* Chain containing all defined \"set history\". */ 127 128 struct cmd_list_element *sethistlist; 129 130 /* Chain containing all defined \"show history\". */ 131 132 struct cmd_list_element *showhistlist; 133 134 /* Chain containing all defined \"unset history\". */ 135 136 struct cmd_list_element *unsethistlist; 137 138 /* Chain containing all defined maintenance subcommands. */ 139 140 struct cmd_list_element *maintenancelist; 141 142 /* Chain containing all defined "maintenance info" subcommands. */ 143 144 struct cmd_list_element *maintenanceinfolist; 145 146 /* Chain containing all defined "maintenance print" subcommands. */ 147 148 struct cmd_list_element *maintenanceprintlist; 149 150 /* Chain containing all defined "maintenance check" subcommands. */ 151 152 struct cmd_list_element *maintenancechecklist; 153 154 struct cmd_list_element *setprintlist; 155 156 struct cmd_list_element *showprintlist; 157 158 struct cmd_list_element *setdebuglist; 159 160 struct cmd_list_element *showdebuglist; 161 162 struct cmd_list_element *setchecklist; 163 164 struct cmd_list_element *showchecklist; 165 166 /* Command tracing state. */ 167 168 int source_verbose = 0; 169 bool trace_commands = false; 170 171 /* 'script-extension' option support. */ 172 173 static const char script_ext_off[] = "off"; 174 static const char script_ext_soft[] = "soft"; 175 static const char script_ext_strict[] = "strict"; 176 177 static const char *const script_ext_enums[] = { 178 script_ext_off, 179 script_ext_soft, 180 script_ext_strict, 181 NULL 182 }; 183 184 static const char *script_ext_mode = script_ext_soft; 185 186 /* Utility used everywhere when at least one argument is needed and 187 none is supplied. */ 188 189 void 190 error_no_arg (const char *why) 191 { 192 error (_("Argument required (%s)."), why); 193 } 194 195 /* This implements the "info" prefix command. Normally such commands 196 are automatically handled by add_basic_prefix_cmd, but in this case 197 a separate command is used so that it can be hooked into by 198 gdb-gdb.gdb. */ 199 200 static void 201 info_command (const char *arg, int from_tty) 202 { 203 help_list (infolist, "info ", all_commands, gdb_stdout); 204 } 205 206 /* See cli/cli-cmds.h. */ 207 208 void 209 with_command_1 (const char *set_cmd_prefix, 210 cmd_list_element *setlist, const char *args, int from_tty) 211 { 212 if (args == nullptr) 213 error (_("Missing arguments.")); 214 215 const char *delim = strstr (args, "--"); 216 const char *nested_cmd = nullptr; 217 218 if (delim == args) 219 error (_("Missing setting before '--' delimiter")); 220 221 if (delim == nullptr || *skip_spaces (&delim[2]) == '\0') 222 nested_cmd = repeat_previous (); 223 224 cmd_list_element *set_cmd = lookup_cmd (&args, setlist, set_cmd_prefix, 225 nullptr, 226 /*allow_unknown=*/ 0, 227 /*ignore_help_classes=*/ 1); 228 gdb_assert (set_cmd != nullptr); 229 230 if (set_cmd->var == nullptr) 231 error (_("Cannot use this setting with the \"with\" command")); 232 233 std::string temp_value 234 = (delim == nullptr ? args : std::string (args, delim - args)); 235 236 if (nested_cmd == nullptr) 237 nested_cmd = skip_spaces (delim + 2); 238 239 std::string org_value = get_setshow_command_value_string (set_cmd); 240 241 /* Tweak the setting to the new temporary value. */ 242 do_set_command (temp_value.c_str (), from_tty, set_cmd); 243 244 try 245 { 246 scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0); 247 248 /* Execute the nested command. */ 249 execute_command (nested_cmd, from_tty); 250 } 251 catch (const gdb_exception &ex) 252 { 253 /* Restore the setting and rethrow. If restoring the setting 254 throws, swallow the new exception and warn. There's nothing 255 else we can reasonably do. */ 256 try 257 { 258 do_set_command (org_value.c_str (), from_tty, set_cmd); 259 } 260 catch (const gdb_exception &ex2) 261 { 262 warning (_("Couldn't restore setting: %s"), ex2.what ()); 263 } 264 265 throw; 266 } 267 268 /* Restore the setting. */ 269 do_set_command (org_value.c_str (), from_tty, set_cmd); 270 } 271 272 /* See cli/cli-cmds.h. */ 273 274 void 275 with_command_completer_1 (const char *set_cmd_prefix, 276 completion_tracker &tracker, 277 const char *text) 278 { 279 tracker.set_use_custom_word_point (true); 280 281 const char *delim = strstr (text, "--"); 282 283 /* If we're still not past the "--" delimiter, complete the "with" 284 command as if it was a "set" command. */ 285 if (delim == text 286 || delim == nullptr 287 || !isspace (delim[-1]) 288 || !(isspace (delim[2]) || delim[2] == '\0')) 289 { 290 std::string new_text = std::string (set_cmd_prefix) + text; 291 tracker.advance_custom_word_point_by (-(int) strlen (set_cmd_prefix)); 292 complete_nested_command_line (tracker, new_text.c_str ()); 293 return; 294 } 295 296 /* We're past the "--" delimiter. Complete on the sub command. */ 297 const char *nested_cmd = skip_spaces (delim + 2); 298 tracker.advance_custom_word_point_by (nested_cmd - text); 299 complete_nested_command_line (tracker, nested_cmd); 300 } 301 302 /* The "with" command. */ 303 304 static void 305 with_command (const char *args, int from_tty) 306 { 307 with_command_1 ("set ", setlist, args, from_tty); 308 } 309 310 /* "with" command completer. */ 311 312 static void 313 with_command_completer (struct cmd_list_element *ignore, 314 completion_tracker &tracker, 315 const char *text, const char * /*word*/) 316 { 317 with_command_completer_1 ("set ", tracker, text); 318 } 319 320 /* Look up the contents of TEXT as a command usable with default args. 321 Throws an error if no such command is found. 322 Return the found command and advances TEXT past the found command. 323 If the found command is a postfix command, set *PREFIX_CMD to its 324 prefix command. */ 325 326 static struct cmd_list_element * 327 lookup_cmd_for_default_args (const char **text, 328 struct cmd_list_element **prefix_cmd) 329 { 330 const char *orig_text = *text; 331 struct cmd_list_element *lcmd; 332 333 if (*text == nullptr || skip_spaces (*text) == nullptr) 334 error (_("ALIAS missing.")); 335 336 /* We first use lookup_cmd to verify TEXT unambiguously identifies 337 a command. */ 338 lcmd = lookup_cmd (text, cmdlist, "", NULL, 339 /*allow_unknown=*/ 0, 340 /*ignore_help_classes=*/ 1); 341 342 /* Note that we accept default args for prefix commands, 343 as a prefix command can also be a valid usable 344 command accepting some arguments. 345 For example, "thread apply" applies a command to a 346 list of thread ids, and is also the prefix command for 347 thread apply all. */ 348 349 /* We have an unambiguous command for which default args 350 can be specified. What remains after having found LCMD 351 is either spaces, or the default args character. */ 352 353 /* We then use lookup_cmd_composition to detect if the user 354 has specified an alias, and find the possible prefix_cmd 355 of cmd. */ 356 struct cmd_list_element *alias, *cmd; 357 lookup_cmd_composition 358 (std::string (orig_text, *text - orig_text).c_str (), 359 &alias, prefix_cmd, &cmd); 360 gdb_assert (cmd != nullptr); 361 gdb_assert (cmd == lcmd); 362 if (alias != nullptr) 363 cmd = alias; 364 365 return cmd; 366 } 367 368 /* Provide documentation on command or list given by COMMAND. FROM_TTY 369 is ignored. */ 370 371 static void 372 help_command (const char *command, int from_tty) 373 { 374 help_cmd (command, gdb_stdout); 375 } 376 377 378 /* Note: The "complete" command is used by Emacs to implement completion. 379 [Is that why this function writes output with *_unfiltered?] */ 380 381 static void 382 complete_command (const char *arg, int from_tty) 383 { 384 dont_repeat (); 385 386 if (max_completions == 0) 387 { 388 /* Only print this for non-mi frontends. An MI frontend may not 389 be able to handle this. */ 390 if (!current_uiout->is_mi_like_p ()) 391 { 392 printf_unfiltered (_("max-completions is zero," 393 " completion is disabled.\n")); 394 } 395 return; 396 } 397 398 if (arg == NULL) 399 arg = ""; 400 401 int quote_char = '\0'; 402 const char *word; 403 404 completion_result result = complete (arg, &word, "e_char); 405 406 if (result.number_matches != 0) 407 { 408 std::string arg_prefix (arg, word - arg); 409 410 if (result.number_matches == 1) 411 printf_unfiltered ("%s%s\n", arg_prefix.c_str (), result.match_list[0]); 412 else 413 { 414 result.sort_match_list (); 415 416 for (size_t i = 0; i < result.number_matches; i++) 417 { 418 printf_unfiltered ("%s%s", 419 arg_prefix.c_str (), 420 result.match_list[i + 1]); 421 if (quote_char) 422 printf_unfiltered ("%c", quote_char); 423 printf_unfiltered ("\n"); 424 } 425 } 426 427 if (result.number_matches == max_completions) 428 { 429 /* ARG_PREFIX and WORD are included in the output so that emacs 430 will include the message in the output. */ 431 printf_unfiltered (_("%s%s %s\n"), 432 arg_prefix.c_str (), word, 433 get_max_completions_reached_message ()); 434 } 435 } 436 } 437 438 int 439 is_complete_command (struct cmd_list_element *c) 440 { 441 return cmd_cfunc_eq (c, complete_command); 442 } 443 444 static void 445 show_version (const char *args, int from_tty) 446 { 447 print_gdb_version (gdb_stdout, true); 448 printf_filtered ("\n"); 449 } 450 451 static void 452 show_configuration (const char *args, int from_tty) 453 { 454 print_gdb_configuration (gdb_stdout); 455 } 456 457 /* Handle the quit command. */ 458 459 void 460 quit_command (const char *args, int from_tty) 461 { 462 int exit_code = 0; 463 464 /* An optional expression may be used to cause gdb to terminate with 465 the value of that expression. */ 466 if (args) 467 { 468 struct value *val = parse_and_eval (args); 469 470 exit_code = (int) value_as_long (val); 471 } 472 473 if (!quit_confirm ()) 474 error (_("Not confirmed.")); 475 476 query_if_trace_running (from_tty); 477 478 quit_force (args ? &exit_code : NULL, from_tty); 479 } 480 481 static void 482 pwd_command (const char *args, int from_tty) 483 { 484 if (args) 485 error (_("The \"pwd\" command does not take an argument: %s"), args); 486 487 gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0)); 488 489 if (cwd == NULL) 490 error (_("Error finding name of working directory: %s"), 491 safe_strerror (errno)); 492 493 if (strcmp (cwd.get (), current_directory) != 0) 494 printf_unfiltered (_("Working directory %ps\n (canonically %ps).\n"), 495 styled_string (file_name_style.style (), 496 current_directory), 497 styled_string (file_name_style.style (), cwd.get ())); 498 else 499 printf_unfiltered (_("Working directory %ps.\n"), 500 styled_string (file_name_style.style (), 501 current_directory)); 502 } 503 504 void 505 cd_command (const char *dir, int from_tty) 506 { 507 int len; 508 /* Found something other than leading repetitions of "/..". */ 509 int found_real_path; 510 char *p; 511 512 /* If the new directory is absolute, repeat is a no-op; if relative, 513 repeat might be useful but is more likely to be a mistake. */ 514 dont_repeat (); 515 516 gdb::unique_xmalloc_ptr<char> dir_holder 517 (tilde_expand (dir != NULL ? dir : "~")); 518 dir = dir_holder.get (); 519 520 if (chdir (dir) < 0) 521 perror_with_name (dir); 522 523 #ifdef HAVE_DOS_BASED_FILE_SYSTEM 524 /* There's too much mess with DOSish names like "d:", "d:.", 525 "d:./foo" etc. Instead of having lots of special #ifdef'ed code, 526 simply get the canonicalized name of the current directory. */ 527 gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0)); 528 dir = cwd.get (); 529 #endif 530 531 len = strlen (dir); 532 if (IS_DIR_SEPARATOR (dir[len - 1])) 533 { 534 /* Remove the trailing slash unless this is a root directory 535 (including a drive letter on non-Unix systems). */ 536 if (!(len == 1) /* "/" */ 537 #ifdef HAVE_DOS_BASED_FILE_SYSTEM 538 && !(len == 3 && dir[1] == ':') /* "d:/" */ 539 #endif 540 ) 541 len--; 542 } 543 544 dir_holder.reset (savestring (dir, len)); 545 if (IS_ABSOLUTE_PATH (dir_holder.get ())) 546 { 547 xfree (current_directory); 548 current_directory = dir_holder.release (); 549 } 550 else 551 { 552 if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])) 553 current_directory = concat (current_directory, dir_holder.get (), 554 (char *) NULL); 555 else 556 current_directory = concat (current_directory, SLASH_STRING, 557 dir_holder.get (), (char *) NULL); 558 } 559 560 /* Now simplify any occurrences of `.' and `..' in the pathname. */ 561 562 found_real_path = 0; 563 for (p = current_directory; *p;) 564 { 565 if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' 566 && (p[2] == 0 || IS_DIR_SEPARATOR (p[2]))) 567 memmove (p, p + 2, strlen (p + 2) + 1); 568 else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.' 569 && (p[3] == 0 || IS_DIR_SEPARATOR (p[3]))) 570 { 571 if (found_real_path) 572 { 573 /* Search backwards for the directory just before the "/.." 574 and obliterate it and the "/..". */ 575 char *q = p; 576 577 while (q != current_directory && !IS_DIR_SEPARATOR (q[-1])) 578 --q; 579 580 if (q == current_directory) 581 /* current_directory is 582 a relative pathname ("can't happen"--leave it alone). */ 583 ++p; 584 else 585 { 586 memmove (q - 1, p + 3, strlen (p + 3) + 1); 587 p = q - 1; 588 } 589 } 590 else 591 /* We are dealing with leading repetitions of "/..", for 592 example "/../..", which is the Mach super-root. */ 593 p += 3; 594 } 595 else 596 { 597 found_real_path = 1; 598 ++p; 599 } 600 } 601 602 forget_cached_source_info (); 603 604 if (from_tty) 605 pwd_command ((char *) 0, 1); 606 } 607 608 /* Show the current value of the 'script-extension' option. */ 609 610 static void 611 show_script_ext_mode (struct ui_file *file, int from_tty, 612 struct cmd_list_element *c, const char *value) 613 { 614 fprintf_filtered (file, 615 _("Script filename extension recognition is \"%s\".\n"), 616 value); 617 } 618 619 /* Try to open SCRIPT_FILE. 620 If successful, the full path name is stored in *FULL_PATHP, 621 and the stream is returned. 622 If not successful, return NULL; errno is set for the last file 623 we tried to open. 624 625 If SEARCH_PATH is non-zero, and the file isn't found in cwd, 626 search for it in the source search path. */ 627 628 gdb::optional<open_script> 629 find_and_open_script (const char *script_file, int search_path) 630 { 631 int fd; 632 openp_flags search_flags = OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH; 633 gdb::optional<open_script> opened; 634 635 gdb::unique_xmalloc_ptr<char> file (tilde_expand (script_file)); 636 637 if (search_path) 638 search_flags |= OPF_SEARCH_IN_PATH; 639 640 /* Search for and open 'file' on the search path used for source 641 files. Put the full location in *FULL_PATHP. */ 642 gdb::unique_xmalloc_ptr<char> full_path; 643 fd = openp (source_path, search_flags, 644 file.get (), O_RDONLY, &full_path); 645 646 if (fd == -1) 647 return opened; 648 649 FILE *result = fdopen (fd, FOPEN_RT); 650 if (result == NULL) 651 { 652 int save_errno = errno; 653 654 close (fd); 655 errno = save_errno; 656 } 657 else 658 opened.emplace (gdb_file_up (result), std::move (full_path)); 659 660 return opened; 661 } 662 663 /* Load script FILE, which has already been opened as STREAM. 664 FILE_TO_OPEN is the form of FILE to use if one needs to open the file. 665 This is provided as FILE may have been found via the source search path. 666 An important thing to note here is that FILE may be a symlink to a file 667 with a different or non-existing suffix, and thus one cannot infer the 668 extension language from FILE_TO_OPEN. */ 669 670 static void 671 source_script_from_stream (FILE *stream, const char *file, 672 const char *file_to_open) 673 { 674 if (script_ext_mode != script_ext_off) 675 { 676 const struct extension_language_defn *extlang 677 = get_ext_lang_of_file (file); 678 679 if (extlang != NULL) 680 { 681 if (ext_lang_present_p (extlang)) 682 { 683 script_sourcer_func *sourcer 684 = ext_lang_script_sourcer (extlang); 685 686 gdb_assert (sourcer != NULL); 687 sourcer (extlang, stream, file_to_open); 688 return; 689 } 690 else if (script_ext_mode == script_ext_soft) 691 { 692 /* Assume the file is a gdb script. 693 This is handled below. */ 694 } 695 else 696 throw_ext_lang_unsupported (extlang); 697 } 698 } 699 700 script_from_file (stream, file); 701 } 702 703 /* Worker to perform the "source" command. 704 Load script FILE. 705 If SEARCH_PATH is non-zero, and the file isn't found in cwd, 706 search for it in the source search path. */ 707 708 static void 709 source_script_with_search (const char *file, int from_tty, int search_path) 710 { 711 712 if (file == NULL || *file == 0) 713 error (_("source command requires file name of file to source.")); 714 715 gdb::optional<open_script> opened = find_and_open_script (file, search_path); 716 if (!opened) 717 { 718 /* The script wasn't found, or was otherwise inaccessible. 719 If the source command was invoked interactively, throw an 720 error. Otherwise (e.g. if it was invoked by a script), 721 just emit a warning, rather than cause an error. */ 722 if (from_tty) 723 perror_with_name (file); 724 else 725 { 726 perror_warning_with_name (file); 727 return; 728 } 729 } 730 731 /* The python support reopens the file, so we need to pass full_path here 732 in case the file was found on the search path. It's useful to do this 733 anyway so that error messages show the actual file used. But only do 734 this if we (may have) used search_path, as printing the full path in 735 errors for the non-search case can be more noise than signal. */ 736 source_script_from_stream (opened->stream.get (), file, 737 search_path ? opened->full_path.get () : file); 738 } 739 740 /* Wrapper around source_script_with_search to export it to main.c 741 for use in loading .gdbinit scripts. */ 742 743 void 744 source_script (const char *file, int from_tty) 745 { 746 source_script_with_search (file, from_tty, 0); 747 } 748 749 static void 750 source_command (const char *args, int from_tty) 751 { 752 const char *file = args; 753 int search_path = 0; 754 755 scoped_restore save_source_verbose = make_scoped_restore (&source_verbose); 756 757 /* -v causes the source command to run in verbose mode. 758 -s causes the file to be searched in the source search path, 759 even if the file name contains a '/'. 760 We still have to be able to handle filenames with spaces in a 761 backward compatible way, so buildargv is not appropriate. */ 762 763 if (args) 764 { 765 while (args[0] != '\0') 766 { 767 /* Make sure leading white space does not break the 768 comparisons. */ 769 args = skip_spaces (args); 770 771 if (args[0] != '-') 772 break; 773 774 if (args[1] == 'v' && isspace (args[2])) 775 { 776 source_verbose = 1; 777 778 /* Skip passed -v. */ 779 args = &args[3]; 780 } 781 else if (args[1] == 's' && isspace (args[2])) 782 { 783 search_path = 1; 784 785 /* Skip passed -s. */ 786 args = &args[3]; 787 } 788 else 789 break; 790 } 791 792 file = skip_spaces (args); 793 } 794 795 source_script_with_search (file, from_tty, search_path); 796 } 797 798 799 static void 800 echo_command (const char *text, int from_tty) 801 { 802 const char *p = text; 803 int c; 804 805 if (text) 806 while ((c = *p++) != '\0') 807 { 808 if (c == '\\') 809 { 810 /* \ at end of argument is used after spaces 811 so they won't be lost. */ 812 if (*p == 0) 813 return; 814 815 c = parse_escape (get_current_arch (), &p); 816 if (c >= 0) 817 printf_filtered ("%c", c); 818 } 819 else 820 printf_filtered ("%c", c); 821 } 822 823 reset_terminal_style (gdb_stdout); 824 825 /* Force this output to appear now. */ 826 wrap_here (""); 827 gdb_flush (gdb_stdout); 828 } 829 830 /* Sets the last launched shell command convenience variables based on 831 EXIT_STATUS. */ 832 833 static void 834 exit_status_set_internal_vars (int exit_status) 835 { 836 struct internalvar *var_code = lookup_internalvar ("_shell_exitcode"); 837 struct internalvar *var_signal = lookup_internalvar ("_shell_exitsignal"); 838 839 clear_internalvar (var_code); 840 clear_internalvar (var_signal); 841 if (WIFEXITED (exit_status)) 842 set_internalvar_integer (var_code, WEXITSTATUS (exit_status)); 843 #ifdef __MINGW32__ 844 else if (WIFSIGNALED (exit_status) && WTERMSIG (exit_status) == -1) 845 { 846 /* The -1 condition can happen on MinGW, if we don't recognize 847 the fatal exception code encoded in the exit status; see 848 gdbsupport/gdb_wait.c. We don't want to lose information in 849 the exit status in that case. Record it as a normal exit 850 with the full exit status, including the higher 0xC0000000 851 bits. */ 852 set_internalvar_integer (var_code, exit_status); 853 } 854 #endif 855 else if (WIFSIGNALED (exit_status)) 856 set_internalvar_integer (var_signal, WTERMSIG (exit_status)); 857 else 858 warning (_("unexpected shell command exit status %d"), exit_status); 859 } 860 861 static void 862 shell_escape (const char *arg, int from_tty) 863 { 864 #if defined(CANT_FORK) || \ 865 (!defined(HAVE_WORKING_VFORK) && !defined(HAVE_WORKING_FORK)) 866 /* If ARG is NULL, they want an inferior shell, but `system' just 867 reports if the shell is available when passed a NULL arg. */ 868 int rc = system (arg ? arg : ""); 869 870 if (!arg) 871 arg = "inferior shell"; 872 873 if (rc == -1) 874 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg, 875 safe_strerror (errno)); 876 else if (rc) 877 fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc); 878 #ifdef GLOBAL_CURDIR 879 /* Make sure to return to the directory GDB thinks it is, in case 880 the shell command we just ran changed it. */ 881 chdir (current_directory); 882 #endif 883 exit_status_set_internal_vars (rc); 884 #else /* Can fork. */ 885 int status, pid; 886 887 if ((pid = vfork ()) == 0) 888 { 889 const char *p, *user_shell = get_shell (); 890 891 close_most_fds (); 892 893 /* Get the name of the shell for arg0. */ 894 p = lbasename (user_shell); 895 896 if (!arg) 897 execl (user_shell, p, (char *) 0); 898 else 899 execl (user_shell, p, "-c", arg, (char *) 0); 900 901 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell, 902 safe_strerror (errno)); 903 _exit (0177); 904 } 905 906 if (pid != -1) 907 waitpid (pid, &status, 0); 908 else 909 error (_("Fork failed")); 910 exit_status_set_internal_vars (status); 911 #endif /* Can fork. */ 912 } 913 914 /* Implementation of the "shell" command. */ 915 916 static void 917 shell_command (const char *arg, int from_tty) 918 { 919 shell_escape (arg, from_tty); 920 } 921 922 static void 923 edit_command (const char *arg, int from_tty) 924 { 925 struct symtab_and_line sal; 926 struct symbol *sym; 927 const char *editor; 928 char *p; 929 const char *fn; 930 931 /* Pull in the current default source line if necessary. */ 932 if (arg == 0) 933 { 934 set_default_source_symtab_and_line (); 935 sal = get_current_source_symtab_and_line (); 936 } 937 938 /* Bare "edit" edits file with present line. */ 939 940 if (arg == 0) 941 { 942 if (sal.symtab == 0) 943 error (_("No default source file yet.")); 944 sal.line += get_lines_to_list () / 2; 945 } 946 else 947 { 948 const char *arg1; 949 950 /* Now should only be one argument -- decode it in SAL. */ 951 arg1 = arg; 952 event_location_up location = string_to_event_location (&arg1, 953 current_language); 954 std::vector<symtab_and_line> sals = decode_line_1 (location.get (), 955 DECODE_LINE_LIST_MODE, 956 NULL, NULL, 0); 957 958 filter_sals (sals); 959 if (sals.empty ()) 960 { 961 /* C++ */ 962 return; 963 } 964 if (sals.size () > 1) 965 { 966 ambiguous_line_spec (sals, 967 _("Specified line is ambiguous:\n")); 968 return; 969 } 970 971 sal = sals[0]; 972 973 if (*arg1) 974 error (_("Junk at end of line specification.")); 975 976 /* If line was specified by address, first print exactly which 977 line, and which file. In this case, sal.symtab == 0 means 978 address is outside of all known source files, not that user 979 failed to give a filename. */ 980 if (*arg == '*') 981 { 982 struct gdbarch *gdbarch; 983 984 if (sal.symtab == 0) 985 error (_("No source file for address %s."), 986 paddress (get_current_arch (), sal.pc)); 987 988 gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch (); 989 sym = find_pc_function (sal.pc); 990 if (sym) 991 printf_filtered ("%s is in %s (%s:%d).\n", 992 paddress (gdbarch, sal.pc), 993 sym->print_name (), 994 symtab_to_filename_for_display (sal.symtab), 995 sal.line); 996 else 997 printf_filtered ("%s is at %s:%d.\n", 998 paddress (gdbarch, sal.pc), 999 symtab_to_filename_for_display (sal.symtab), 1000 sal.line); 1001 } 1002 1003 /* If what was given does not imply a symtab, it must be an 1004 undebuggable symbol which means no source code. */ 1005 1006 if (sal.symtab == 0) 1007 error (_("No line number known for %s."), arg); 1008 } 1009 1010 if ((editor = getenv ("EDITOR")) == NULL) 1011 editor = "/bin/ex"; 1012 1013 fn = symtab_to_fullname (sal.symtab); 1014 1015 /* Quote the file name, in case it has whitespace or other special 1016 characters. */ 1017 p = xstrprintf ("%s +%d \"%s\"", editor, sal.line, fn); 1018 shell_escape (p, from_tty); 1019 xfree (p); 1020 } 1021 1022 /* The options for the "pipe" command. */ 1023 1024 struct pipe_cmd_opts 1025 { 1026 /* For "-d". */ 1027 char *delimiter = nullptr; 1028 1029 ~pipe_cmd_opts () 1030 { 1031 xfree (delimiter); 1032 } 1033 }; 1034 1035 static const gdb::option::option_def pipe_cmd_option_defs[] = { 1036 1037 gdb::option::string_option_def<pipe_cmd_opts> { 1038 "d", 1039 [] (pipe_cmd_opts *opts) { return &opts->delimiter; }, 1040 nullptr, 1041 N_("Indicates to use the specified delimiter string to separate\n\ 1042 COMMAND from SHELL_COMMAND, in alternative to |. This is useful in\n\ 1043 case COMMAND contains a | character."), 1044 }, 1045 1046 }; 1047 1048 /* Create an option_def_group for the "pipe" command's options, with 1049 OPTS as context. */ 1050 1051 static inline gdb::option::option_def_group 1052 make_pipe_cmd_options_def_group (pipe_cmd_opts *opts) 1053 { 1054 return {{pipe_cmd_option_defs}, opts}; 1055 } 1056 1057 /* Implementation of the "pipe" command. */ 1058 1059 static void 1060 pipe_command (const char *arg, int from_tty) 1061 { 1062 pipe_cmd_opts opts; 1063 1064 auto grp = make_pipe_cmd_options_def_group (&opts); 1065 gdb::option::process_options 1066 (&arg, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp); 1067 1068 const char *delim = "|"; 1069 if (opts.delimiter != nullptr) 1070 delim = opts.delimiter; 1071 1072 const char *command = arg; 1073 if (command == nullptr) 1074 error (_("Missing COMMAND")); 1075 1076 arg = strstr (arg, delim); 1077 1078 if (arg == nullptr) 1079 error (_("Missing delimiter before SHELL_COMMAND")); 1080 1081 std::string gdb_cmd (command, arg - command); 1082 1083 arg += strlen (delim); /* Skip the delimiter. */ 1084 1085 if (gdb_cmd.empty ()) 1086 gdb_cmd = repeat_previous (); 1087 1088 const char *shell_command = skip_spaces (arg); 1089 if (*shell_command == '\0') 1090 error (_("Missing SHELL_COMMAND")); 1091 1092 FILE *to_shell_command = popen (shell_command, "w"); 1093 1094 if (to_shell_command == nullptr) 1095 error (_("Error launching \"%s\""), shell_command); 1096 1097 try 1098 { 1099 stdio_file pipe_file (to_shell_command); 1100 1101 execute_command_to_ui_file (&pipe_file, gdb_cmd.c_str (), from_tty); 1102 } 1103 catch (...) 1104 { 1105 pclose (to_shell_command); 1106 throw; 1107 } 1108 1109 int exit_status = pclose (to_shell_command); 1110 1111 if (exit_status < 0) 1112 error (_("shell command \"%s\" failed: %s"), shell_command, 1113 safe_strerror (errno)); 1114 exit_status_set_internal_vars (exit_status); 1115 } 1116 1117 /* Completer for the pipe command. */ 1118 1119 static void 1120 pipe_command_completer (struct cmd_list_element *ignore, 1121 completion_tracker &tracker, 1122 const char *text, const char *word_ignored) 1123 { 1124 pipe_cmd_opts opts; 1125 1126 const char *org_text = text; 1127 auto grp = make_pipe_cmd_options_def_group (&opts); 1128 if (gdb::option::complete_options 1129 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp)) 1130 return; 1131 1132 const char *delimiter = "|"; 1133 if (opts.delimiter != nullptr) 1134 delimiter = opts.delimiter; 1135 1136 /* Check if we're past option values already. */ 1137 if (text > org_text && !isspace (text[-1])) 1138 return; 1139 1140 const char *delim = strstr (text, delimiter); 1141 1142 /* If we're still not past the delimiter, complete the gdb 1143 command. */ 1144 if (delim == nullptr || delim == text) 1145 { 1146 complete_nested_command_line (tracker, text); 1147 return; 1148 } 1149 1150 /* We're past the delimiter. What follows is a shell command, which 1151 we don't know how to complete. */ 1152 } 1153 1154 static void 1155 list_command (const char *arg, int from_tty) 1156 { 1157 struct symbol *sym; 1158 const char *arg1; 1159 int no_end = 1; 1160 int dummy_end = 0; 1161 int dummy_beg = 0; 1162 int linenum_beg = 0; 1163 const char *p; 1164 1165 /* Pull in the current default source line if necessary. */ 1166 if (arg == NULL || ((arg[0] == '+' || arg[0] == '-') && arg[1] == '\0')) 1167 { 1168 set_default_source_symtab_and_line (); 1169 symtab_and_line cursal = get_current_source_symtab_and_line (); 1170 1171 /* If this is the first "list" since we've set the current 1172 source line, center the listing around that line. */ 1173 if (get_first_line_listed () == 0) 1174 { 1175 int first; 1176 1177 first = std::max (cursal.line - get_lines_to_list () / 2, 1); 1178 1179 /* A small special case --- if listing backwards, and we 1180 should list only one line, list the preceding line, 1181 instead of the exact line we've just shown after e.g., 1182 stopping for a breakpoint. */ 1183 if (arg != NULL && arg[0] == '-' 1184 && get_lines_to_list () == 1 && first > 1) 1185 first -= 1; 1186 1187 print_source_lines (cursal.symtab, source_lines_range (first), 0); 1188 } 1189 1190 /* "l" or "l +" lists next ten lines. */ 1191 else if (arg == NULL || arg[0] == '+') 1192 print_source_lines (cursal.symtab, 1193 source_lines_range (cursal.line), 0); 1194 1195 /* "l -" lists previous ten lines, the ones before the ten just 1196 listed. */ 1197 else if (arg[0] == '-') 1198 { 1199 if (get_first_line_listed () == 1) 1200 error (_("Already at the start of %s."), 1201 symtab_to_filename_for_display (cursal.symtab)); 1202 source_lines_range range (get_first_line_listed (), 1203 source_lines_range::BACKWARD); 1204 print_source_lines (cursal.symtab, range, 0); 1205 } 1206 1207 return; 1208 } 1209 1210 /* Now if there is only one argument, decode it in SAL 1211 and set NO_END. 1212 If there are two arguments, decode them in SAL and SAL_END 1213 and clear NO_END; however, if one of the arguments is blank, 1214 set DUMMY_BEG or DUMMY_END to record that fact. */ 1215 1216 if (!have_full_symbols () && !have_partial_symbols ()) 1217 error (_("No symbol table is loaded. Use the \"file\" command.")); 1218 1219 std::vector<symtab_and_line> sals; 1220 symtab_and_line sal, sal_end; 1221 1222 arg1 = arg; 1223 if (*arg1 == ',') 1224 dummy_beg = 1; 1225 else 1226 { 1227 event_location_up location = string_to_event_location (&arg1, 1228 current_language); 1229 sals = decode_line_1 (location.get (), DECODE_LINE_LIST_MODE, 1230 NULL, NULL, 0); 1231 filter_sals (sals); 1232 if (sals.empty ()) 1233 { 1234 /* C++ */ 1235 return; 1236 } 1237 1238 sal = sals[0]; 1239 } 1240 1241 /* Record whether the BEG arg is all digits. */ 1242 1243 for (p = arg; p != arg1 && *p >= '0' && *p <= '9'; p++); 1244 linenum_beg = (p == arg1); 1245 1246 /* Save the range of the first argument, in case we need to let the 1247 user know it was ambiguous. */ 1248 const char *beg = arg; 1249 size_t beg_len = arg1 - beg; 1250 1251 while (*arg1 == ' ' || *arg1 == '\t') 1252 arg1++; 1253 if (*arg1 == ',') 1254 { 1255 no_end = 0; 1256 if (sals.size () > 1) 1257 { 1258 ambiguous_line_spec (sals, 1259 _("Specified first line '%.*s' is ambiguous:\n"), 1260 (int) beg_len, beg); 1261 return; 1262 } 1263 arg1++; 1264 while (*arg1 == ' ' || *arg1 == '\t') 1265 arg1++; 1266 if (*arg1 == 0) 1267 dummy_end = 1; 1268 else 1269 { 1270 /* Save the last argument, in case we need to let the user 1271 know it was ambiguous. */ 1272 const char *end_arg = arg1; 1273 1274 event_location_up location 1275 = string_to_event_location (&arg1, current_language); 1276 1277 std::vector<symtab_and_line> sals_end 1278 = (dummy_beg 1279 ? decode_line_1 (location.get (), DECODE_LINE_LIST_MODE, 1280 NULL, NULL, 0) 1281 : decode_line_1 (location.get (), DECODE_LINE_LIST_MODE, 1282 NULL, sal.symtab, sal.line)); 1283 1284 filter_sals (sals_end); 1285 if (sals_end.empty ()) 1286 return; 1287 if (sals_end.size () > 1) 1288 { 1289 ambiguous_line_spec (sals_end, 1290 _("Specified last line '%s' is ambiguous:\n"), 1291 end_arg); 1292 return; 1293 } 1294 sal_end = sals_end[0]; 1295 } 1296 } 1297 1298 if (*arg1) 1299 error (_("Junk at end of line specification.")); 1300 1301 if (!no_end && !dummy_beg && !dummy_end 1302 && sal.symtab != sal_end.symtab) 1303 error (_("Specified first and last lines are in different files.")); 1304 if (dummy_beg && dummy_end) 1305 error (_("Two empty args do not say what lines to list.")); 1306 1307 /* If line was specified by address, 1308 first print exactly which line, and which file. 1309 1310 In this case, sal.symtab == 0 means address is outside of all 1311 known source files, not that user failed to give a filename. */ 1312 if (*arg == '*') 1313 { 1314 struct gdbarch *gdbarch; 1315 1316 if (sal.symtab == 0) 1317 error (_("No source file for address %s."), 1318 paddress (get_current_arch (), sal.pc)); 1319 1320 gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch (); 1321 sym = find_pc_function (sal.pc); 1322 if (sym) 1323 printf_filtered ("%s is in %s (%s:%d).\n", 1324 paddress (gdbarch, sal.pc), 1325 sym->print_name (), 1326 symtab_to_filename_for_display (sal.symtab), sal.line); 1327 else 1328 printf_filtered ("%s is at %s:%d.\n", 1329 paddress (gdbarch, sal.pc), 1330 symtab_to_filename_for_display (sal.symtab), sal.line); 1331 } 1332 1333 /* If line was not specified by just a line number, and it does not 1334 imply a symtab, it must be an undebuggable symbol which means no 1335 source code. */ 1336 1337 if (!linenum_beg && sal.symtab == 0) 1338 error (_("No line number known for %s."), arg); 1339 1340 /* If this command is repeated with RET, 1341 turn it into the no-arg variant. */ 1342 1343 if (from_tty) 1344 set_repeat_arguments (""); 1345 1346 if (dummy_beg && sal_end.symtab == 0) 1347 error (_("No default source file yet. Do \"help list\".")); 1348 if (dummy_beg) 1349 { 1350 source_lines_range range (sal_end.line + 1, 1351 source_lines_range::BACKWARD); 1352 print_source_lines (sal_end.symtab, range, 0); 1353 } 1354 else if (sal.symtab == 0) 1355 error (_("No default source file yet. Do \"help list\".")); 1356 else if (no_end) 1357 { 1358 for (int i = 0; i < sals.size (); i++) 1359 { 1360 sal = sals[i]; 1361 int first_line = sal.line - get_lines_to_list () / 2; 1362 if (first_line < 1) 1363 first_line = 1; 1364 if (sals.size () > 1) 1365 print_sal_location (sal); 1366 print_source_lines (sal.symtab, source_lines_range (first_line), 0); 1367 } 1368 } 1369 else if (dummy_end) 1370 print_source_lines (sal.symtab, source_lines_range (sal.line), 0); 1371 else 1372 print_source_lines (sal.symtab, 1373 source_lines_range (sal.line, (sal_end.line + 1)), 1374 0); 1375 } 1376 1377 /* Subroutine of disassemble_command to simplify it. 1378 Perform the disassembly. 1379 NAME is the name of the function if known, or NULL. 1380 [LOW,HIGH) are the range of addresses to disassemble. 1381 BLOCK is the block to disassemble; it needs to be provided 1382 when non-contiguous blocks are disassembled; otherwise 1383 it can be NULL. 1384 MIXED is non-zero to print source with the assembler. */ 1385 1386 static void 1387 print_disassembly (struct gdbarch *gdbarch, const char *name, 1388 CORE_ADDR low, CORE_ADDR high, 1389 const struct block *block, 1390 gdb_disassembly_flags flags) 1391 { 1392 #if defined(TUI) 1393 if (tui_is_window_visible (DISASSEM_WIN)) 1394 tui_show_assembly (gdbarch, low); 1395 else 1396 #endif 1397 { 1398 printf_filtered ("Dump of assembler code "); 1399 if (name != NULL) 1400 printf_filtered ("for function %s:\n", name); 1401 if (block == nullptr || BLOCK_CONTIGUOUS_P (block)) 1402 { 1403 if (name == NULL) 1404 printf_filtered ("from %s to %s:\n", 1405 paddress (gdbarch, low), paddress (gdbarch, high)); 1406 1407 /* Dump the specified range. */ 1408 gdb_disassembly (gdbarch, current_uiout, flags, -1, low, high); 1409 } 1410 else 1411 { 1412 for (int i = 0; i < BLOCK_NRANGES (block); i++) 1413 { 1414 CORE_ADDR range_low = BLOCK_RANGE_START (block, i); 1415 CORE_ADDR range_high = BLOCK_RANGE_END (block, i); 1416 printf_filtered (_("Address range %s to %s:\n"), 1417 paddress (gdbarch, range_low), 1418 paddress (gdbarch, range_high)); 1419 gdb_disassembly (gdbarch, current_uiout, flags, -1, 1420 range_low, range_high); 1421 } 1422 } 1423 printf_filtered ("End of assembler dump.\n"); 1424 } 1425 } 1426 1427 /* Subroutine of disassemble_command to simplify it. 1428 Print a disassembly of the current function according to FLAGS. */ 1429 1430 static void 1431 disassemble_current_function (gdb_disassembly_flags flags) 1432 { 1433 struct frame_info *frame; 1434 struct gdbarch *gdbarch; 1435 CORE_ADDR low, high, pc; 1436 const char *name; 1437 const struct block *block; 1438 1439 frame = get_selected_frame (_("No frame selected.")); 1440 gdbarch = get_frame_arch (frame); 1441 pc = get_frame_address_in_block (frame); 1442 if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0) 1443 error (_("No function contains program counter for selected frame.")); 1444 #if defined(TUI) 1445 /* NOTE: cagney/2003-02-13 The `tui_active' was previously 1446 `tui_version'. */ 1447 if (tui_active) 1448 /* FIXME: cagney/2004-02-07: This should be an observer. */ 1449 low = tui_get_low_disassembly_address (gdbarch, low, pc); 1450 #endif 1451 low += gdbarch_deprecated_function_start_offset (gdbarch); 1452 1453 print_disassembly (gdbarch, name, low, high, block, flags); 1454 } 1455 1456 /* Dump a specified section of assembly code. 1457 1458 Usage: 1459 disassemble [/mrs] 1460 - dump the assembly code for the function of the current pc 1461 disassemble [/mrs] addr 1462 - dump the assembly code for the function at ADDR 1463 disassemble [/mrs] low,high 1464 disassemble [/mrs] low,+length 1465 - dump the assembly code in the range [LOW,HIGH), or [LOW,LOW+length) 1466 1467 A /m modifier will include source code with the assembly in a 1468 "source centric" view. This view lists only the file of the first insn, 1469 even if other source files are involved (e.g., inlined functions), and 1470 the output is in source order, even with optimized code. This view is 1471 considered deprecated as it hasn't been useful in practice. 1472 1473 A /r modifier will include raw instructions in hex with the assembly. 1474 1475 A /s modifier will include source code with the assembly, like /m, with 1476 two important differences: 1477 1) The output is still in pc address order. 1478 2) File names and contents for all relevant source files are displayed. */ 1479 1480 static void 1481 disassemble_command (const char *arg, int from_tty) 1482 { 1483 struct gdbarch *gdbarch = get_current_arch (); 1484 CORE_ADDR low, high; 1485 const general_symbol_info *symbol = nullptr; 1486 const char *name; 1487 CORE_ADDR pc; 1488 gdb_disassembly_flags flags; 1489 const char *p; 1490 const struct block *block = nullptr; 1491 1492 p = arg; 1493 name = NULL; 1494 flags = 0; 1495 1496 if (p && *p == '/') 1497 { 1498 ++p; 1499 1500 if (*p == '\0') 1501 error (_("Missing modifier.")); 1502 1503 while (*p && ! isspace (*p)) 1504 { 1505 switch (*p++) 1506 { 1507 case 'm': 1508 flags |= DISASSEMBLY_SOURCE_DEPRECATED; 1509 break; 1510 case 'r': 1511 flags |= DISASSEMBLY_RAW_INSN; 1512 break; 1513 case 's': 1514 flags |= DISASSEMBLY_SOURCE; 1515 break; 1516 default: 1517 error (_("Invalid disassembly modifier.")); 1518 } 1519 } 1520 1521 p = skip_spaces (p); 1522 } 1523 1524 if ((flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE)) 1525 == (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE)) 1526 error (_("Cannot specify both /m and /s.")); 1527 1528 if (! p || ! *p) 1529 { 1530 flags |= DISASSEMBLY_OMIT_FNAME; 1531 disassemble_current_function (flags); 1532 return; 1533 } 1534 1535 pc = value_as_address (parse_to_comma_and_eval (&p)); 1536 if (p[0] == ',') 1537 ++p; 1538 if (p[0] == '\0') 1539 { 1540 /* One argument. */ 1541 if (!find_pc_partial_function_sym (pc, &symbol, &low, &high, &block)) 1542 error (_("No function contains specified address.")); 1543 1544 if (asm_demangle) 1545 name = symbol->print_name (); 1546 else 1547 name = symbol->linkage_name (); 1548 1549 #if defined(TUI) 1550 /* NOTE: cagney/2003-02-13 The `tui_active' was previously 1551 `tui_version'. */ 1552 if (tui_active) 1553 /* FIXME: cagney/2004-02-07: This should be an observer. */ 1554 low = tui_get_low_disassembly_address (gdbarch, low, pc); 1555 #endif 1556 low += gdbarch_deprecated_function_start_offset (gdbarch); 1557 flags |= DISASSEMBLY_OMIT_FNAME; 1558 } 1559 else 1560 { 1561 /* Two arguments. */ 1562 int incl_flag = 0; 1563 low = pc; 1564 p = skip_spaces (p); 1565 if (p[0] == '+') 1566 { 1567 ++p; 1568 incl_flag = 1; 1569 } 1570 high = parse_and_eval_address (p); 1571 if (incl_flag) 1572 high += low; 1573 } 1574 1575 print_disassembly (gdbarch, name, low, high, block, flags); 1576 } 1577 1578 static void 1579 make_command (const char *arg, int from_tty) 1580 { 1581 if (arg == 0) 1582 shell_escape ("make", from_tty); 1583 else 1584 { 1585 std::string cmd = std::string ("make ") + arg; 1586 1587 shell_escape (cmd.c_str (), from_tty); 1588 } 1589 } 1590 1591 static void 1592 show_user (const char *args, int from_tty) 1593 { 1594 struct cmd_list_element *c; 1595 1596 if (args) 1597 { 1598 const char *comname = args; 1599 1600 c = lookup_cmd (&comname, cmdlist, "", NULL, 0, 1); 1601 if (!cli_user_command_p (c)) 1602 error (_("Not a user command.")); 1603 show_user_1 (c, "", args, gdb_stdout); 1604 } 1605 else 1606 { 1607 for (c = cmdlist; c; c = c->next) 1608 { 1609 if (cli_user_command_p (c) || c->prefixlist != NULL) 1610 show_user_1 (c, "", c->name, gdb_stdout); 1611 } 1612 } 1613 } 1614 1615 /* Search through names of commands and documentations for a certain 1616 regular expression. */ 1617 1618 static void 1619 apropos_command (const char *arg, int from_tty) 1620 { 1621 bool verbose = arg && check_for_argument (&arg, "-v", 2); 1622 1623 if (arg == NULL || *arg == '\0') 1624 error (_("REGEXP string is empty")); 1625 1626 compiled_regex pattern (arg, REG_ICASE, 1627 _("Error in regular expression")); 1628 1629 apropos_cmd (gdb_stdout, cmdlist, verbose, pattern, ""); 1630 } 1631 1632 /* The options for the "alias" command. */ 1633 1634 struct alias_opts 1635 { 1636 /* For "-a". */ 1637 bool abbrev_flag = false; 1638 }; 1639 1640 static const gdb::option::option_def alias_option_defs[] = { 1641 1642 gdb::option::flag_option_def<alias_opts> { 1643 "a", 1644 [] (alias_opts *opts) { return &opts->abbrev_flag; }, 1645 N_("Specify that ALIAS is an abbreviation of COMMAND.\n\ 1646 Abbreviations are not used in command completion."), 1647 }, 1648 1649 }; 1650 1651 /* Create an option_def_group for the "alias" options, with 1652 A_OPTS as context. */ 1653 1654 static gdb::option::option_def_group 1655 make_alias_options_def_group (alias_opts *a_opts) 1656 { 1657 return {{alias_option_defs}, a_opts}; 1658 } 1659 1660 /* Completer for the "alias_command". */ 1661 1662 static void 1663 alias_command_completer (struct cmd_list_element *ignore, 1664 completion_tracker &tracker, 1665 const char *text, const char *word) 1666 { 1667 const auto grp = make_alias_options_def_group (nullptr); 1668 1669 tracker.set_use_custom_word_point (true); 1670 1671 if (gdb::option::complete_options 1672 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp)) 1673 return; 1674 1675 const char *delim = strchr (text, '='); 1676 1677 /* If we're past the "=" delimiter, complete the 1678 "alias ALIAS = COMMAND [DEFAULT-ARGS...]" as if the user is 1679 typing COMMAND DEFAULT-ARGS... */ 1680 if (delim != text 1681 && delim != nullptr 1682 && isspace (delim[-1]) 1683 && (isspace (delim[1]) || delim[1] == '\0')) 1684 { 1685 std::string new_text = std::string (delim + 1); 1686 1687 tracker.advance_custom_word_point_by (delim + 1 - text); 1688 complete_nested_command_line (tracker, new_text.c_str ()); 1689 return; 1690 } 1691 1692 /* We're not yet past the "=" delimiter. Complete a command, as 1693 the user might type an alias following a prefix command. */ 1694 complete_nested_command_line (tracker, text); 1695 } 1696 1697 /* Subroutine of alias_command to simplify it. 1698 Return the first N elements of ARGV flattened back to a string 1699 with a space separating each element. 1700 ARGV may not be NULL. 1701 This does not take care of quoting elements in case they contain spaces 1702 on purpose. */ 1703 1704 static std::string 1705 argv_to_string (char **argv, int n) 1706 { 1707 int i; 1708 std::string result; 1709 1710 gdb_assert (argv != NULL); 1711 gdb_assert (n >= 0 && n <= countargv (argv)); 1712 1713 for (i = 0; i < n; ++i) 1714 { 1715 if (i > 0) 1716 result += " "; 1717 result += argv[i]; 1718 } 1719 1720 return result; 1721 } 1722 1723 /* Subroutine of alias_command to simplify it. 1724 Verifies that COMMAND can have an alias: 1725 COMMAND must exist. 1726 COMMAND must not have default args. 1727 This last condition is to avoid the following: 1728 alias aaa = backtrace -full 1729 alias bbb = aaa -past-main 1730 as (at least currently), alias default args are not cumulative 1731 and the user would expect bbb to execute 'backtrace -full -past-main' 1732 while it will execute 'backtrace -past-main'. */ 1733 1734 static void 1735 validate_aliased_command (const char *command) 1736 { 1737 struct cmd_list_element *c; 1738 std::string default_args; 1739 1740 c = lookup_cmd_1 (& command, cmdlist, NULL, &default_args, 1); 1741 1742 if (c == NULL || c == (struct cmd_list_element *) -1) 1743 error (_("Invalid command to alias to: %s"), command); 1744 1745 if (!default_args.empty ()) 1746 error (_("Cannot define an alias of an alias that has default args")); 1747 } 1748 1749 /* Called when "alias" was incorrectly used. */ 1750 1751 static void 1752 alias_usage_error (void) 1753 { 1754 error (_("Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]")); 1755 } 1756 1757 /* Make an alias of an existing command. */ 1758 1759 static void 1760 alias_command (const char *args, int from_tty) 1761 { 1762 alias_opts a_opts; 1763 1764 auto grp = make_alias_options_def_group (&a_opts); 1765 gdb::option::process_options 1766 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp); 1767 1768 int i, alias_argc, command_argc; 1769 const char *equals; 1770 const char *alias, *command; 1771 1772 if (args == NULL || strchr (args, '=') == NULL) 1773 alias_usage_error (); 1774 1775 equals = strchr (args, '='); 1776 std::string args2 (args, equals - args); 1777 1778 gdb_argv built_alias_argv (args2.c_str ()); 1779 1780 const char *default_args = equals + 1; 1781 struct cmd_list_element *c_command_prefix; 1782 1783 lookup_cmd_for_default_args (&default_args, &c_command_prefix); 1784 std::string command_argv_str (equals + 1, 1785 default_args == nullptr 1786 ? strlen (equals + 1) 1787 : default_args - equals - 1); 1788 gdb_argv command_argv (command_argv_str.c_str ()); 1789 1790 char **alias_argv = built_alias_argv.get (); 1791 1792 if (alias_argv[0] == NULL || command_argv[0] == NULL 1793 || *alias_argv[0] == '\0' || *command_argv[0] == '\0') 1794 alias_usage_error (); 1795 1796 for (i = 0; alias_argv[i] != NULL; ++i) 1797 { 1798 if (! valid_user_defined_cmd_name_p (alias_argv[i])) 1799 { 1800 if (i == 0) 1801 error (_("Invalid command name: %s"), alias_argv[i]); 1802 else 1803 error (_("Invalid command element name: %s"), alias_argv[i]); 1804 } 1805 } 1806 1807 alias_argc = countargv (alias_argv); 1808 command_argc = command_argv.count (); 1809 1810 /* COMMAND must exist, and cannot have default args. 1811 Reconstruct the command to remove any extraneous spaces, 1812 for better error messages. */ 1813 std::string command_string (argv_to_string (command_argv.get (), 1814 command_argc)); 1815 command = command_string.c_str (); 1816 validate_aliased_command (command); 1817 1818 /* ALIAS must not exist. */ 1819 std::string alias_string (argv_to_string (alias_argv, alias_argc)); 1820 alias = alias_string.c_str (); 1821 { 1822 cmd_list_element *alias_cmd, *prefix_cmd, *cmd; 1823 1824 if (lookup_cmd_composition (alias, &alias_cmd, &prefix_cmd, &cmd)) 1825 { 1826 const char *alias_name = alias_argv[alias_argc-1]; 1827 1828 /* If we found an existing ALIAS_CMD, check that the prefix differ or 1829 the name differ. */ 1830 1831 if (alias_cmd != nullptr 1832 && alias_cmd->prefix == prefix_cmd 1833 && strcmp (alias_name, alias_cmd->name) == 0) 1834 error (_("Alias already exists: %s"), alias); 1835 1836 /* Check ALIAS differs from the found CMD. */ 1837 1838 if (cmd->prefix == prefix_cmd 1839 && strcmp (alias_name, cmd->name) == 0) 1840 error (_("Alias %s is the name of an existing command"), alias); 1841 } 1842 } 1843 1844 1845 struct cmd_list_element *alias_cmd; 1846 1847 /* If ALIAS is one word, it is an alias for the entire COMMAND. 1848 Example: alias spe = set print elements 1849 1850 Otherwise ALIAS and COMMAND must have the same number of words, 1851 and every word except the last must identify the same prefix command; 1852 and the last word of ALIAS is made an alias of the last word of COMMAND. 1853 Example: alias set print elms = set pr elem 1854 Note that unambiguous abbreviations are allowed. */ 1855 1856 if (alias_argc == 1) 1857 { 1858 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */ 1859 alias_cmd = add_com_alias (xstrdup (alias_argv[0]), command, class_alias, 1860 a_opts.abbrev_flag); 1861 } 1862 else 1863 { 1864 const char *alias_prefix, *command_prefix; 1865 struct cmd_list_element *c_alias, *c_command; 1866 1867 if (alias_argc != command_argc) 1868 error (_("Mismatched command length between ALIAS and COMMAND.")); 1869 1870 /* Create copies of ALIAS and COMMAND without the last word, 1871 and use that to verify the leading elements give the same 1872 prefix command. */ 1873 std::string alias_prefix_string (argv_to_string (alias_argv, 1874 alias_argc - 1)); 1875 std::string command_prefix_string (argv_to_string (command_argv.get (), 1876 command_argc - 1)); 1877 alias_prefix = alias_prefix_string.c_str (); 1878 command_prefix = command_prefix_string.c_str (); 1879 1880 c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, NULL, 1); 1881 /* We've already tried to look up COMMAND. */ 1882 gdb_assert (c_command != NULL 1883 && c_command != (struct cmd_list_element *) -1); 1884 gdb_assert (c_command->prefixlist != NULL); 1885 c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, NULL, 1); 1886 if (c_alias != c_command) 1887 error (_("ALIAS and COMMAND prefixes do not match.")); 1888 1889 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */ 1890 alias_cmd = add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]), 1891 command_argv[command_argc - 1], 1892 class_alias, a_opts.abbrev_flag, 1893 c_command->prefixlist); 1894 } 1895 1896 gdb_assert (alias_cmd != nullptr); 1897 gdb_assert (alias_cmd->default_args.empty ()); 1898 if (default_args != nullptr) 1899 { 1900 default_args = skip_spaces (default_args); 1901 1902 alias_cmd->default_args = default_args; 1903 } 1904 } 1905 1906 /* Print the file / line number / symbol name of the location 1907 specified by SAL. */ 1908 1909 static void 1910 print_sal_location (const symtab_and_line &sal) 1911 { 1912 scoped_restore_current_program_space restore_pspace; 1913 set_current_program_space (sal.pspace); 1914 1915 const char *sym_name = NULL; 1916 if (sal.symbol != NULL) 1917 sym_name = sal.symbol->print_name (); 1918 printf_filtered (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"), 1919 symtab_to_filename_for_display (sal.symtab), 1920 sal.line, sym_name != NULL ? sym_name : "???"); 1921 } 1922 1923 /* Print a list of files and line numbers which a user may choose from 1924 in order to list a function which was specified ambiguously (as 1925 with `list classname::overloadedfuncname', for example). The SALS 1926 array provides the filenames and line numbers. FORMAT is a 1927 printf-style format string used to tell the user what was 1928 ambiguous. */ 1929 1930 static void 1931 ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals, 1932 const char *format, ...) 1933 { 1934 va_list ap; 1935 va_start (ap, format); 1936 vprintf_filtered (format, ap); 1937 va_end (ap); 1938 1939 for (const auto &sal : sals) 1940 print_sal_location (sal); 1941 } 1942 1943 /* Comparison function for filter_sals. Returns a qsort-style 1944 result. */ 1945 1946 static int 1947 cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb) 1948 { 1949 const char *dira = SYMTAB_DIRNAME (sala.symtab); 1950 const char *dirb = SYMTAB_DIRNAME (salb.symtab); 1951 int r; 1952 1953 if (dira == NULL) 1954 { 1955 if (dirb != NULL) 1956 return -1; 1957 } 1958 else if (dirb == NULL) 1959 { 1960 if (dira != NULL) 1961 return 1; 1962 } 1963 else 1964 { 1965 r = filename_cmp (dira, dirb); 1966 if (r) 1967 return r; 1968 } 1969 1970 r = filename_cmp (sala.symtab->filename, salb.symtab->filename); 1971 if (r) 1972 return r; 1973 1974 if (sala.line < salb.line) 1975 return -1; 1976 return sala.line == salb.line ? 0 : 1; 1977 } 1978 1979 /* Remove any SALs that do not match the current program space, or 1980 which appear to be "file:line" duplicates. */ 1981 1982 static void 1983 filter_sals (std::vector<symtab_and_line> &sals) 1984 { 1985 /* Remove SALs that do not match. */ 1986 auto from = std::remove_if (sals.begin (), sals.end (), 1987 [&] (const symtab_and_line &sal) 1988 { return (sal.pspace != current_program_space || sal.symtab == NULL); }); 1989 1990 /* Remove dups. */ 1991 std::sort (sals.begin (), from, 1992 [] (const symtab_and_line &sala, const symtab_and_line &salb) 1993 { return cmp_symtabs (sala, salb) < 0; }); 1994 1995 from = std::unique (sals.begin (), from, 1996 [&] (const symtab_and_line &sala, 1997 const symtab_and_line &salb) 1998 { return cmp_symtabs (sala, salb) == 0; }); 1999 2000 sals.erase (from, sals.end ()); 2001 } 2002 2003 void 2004 init_cmd_lists (void) 2005 { 2006 max_user_call_depth = 1024; 2007 } 2008 2009 static void 2010 show_info_verbose (struct ui_file *file, int from_tty, 2011 struct cmd_list_element *c, 2012 const char *value) 2013 { 2014 if (info_verbose) 2015 fprintf_filtered (file, 2016 _("Verbose printing of informational messages is %s.\n"), 2017 value); 2018 else 2019 fprintf_filtered (file, _("Verbosity is %s.\n"), value); 2020 } 2021 2022 static void 2023 show_history_expansion_p (struct ui_file *file, int from_tty, 2024 struct cmd_list_element *c, const char *value) 2025 { 2026 fprintf_filtered (file, _("History expansion on command input is %s.\n"), 2027 value); 2028 } 2029 2030 static void 2031 show_remote_debug (struct ui_file *file, int from_tty, 2032 struct cmd_list_element *c, const char *value) 2033 { 2034 fprintf_filtered (file, _("Debugging of remote protocol is %s.\n"), 2035 value); 2036 } 2037 2038 static void 2039 show_remote_timeout (struct ui_file *file, int from_tty, 2040 struct cmd_list_element *c, const char *value) 2041 { 2042 fprintf_filtered (file, 2043 _("Timeout limit to wait for target to respond is %s.\n"), 2044 value); 2045 } 2046 2047 static void 2048 show_max_user_call_depth (struct ui_file *file, int from_tty, 2049 struct cmd_list_element *c, const char *value) 2050 { 2051 fprintf_filtered (file, 2052 _("The max call depth for user-defined commands is %s.\n"), 2053 value); 2054 } 2055 2056 /* Returns the cmd_list_element in SHOWLIST corresponding to the first 2057 argument of ARGV, which must contain one single value. 2058 Throws an error if no value provided, or value not correct. 2059 FNNAME is used in the error message. */ 2060 2061 static cmd_list_element * 2062 setting_cmd (const char *fnname, struct cmd_list_element *showlist, 2063 int argc, struct value **argv) 2064 { 2065 if (argc == 0) 2066 error (_("You must provide an argument to %s"), fnname); 2067 if (argc != 1) 2068 error (_("You can only provide one argument to %s"), fnname); 2069 2070 struct type *type0 = check_typedef (value_type (argv[0])); 2071 2072 if (type0->code () != TYPE_CODE_ARRAY 2073 && type0->code () != TYPE_CODE_STRING) 2074 error (_("First argument of %s must be a string."), fnname); 2075 2076 const char *a0 = (const char *) value_contents (argv[0]); 2077 cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", NULL, -1, 0); 2078 2079 if (cmd == nullptr || cmd->type != show_cmd) 2080 error (_("First argument of %s must be a " 2081 "valid setting of the 'show' command."), fnname); 2082 2083 return cmd; 2084 } 2085 2086 /* Builds a value from the show CMD. */ 2087 2088 static struct value * 2089 value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch) 2090 { 2091 switch (cmd->var_type) 2092 { 2093 case var_integer: 2094 if (*(int *) cmd->var == INT_MAX) 2095 return value_from_longest (builtin_type (gdbarch)->builtin_int, 2096 0); 2097 else 2098 return value_from_longest (builtin_type (gdbarch)->builtin_int, 2099 *(int *) cmd->var); 2100 case var_zinteger: 2101 return value_from_longest (builtin_type (gdbarch)->builtin_int, 2102 *(int *) cmd->var); 2103 case var_boolean: 2104 return value_from_longest (builtin_type (gdbarch)->builtin_int, 2105 *(bool *) cmd->var ? 1 : 0); 2106 case var_zuinteger_unlimited: 2107 return value_from_longest (builtin_type (gdbarch)->builtin_int, 2108 *(int *) cmd->var); 2109 case var_auto_boolean: 2110 { 2111 int val; 2112 2113 switch (*(enum auto_boolean*) cmd->var) 2114 { 2115 case AUTO_BOOLEAN_TRUE: 2116 val = 1; 2117 break; 2118 case AUTO_BOOLEAN_FALSE: 2119 val = 0; 2120 break; 2121 case AUTO_BOOLEAN_AUTO: 2122 val = -1; 2123 break; 2124 default: 2125 gdb_assert_not_reached ("invalid var_auto_boolean"); 2126 } 2127 return value_from_longest (builtin_type (gdbarch)->builtin_int, 2128 val); 2129 } 2130 case var_uinteger: 2131 if (*(unsigned int *) cmd->var == UINT_MAX) 2132 return value_from_ulongest 2133 (builtin_type (gdbarch)->builtin_unsigned_int, 0); 2134 else 2135 return value_from_ulongest 2136 (builtin_type (gdbarch)->builtin_unsigned_int, 2137 *(unsigned int *) cmd->var); 2138 case var_zuinteger: 2139 return value_from_ulongest (builtin_type (gdbarch)->builtin_unsigned_int, 2140 *(unsigned int *) cmd->var); 2141 case var_string: 2142 case var_string_noescape: 2143 case var_optional_filename: 2144 case var_filename: 2145 case var_enum: 2146 if (*(char **) cmd->var) 2147 return value_cstring (*(char **) cmd->var, strlen (*(char **) cmd->var), 2148 builtin_type (gdbarch)->builtin_char); 2149 else 2150 return value_cstring ("", 1, 2151 builtin_type (gdbarch)->builtin_char); 2152 default: 2153 gdb_assert_not_reached ("bad var_type"); 2154 } 2155 } 2156 2157 /* Implementation of the convenience function $_gdb_setting. */ 2158 2159 static struct value * 2160 gdb_setting_internal_fn (struct gdbarch *gdbarch, 2161 const struct language_defn *language, 2162 void *cookie, int argc, struct value **argv) 2163 { 2164 return value_from_setting (setting_cmd ("$_gdb_setting", showlist, 2165 argc, argv), 2166 gdbarch); 2167 } 2168 2169 /* Implementation of the convenience function $_gdb_maint_setting. */ 2170 2171 static struct value * 2172 gdb_maint_setting_internal_fn (struct gdbarch *gdbarch, 2173 const struct language_defn *language, 2174 void *cookie, int argc, struct value **argv) 2175 { 2176 return value_from_setting (setting_cmd ("$_gdb_maint_setting", 2177 maintenance_show_cmdlist, 2178 argc, argv), 2179 gdbarch); 2180 } 2181 2182 /* Builds a string value from the show CMD. */ 2183 2184 static struct value * 2185 str_value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch) 2186 { 2187 switch (cmd->var_type) 2188 { 2189 case var_integer: 2190 case var_zinteger: 2191 case var_boolean: 2192 case var_zuinteger_unlimited: 2193 case var_auto_boolean: 2194 case var_uinteger: 2195 case var_zuinteger: 2196 { 2197 std::string cmd_val = get_setshow_command_value_string (cmd); 2198 2199 return value_cstring (cmd_val.c_str (), cmd_val.size (), 2200 builtin_type (gdbarch)->builtin_char); 2201 } 2202 2203 case var_string: 2204 case var_string_noescape: 2205 case var_optional_filename: 2206 case var_filename: 2207 case var_enum: 2208 /* For these cases, we do not use get_setshow_command_value_string, 2209 as this function handle some characters specially, e.g. by 2210 escaping quotes. So, we directly use the cmd->var string value, 2211 similarly to the value_from_setting code for these cases. */ 2212 if (*(char **) cmd->var) 2213 return value_cstring (*(char **) cmd->var, strlen (*(char **) cmd->var), 2214 builtin_type (gdbarch)->builtin_char); 2215 else 2216 return value_cstring ("", 1, 2217 builtin_type (gdbarch)->builtin_char); 2218 2219 default: 2220 gdb_assert_not_reached ("bad var_type"); 2221 } 2222 } 2223 2224 /* Implementation of the convenience function $_gdb_setting_str. */ 2225 2226 static struct value * 2227 gdb_setting_str_internal_fn (struct gdbarch *gdbarch, 2228 const struct language_defn *language, 2229 void *cookie, int argc, struct value **argv) 2230 { 2231 return str_value_from_setting (setting_cmd ("$_gdb_setting_str", 2232 showlist, argc, argv), 2233 gdbarch); 2234 } 2235 2236 2237 /* Implementation of the convenience function $_gdb_maint_setting_str. */ 2238 2239 static struct value * 2240 gdb_maint_setting_str_internal_fn (struct gdbarch *gdbarch, 2241 const struct language_defn *language, 2242 void *cookie, int argc, struct value **argv) 2243 { 2244 return str_value_from_setting (setting_cmd ("$_gdb_maint_setting_str", 2245 maintenance_show_cmdlist, 2246 argc, argv), 2247 gdbarch); 2248 } 2249 2250 void _initialize_cli_cmds (); 2251 void 2252 _initialize_cli_cmds () 2253 { 2254 struct cmd_list_element *c; 2255 2256 /* Define the classes of commands. 2257 They will appear in the help list in alphabetical order. */ 2258 2259 add_cmd ("internals", class_maintenance, _("\ 2260 Maintenance commands.\n\ 2261 Some gdb commands are provided just for use by gdb maintainers.\n\ 2262 These commands are subject to frequent change, and may not be as\n\ 2263 well documented as user commands."), 2264 &cmdlist); 2265 add_cmd ("obscure", class_obscure, _("Obscure features."), &cmdlist); 2266 add_cmd ("aliases", class_alias, 2267 _("User-defined aliases of other commands."), &cmdlist); 2268 add_cmd ("user-defined", class_user, _("\ 2269 User-defined commands.\n\ 2270 The commands in this class are those defined by the user.\n\ 2271 Use the \"define\" command to define a command."), &cmdlist); 2272 add_cmd ("support", class_support, _("Support facilities."), &cmdlist); 2273 if (!dbx_commands) 2274 add_cmd ("status", class_info, _("Status inquiries."), &cmdlist); 2275 add_cmd ("files", class_files, _("Specifying and examining files."), 2276 &cmdlist); 2277 add_cmd ("breakpoints", class_breakpoint, 2278 _("Making program stop at certain points."), &cmdlist); 2279 add_cmd ("data", class_vars, _("Examining data."), &cmdlist); 2280 add_cmd ("stack", class_stack, _("\ 2281 Examining the stack.\n\ 2282 The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\ 2283 counting from zero for the innermost (currently executing) frame.\n\n\ 2284 At any time gdb identifies one frame as the \"selected\" frame.\n\ 2285 Variable lookups are done with respect to the selected frame.\n\ 2286 When the program being debugged stops, gdb selects the innermost frame.\n\ 2287 The commands below can be used to select other frames by number or address."), 2288 &cmdlist); 2289 #ifdef TUI 2290 add_cmd ("text-user-interface", class_tui, 2291 _("TUI is the GDB text based interface.\n\ 2292 In TUI mode, GDB can display several text windows showing\n\ 2293 the source file, the processor registers, the program disassembly, ..."), &cmdlist); 2294 #endif 2295 add_cmd ("running", class_run, _("Running the program."), &cmdlist); 2296 2297 /* Define general commands. */ 2298 2299 add_com ("pwd", class_files, pwd_command, _("\ 2300 Print working directory.\n\ 2301 This is used for your program as well.")); 2302 2303 c = add_cmd ("cd", class_files, cd_command, _("\ 2304 Set working directory to DIR for debugger.\n\ 2305 The debugger's current working directory specifies where scripts and other\n\ 2306 files that can be loaded by GDB are located.\n\ 2307 In order to change the inferior's current working directory, the recommended\n\ 2308 way is to use the \"set cwd\" command."), &cmdlist); 2309 set_cmd_completer (c, filename_completer); 2310 2311 add_com ("echo", class_support, echo_command, _("\ 2312 Print a constant string. Give string as argument.\n\ 2313 C escape sequences may be used in the argument.\n\ 2314 No newline is added at the end of the argument;\n\ 2315 use \"\\n\" if you want a newline to be printed.\n\ 2316 Since leading and trailing whitespace are ignored in command arguments,\n\ 2317 if you want to print some you must use \"\\\" before leading whitespace\n\ 2318 to be printed or after trailing whitespace.")); 2319 2320 add_setshow_enum_cmd ("script-extension", class_support, 2321 script_ext_enums, &script_ext_mode, _("\ 2322 Set mode for script filename extension recognition."), _("\ 2323 Show mode for script filename extension recognition."), _("\ 2324 off == no filename extension recognition (all sourced files are GDB scripts)\n\ 2325 soft == evaluate script according to filename extension, fallback to GDB script" 2326 "\n\ 2327 strict == evaluate script according to filename extension, error if not supported" 2328 ), 2329 NULL, 2330 show_script_ext_mode, 2331 &setlist, &showlist); 2332 2333 add_com ("quit", class_support, quit_command, _("\ 2334 Exit gdb.\n\ 2335 Usage: quit [EXPR]\n\ 2336 The optional expression EXPR, if present, is evaluated and the result\n\ 2337 used as GDB's exit code. The default is zero.")); 2338 c = add_com ("help", class_support, help_command, 2339 _("Print list of commands.")); 2340 set_cmd_completer (c, command_completer); 2341 add_com_alias ("q", "quit", class_support, 1); 2342 add_com_alias ("h", "help", class_support, 1); 2343 2344 add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\ 2345 Set verbosity."), _("\ 2346 Show verbosity."), NULL, 2347 set_verbose, 2348 show_info_verbose, 2349 &setlist, &showlist); 2350 2351 add_basic_prefix_cmd ("history", class_support, _("\ 2352 Generic command for setting command history parameters."), 2353 &sethistlist, "set history ", 0, &setlist); 2354 add_show_prefix_cmd ("history", class_support, _("\ 2355 Generic command for showing command history parameters."), 2356 &showhistlist, "show history ", 0, &showlist); 2357 2358 add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\ 2359 Set history expansion on command input."), _("\ 2360 Show history expansion on command input."), _("\ 2361 Without an argument, history expansion is enabled."), 2362 NULL, 2363 show_history_expansion_p, 2364 &sethistlist, &showhistlist); 2365 2366 add_prefix_cmd ("info", class_info, info_command, _("\ 2367 Generic command for showing things about the program being debugged."), 2368 &infolist, "info ", 0, &cmdlist); 2369 add_com_alias ("i", "info", class_info, 1); 2370 add_com_alias ("inf", "info", class_info, 1); 2371 2372 add_com ("complete", class_obscure, complete_command, 2373 _("List the completions for the rest of the line as a command.")); 2374 2375 c = add_show_prefix_cmd ("show", class_info, _("\ 2376 Generic command for showing things about the debugger."), 2377 &showlist, "show ", 0, &cmdlist); 2378 /* Another way to get at the same thing. */ 2379 add_alias_cmd ("set", c, class_info, 0, &infolist); 2380 2381 c = add_com ("with", class_vars, with_command, _("\ 2382 Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING.\n\ 2383 Usage: with SETTING [VALUE] [-- COMMAND]\n\ 2384 Usage: w SETTING [VALUE] [-- COMMAND]\n\ 2385 With no COMMAND, repeats the last executed command.\n\ 2386 \n\ 2387 SETTING is any setting you can change with the \"set\" subcommands.\n\ 2388 E.g.:\n\ 2389 with language pascal -- print obj\n\ 2390 with print elements unlimited -- print obj\n\ 2391 \n\ 2392 You can change multiple settings using nested with, and use\n\ 2393 abbreviations for commands and/or values. E.g.:\n\ 2394 w la p -- w p el u -- p obj")); 2395 set_cmd_completer_handle_brkchars (c, with_command_completer); 2396 add_com_alias ("w", "with", class_vars, 1); 2397 2398 add_internal_function ("_gdb_setting_str", _("\ 2399 $_gdb_setting_str - returns the value of a GDB setting as a string.\n\ 2400 Usage: $_gdb_setting_str (setting)\n\ 2401 \n\ 2402 auto-boolean values are \"off\", \"on\", \"auto\".\n\ 2403 boolean values are \"off\", \"on\".\n\ 2404 Some integer settings accept an unlimited value, returned\n\ 2405 as \"unlimited\"."), 2406 gdb_setting_str_internal_fn, NULL); 2407 2408 add_internal_function ("_gdb_setting", _("\ 2409 $_gdb_setting - returns the value of a GDB setting.\n\ 2410 Usage: $_gdb_setting (setting)\n\ 2411 auto-boolean values are \"off\", \"on\", \"auto\".\n\ 2412 boolean values are \"off\", \"on\".\n\ 2413 Some integer settings accept an unlimited value, returned\n\ 2414 as 0 or -1 depending on the setting."), 2415 gdb_setting_internal_fn, NULL); 2416 2417 add_internal_function ("_gdb_maint_setting_str", _("\ 2418 $_gdb_maint_setting_str - returns the value of a GDB maintenance setting as a string.\n\ 2419 Usage: $_gdb_maint_setting_str (setting)\n\ 2420 \n\ 2421 auto-boolean values are \"off\", \"on\", \"auto\".\n\ 2422 boolean values are \"off\", \"on\".\n\ 2423 Some integer settings accept an unlimited value, returned\n\ 2424 as \"unlimited\"."), 2425 gdb_maint_setting_str_internal_fn, NULL); 2426 2427 add_internal_function ("_gdb_maint_setting", _("\ 2428 $_gdb_maint_setting - returns the value of a GDB maintenance setting.\n\ 2429 Usage: $_gdb_maint_setting (setting)\n\ 2430 auto-boolean values are \"off\", \"on\", \"auto\".\n\ 2431 boolean values are \"off\", \"on\".\n\ 2432 Some integer settings accept an unlimited value, returned\n\ 2433 as 0 or -1 depending on the setting."), 2434 gdb_maint_setting_internal_fn, NULL); 2435 2436 add_cmd ("commands", no_set_class, show_commands, _("\ 2437 Show the history of commands you typed.\n\ 2438 You can supply a command number to start with, or a `+' to start after\n\ 2439 the previous command number shown."), 2440 &showlist); 2441 2442 add_cmd ("version", no_set_class, show_version, 2443 _("Show what version of GDB this is."), &showlist); 2444 2445 add_cmd ("configuration", no_set_class, show_configuration, 2446 _("Show how GDB was configured at build time."), &showlist); 2447 2448 add_setshow_zinteger_cmd ("remote", no_class, &remote_debug, _("\ 2449 Set debugging of remote protocol."), _("\ 2450 Show debugging of remote protocol."), _("\ 2451 When enabled, each packet sent or received with the remote target\n\ 2452 is displayed."), 2453 NULL, 2454 show_remote_debug, 2455 &setdebuglist, &showdebuglist); 2456 2457 add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class, 2458 &remote_timeout, _("\ 2459 Set timeout limit to wait for target to respond."), _("\ 2460 Show timeout limit to wait for target to respond."), _("\ 2461 This value is used to set the time limit for gdb to wait for a response\n\ 2462 from the target."), 2463 NULL, 2464 show_remote_timeout, 2465 &setlist, &showlist); 2466 2467 add_basic_prefix_cmd ("debug", no_class, 2468 _("Generic command for setting gdb debugging flags."), 2469 &setdebuglist, "set debug ", 0, &setlist); 2470 2471 add_show_prefix_cmd ("debug", no_class, 2472 _("Generic command for showing gdb debugging flags."), 2473 &showdebuglist, "show debug ", 0, &showlist); 2474 2475 c = add_com ("shell", class_support, shell_command, _("\ 2476 Execute the rest of the line as a shell command.\n\ 2477 With no arguments, run an inferior shell.")); 2478 set_cmd_completer (c, filename_completer); 2479 2480 add_com_alias ("!", "shell", class_support, 0); 2481 2482 c = add_com ("edit", class_files, edit_command, _("\ 2483 Edit specified file or function.\n\ 2484 With no argument, edits file containing most recent line listed.\n\ 2485 Editing targets can be specified in these ways:\n\ 2486 FILE:LINENUM, to edit at that line in that file,\n\ 2487 FUNCTION, to edit at the beginning of that function,\n\ 2488 FILE:FUNCTION, to distinguish among like-named static functions.\n\ 2489 *ADDRESS, to edit at the line containing that address.\n\ 2490 Uses EDITOR environment variable contents as editor (or ex as default).")); 2491 2492 c->completer = location_completer; 2493 2494 c = add_com ("pipe", class_support, pipe_command, _("\ 2495 Send the output of a gdb command to a shell command.\n\ 2496 Usage: | [COMMAND] | SHELL_COMMAND\n\ 2497 Usage: | -d DELIM COMMAND DELIM SHELL_COMMAND\n\ 2498 Usage: pipe [COMMAND] | SHELL_COMMAND\n\ 2499 Usage: pipe -d DELIM COMMAND DELIM SHELL_COMMAND\n\ 2500 \n\ 2501 Executes COMMAND and sends its output to SHELL_COMMAND.\n\ 2502 \n\ 2503 The -d option indicates to use the string DELIM to separate COMMAND\n\ 2504 from SHELL_COMMAND, in alternative to |. This is useful in\n\ 2505 case COMMAND contains a | character.\n\ 2506 \n\ 2507 With no COMMAND, repeat the last executed command\n\ 2508 and send its output to SHELL_COMMAND.")); 2509 set_cmd_completer_handle_brkchars (c, pipe_command_completer); 2510 add_com_alias ("|", "pipe", class_support, 0); 2511 2512 add_com ("list", class_files, list_command, _("\ 2513 List specified function or line.\n\ 2514 With no argument, lists ten more lines after or around previous listing.\n\ 2515 \"list -\" lists the ten lines before a previous ten-line listing.\n\ 2516 One argument specifies a line, and ten lines are listed around that line.\n\ 2517 Two arguments with comma between specify starting and ending lines to list.\n\ 2518 Lines can be specified in these ways:\n\ 2519 LINENUM, to list around that line in current file,\n\ 2520 FILE:LINENUM, to list around that line in that file,\n\ 2521 FUNCTION, to list around beginning of that function,\n\ 2522 FILE:FUNCTION, to distinguish among like-named static functions.\n\ 2523 *ADDRESS, to list around the line containing that address.\n\ 2524 With two args, if one is empty, it stands for ten lines away from\n\ 2525 the other arg.\n\ 2526 \n\ 2527 By default, when a single location is given, display ten lines.\n\ 2528 This can be changed using \"set listsize\", and the current value\n\ 2529 can be shown using \"show listsize\".")); 2530 2531 add_com_alias ("l", "list", class_files, 1); 2532 2533 if (dbx_commands) 2534 add_com_alias ("file", "list", class_files, 1); 2535 2536 c = add_com ("disassemble", class_vars, disassemble_command, _("\ 2537 Disassemble a specified section of memory.\n\ 2538 Usage: disassemble[/m|/r|/s] START [, END]\n\ 2539 Default is the function surrounding the pc of the selected frame.\n\ 2540 \n\ 2541 With a /s modifier, source lines are included (if available).\n\ 2542 In this mode, the output is displayed in PC address order, and\n\ 2543 file names and contents for all relevant source files are displayed.\n\ 2544 \n\ 2545 With a /m modifier, source lines are included (if available).\n\ 2546 This view is \"source centric\": the output is in source line order,\n\ 2547 regardless of any optimization that is present. Only the main source file\n\ 2548 is displayed, not those of, e.g., any inlined functions.\n\ 2549 This modifier hasn't proved useful in practice and is deprecated\n\ 2550 in favor of /s.\n\ 2551 \n\ 2552 With a /r modifier, raw instructions in hex are included.\n\ 2553 \n\ 2554 With a single argument, the function surrounding that address is dumped.\n\ 2555 Two arguments (separated by a comma) are taken as a range of memory to dump,\n\ 2556 in the form of \"start,end\", or \"start,+length\".\n\ 2557 \n\ 2558 Note that the address is interpreted as an expression, not as a location\n\ 2559 like in the \"break\" command.\n\ 2560 So, for example, if you want to disassemble function bar in file foo.c\n\ 2561 you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\".")); 2562 set_cmd_completer (c, location_completer); 2563 2564 c = add_com ("make", class_support, make_command, _("\ 2565 Run the ``make'' program using the rest of the line as arguments.")); 2566 set_cmd_completer (c, filename_completer); 2567 add_cmd ("user", no_class, show_user, _("\ 2568 Show definitions of non-python/scheme user defined commands.\n\ 2569 Argument is the name of the user defined command.\n\ 2570 With no argument, show definitions of all user defined commands."), &showlist); 2571 add_com ("apropos", class_support, apropos_command, _("\ 2572 Search for commands matching a REGEXP.\n\ 2573 Usage: apropos [-v] REGEXP\n\ 2574 Flag -v indicates to produce a verbose output, showing full documentation\n\ 2575 of the matching commands.")); 2576 2577 add_setshow_uinteger_cmd ("max-user-call-depth", no_class, 2578 &max_user_call_depth, _("\ 2579 Set the max call depth for non-python/scheme user-defined commands."), _("\ 2580 Show the max call depth for non-python/scheme user-defined commands."), NULL, 2581 NULL, 2582 show_max_user_call_depth, 2583 &setlist, &showlist); 2584 2585 add_setshow_boolean_cmd ("trace-commands", no_class, &trace_commands, _("\ 2586 Set tracing of GDB CLI commands."), _("\ 2587 Show state of GDB CLI command tracing."), _("\ 2588 When 'on', each command is displayed as it is executed."), 2589 NULL, 2590 NULL, 2591 &setlist, &showlist); 2592 2593 const auto alias_opts = make_alias_options_def_group (nullptr); 2594 2595 static std::string alias_help 2596 = gdb::option::build_help (_("\ 2597 Define a new command that is an alias of an existing command.\n\ 2598 Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]\n\ 2599 ALIAS is the name of the alias command to create.\n\ 2600 COMMAND is the command being aliased to.\n\ 2601 \n\ 2602 Options:\n\ 2603 %OPTIONS%\n\ 2604 \n\ 2605 GDB will automatically prepend the provided DEFAULT-ARGS to the list\n\ 2606 of arguments explicitly provided when using ALIAS.\n\ 2607 Use \"help aliases\" to list all user defined aliases and their default args.\n\ 2608 \n\ 2609 Examples:\n\ 2610 Make \"spe\" an alias of \"set print elements\":\n\ 2611 alias spe set print elements\n\ 2612 Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\ 2613 alias -a set print elms set print elements\n\ 2614 Make \"btf\" an alias of \"backtrace -full -past-entry -past-main\" :\n\ 2615 alias btf = backtrace -full -past-entry -past-main\n\ 2616 Make \"wLapPeu\" an alias of 2 nested \"with\":\n\ 2617 alias wLapPeu = with language pascal -- with print elements unlimited --"), 2618 alias_opts); 2619 2620 c = add_com ("alias", class_support, alias_command, 2621 alias_help.c_str ()); 2622 2623 set_cmd_completer_handle_brkchars (c, alias_command_completer); 2624 2625 const char *source_help_text = xstrprintf (_("\ 2626 Read commands from a file named FILE.\n\ 2627 \n\ 2628 Usage: source [-s] [-v] FILE\n\ 2629 -s: search for the script in the source search path,\n\ 2630 even if FILE contains directories.\n\ 2631 -v: each command in FILE is echoed as it is executed.\n\ 2632 \n\ 2633 Note that the file \"%s\" is read automatically in this way\n\ 2634 when GDB is started."), GDBINIT); 2635 c = add_cmd ("source", class_support, source_command, 2636 source_help_text, &cmdlist); 2637 set_cmd_completer (c, filename_completer); 2638 } 2639