Remove "cmd_type" function
[deliverable/binutils-gdb.git] / gdb / cli / cli-cmds.c
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 \f
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 \f
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 \f
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 (&current_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 \f
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, &quote_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 \f
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 char *name;
1486 CORE_ADDR pc;
1487 gdb_disassembly_flags flags;
1488 const char *p;
1489 const struct block *block = nullptr;
1490
1491 p = arg;
1492 name = NULL;
1493 flags = 0;
1494
1495 if (p && *p == '/')
1496 {
1497 ++p;
1498
1499 if (*p == '\0')
1500 error (_("Missing modifier."));
1501
1502 while (*p && ! isspace (*p))
1503 {
1504 switch (*p++)
1505 {
1506 case 'm':
1507 flags |= DISASSEMBLY_SOURCE_DEPRECATED;
1508 break;
1509 case 'r':
1510 flags |= DISASSEMBLY_RAW_INSN;
1511 break;
1512 case 's':
1513 flags |= DISASSEMBLY_SOURCE;
1514 break;
1515 default:
1516 error (_("Invalid disassembly modifier."));
1517 }
1518 }
1519
1520 p = skip_spaces (p);
1521 }
1522
1523 if ((flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1524 == (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1525 error (_("Cannot specify both /m and /s."));
1526
1527 if (! p || ! *p)
1528 {
1529 flags |= DISASSEMBLY_OMIT_FNAME;
1530 disassemble_current_function (flags);
1531 return;
1532 }
1533
1534 pc = value_as_address (parse_to_comma_and_eval (&p));
1535 if (p[0] == ',')
1536 ++p;
1537 if (p[0] == '\0')
1538 {
1539 /* One argument. */
1540 if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
1541 error (_("No function contains specified address."));
1542 #if defined(TUI)
1543 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1544 `tui_version'. */
1545 if (tui_active)
1546 /* FIXME: cagney/2004-02-07: This should be an observer. */
1547 low = tui_get_low_disassembly_address (gdbarch, low, pc);
1548 #endif
1549 low += gdbarch_deprecated_function_start_offset (gdbarch);
1550 flags |= DISASSEMBLY_OMIT_FNAME;
1551 }
1552 else
1553 {
1554 /* Two arguments. */
1555 int incl_flag = 0;
1556 low = pc;
1557 p = skip_spaces (p);
1558 if (p[0] == '+')
1559 {
1560 ++p;
1561 incl_flag = 1;
1562 }
1563 high = parse_and_eval_address (p);
1564 if (incl_flag)
1565 high += low;
1566 }
1567
1568 print_disassembly (gdbarch, name, low, high, block, flags);
1569 }
1570
1571 static void
1572 make_command (const char *arg, int from_tty)
1573 {
1574 if (arg == 0)
1575 shell_escape ("make", from_tty);
1576 else
1577 {
1578 std::string cmd = std::string ("make ") + arg;
1579
1580 shell_escape (cmd.c_str (), from_tty);
1581 }
1582 }
1583
1584 static void
1585 show_user (const char *args, int from_tty)
1586 {
1587 struct cmd_list_element *c;
1588
1589 if (args)
1590 {
1591 const char *comname = args;
1592
1593 c = lookup_cmd (&comname, cmdlist, "", NULL, 0, 1);
1594 if (!cli_user_command_p (c))
1595 error (_("Not a user command."));
1596 show_user_1 (c, "", args, gdb_stdout);
1597 }
1598 else
1599 {
1600 for (c = cmdlist; c; c = c->next)
1601 {
1602 if (cli_user_command_p (c) || c->prefixlist != NULL)
1603 show_user_1 (c, "", c->name, gdb_stdout);
1604 }
1605 }
1606 }
1607
1608 /* Search through names of commands and documentations for a certain
1609 regular expression. */
1610
1611 static void
1612 apropos_command (const char *arg, int from_tty)
1613 {
1614 bool verbose = arg && check_for_argument (&arg, "-v", 2);
1615
1616 if (arg == NULL || *arg == '\0')
1617 error (_("REGEXP string is empty"));
1618
1619 compiled_regex pattern (arg, REG_ICASE,
1620 _("Error in regular expression"));
1621
1622 apropos_cmd (gdb_stdout, cmdlist, verbose, pattern, "");
1623 }
1624
1625 /* The options for the "alias" command. */
1626
1627 struct alias_opts
1628 {
1629 /* For "-a". */
1630 bool abbrev_flag = false;
1631 };
1632
1633 static const gdb::option::option_def alias_option_defs[] = {
1634
1635 gdb::option::flag_option_def<alias_opts> {
1636 "a",
1637 [] (alias_opts *opts) { return &opts->abbrev_flag; },
1638 N_("Specify that ALIAS is an abbreviation of COMMAND.\n\
1639 Abbreviations are not used in command completion."),
1640 },
1641
1642 };
1643
1644 /* Create an option_def_group for the "alias" options, with
1645 A_OPTS as context. */
1646
1647 static gdb::option::option_def_group
1648 make_alias_options_def_group (alias_opts *a_opts)
1649 {
1650 return {{alias_option_defs}, a_opts};
1651 }
1652
1653 /* Completer for the "alias_command". */
1654
1655 static void
1656 alias_command_completer (struct cmd_list_element *ignore,
1657 completion_tracker &tracker,
1658 const char *text, const char *word)
1659 {
1660 const auto grp = make_alias_options_def_group (nullptr);
1661
1662 tracker.set_use_custom_word_point (true);
1663
1664 if (gdb::option::complete_options
1665 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp))
1666 return;
1667
1668 const char *delim = strchr (text, '=');
1669
1670 /* If we're past the "=" delimiter, complete the
1671 "alias ALIAS = COMMAND [DEFAULT-ARGS...]" as if the user is
1672 typing COMMAND DEFAULT-ARGS... */
1673 if (delim != text
1674 && delim != nullptr
1675 && isspace (delim[-1])
1676 && (isspace (delim[1]) || delim[1] == '\0'))
1677 {
1678 std::string new_text = std::string (delim + 1);
1679
1680 tracker.advance_custom_word_point_by (delim + 1 - text);
1681 complete_nested_command_line (tracker, new_text.c_str ());
1682 return;
1683 }
1684
1685 /* We're not yet past the "=" delimiter. Complete a command, as
1686 the user might type an alias following a prefix command. */
1687 complete_nested_command_line (tracker, text);
1688 }
1689
1690 /* Subroutine of alias_command to simplify it.
1691 Return the first N elements of ARGV flattened back to a string
1692 with a space separating each element.
1693 ARGV may not be NULL.
1694 This does not take care of quoting elements in case they contain spaces
1695 on purpose. */
1696
1697 static std::string
1698 argv_to_string (char **argv, int n)
1699 {
1700 int i;
1701 std::string result;
1702
1703 gdb_assert (argv != NULL);
1704 gdb_assert (n >= 0 && n <= countargv (argv));
1705
1706 for (i = 0; i < n; ++i)
1707 {
1708 if (i > 0)
1709 result += " ";
1710 result += argv[i];
1711 }
1712
1713 return result;
1714 }
1715
1716 /* Subroutine of alias_command to simplify it.
1717 Verifies that COMMAND can have an alias:
1718 COMMAND must exist.
1719 COMMAND must not have default args.
1720 This last condition is to avoid the following:
1721 alias aaa = backtrace -full
1722 alias bbb = aaa -past-main
1723 as (at least currently), alias default args are not cumulative
1724 and the user would expect bbb to execute 'backtrace -full -past-main'
1725 while it will execute 'backtrace -past-main'. */
1726
1727 static void
1728 validate_aliased_command (const char *command)
1729 {
1730 struct cmd_list_element *c;
1731 std::string default_args;
1732
1733 c = lookup_cmd_1 (& command, cmdlist, NULL, &default_args, 1);
1734
1735 if (c == NULL || c == (struct cmd_list_element *) -1)
1736 error (_("Invalid command to alias to: %s"), command);
1737
1738 if (!default_args.empty ())
1739 error (_("Cannot define an alias of an alias that has default args"));
1740 }
1741
1742 /* Called when "alias" was incorrectly used. */
1743
1744 static void
1745 alias_usage_error (void)
1746 {
1747 error (_("Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]"));
1748 }
1749
1750 /* Make an alias of an existing command. */
1751
1752 static void
1753 alias_command (const char *args, int from_tty)
1754 {
1755 alias_opts a_opts;
1756
1757 auto grp = make_alias_options_def_group (&a_opts);
1758 gdb::option::process_options
1759 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp);
1760
1761 int i, alias_argc, command_argc;
1762 const char *equals;
1763 const char *alias, *command;
1764
1765 if (args == NULL || strchr (args, '=') == NULL)
1766 alias_usage_error ();
1767
1768 equals = strchr (args, '=');
1769 std::string args2 (args, equals - args);
1770
1771 gdb_argv built_alias_argv (args2.c_str ());
1772
1773 const char *default_args = equals + 1;
1774 struct cmd_list_element *c_command_prefix;
1775
1776 lookup_cmd_for_default_args (&default_args, &c_command_prefix);
1777 std::string command_argv_str (equals + 1,
1778 default_args == nullptr
1779 ? strlen (equals + 1)
1780 : default_args - equals - 1);
1781 gdb_argv command_argv (command_argv_str.c_str ());
1782
1783 char **alias_argv = built_alias_argv.get ();
1784
1785 if (alias_argv[0] == NULL || command_argv[0] == NULL
1786 || *alias_argv[0] == '\0' || *command_argv[0] == '\0')
1787 alias_usage_error ();
1788
1789 for (i = 0; alias_argv[i] != NULL; ++i)
1790 {
1791 if (! valid_user_defined_cmd_name_p (alias_argv[i]))
1792 {
1793 if (i == 0)
1794 error (_("Invalid command name: %s"), alias_argv[i]);
1795 else
1796 error (_("Invalid command element name: %s"), alias_argv[i]);
1797 }
1798 }
1799
1800 alias_argc = countargv (alias_argv);
1801 command_argc = command_argv.count ();
1802
1803 /* COMMAND must exist, and cannot have default args.
1804 Reconstruct the command to remove any extraneous spaces,
1805 for better error messages. */
1806 std::string command_string (argv_to_string (command_argv.get (),
1807 command_argc));
1808 command = command_string.c_str ();
1809 validate_aliased_command (command);
1810
1811 /* ALIAS must not exist. */
1812 std::string alias_string (argv_to_string (alias_argv, alias_argc));
1813 alias = alias_string.c_str ();
1814 {
1815 cmd_list_element *alias_cmd, *prefix_cmd, *cmd;
1816
1817 if (lookup_cmd_composition (alias, &alias_cmd, &prefix_cmd, &cmd))
1818 {
1819 const char *alias_name = alias_argv[alias_argc-1];
1820
1821 /* If we found an existing ALIAS_CMD, check that the prefix differ or
1822 the name differ. */
1823
1824 if (alias_cmd != nullptr
1825 && alias_cmd->prefix == prefix_cmd
1826 && strcmp (alias_name, alias_cmd->name) == 0)
1827 error (_("Alias already exists: %s"), alias);
1828
1829 /* Check ALIAS differs from the found CMD. */
1830
1831 if (cmd->prefix == prefix_cmd
1832 && strcmp (alias_name, cmd->name) == 0)
1833 error (_("Alias %s is the name of an existing command"), alias);
1834 }
1835 }
1836
1837
1838 struct cmd_list_element *alias_cmd;
1839
1840 /* If ALIAS is one word, it is an alias for the entire COMMAND.
1841 Example: alias spe = set print elements
1842
1843 Otherwise ALIAS and COMMAND must have the same number of words,
1844 and every word except the last must identify the same prefix command;
1845 and the last word of ALIAS is made an alias of the last word of COMMAND.
1846 Example: alias set print elms = set pr elem
1847 Note that unambiguous abbreviations are allowed. */
1848
1849 if (alias_argc == 1)
1850 {
1851 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
1852 alias_cmd = add_com_alias (xstrdup (alias_argv[0]), command, class_alias,
1853 a_opts.abbrev_flag);
1854 }
1855 else
1856 {
1857 const char *alias_prefix, *command_prefix;
1858 struct cmd_list_element *c_alias, *c_command;
1859
1860 if (alias_argc != command_argc)
1861 error (_("Mismatched command length between ALIAS and COMMAND."));
1862
1863 /* Create copies of ALIAS and COMMAND without the last word,
1864 and use that to verify the leading elements give the same
1865 prefix command. */
1866 std::string alias_prefix_string (argv_to_string (alias_argv,
1867 alias_argc - 1));
1868 std::string command_prefix_string (argv_to_string (command_argv.get (),
1869 command_argc - 1));
1870 alias_prefix = alias_prefix_string.c_str ();
1871 command_prefix = command_prefix_string.c_str ();
1872
1873 c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, NULL, 1);
1874 /* We've already tried to look up COMMAND. */
1875 gdb_assert (c_command != NULL
1876 && c_command != (struct cmd_list_element *) -1);
1877 gdb_assert (c_command->prefixlist != NULL);
1878 c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, NULL, 1);
1879 if (c_alias != c_command)
1880 error (_("ALIAS and COMMAND prefixes do not match."));
1881
1882 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
1883 alias_cmd = add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]),
1884 command_argv[command_argc - 1],
1885 class_alias, a_opts.abbrev_flag,
1886 c_command->prefixlist);
1887 }
1888
1889 gdb_assert (alias_cmd != nullptr);
1890 gdb_assert (alias_cmd->default_args.empty ());
1891 if (default_args != nullptr)
1892 {
1893 default_args = skip_spaces (default_args);
1894
1895 alias_cmd->default_args = default_args;
1896 }
1897 }
1898 \f
1899 /* Print the file / line number / symbol name of the location
1900 specified by SAL. */
1901
1902 static void
1903 print_sal_location (const symtab_and_line &sal)
1904 {
1905 scoped_restore_current_program_space restore_pspace;
1906 set_current_program_space (sal.pspace);
1907
1908 const char *sym_name = NULL;
1909 if (sal.symbol != NULL)
1910 sym_name = sal.symbol->print_name ();
1911 printf_filtered (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"),
1912 symtab_to_filename_for_display (sal.symtab),
1913 sal.line, sym_name != NULL ? sym_name : "???");
1914 }
1915
1916 /* Print a list of files and line numbers which a user may choose from
1917 in order to list a function which was specified ambiguously (as
1918 with `list classname::overloadedfuncname', for example). The SALS
1919 array provides the filenames and line numbers. FORMAT is a
1920 printf-style format string used to tell the user what was
1921 ambiguous. */
1922
1923 static void
1924 ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
1925 const char *format, ...)
1926 {
1927 va_list ap;
1928 va_start (ap, format);
1929 vprintf_filtered (format, ap);
1930 va_end (ap);
1931
1932 for (const auto &sal : sals)
1933 print_sal_location (sal);
1934 }
1935
1936 /* Comparison function for filter_sals. Returns a qsort-style
1937 result. */
1938
1939 static int
1940 cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb)
1941 {
1942 const char *dira = SYMTAB_DIRNAME (sala.symtab);
1943 const char *dirb = SYMTAB_DIRNAME (salb.symtab);
1944 int r;
1945
1946 if (dira == NULL)
1947 {
1948 if (dirb != NULL)
1949 return -1;
1950 }
1951 else if (dirb == NULL)
1952 {
1953 if (dira != NULL)
1954 return 1;
1955 }
1956 else
1957 {
1958 r = filename_cmp (dira, dirb);
1959 if (r)
1960 return r;
1961 }
1962
1963 r = filename_cmp (sala.symtab->filename, salb.symtab->filename);
1964 if (r)
1965 return r;
1966
1967 if (sala.line < salb.line)
1968 return -1;
1969 return sala.line == salb.line ? 0 : 1;
1970 }
1971
1972 /* Remove any SALs that do not match the current program space, or
1973 which appear to be "file:line" duplicates. */
1974
1975 static void
1976 filter_sals (std::vector<symtab_and_line> &sals)
1977 {
1978 /* Remove SALs that do not match. */
1979 auto from = std::remove_if (sals.begin (), sals.end (),
1980 [&] (const symtab_and_line &sal)
1981 { return (sal.pspace != current_program_space || sal.symtab == NULL); });
1982
1983 /* Remove dups. */
1984 std::sort (sals.begin (), from,
1985 [] (const symtab_and_line &sala, const symtab_and_line &salb)
1986 { return cmp_symtabs (sala, salb) < 0; });
1987
1988 from = std::unique (sals.begin (), from,
1989 [&] (const symtab_and_line &sala,
1990 const symtab_and_line &salb)
1991 { return cmp_symtabs (sala, salb) == 0; });
1992
1993 sals.erase (from, sals.end ());
1994 }
1995
1996 void
1997 init_cmd_lists (void)
1998 {
1999 max_user_call_depth = 1024;
2000 }
2001
2002 static void
2003 show_info_verbose (struct ui_file *file, int from_tty,
2004 struct cmd_list_element *c,
2005 const char *value)
2006 {
2007 if (info_verbose)
2008 fprintf_filtered (file,
2009 _("Verbose printing of informational messages is %s.\n"),
2010 value);
2011 else
2012 fprintf_filtered (file, _("Verbosity is %s.\n"), value);
2013 }
2014
2015 static void
2016 show_history_expansion_p (struct ui_file *file, int from_tty,
2017 struct cmd_list_element *c, const char *value)
2018 {
2019 fprintf_filtered (file, _("History expansion on command input is %s.\n"),
2020 value);
2021 }
2022
2023 static void
2024 show_remote_debug (struct ui_file *file, int from_tty,
2025 struct cmd_list_element *c, const char *value)
2026 {
2027 fprintf_filtered (file, _("Debugging of remote protocol is %s.\n"),
2028 value);
2029 }
2030
2031 static void
2032 show_remote_timeout (struct ui_file *file, int from_tty,
2033 struct cmd_list_element *c, const char *value)
2034 {
2035 fprintf_filtered (file,
2036 _("Timeout limit to wait for target to respond is %s.\n"),
2037 value);
2038 }
2039
2040 static void
2041 show_max_user_call_depth (struct ui_file *file, int from_tty,
2042 struct cmd_list_element *c, const char *value)
2043 {
2044 fprintf_filtered (file,
2045 _("The max call depth for user-defined commands is %s.\n"),
2046 value);
2047 }
2048
2049 /* Returns the cmd_list_element in SHOWLIST corresponding to the first
2050 argument of ARGV, which must contain one single value.
2051 Throws an error if no value provided, or value not correct.
2052 FNNAME is used in the error message. */
2053
2054 static cmd_list_element *
2055 setting_cmd (const char *fnname, struct cmd_list_element *showlist,
2056 int argc, struct value **argv)
2057 {
2058 if (argc == 0)
2059 error (_("You must provide an argument to %s"), fnname);
2060 if (argc != 1)
2061 error (_("You can only provide one argument to %s"), fnname);
2062
2063 struct type *type0 = check_typedef (value_type (argv[0]));
2064
2065 if (type0->code () != TYPE_CODE_ARRAY
2066 && type0->code () != TYPE_CODE_STRING)
2067 error (_("First argument of %s must be a string."), fnname);
2068
2069 const char *a0 = (const char *) value_contents (argv[0]);
2070 cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", NULL, -1, 0);
2071
2072 if (cmd == nullptr || cmd->type != show_cmd)
2073 error (_("First argument of %s must be a "
2074 "valid setting of the 'show' command."), fnname);
2075
2076 return cmd;
2077 }
2078
2079 /* Builds a value from the show CMD. */
2080
2081 static struct value *
2082 value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch)
2083 {
2084 switch (cmd->var_type)
2085 {
2086 case var_integer:
2087 if (*(int *) cmd->var == INT_MAX)
2088 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2089 0);
2090 else
2091 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2092 *(int *) cmd->var);
2093 case var_zinteger:
2094 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2095 *(int *) cmd->var);
2096 case var_boolean:
2097 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2098 *(bool *) cmd->var ? 1 : 0);
2099 case var_zuinteger_unlimited:
2100 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2101 *(int *) cmd->var);
2102 case var_auto_boolean:
2103 {
2104 int val;
2105
2106 switch (*(enum auto_boolean*) cmd->var)
2107 {
2108 case AUTO_BOOLEAN_TRUE:
2109 val = 1;
2110 break;
2111 case AUTO_BOOLEAN_FALSE:
2112 val = 0;
2113 break;
2114 case AUTO_BOOLEAN_AUTO:
2115 val = -1;
2116 break;
2117 default:
2118 gdb_assert_not_reached ("invalid var_auto_boolean");
2119 }
2120 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2121 val);
2122 }
2123 case var_uinteger:
2124 if (*(unsigned int *) cmd->var == UINT_MAX)
2125 return value_from_ulongest
2126 (builtin_type (gdbarch)->builtin_unsigned_int, 0);
2127 else
2128 return value_from_ulongest
2129 (builtin_type (gdbarch)->builtin_unsigned_int,
2130 *(unsigned int *) cmd->var);
2131 case var_zuinteger:
2132 return value_from_ulongest (builtin_type (gdbarch)->builtin_unsigned_int,
2133 *(unsigned int *) cmd->var);
2134 case var_string:
2135 case var_string_noescape:
2136 case var_optional_filename:
2137 case var_filename:
2138 case var_enum:
2139 if (*(char **) cmd->var)
2140 return value_cstring (*(char **) cmd->var, strlen (*(char **) cmd->var),
2141 builtin_type (gdbarch)->builtin_char);
2142 else
2143 return value_cstring ("", 1,
2144 builtin_type (gdbarch)->builtin_char);
2145 default:
2146 gdb_assert_not_reached ("bad var_type");
2147 }
2148 }
2149
2150 /* Implementation of the convenience function $_gdb_setting. */
2151
2152 static struct value *
2153 gdb_setting_internal_fn (struct gdbarch *gdbarch,
2154 const struct language_defn *language,
2155 void *cookie, int argc, struct value **argv)
2156 {
2157 return value_from_setting (setting_cmd ("$_gdb_setting", showlist,
2158 argc, argv),
2159 gdbarch);
2160 }
2161
2162 /* Implementation of the convenience function $_gdb_maint_setting. */
2163
2164 static struct value *
2165 gdb_maint_setting_internal_fn (struct gdbarch *gdbarch,
2166 const struct language_defn *language,
2167 void *cookie, int argc, struct value **argv)
2168 {
2169 return value_from_setting (setting_cmd ("$_gdb_maint_setting",
2170 maintenance_show_cmdlist,
2171 argc, argv),
2172 gdbarch);
2173 }
2174
2175 /* Builds a string value from the show CMD. */
2176
2177 static struct value *
2178 str_value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch)
2179 {
2180 switch (cmd->var_type)
2181 {
2182 case var_integer:
2183 case var_zinteger:
2184 case var_boolean:
2185 case var_zuinteger_unlimited:
2186 case var_auto_boolean:
2187 case var_uinteger:
2188 case var_zuinteger:
2189 {
2190 std::string cmd_val = get_setshow_command_value_string (cmd);
2191
2192 return value_cstring (cmd_val.c_str (), cmd_val.size (),
2193 builtin_type (gdbarch)->builtin_char);
2194 }
2195
2196 case var_string:
2197 case var_string_noescape:
2198 case var_optional_filename:
2199 case var_filename:
2200 case var_enum:
2201 /* For these cases, we do not use get_setshow_command_value_string,
2202 as this function handle some characters specially, e.g. by
2203 escaping quotes. So, we directly use the cmd->var string value,
2204 similarly to the value_from_setting code for these cases. */
2205 if (*(char **) cmd->var)
2206 return value_cstring (*(char **) cmd->var, strlen (*(char **) cmd->var),
2207 builtin_type (gdbarch)->builtin_char);
2208 else
2209 return value_cstring ("", 1,
2210 builtin_type (gdbarch)->builtin_char);
2211
2212 default:
2213 gdb_assert_not_reached ("bad var_type");
2214 }
2215 }
2216
2217 /* Implementation of the convenience function $_gdb_setting_str. */
2218
2219 static struct value *
2220 gdb_setting_str_internal_fn (struct gdbarch *gdbarch,
2221 const struct language_defn *language,
2222 void *cookie, int argc, struct value **argv)
2223 {
2224 return str_value_from_setting (setting_cmd ("$_gdb_setting_str",
2225 showlist, argc, argv),
2226 gdbarch);
2227 }
2228
2229
2230 /* Implementation of the convenience function $_gdb_maint_setting_str. */
2231
2232 static struct value *
2233 gdb_maint_setting_str_internal_fn (struct gdbarch *gdbarch,
2234 const struct language_defn *language,
2235 void *cookie, int argc, struct value **argv)
2236 {
2237 return str_value_from_setting (setting_cmd ("$_gdb_maint_setting_str",
2238 maintenance_show_cmdlist,
2239 argc, argv),
2240 gdbarch);
2241 }
2242
2243 void _initialize_cli_cmds ();
2244 void
2245 _initialize_cli_cmds ()
2246 {
2247 struct cmd_list_element *c;
2248
2249 /* Define the classes of commands.
2250 They will appear in the help list in alphabetical order. */
2251
2252 add_cmd ("internals", class_maintenance, _("\
2253 Maintenance commands.\n\
2254 Some gdb commands are provided just for use by gdb maintainers.\n\
2255 These commands are subject to frequent change, and may not be as\n\
2256 well documented as user commands."),
2257 &cmdlist);
2258 add_cmd ("obscure", class_obscure, _("Obscure features."), &cmdlist);
2259 add_cmd ("aliases", class_alias,
2260 _("User-defined aliases of other commands."), &cmdlist);
2261 add_cmd ("user-defined", class_user, _("\
2262 User-defined commands.\n\
2263 The commands in this class are those defined by the user.\n\
2264 Use the \"define\" command to define a command."), &cmdlist);
2265 add_cmd ("support", class_support, _("Support facilities."), &cmdlist);
2266 if (!dbx_commands)
2267 add_cmd ("status", class_info, _("Status inquiries."), &cmdlist);
2268 add_cmd ("files", class_files, _("Specifying and examining files."),
2269 &cmdlist);
2270 add_cmd ("breakpoints", class_breakpoint,
2271 _("Making program stop at certain points."), &cmdlist);
2272 add_cmd ("data", class_vars, _("Examining data."), &cmdlist);
2273 add_cmd ("stack", class_stack, _("\
2274 Examining the stack.\n\
2275 The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
2276 counting from zero for the innermost (currently executing) frame.\n\n\
2277 At any time gdb identifies one frame as the \"selected\" frame.\n\
2278 Variable lookups are done with respect to the selected frame.\n\
2279 When the program being debugged stops, gdb selects the innermost frame.\n\
2280 The commands below can be used to select other frames by number or address."),
2281 &cmdlist);
2282 #ifdef TUI
2283 add_cmd ("text-user-interface", class_tui,
2284 _("TUI is the GDB text based interface.\n\
2285 In TUI mode, GDB can display several text windows showing\n\
2286 the source file, the processor registers, the program disassembly, ..."), &cmdlist);
2287 #endif
2288 add_cmd ("running", class_run, _("Running the program."), &cmdlist);
2289
2290 /* Define general commands. */
2291
2292 add_com ("pwd", class_files, pwd_command, _("\
2293 Print working directory.\n\
2294 This is used for your program as well."));
2295
2296 c = add_cmd ("cd", class_files, cd_command, _("\
2297 Set working directory to DIR for debugger.\n\
2298 The debugger's current working directory specifies where scripts and other\n\
2299 files that can be loaded by GDB are located.\n\
2300 In order to change the inferior's current working directory, the recommended\n\
2301 way is to use the \"set cwd\" command."), &cmdlist);
2302 set_cmd_completer (c, filename_completer);
2303
2304 add_com ("echo", class_support, echo_command, _("\
2305 Print a constant string. Give string as argument.\n\
2306 C escape sequences may be used in the argument.\n\
2307 No newline is added at the end of the argument;\n\
2308 use \"\\n\" if you want a newline to be printed.\n\
2309 Since leading and trailing whitespace are ignored in command arguments,\n\
2310 if you want to print some you must use \"\\\" before leading whitespace\n\
2311 to be printed or after trailing whitespace."));
2312
2313 add_setshow_enum_cmd ("script-extension", class_support,
2314 script_ext_enums, &script_ext_mode, _("\
2315 Set mode for script filename extension recognition."), _("\
2316 Show mode for script filename extension recognition."), _("\
2317 off == no filename extension recognition (all sourced files are GDB scripts)\n\
2318 soft == evaluate script according to filename extension, fallback to GDB script"
2319 "\n\
2320 strict == evaluate script according to filename extension, error if not supported"
2321 ),
2322 NULL,
2323 show_script_ext_mode,
2324 &setlist, &showlist);
2325
2326 add_com ("quit", class_support, quit_command, _("\
2327 Exit gdb.\n\
2328 Usage: quit [EXPR]\n\
2329 The optional expression EXPR, if present, is evaluated and the result\n\
2330 used as GDB's exit code. The default is zero."));
2331 c = add_com ("help", class_support, help_command,
2332 _("Print list of commands."));
2333 set_cmd_completer (c, command_completer);
2334 add_com_alias ("q", "quit", class_support, 1);
2335 add_com_alias ("h", "help", class_support, 1);
2336
2337 add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\
2338 Set verbosity."), _("\
2339 Show verbosity."), NULL,
2340 set_verbose,
2341 show_info_verbose,
2342 &setlist, &showlist);
2343
2344 add_basic_prefix_cmd ("history", class_support, _("\
2345 Generic command for setting command history parameters."),
2346 &sethistlist, "set history ", 0, &setlist);
2347 add_show_prefix_cmd ("history", class_support, _("\
2348 Generic command for showing command history parameters."),
2349 &showhistlist, "show history ", 0, &showlist);
2350
2351 add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\
2352 Set history expansion on command input."), _("\
2353 Show history expansion on command input."), _("\
2354 Without an argument, history expansion is enabled."),
2355 NULL,
2356 show_history_expansion_p,
2357 &sethistlist, &showhistlist);
2358
2359 add_prefix_cmd ("info", class_info, info_command, _("\
2360 Generic command for showing things about the program being debugged."),
2361 &infolist, "info ", 0, &cmdlist);
2362 add_com_alias ("i", "info", class_info, 1);
2363 add_com_alias ("inf", "info", class_info, 1);
2364
2365 add_com ("complete", class_obscure, complete_command,
2366 _("List the completions for the rest of the line as a command."));
2367
2368 c = add_show_prefix_cmd ("show", class_info, _("\
2369 Generic command for showing things about the debugger."),
2370 &showlist, "show ", 0, &cmdlist);
2371 /* Another way to get at the same thing. */
2372 add_alias_cmd ("set", c, class_info, 0, &infolist);
2373
2374 c = add_com ("with", class_vars, with_command, _("\
2375 Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING.\n\
2376 Usage: with SETTING [VALUE] [-- COMMAND]\n\
2377 Usage: w SETTING [VALUE] [-- COMMAND]\n\
2378 With no COMMAND, repeats the last executed command.\n\
2379 \n\
2380 SETTING is any setting you can change with the \"set\" subcommands.\n\
2381 E.g.:\n\
2382 with language pascal -- print obj\n\
2383 with print elements unlimited -- print obj\n\
2384 \n\
2385 You can change multiple settings using nested with, and use\n\
2386 abbreviations for commands and/or values. E.g.:\n\
2387 w la p -- w p el u -- p obj"));
2388 set_cmd_completer_handle_brkchars (c, with_command_completer);
2389 add_com_alias ("w", "with", class_vars, 1);
2390
2391 add_internal_function ("_gdb_setting_str", _("\
2392 $_gdb_setting_str - returns the value of a GDB setting as a string.\n\
2393 Usage: $_gdb_setting_str (setting)\n\
2394 \n\
2395 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2396 boolean values are \"off\", \"on\".\n\
2397 Some integer settings accept an unlimited value, returned\n\
2398 as \"unlimited\"."),
2399 gdb_setting_str_internal_fn, NULL);
2400
2401 add_internal_function ("_gdb_setting", _("\
2402 $_gdb_setting - returns the value of a GDB setting.\n\
2403 Usage: $_gdb_setting (setting)\n\
2404 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2405 boolean values are \"off\", \"on\".\n\
2406 Some integer settings accept an unlimited value, returned\n\
2407 as 0 or -1 depending on the setting."),
2408 gdb_setting_internal_fn, NULL);
2409
2410 add_internal_function ("_gdb_maint_setting_str", _("\
2411 $_gdb_maint_setting_str - returns the value of a GDB maintenance setting as a string.\n\
2412 Usage: $_gdb_maint_setting_str (setting)\n\
2413 \n\
2414 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2415 boolean values are \"off\", \"on\".\n\
2416 Some integer settings accept an unlimited value, returned\n\
2417 as \"unlimited\"."),
2418 gdb_maint_setting_str_internal_fn, NULL);
2419
2420 add_internal_function ("_gdb_maint_setting", _("\
2421 $_gdb_maint_setting - returns the value of a GDB maintenance setting.\n\
2422 Usage: $_gdb_maint_setting (setting)\n\
2423 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2424 boolean values are \"off\", \"on\".\n\
2425 Some integer settings accept an unlimited value, returned\n\
2426 as 0 or -1 depending on the setting."),
2427 gdb_maint_setting_internal_fn, NULL);
2428
2429 add_cmd ("commands", no_set_class, show_commands, _("\
2430 Show the history of commands you typed.\n\
2431 You can supply a command number to start with, or a `+' to start after\n\
2432 the previous command number shown."),
2433 &showlist);
2434
2435 add_cmd ("version", no_set_class, show_version,
2436 _("Show what version of GDB this is."), &showlist);
2437
2438 add_cmd ("configuration", no_set_class, show_configuration,
2439 _("Show how GDB was configured at build time."), &showlist);
2440
2441 add_setshow_zinteger_cmd ("remote", no_class, &remote_debug, _("\
2442 Set debugging of remote protocol."), _("\
2443 Show debugging of remote protocol."), _("\
2444 When enabled, each packet sent or received with the remote target\n\
2445 is displayed."),
2446 NULL,
2447 show_remote_debug,
2448 &setdebuglist, &showdebuglist);
2449
2450 add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class,
2451 &remote_timeout, _("\
2452 Set timeout limit to wait for target to respond."), _("\
2453 Show timeout limit to wait for target to respond."), _("\
2454 This value is used to set the time limit for gdb to wait for a response\n\
2455 from the target."),
2456 NULL,
2457 show_remote_timeout,
2458 &setlist, &showlist);
2459
2460 add_basic_prefix_cmd ("debug", no_class,
2461 _("Generic command for setting gdb debugging flags."),
2462 &setdebuglist, "set debug ", 0, &setlist);
2463
2464 add_show_prefix_cmd ("debug", no_class,
2465 _("Generic command for showing gdb debugging flags."),
2466 &showdebuglist, "show debug ", 0, &showlist);
2467
2468 c = add_com ("shell", class_support, shell_command, _("\
2469 Execute the rest of the line as a shell command.\n\
2470 With no arguments, run an inferior shell."));
2471 set_cmd_completer (c, filename_completer);
2472
2473 add_com_alias ("!", "shell", class_support, 0);
2474
2475 c = add_com ("edit", class_files, edit_command, _("\
2476 Edit specified file or function.\n\
2477 With no argument, edits file containing most recent line listed.\n\
2478 Editing targets can be specified in these ways:\n\
2479 FILE:LINENUM, to edit at that line in that file,\n\
2480 FUNCTION, to edit at the beginning of that function,\n\
2481 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2482 *ADDRESS, to edit at the line containing that address.\n\
2483 Uses EDITOR environment variable contents as editor (or ex as default)."));
2484
2485 c->completer = location_completer;
2486
2487 c = add_com ("pipe", class_support, pipe_command, _("\
2488 Send the output of a gdb command to a shell command.\n\
2489 Usage: | [COMMAND] | SHELL_COMMAND\n\
2490 Usage: | -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2491 Usage: pipe [COMMAND] | SHELL_COMMAND\n\
2492 Usage: pipe -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2493 \n\
2494 Executes COMMAND and sends its output to SHELL_COMMAND.\n\
2495 \n\
2496 The -d option indicates to use the string DELIM to separate COMMAND\n\
2497 from SHELL_COMMAND, in alternative to |. This is useful in\n\
2498 case COMMAND contains a | character.\n\
2499 \n\
2500 With no COMMAND, repeat the last executed command\n\
2501 and send its output to SHELL_COMMAND."));
2502 set_cmd_completer_handle_brkchars (c, pipe_command_completer);
2503 add_com_alias ("|", "pipe", class_support, 0);
2504
2505 add_com ("list", class_files, list_command, _("\
2506 List specified function or line.\n\
2507 With no argument, lists ten more lines after or around previous listing.\n\
2508 \"list -\" lists the ten lines before a previous ten-line listing.\n\
2509 One argument specifies a line, and ten lines are listed around that line.\n\
2510 Two arguments with comma between specify starting and ending lines to list.\n\
2511 Lines can be specified in these ways:\n\
2512 LINENUM, to list around that line in current file,\n\
2513 FILE:LINENUM, to list around that line in that file,\n\
2514 FUNCTION, to list around beginning of that function,\n\
2515 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2516 *ADDRESS, to list around the line containing that address.\n\
2517 With two args, if one is empty, it stands for ten lines away from\n\
2518 the other arg.\n\
2519 \n\
2520 By default, when a single location is given, display ten lines.\n\
2521 This can be changed using \"set listsize\", and the current value\n\
2522 can be shown using \"show listsize\"."));
2523
2524 add_com_alias ("l", "list", class_files, 1);
2525
2526 if (dbx_commands)
2527 add_com_alias ("file", "list", class_files, 1);
2528
2529 c = add_com ("disassemble", class_vars, disassemble_command, _("\
2530 Disassemble a specified section of memory.\n\
2531 Default is the function surrounding the pc of the selected frame.\n\
2532 \n\
2533 With a /m modifier, source lines are included (if available).\n\
2534 This view is \"source centric\": the output is in source line order,\n\
2535 regardless of any optimization that is present. Only the main source file\n\
2536 is displayed, not those of, e.g., any inlined functions.\n\
2537 This modifier hasn't proved useful in practice and is deprecated\n\
2538 in favor of /s.\n\
2539 \n\
2540 With a /s modifier, source lines are included (if available).\n\
2541 This differs from /m in two important respects:\n\
2542 - the output is still in pc address order, and\n\
2543 - file names and contents for all relevant source files are displayed.\n\
2544 \n\
2545 With a /r modifier, raw instructions in hex are included.\n\
2546 \n\
2547 With a single argument, the function surrounding that address is dumped.\n\
2548 Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
2549 in the form of \"start,end\", or \"start,+length\".\n\
2550 \n\
2551 Note that the address is interpreted as an expression, not as a location\n\
2552 like in the \"break\" command.\n\
2553 So, for example, if you want to disassemble function bar in file foo.c\n\
2554 you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
2555 set_cmd_completer (c, location_completer);
2556
2557 c = add_com ("make", class_support, make_command, _("\
2558 Run the ``make'' program using the rest of the line as arguments."));
2559 set_cmd_completer (c, filename_completer);
2560 add_cmd ("user", no_class, show_user, _("\
2561 Show definitions of non-python/scheme user defined commands.\n\
2562 Argument is the name of the user defined command.\n\
2563 With no argument, show definitions of all user defined commands."), &showlist);
2564 add_com ("apropos", class_support, apropos_command, _("\
2565 Search for commands matching a REGEXP.\n\
2566 Usage: apropos [-v] REGEXP\n\
2567 Flag -v indicates to produce a verbose output, showing full documentation\n\
2568 of the matching commands."));
2569
2570 add_setshow_uinteger_cmd ("max-user-call-depth", no_class,
2571 &max_user_call_depth, _("\
2572 Set the max call depth for non-python/scheme user-defined commands."), _("\
2573 Show the max call depth for non-python/scheme user-defined commands."), NULL,
2574 NULL,
2575 show_max_user_call_depth,
2576 &setlist, &showlist);
2577
2578 add_setshow_boolean_cmd ("trace-commands", no_class, &trace_commands, _("\
2579 Set tracing of GDB CLI commands."), _("\
2580 Show state of GDB CLI command tracing."), _("\
2581 When 'on', each command is displayed as it is executed."),
2582 NULL,
2583 NULL,
2584 &setlist, &showlist);
2585
2586 const auto alias_opts = make_alias_options_def_group (nullptr);
2587
2588 static std::string alias_help
2589 = gdb::option::build_help (_("\
2590 Define a new command that is an alias of an existing command.\n\
2591 Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]\n\
2592 ALIAS is the name of the alias command to create.\n\
2593 COMMAND is the command being aliased to.\n\
2594 \n\
2595 Options:\n\
2596 %OPTIONS%\n\
2597 \n\
2598 GDB will automatically prepend the provided DEFAULT-ARGS to the list\n\
2599 of arguments explicitly provided when using ALIAS.\n\
2600 Use \"help aliases\" to list all user defined aliases and their default args.\n\
2601 \n\
2602 Examples:\n\
2603 Make \"spe\" an alias of \"set print elements\":\n\
2604 alias spe set print elements\n\
2605 Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
2606 alias -a set print elms set print elements\n\
2607 Make \"btf\" an alias of \"backtrace -full -past-entry -past-main\" :\n\
2608 alias btf = backtrace -full -past-entry -past-main\n\
2609 Make \"wLapPeu\" an alias of 2 nested \"with\":\n\
2610 alias wLapPeu = with language pascal -- with print elements unlimited --"),
2611 alias_opts);
2612
2613 c = add_com ("alias", class_support, alias_command,
2614 alias_help.c_str ());
2615
2616 set_cmd_completer_handle_brkchars (c, alias_command_completer);
2617
2618 const char *source_help_text = xstrprintf (_("\
2619 Read commands from a file named FILE.\n\
2620 \n\
2621 Usage: source [-s] [-v] FILE\n\
2622 -s: search for the script in the source search path,\n\
2623 even if FILE contains directories.\n\
2624 -v: each command in FILE is echoed as it is executed.\n\
2625 \n\
2626 Note that the file \"%s\" is read automatically in this way\n\
2627 when GDB is started."), GDBINIT);
2628 c = add_cmd ("source", class_support, source_command,
2629 source_help_text, &cmdlist);
2630 set_cmd_completer (c, filename_completer);
2631 }
This page took 0.085429 seconds and 4 git commands to generate.