nm: Add --quiet to suppress "no symbols" diagnostic
[binutils-gdb.git] / gdb / cli / cli-cmds.c
blob68ef92eca4c9ea19fc85c10802da8580f550ddc3
1 /* GDB CLI commands.
3 Copyright (C) 2000-2021 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
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"
43 #include "ui-out.h"
44 #include "interps.h"
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"
55 #include "extension.h"
56 #include "gdbsupport/pathstuff.h"
58 #ifdef TUI
59 #include "tui/tui.h" /* For tui_active et.al. */
60 #endif
62 #include <fcntl.h>
63 #include <algorithm>
64 #include <string>
66 /* Prototypes for local utility functions */
68 static void print_sal_location (const symtab_and_line &sal);
70 static void ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
71 const char *format, ...)
72 ATTRIBUTE_PRINTF (2, 3);
74 static void filter_sals (std::vector<symtab_and_line> &);
77 /* See cli-cmds.h. */
78 unsigned int max_user_call_depth;
80 /* Define all cmd_list_elements. */
82 /* Chain containing all defined commands. */
84 struct cmd_list_element *cmdlist;
86 /* Chain containing all defined info subcommands. */
88 struct cmd_list_element *infolist;
90 /* Chain containing all defined enable subcommands. */
92 struct cmd_list_element *enablelist;
94 /* Chain containing all defined disable subcommands. */
96 struct cmd_list_element *disablelist;
98 /* Chain containing all defined stop subcommands. */
100 struct cmd_list_element *stoplist;
102 /* Chain containing all defined delete subcommands. */
104 struct cmd_list_element *deletelist;
106 /* Chain containing all defined detach subcommands. */
108 struct cmd_list_element *detachlist;
110 /* Chain containing all defined kill subcommands. */
112 struct cmd_list_element *killlist;
114 /* Chain containing all defined set subcommands */
116 struct cmd_list_element *setlist;
118 /* Chain containing all defined unset subcommands */
120 struct cmd_list_element *unsetlist;
122 /* Chain containing all defined show subcommands. */
124 struct cmd_list_element *showlist;
126 /* Chain containing all defined \"set history\". */
128 struct cmd_list_element *sethistlist;
130 /* Chain containing all defined \"show history\". */
132 struct cmd_list_element *showhistlist;
134 /* Chain containing all defined \"unset history\". */
136 struct cmd_list_element *unsethistlist;
138 /* Chain containing all defined maintenance subcommands. */
140 struct cmd_list_element *maintenancelist;
142 /* Chain containing all defined "maintenance info" subcommands. */
144 struct cmd_list_element *maintenanceinfolist;
146 /* Chain containing all defined "maintenance print" subcommands. */
148 struct cmd_list_element *maintenanceprintlist;
150 /* Chain containing all defined "maintenance check" subcommands. */
152 struct cmd_list_element *maintenancechecklist;
154 /* Chain containing all defined "maintenance flush" subcommands. */
156 struct cmd_list_element *maintenanceflushlist;
158 struct cmd_list_element *setprintlist;
160 struct cmd_list_element *showprintlist;
162 struct cmd_list_element *setdebuglist;
164 struct cmd_list_element *showdebuglist;
166 struct cmd_list_element *setchecklist;
168 struct cmd_list_element *showchecklist;
170 /* Command tracing state. */
172 int source_verbose = 0;
173 bool trace_commands = false;
175 /* 'script-extension' option support. */
177 static const char script_ext_off[] = "off";
178 static const char script_ext_soft[] = "soft";
179 static const char script_ext_strict[] = "strict";
181 static const char *const script_ext_enums[] = {
182 script_ext_off,
183 script_ext_soft,
184 script_ext_strict,
185 NULL
188 static const char *script_ext_mode = script_ext_soft;
190 /* Utility used everywhere when at least one argument is needed and
191 none is supplied. */
193 void
194 error_no_arg (const char *why)
196 error (_("Argument required (%s)."), why);
199 /* This implements the "info" prefix command. Normally such commands
200 are automatically handled by add_basic_prefix_cmd, but in this case
201 a separate command is used so that it can be hooked into by
202 gdb-gdb.gdb. */
204 static void
205 info_command (const char *arg, int from_tty)
207 help_list (infolist, "info ", all_commands, gdb_stdout);
210 /* See cli/cli-cmds.h. */
212 void
213 with_command_1 (const char *set_cmd_prefix,
214 cmd_list_element *setlist, const char *args, int from_tty)
216 if (args == nullptr)
217 error (_("Missing arguments."));
219 const char *delim = strstr (args, "--");
220 const char *nested_cmd = nullptr;
222 if (delim == args)
223 error (_("Missing setting before '--' delimiter"));
225 if (delim == nullptr || *skip_spaces (&delim[2]) == '\0')
226 nested_cmd = repeat_previous ();
228 cmd_list_element *set_cmd = lookup_cmd (&args, setlist, set_cmd_prefix,
229 nullptr,
230 /*allow_unknown=*/ 0,
231 /*ignore_help_classes=*/ 1);
232 gdb_assert (set_cmd != nullptr);
234 if (set_cmd->var == nullptr)
235 error (_("Cannot use this setting with the \"with\" command"));
237 std::string temp_value
238 = (delim == nullptr ? args : std::string (args, delim - args));
240 if (nested_cmd == nullptr)
241 nested_cmd = skip_spaces (delim + 2);
243 std::string org_value = get_setshow_command_value_string (set_cmd);
245 /* Tweak the setting to the new temporary value. */
246 do_set_command (temp_value.c_str (), from_tty, set_cmd);
250 scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
252 /* Execute the nested command. */
253 execute_command (nested_cmd, from_tty);
255 catch (const gdb_exception &ex)
257 /* Restore the setting and rethrow. If restoring the setting
258 throws, swallow the new exception and warn. There's nothing
259 else we can reasonably do. */
262 do_set_command (org_value.c_str (), from_tty, set_cmd);
264 catch (const gdb_exception &ex2)
266 warning (_("Couldn't restore setting: %s"), ex2.what ());
269 throw;
272 /* Restore the setting. */
273 do_set_command (org_value.c_str (), from_tty, set_cmd);
276 /* See cli/cli-cmds.h. */
278 void
279 with_command_completer_1 (const char *set_cmd_prefix,
280 completion_tracker &tracker,
281 const char *text)
283 tracker.set_use_custom_word_point (true);
285 const char *delim = strstr (text, "--");
287 /* If we're still not past the "--" delimiter, complete the "with"
288 command as if it was a "set" command. */
289 if (delim == text
290 || delim == nullptr
291 || !isspace (delim[-1])
292 || !(isspace (delim[2]) || delim[2] == '\0'))
294 std::string new_text = std::string (set_cmd_prefix) + text;
295 tracker.advance_custom_word_point_by (-(int) strlen (set_cmd_prefix));
296 complete_nested_command_line (tracker, new_text.c_str ());
297 return;
300 /* We're past the "--" delimiter. Complete on the sub command. */
301 const char *nested_cmd = skip_spaces (delim + 2);
302 tracker.advance_custom_word_point_by (nested_cmd - text);
303 complete_nested_command_line (tracker, nested_cmd);
306 /* The "with" command. */
308 static void
309 with_command (const char *args, int from_tty)
311 with_command_1 ("set ", setlist, args, from_tty);
314 /* "with" command completer. */
316 static void
317 with_command_completer (struct cmd_list_element *ignore,
318 completion_tracker &tracker,
319 const char *text, const char * /*word*/)
321 with_command_completer_1 ("set ", tracker, text);
324 /* Look up the contents of TEXT as a command usable with default args.
325 Throws an error if no such command is found.
326 Return the found command and advances TEXT past the found command.
327 If the found command is a postfix command, set *PREFIX_CMD to its
328 prefix command. */
330 static struct cmd_list_element *
331 lookup_cmd_for_default_args (const char **text,
332 struct cmd_list_element **prefix_cmd)
334 const char *orig_text = *text;
335 struct cmd_list_element *lcmd;
337 if (*text == nullptr || skip_spaces (*text) == nullptr)
338 error (_("ALIAS missing."));
340 /* We first use lookup_cmd to verify TEXT unambiguously identifies
341 a command. */
342 lcmd = lookup_cmd (text, cmdlist, "", NULL,
343 /*allow_unknown=*/ 0,
344 /*ignore_help_classes=*/ 1);
346 /* Note that we accept default args for prefix commands,
347 as a prefix command can also be a valid usable
348 command accepting some arguments.
349 For example, "thread apply" applies a command to a
350 list of thread ids, and is also the prefix command for
351 thread apply all. */
353 /* We have an unambiguous command for which default args
354 can be specified. What remains after having found LCMD
355 is either spaces, or the default args character. */
357 /* We then use lookup_cmd_composition to detect if the user
358 has specified an alias, and find the possible prefix_cmd
359 of cmd. */
360 struct cmd_list_element *alias, *cmd;
361 lookup_cmd_composition
362 (std::string (orig_text, *text - orig_text).c_str (),
363 &alias, prefix_cmd, &cmd);
364 gdb_assert (cmd != nullptr);
365 gdb_assert (cmd == lcmd);
366 if (alias != nullptr)
367 cmd = alias;
369 return cmd;
372 /* Provide documentation on command or list given by COMMAND. FROM_TTY
373 is ignored. */
375 static void
376 help_command (const char *command, int from_tty)
378 help_cmd (command, gdb_stdout);
382 /* Note: The "complete" command is used by Emacs to implement completion.
383 [Is that why this function writes output with *_unfiltered?] */
385 static void
386 complete_command (const char *arg, int from_tty)
388 dont_repeat ();
390 if (max_completions == 0)
392 /* Only print this for non-mi frontends. An MI frontend may not
393 be able to handle this. */
394 if (!current_uiout->is_mi_like_p ())
396 printf_unfiltered (_("max-completions is zero,"
397 " completion is disabled.\n"));
399 return;
402 if (arg == NULL)
403 arg = "";
405 int quote_char = '\0';
406 const char *word;
408 completion_result result = complete (arg, &word, &quote_char);
410 if (result.number_matches != 0)
412 std::string arg_prefix (arg, word - arg);
414 if (result.number_matches == 1)
415 printf_unfiltered ("%s%s\n", arg_prefix.c_str (), result.match_list[0]);
416 else
418 result.sort_match_list ();
420 for (size_t i = 0; i < result.number_matches; i++)
422 printf_unfiltered ("%s%s",
423 arg_prefix.c_str (),
424 result.match_list[i + 1]);
425 if (quote_char)
426 printf_unfiltered ("%c", quote_char);
427 printf_unfiltered ("\n");
431 if (result.number_matches == max_completions)
433 /* ARG_PREFIX and WORD are included in the output so that emacs
434 will include the message in the output. */
435 printf_unfiltered (_("%s%s %s\n"),
436 arg_prefix.c_str (), word,
437 get_max_completions_reached_message ());
443 is_complete_command (struct cmd_list_element *c)
445 return cmd_cfunc_eq (c, complete_command);
448 static void
449 show_version (const char *args, int from_tty)
451 print_gdb_version (gdb_stdout, true);
452 printf_filtered ("\n");
455 static void
456 show_configuration (const char *args, int from_tty)
458 print_gdb_configuration (gdb_stdout);
461 /* Handle the quit command. */
463 void
464 quit_command (const char *args, int from_tty)
466 int exit_code = 0;
468 /* An optional expression may be used to cause gdb to terminate with
469 the value of that expression. */
470 if (args)
472 struct value *val = parse_and_eval (args);
474 exit_code = (int) value_as_long (val);
477 if (!quit_confirm ())
478 error (_("Not confirmed."));
480 query_if_trace_running (from_tty);
482 quit_force (args ? &exit_code : NULL, from_tty);
485 static void
486 pwd_command (const char *args, int from_tty)
488 if (args)
489 error (_("The \"pwd\" command does not take an argument: %s"), args);
491 gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
493 if (cwd == NULL)
494 error (_("Error finding name of working directory: %s"),
495 safe_strerror (errno));
497 if (strcmp (cwd.get (), current_directory) != 0)
498 printf_unfiltered (_("Working directory %ps\n (canonically %ps).\n"),
499 styled_string (file_name_style.style (),
500 current_directory),
501 styled_string (file_name_style.style (), cwd.get ()));
502 else
503 printf_unfiltered (_("Working directory %ps.\n"),
504 styled_string (file_name_style.style (),
505 current_directory));
508 void
509 cd_command (const char *dir, int from_tty)
511 int len;
512 /* Found something other than leading repetitions of "/..". */
513 int found_real_path;
514 char *p;
516 /* If the new directory is absolute, repeat is a no-op; if relative,
517 repeat might be useful but is more likely to be a mistake. */
518 dont_repeat ();
520 gdb::unique_xmalloc_ptr<char> dir_holder
521 (tilde_expand (dir != NULL ? dir : "~"));
522 dir = dir_holder.get ();
524 if (chdir (dir) < 0)
525 perror_with_name (dir);
527 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
528 /* There's too much mess with DOSish names like "d:", "d:.",
529 "d:./foo" etc. Instead of having lots of special #ifdef'ed code,
530 simply get the canonicalized name of the current directory. */
531 gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
532 dir = cwd.get ();
533 #endif
535 len = strlen (dir);
536 if (IS_DIR_SEPARATOR (dir[len - 1]))
538 /* Remove the trailing slash unless this is a root directory
539 (including a drive letter on non-Unix systems). */
540 if (!(len == 1) /* "/" */
541 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
542 && !(len == 3 && dir[1] == ':') /* "d:/" */
543 #endif
545 len--;
548 dir_holder.reset (savestring (dir, len));
549 if (IS_ABSOLUTE_PATH (dir_holder.get ()))
551 xfree (current_directory);
552 current_directory = dir_holder.release ();
554 else
556 if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]))
557 current_directory = concat (current_directory, dir_holder.get (),
558 (char *) NULL);
559 else
560 current_directory = concat (current_directory, SLASH_STRING,
561 dir_holder.get (), (char *) NULL);
564 /* Now simplify any occurrences of `.' and `..' in the pathname. */
566 found_real_path = 0;
567 for (p = current_directory; *p;)
569 if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.'
570 && (p[2] == 0 || IS_DIR_SEPARATOR (p[2])))
571 memmove (p, p + 2, strlen (p + 2) + 1);
572 else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.'
573 && (p[3] == 0 || IS_DIR_SEPARATOR (p[3])))
575 if (found_real_path)
577 /* Search backwards for the directory just before the "/.."
578 and obliterate it and the "/..". */
579 char *q = p;
581 while (q != current_directory && !IS_DIR_SEPARATOR (q[-1]))
582 --q;
584 if (q == current_directory)
585 /* current_directory is
586 a relative pathname ("can't happen"--leave it alone). */
587 ++p;
588 else
590 memmove (q - 1, p + 3, strlen (p + 3) + 1);
591 p = q - 1;
594 else
595 /* We are dealing with leading repetitions of "/..", for
596 example "/../..", which is the Mach super-root. */
597 p += 3;
599 else
601 found_real_path = 1;
602 ++p;
606 forget_cached_source_info ();
608 if (from_tty)
609 pwd_command ((char *) 0, 1);
612 /* Show the current value of the 'script-extension' option. */
614 static void
615 show_script_ext_mode (struct ui_file *file, int from_tty,
616 struct cmd_list_element *c, const char *value)
618 fprintf_filtered (file,
619 _("Script filename extension recognition is \"%s\".\n"),
620 value);
623 /* Try to open SCRIPT_FILE.
624 If successful, the full path name is stored in *FULL_PATHP,
625 and the stream is returned.
626 If not successful, return NULL; errno is set for the last file
627 we tried to open.
629 If SEARCH_PATH is non-zero, and the file isn't found in cwd,
630 search for it in the source search path. */
632 gdb::optional<open_script>
633 find_and_open_script (const char *script_file, int search_path)
635 int fd;
636 openp_flags search_flags = OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH;
637 gdb::optional<open_script> opened;
639 gdb::unique_xmalloc_ptr<char> file (tilde_expand (script_file));
641 if (search_path)
642 search_flags |= OPF_SEARCH_IN_PATH;
644 /* Search for and open 'file' on the search path used for source
645 files. Put the full location in *FULL_PATHP. */
646 gdb::unique_xmalloc_ptr<char> full_path;
647 fd = openp (source_path, search_flags,
648 file.get (), O_RDONLY, &full_path);
650 if (fd == -1)
651 return opened;
653 FILE *result = fdopen (fd, FOPEN_RT);
654 if (result == NULL)
656 int save_errno = errno;
658 close (fd);
659 errno = save_errno;
661 else
662 opened.emplace (gdb_file_up (result), std::move (full_path));
664 return opened;
667 /* Load script FILE, which has already been opened as STREAM.
668 FILE_TO_OPEN is the form of FILE to use if one needs to open the file.
669 This is provided as FILE may have been found via the source search path.
670 An important thing to note here is that FILE may be a symlink to a file
671 with a different or non-existing suffix, and thus one cannot infer the
672 extension language from FILE_TO_OPEN. */
674 static void
675 source_script_from_stream (FILE *stream, const char *file,
676 const char *file_to_open)
678 if (script_ext_mode != script_ext_off)
680 const struct extension_language_defn *extlang
681 = get_ext_lang_of_file (file);
683 if (extlang != NULL)
685 if (ext_lang_present_p (extlang))
687 script_sourcer_func *sourcer
688 = ext_lang_script_sourcer (extlang);
690 gdb_assert (sourcer != NULL);
691 sourcer (extlang, stream, file_to_open);
692 return;
694 else if (script_ext_mode == script_ext_soft)
696 /* Assume the file is a gdb script.
697 This is handled below. */
699 else
700 throw_ext_lang_unsupported (extlang);
704 script_from_file (stream, file);
707 /* Worker to perform the "source" command.
708 Load script FILE.
709 If SEARCH_PATH is non-zero, and the file isn't found in cwd,
710 search for it in the source search path. */
712 static void
713 source_script_with_search (const char *file, int from_tty, int search_path)
716 if (file == NULL || *file == 0)
717 error (_("source command requires file name of file to source."));
719 gdb::optional<open_script> opened = find_and_open_script (file, search_path);
720 if (!opened)
722 /* The script wasn't found, or was otherwise inaccessible.
723 If the source command was invoked interactively, throw an
724 error. Otherwise (e.g. if it was invoked by a script),
725 just emit a warning, rather than cause an error. */
726 if (from_tty)
727 perror_with_name (file);
728 else
730 perror_warning_with_name (file);
731 return;
735 /* The python support reopens the file, so we need to pass full_path here
736 in case the file was found on the search path. It's useful to do this
737 anyway so that error messages show the actual file used. But only do
738 this if we (may have) used search_path, as printing the full path in
739 errors for the non-search case can be more noise than signal. */
740 source_script_from_stream (opened->stream.get (), file,
741 search_path ? opened->full_path.get () : file);
744 /* Wrapper around source_script_with_search to export it to main.c
745 for use in loading .gdbinit scripts. */
747 void
748 source_script (const char *file, int from_tty)
750 source_script_with_search (file, from_tty, 0);
753 static void
754 source_command (const char *args, int from_tty)
756 const char *file = args;
757 int search_path = 0;
759 scoped_restore save_source_verbose = make_scoped_restore (&source_verbose);
761 /* -v causes the source command to run in verbose mode.
762 -s causes the file to be searched in the source search path,
763 even if the file name contains a '/'.
764 We still have to be able to handle filenames with spaces in a
765 backward compatible way, so buildargv is not appropriate. */
767 if (args)
769 while (args[0] != '\0')
771 /* Make sure leading white space does not break the
772 comparisons. */
773 args = skip_spaces (args);
775 if (args[0] != '-')
776 break;
778 if (args[1] == 'v' && isspace (args[2]))
780 source_verbose = 1;
782 /* Skip passed -v. */
783 args = &args[3];
785 else if (args[1] == 's' && isspace (args[2]))
787 search_path = 1;
789 /* Skip passed -s. */
790 args = &args[3];
792 else
793 break;
796 file = skip_spaces (args);
799 source_script_with_search (file, from_tty, search_path);
803 static void
804 echo_command (const char *text, int from_tty)
806 const char *p = text;
807 int c;
809 if (text)
810 while ((c = *p++) != '\0')
812 if (c == '\\')
814 /* \ at end of argument is used after spaces
815 so they won't be lost. */
816 if (*p == 0)
817 return;
819 c = parse_escape (get_current_arch (), &p);
820 if (c >= 0)
821 printf_filtered ("%c", c);
823 else
824 printf_filtered ("%c", c);
827 reset_terminal_style (gdb_stdout);
829 /* Force this output to appear now. */
830 wrap_here ("");
831 gdb_flush (gdb_stdout);
834 /* Sets the last launched shell command convenience variables based on
835 EXIT_STATUS. */
837 static void
838 exit_status_set_internal_vars (int exit_status)
840 struct internalvar *var_code = lookup_internalvar ("_shell_exitcode");
841 struct internalvar *var_signal = lookup_internalvar ("_shell_exitsignal");
843 clear_internalvar (var_code);
844 clear_internalvar (var_signal);
845 if (WIFEXITED (exit_status))
846 set_internalvar_integer (var_code, WEXITSTATUS (exit_status));
847 #ifdef __MINGW32__
848 else if (WIFSIGNALED (exit_status) && WTERMSIG (exit_status) == -1)
850 /* The -1 condition can happen on MinGW, if we don't recognize
851 the fatal exception code encoded in the exit status; see
852 gdbsupport/gdb_wait.c. We don't want to lose information in
853 the exit status in that case. Record it as a normal exit
854 with the full exit status, including the higher 0xC0000000
855 bits. */
856 set_internalvar_integer (var_code, exit_status);
858 #endif
859 else if (WIFSIGNALED (exit_status))
860 set_internalvar_integer (var_signal, WTERMSIG (exit_status));
861 else
862 warning (_("unexpected shell command exit status %d"), exit_status);
865 static void
866 shell_escape (const char *arg, int from_tty)
868 #if defined(CANT_FORK) || \
869 (!defined(HAVE_WORKING_VFORK) && !defined(HAVE_WORKING_FORK))
870 /* If ARG is NULL, they want an inferior shell, but `system' just
871 reports if the shell is available when passed a NULL arg. */
872 int rc = system (arg ? arg : "");
874 if (!arg)
875 arg = "inferior shell";
877 if (rc == -1)
878 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
879 safe_strerror (errno));
880 else if (rc)
881 fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
882 #ifdef GLOBAL_CURDIR
883 /* Make sure to return to the directory GDB thinks it is, in case
884 the shell command we just ran changed it. */
885 chdir (current_directory);
886 #endif
887 exit_status_set_internal_vars (rc);
888 #else /* Can fork. */
889 int status, pid;
891 if ((pid = vfork ()) == 0)
893 const char *p, *user_shell = get_shell ();
895 close_most_fds ();
897 /* Get the name of the shell for arg0. */
898 p = lbasename (user_shell);
900 if (!arg)
901 execl (user_shell, p, (char *) 0);
902 else
903 execl (user_shell, p, "-c", arg, (char *) 0);
905 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
906 safe_strerror (errno));
907 _exit (0177);
910 if (pid != -1)
911 waitpid (pid, &status, 0);
912 else
913 error (_("Fork failed"));
914 exit_status_set_internal_vars (status);
915 #endif /* Can fork. */
918 /* Implementation of the "shell" command. */
920 static void
921 shell_command (const char *arg, int from_tty)
923 shell_escape (arg, from_tty);
926 static void
927 edit_command (const char *arg, int from_tty)
929 struct symtab_and_line sal;
930 struct symbol *sym;
931 const char *editor;
932 char *p;
933 const char *fn;
935 /* Pull in the current default source line if necessary. */
936 if (arg == 0)
938 set_default_source_symtab_and_line ();
939 sal = get_current_source_symtab_and_line ();
942 /* Bare "edit" edits file with present line. */
944 if (arg == 0)
946 if (sal.symtab == 0)
947 error (_("No default source file yet."));
948 sal.line += get_lines_to_list () / 2;
950 else
952 const char *arg1;
954 /* Now should only be one argument -- decode it in SAL. */
955 arg1 = arg;
956 event_location_up location = string_to_event_location (&arg1,
957 current_language);
958 std::vector<symtab_and_line> sals = decode_line_1 (location.get (),
959 DECODE_LINE_LIST_MODE,
960 NULL, NULL, 0);
962 filter_sals (sals);
963 if (sals.empty ())
965 /* C++ */
966 return;
968 if (sals.size () > 1)
970 ambiguous_line_spec (sals,
971 _("Specified line is ambiguous:\n"));
972 return;
975 sal = sals[0];
977 if (*arg1)
978 error (_("Junk at end of line specification."));
980 /* If line was specified by address, first print exactly which
981 line, and which file. In this case, sal.symtab == 0 means
982 address is outside of all known source files, not that user
983 failed to give a filename. */
984 if (*arg == '*')
986 struct gdbarch *gdbarch;
988 if (sal.symtab == 0)
989 error (_("No source file for address %s."),
990 paddress (get_current_arch (), sal.pc));
992 gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch ();
993 sym = find_pc_function (sal.pc);
994 if (sym)
995 printf_filtered ("%s is in %s (%s:%d).\n",
996 paddress (gdbarch, sal.pc),
997 sym->print_name (),
998 symtab_to_filename_for_display (sal.symtab),
999 sal.line);
1000 else
1001 printf_filtered ("%s is at %s:%d.\n",
1002 paddress (gdbarch, sal.pc),
1003 symtab_to_filename_for_display (sal.symtab),
1004 sal.line);
1007 /* If what was given does not imply a symtab, it must be an
1008 undebuggable symbol which means no source code. */
1010 if (sal.symtab == 0)
1011 error (_("No line number known for %s."), arg);
1014 if ((editor = getenv ("EDITOR")) == NULL)
1015 editor = "/bin/ex";
1017 fn = symtab_to_fullname (sal.symtab);
1019 /* Quote the file name, in case it has whitespace or other special
1020 characters. */
1021 p = xstrprintf ("%s +%d \"%s\"", editor, sal.line, fn);
1022 shell_escape (p, from_tty);
1023 xfree (p);
1026 /* The options for the "pipe" command. */
1028 struct pipe_cmd_opts
1030 /* For "-d". */
1031 char *delimiter = nullptr;
1033 ~pipe_cmd_opts ()
1035 xfree (delimiter);
1039 static const gdb::option::option_def pipe_cmd_option_defs[] = {
1041 gdb::option::string_option_def<pipe_cmd_opts> {
1042 "d",
1043 [] (pipe_cmd_opts *opts) { return &opts->delimiter; },
1044 nullptr,
1045 N_("Indicates to use the specified delimiter string to separate\n\
1046 COMMAND from SHELL_COMMAND, in alternative to |. This is useful in\n\
1047 case COMMAND contains a | character."),
1052 /* Create an option_def_group for the "pipe" command's options, with
1053 OPTS as context. */
1055 static inline gdb::option::option_def_group
1056 make_pipe_cmd_options_def_group (pipe_cmd_opts *opts)
1058 return {{pipe_cmd_option_defs}, opts};
1061 /* Implementation of the "pipe" command. */
1063 static void
1064 pipe_command (const char *arg, int from_tty)
1066 pipe_cmd_opts opts;
1068 auto grp = make_pipe_cmd_options_def_group (&opts);
1069 gdb::option::process_options
1070 (&arg, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
1072 const char *delim = "|";
1073 if (opts.delimiter != nullptr)
1074 delim = opts.delimiter;
1076 const char *command = arg;
1077 if (command == nullptr)
1078 error (_("Missing COMMAND"));
1080 arg = strstr (arg, delim);
1082 if (arg == nullptr)
1083 error (_("Missing delimiter before SHELL_COMMAND"));
1085 std::string gdb_cmd (command, arg - command);
1087 arg += strlen (delim); /* Skip the delimiter. */
1089 if (gdb_cmd.empty ())
1090 gdb_cmd = repeat_previous ();
1092 const char *shell_command = skip_spaces (arg);
1093 if (*shell_command == '\0')
1094 error (_("Missing SHELL_COMMAND"));
1096 FILE *to_shell_command = popen (shell_command, "w");
1098 if (to_shell_command == nullptr)
1099 error (_("Error launching \"%s\""), shell_command);
1103 stdio_file pipe_file (to_shell_command);
1105 execute_command_to_ui_file (&pipe_file, gdb_cmd.c_str (), from_tty);
1107 catch (...)
1109 pclose (to_shell_command);
1110 throw;
1113 int exit_status = pclose (to_shell_command);
1115 if (exit_status < 0)
1116 error (_("shell command \"%s\" failed: %s"), shell_command,
1117 safe_strerror (errno));
1118 exit_status_set_internal_vars (exit_status);
1121 /* Completer for the pipe command. */
1123 static void
1124 pipe_command_completer (struct cmd_list_element *ignore,
1125 completion_tracker &tracker,
1126 const char *text, const char *word_ignored)
1128 pipe_cmd_opts opts;
1130 const char *org_text = text;
1131 auto grp = make_pipe_cmd_options_def_group (&opts);
1132 if (gdb::option::complete_options
1133 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp))
1134 return;
1136 const char *delimiter = "|";
1137 if (opts.delimiter != nullptr)
1138 delimiter = opts.delimiter;
1140 /* Check if we're past option values already. */
1141 if (text > org_text && !isspace (text[-1]))
1142 return;
1144 const char *delim = strstr (text, delimiter);
1146 /* If we're still not past the delimiter, complete the gdb
1147 command. */
1148 if (delim == nullptr || delim == text)
1150 complete_nested_command_line (tracker, text);
1151 return;
1154 /* We're past the delimiter. What follows is a shell command, which
1155 we don't know how to complete. */
1158 static void
1159 list_command (const char *arg, int from_tty)
1161 struct symbol *sym;
1162 const char *arg1;
1163 int no_end = 1;
1164 int dummy_end = 0;
1165 int dummy_beg = 0;
1166 int linenum_beg = 0;
1167 const char *p;
1169 /* Pull in the current default source line if necessary. */
1170 if (arg == NULL || ((arg[0] == '+' || arg[0] == '-') && arg[1] == '\0'))
1172 set_default_source_symtab_and_line ();
1173 symtab_and_line cursal = get_current_source_symtab_and_line ();
1175 /* If this is the first "list" since we've set the current
1176 source line, center the listing around that line. */
1177 if (get_first_line_listed () == 0)
1179 int first;
1181 first = std::max (cursal.line - get_lines_to_list () / 2, 1);
1183 /* A small special case --- if listing backwards, and we
1184 should list only one line, list the preceding line,
1185 instead of the exact line we've just shown after e.g.,
1186 stopping for a breakpoint. */
1187 if (arg != NULL && arg[0] == '-'
1188 && get_lines_to_list () == 1 && first > 1)
1189 first -= 1;
1191 print_source_lines (cursal.symtab, source_lines_range (first), 0);
1194 /* "l" or "l +" lists next ten lines. */
1195 else if (arg == NULL || arg[0] == '+')
1196 print_source_lines (cursal.symtab,
1197 source_lines_range (cursal.line), 0);
1199 /* "l -" lists previous ten lines, the ones before the ten just
1200 listed. */
1201 else if (arg[0] == '-')
1203 if (get_first_line_listed () == 1)
1204 error (_("Already at the start of %s."),
1205 symtab_to_filename_for_display (cursal.symtab));
1206 source_lines_range range (get_first_line_listed (),
1207 source_lines_range::BACKWARD);
1208 print_source_lines (cursal.symtab, range, 0);
1211 return;
1214 /* Now if there is only one argument, decode it in SAL
1215 and set NO_END.
1216 If there are two arguments, decode them in SAL and SAL_END
1217 and clear NO_END; however, if one of the arguments is blank,
1218 set DUMMY_BEG or DUMMY_END to record that fact. */
1220 if (!have_full_symbols () && !have_partial_symbols ())
1221 error (_("No symbol table is loaded. Use the \"file\" command."));
1223 std::vector<symtab_and_line> sals;
1224 symtab_and_line sal, sal_end;
1226 arg1 = arg;
1227 if (*arg1 == ',')
1228 dummy_beg = 1;
1229 else
1231 event_location_up location = string_to_event_location (&arg1,
1232 current_language);
1233 sals = decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
1234 NULL, NULL, 0);
1235 filter_sals (sals);
1236 if (sals.empty ())
1238 /* C++ */
1239 return;
1242 sal = sals[0];
1245 /* Record whether the BEG arg is all digits. */
1247 for (p = arg; p != arg1 && *p >= '0' && *p <= '9'; p++);
1248 linenum_beg = (p == arg1);
1250 /* Save the range of the first argument, in case we need to let the
1251 user know it was ambiguous. */
1252 const char *beg = arg;
1253 size_t beg_len = arg1 - beg;
1255 while (*arg1 == ' ' || *arg1 == '\t')
1256 arg1++;
1257 if (*arg1 == ',')
1259 no_end = 0;
1260 if (sals.size () > 1)
1262 ambiguous_line_spec (sals,
1263 _("Specified first line '%.*s' is ambiguous:\n"),
1264 (int) beg_len, beg);
1265 return;
1267 arg1++;
1268 while (*arg1 == ' ' || *arg1 == '\t')
1269 arg1++;
1270 if (*arg1 == 0)
1271 dummy_end = 1;
1272 else
1274 /* Save the last argument, in case we need to let the user
1275 know it was ambiguous. */
1276 const char *end_arg = arg1;
1278 event_location_up location
1279 = string_to_event_location (&arg1, current_language);
1281 std::vector<symtab_and_line> sals_end
1282 = (dummy_beg
1283 ? decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
1284 NULL, NULL, 0)
1285 : decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
1286 NULL, sal.symtab, sal.line));
1288 filter_sals (sals_end);
1289 if (sals_end.empty ())
1290 return;
1291 if (sals_end.size () > 1)
1293 ambiguous_line_spec (sals_end,
1294 _("Specified last line '%s' is ambiguous:\n"),
1295 end_arg);
1296 return;
1298 sal_end = sals_end[0];
1302 if (*arg1)
1303 error (_("Junk at end of line specification."));
1305 if (!no_end && !dummy_beg && !dummy_end
1306 && sal.symtab != sal_end.symtab)
1307 error (_("Specified first and last lines are in different files."));
1308 if (dummy_beg && dummy_end)
1309 error (_("Two empty args do not say what lines to list."));
1311 /* If line was specified by address,
1312 first print exactly which line, and which file.
1314 In this case, sal.symtab == 0 means address is outside of all
1315 known source files, not that user failed to give a filename. */
1316 if (*arg == '*')
1318 struct gdbarch *gdbarch;
1320 if (sal.symtab == 0)
1321 error (_("No source file for address %s."),
1322 paddress (get_current_arch (), sal.pc));
1324 gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch ();
1325 sym = find_pc_function (sal.pc);
1326 if (sym)
1327 printf_filtered ("%s is in %s (%s:%d).\n",
1328 paddress (gdbarch, sal.pc),
1329 sym->print_name (),
1330 symtab_to_filename_for_display (sal.symtab), sal.line);
1331 else
1332 printf_filtered ("%s is at %s:%d.\n",
1333 paddress (gdbarch, sal.pc),
1334 symtab_to_filename_for_display (sal.symtab), sal.line);
1337 /* If line was not specified by just a line number, and it does not
1338 imply a symtab, it must be an undebuggable symbol which means no
1339 source code. */
1341 if (!linenum_beg && sal.symtab == 0)
1342 error (_("No line number known for %s."), arg);
1344 /* If this command is repeated with RET,
1345 turn it into the no-arg variant. */
1347 if (from_tty)
1348 set_repeat_arguments ("");
1350 if (dummy_beg && sal_end.symtab == 0)
1351 error (_("No default source file yet. Do \"help list\"."));
1352 if (dummy_beg)
1354 source_lines_range range (sal_end.line + 1,
1355 source_lines_range::BACKWARD);
1356 print_source_lines (sal_end.symtab, range, 0);
1358 else if (sal.symtab == 0)
1359 error (_("No default source file yet. Do \"help list\"."));
1360 else if (no_end)
1362 for (int i = 0; i < sals.size (); i++)
1364 sal = sals[i];
1365 int first_line = sal.line - get_lines_to_list () / 2;
1366 if (first_line < 1)
1367 first_line = 1;
1368 if (sals.size () > 1)
1369 print_sal_location (sal);
1370 print_source_lines (sal.symtab, source_lines_range (first_line), 0);
1373 else if (dummy_end)
1374 print_source_lines (sal.symtab, source_lines_range (sal.line), 0);
1375 else
1376 print_source_lines (sal.symtab,
1377 source_lines_range (sal.line, (sal_end.line + 1)),
1381 /* Subroutine of disassemble_command to simplify it.
1382 Perform the disassembly.
1383 NAME is the name of the function if known, or NULL.
1384 [LOW,HIGH) are the range of addresses to disassemble.
1385 BLOCK is the block to disassemble; it needs to be provided
1386 when non-contiguous blocks are disassembled; otherwise
1387 it can be NULL.
1388 MIXED is non-zero to print source with the assembler. */
1390 static void
1391 print_disassembly (struct gdbarch *gdbarch, const char *name,
1392 CORE_ADDR low, CORE_ADDR high,
1393 const struct block *block,
1394 gdb_disassembly_flags flags)
1396 #if defined(TUI)
1397 if (tui_is_window_visible (DISASSEM_WIN))
1398 tui_show_assembly (gdbarch, low);
1399 else
1400 #endif
1402 printf_filtered (_("Dump of assembler code "));
1403 if (name != NULL)
1404 printf_filtered (_("for function %ps:\n"),
1405 styled_string (function_name_style.style (), name));
1406 if (block == nullptr || BLOCK_CONTIGUOUS_P (block))
1408 if (name == NULL)
1409 printf_filtered (_("from %ps to %ps:\n"),
1410 styled_string (address_style.style (),
1411 paddress (gdbarch, low)),
1412 styled_string (address_style.style (),
1413 paddress (gdbarch, high)));
1415 /* Dump the specified range. */
1416 gdb_disassembly (gdbarch, current_uiout, flags, -1, low, high);
1418 else
1420 for (int i = 0; i < BLOCK_NRANGES (block); i++)
1422 CORE_ADDR range_low = BLOCK_RANGE_START (block, i);
1423 CORE_ADDR range_high = BLOCK_RANGE_END (block, i);
1424 printf_filtered (_("Address range %ps to %ps:\n"),
1425 styled_string (address_style.style (),
1426 paddress (gdbarch, range_low)),
1427 styled_string (address_style.style (),
1428 paddress (gdbarch, range_high)));
1429 gdb_disassembly (gdbarch, current_uiout, flags, -1,
1430 range_low, range_high);
1433 printf_filtered (_("End of assembler dump.\n"));
1437 /* Subroutine of disassemble_command to simplify it.
1438 Print a disassembly of the current function according to FLAGS. */
1440 static void
1441 disassemble_current_function (gdb_disassembly_flags flags)
1443 struct frame_info *frame;
1444 struct gdbarch *gdbarch;
1445 CORE_ADDR low, high, pc;
1446 const char *name;
1447 const struct block *block;
1449 frame = get_selected_frame (_("No frame selected."));
1450 gdbarch = get_frame_arch (frame);
1451 pc = get_frame_address_in_block (frame);
1452 if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
1453 error (_("No function contains program counter for selected frame."));
1454 #if defined(TUI)
1455 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1456 `tui_version'. */
1457 if (tui_active)
1458 /* FIXME: cagney/2004-02-07: This should be an observer. */
1459 low = tui_get_low_disassembly_address (gdbarch, low, pc);
1460 #endif
1461 low += gdbarch_deprecated_function_start_offset (gdbarch);
1463 print_disassembly (gdbarch, name, low, high, block, flags);
1466 /* Dump a specified section of assembly code.
1468 Usage:
1469 disassemble [/mrs]
1470 - dump the assembly code for the function of the current pc
1471 disassemble [/mrs] addr
1472 - dump the assembly code for the function at ADDR
1473 disassemble [/mrs] low,high
1474 disassemble [/mrs] low,+length
1475 - dump the assembly code in the range [LOW,HIGH), or [LOW,LOW+length)
1477 A /m modifier will include source code with the assembly in a
1478 "source centric" view. This view lists only the file of the first insn,
1479 even if other source files are involved (e.g., inlined functions), and
1480 the output is in source order, even with optimized code. This view is
1481 considered deprecated as it hasn't been useful in practice.
1483 A /r modifier will include raw instructions in hex with the assembly.
1485 A /s modifier will include source code with the assembly, like /m, with
1486 two important differences:
1487 1) The output is still in pc address order.
1488 2) File names and contents for all relevant source files are displayed. */
1490 static void
1491 disassemble_command (const char *arg, int from_tty)
1493 struct gdbarch *gdbarch = get_current_arch ();
1494 CORE_ADDR low, high;
1495 const general_symbol_info *symbol = nullptr;
1496 const char *name;
1497 CORE_ADDR pc;
1498 gdb_disassembly_flags flags;
1499 const char *p;
1500 const struct block *block = nullptr;
1502 p = arg;
1503 name = NULL;
1504 flags = 0;
1506 if (p && *p == '/')
1508 ++p;
1510 if (*p == '\0')
1511 error (_("Missing modifier."));
1513 while (*p && ! isspace (*p))
1515 switch (*p++)
1517 case 'm':
1518 flags |= DISASSEMBLY_SOURCE_DEPRECATED;
1519 break;
1520 case 'r':
1521 flags |= DISASSEMBLY_RAW_INSN;
1522 break;
1523 case 's':
1524 flags |= DISASSEMBLY_SOURCE;
1525 break;
1526 default:
1527 error (_("Invalid disassembly modifier."));
1531 p = skip_spaces (p);
1534 if ((flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1535 == (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1536 error (_("Cannot specify both /m and /s."));
1538 if (! p || ! *p)
1540 flags |= DISASSEMBLY_OMIT_FNAME;
1541 disassemble_current_function (flags);
1542 return;
1545 pc = value_as_address (parse_to_comma_and_eval (&p));
1546 if (p[0] == ',')
1547 ++p;
1548 if (p[0] == '\0')
1550 /* One argument. */
1551 if (!find_pc_partial_function_sym (pc, &symbol, &low, &high, &block))
1552 error (_("No function contains specified address."));
1554 if (asm_demangle)
1555 name = symbol->print_name ();
1556 else
1557 name = symbol->linkage_name ();
1559 #if defined(TUI)
1560 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1561 `tui_version'. */
1562 if (tui_active)
1563 /* FIXME: cagney/2004-02-07: This should be an observer. */
1564 low = tui_get_low_disassembly_address (gdbarch, low, pc);
1565 #endif
1566 low += gdbarch_deprecated_function_start_offset (gdbarch);
1567 flags |= DISASSEMBLY_OMIT_FNAME;
1569 else
1571 /* Two arguments. */
1572 int incl_flag = 0;
1573 low = pc;
1574 p = skip_spaces (p);
1575 if (p[0] == '+')
1577 ++p;
1578 incl_flag = 1;
1580 high = parse_and_eval_address (p);
1581 if (incl_flag)
1582 high += low;
1585 print_disassembly (gdbarch, name, low, high, block, flags);
1588 static void
1589 make_command (const char *arg, int from_tty)
1591 if (arg == 0)
1592 shell_escape ("make", from_tty);
1593 else
1595 std::string cmd = std::string ("make ") + arg;
1597 shell_escape (cmd.c_str (), from_tty);
1601 static void
1602 show_user (const char *args, int from_tty)
1604 struct cmd_list_element *c;
1606 if (args)
1608 const char *comname = args;
1610 c = lookup_cmd (&comname, cmdlist, "", NULL, 0, 1);
1611 if (!cli_user_command_p (c))
1612 error (_("Not a user command."));
1613 show_user_1 (c, "", args, gdb_stdout);
1615 else
1617 for (c = cmdlist; c; c = c->next)
1619 if (cli_user_command_p (c) || c->prefixlist != NULL)
1620 show_user_1 (c, "", c->name, gdb_stdout);
1625 /* Search through names of commands and documentations for a certain
1626 regular expression. */
1628 static void
1629 apropos_command (const char *arg, int from_tty)
1631 bool verbose = arg && check_for_argument (&arg, "-v", 2);
1633 if (arg == NULL || *arg == '\0')
1634 error (_("REGEXP string is empty"));
1636 compiled_regex pattern (arg, REG_ICASE,
1637 _("Error in regular expression"));
1639 apropos_cmd (gdb_stdout, cmdlist, verbose, pattern, "");
1642 /* The options for the "alias" command. */
1644 struct alias_opts
1646 /* For "-a". */
1647 bool abbrev_flag = false;
1650 static const gdb::option::option_def alias_option_defs[] = {
1652 gdb::option::flag_option_def<alias_opts> {
1653 "a",
1654 [] (alias_opts *opts) { return &opts->abbrev_flag; },
1655 N_("Specify that ALIAS is an abbreviation of COMMAND.\n\
1656 Abbreviations are not used in command completion."),
1661 /* Create an option_def_group for the "alias" options, with
1662 A_OPTS as context. */
1664 static gdb::option::option_def_group
1665 make_alias_options_def_group (alias_opts *a_opts)
1667 return {{alias_option_defs}, a_opts};
1670 /* Completer for the "alias_command". */
1672 static void
1673 alias_command_completer (struct cmd_list_element *ignore,
1674 completion_tracker &tracker,
1675 const char *text, const char *word)
1677 const auto grp = make_alias_options_def_group (nullptr);
1679 tracker.set_use_custom_word_point (true);
1681 if (gdb::option::complete_options
1682 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp))
1683 return;
1685 const char *delim = strchr (text, '=');
1687 /* If we're past the "=" delimiter, complete the
1688 "alias ALIAS = COMMAND [DEFAULT-ARGS...]" as if the user is
1689 typing COMMAND DEFAULT-ARGS... */
1690 if (delim != text
1691 && delim != nullptr
1692 && isspace (delim[-1])
1693 && (isspace (delim[1]) || delim[1] == '\0'))
1695 std::string new_text = std::string (delim + 1);
1697 tracker.advance_custom_word_point_by (delim + 1 - text);
1698 complete_nested_command_line (tracker, new_text.c_str ());
1699 return;
1702 /* We're not yet past the "=" delimiter. Complete a command, as
1703 the user might type an alias following a prefix command. */
1704 complete_nested_command_line (tracker, text);
1707 /* Subroutine of alias_command to simplify it.
1708 Return the first N elements of ARGV flattened back to a string
1709 with a space separating each element.
1710 ARGV may not be NULL.
1711 This does not take care of quoting elements in case they contain spaces
1712 on purpose. */
1714 static std::string
1715 argv_to_string (char **argv, int n)
1717 int i;
1718 std::string result;
1720 gdb_assert (argv != NULL);
1721 gdb_assert (n >= 0 && n <= countargv (argv));
1723 for (i = 0; i < n; ++i)
1725 if (i > 0)
1726 result += " ";
1727 result += argv[i];
1730 return result;
1733 /* Subroutine of alias_command to simplify it.
1734 Verifies that COMMAND can have an alias:
1735 COMMAND must exist.
1736 COMMAND must not have default args.
1737 This last condition is to avoid the following:
1738 alias aaa = backtrace -full
1739 alias bbb = aaa -past-main
1740 as (at least currently), alias default args are not cumulative
1741 and the user would expect bbb to execute 'backtrace -full -past-main'
1742 while it will execute 'backtrace -past-main'. */
1744 static void
1745 validate_aliased_command (const char *command)
1747 struct cmd_list_element *c;
1748 std::string default_args;
1750 c = lookup_cmd_1 (& command, cmdlist, NULL, &default_args, 1);
1752 if (c == NULL || c == (struct cmd_list_element *) -1)
1753 error (_("Invalid command to alias to: %s"), command);
1755 if (!default_args.empty ())
1756 error (_("Cannot define an alias of an alias that has default args"));
1759 /* Called when "alias" was incorrectly used. */
1761 static void
1762 alias_usage_error (void)
1764 error (_("Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]"));
1767 /* Make an alias of an existing command. */
1769 static void
1770 alias_command (const char *args, int from_tty)
1772 alias_opts a_opts;
1774 auto grp = make_alias_options_def_group (&a_opts);
1775 gdb::option::process_options
1776 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp);
1778 int i, alias_argc, command_argc;
1779 const char *equals;
1780 const char *alias, *command;
1782 if (args == NULL || strchr (args, '=') == NULL)
1783 alias_usage_error ();
1785 equals = strchr (args, '=');
1786 std::string args2 (args, equals - args);
1788 gdb_argv built_alias_argv (args2.c_str ());
1790 const char *default_args = equals + 1;
1791 struct cmd_list_element *c_command_prefix;
1793 lookup_cmd_for_default_args (&default_args, &c_command_prefix);
1794 std::string command_argv_str (equals + 1,
1795 default_args == nullptr
1796 ? strlen (equals + 1)
1797 : default_args - equals - 1);
1798 gdb_argv command_argv (command_argv_str.c_str ());
1800 char **alias_argv = built_alias_argv.get ();
1802 if (alias_argv[0] == NULL || command_argv[0] == NULL
1803 || *alias_argv[0] == '\0' || *command_argv[0] == '\0')
1804 alias_usage_error ();
1806 for (i = 0; alias_argv[i] != NULL; ++i)
1808 if (! valid_user_defined_cmd_name_p (alias_argv[i]))
1810 if (i == 0)
1811 error (_("Invalid command name: %s"), alias_argv[i]);
1812 else
1813 error (_("Invalid command element name: %s"), alias_argv[i]);
1817 alias_argc = countargv (alias_argv);
1818 command_argc = command_argv.count ();
1820 /* COMMAND must exist, and cannot have default args.
1821 Reconstruct the command to remove any extraneous spaces,
1822 for better error messages. */
1823 std::string command_string (argv_to_string (command_argv.get (),
1824 command_argc));
1825 command = command_string.c_str ();
1826 validate_aliased_command (command);
1828 /* ALIAS must not exist. */
1829 std::string alias_string (argv_to_string (alias_argv, alias_argc));
1830 alias = alias_string.c_str ();
1832 cmd_list_element *alias_cmd, *prefix_cmd, *cmd;
1834 if (lookup_cmd_composition (alias, &alias_cmd, &prefix_cmd, &cmd))
1836 const char *alias_name = alias_argv[alias_argc-1];
1838 /* If we found an existing ALIAS_CMD, check that the prefix differ or
1839 the name differ. */
1841 if (alias_cmd != nullptr
1842 && alias_cmd->prefix == prefix_cmd
1843 && strcmp (alias_name, alias_cmd->name) == 0)
1844 error (_("Alias already exists: %s"), alias);
1846 /* Check ALIAS differs from the found CMD. */
1848 if (cmd->prefix == prefix_cmd
1849 && strcmp (alias_name, cmd->name) == 0)
1850 error (_("Alias %s is the name of an existing command"), alias);
1855 struct cmd_list_element *alias_cmd;
1857 /* If ALIAS is one word, it is an alias for the entire COMMAND.
1858 Example: alias spe = set print elements
1860 Otherwise ALIAS and COMMAND must have the same number of words,
1861 and every word except the last must identify the same prefix command;
1862 and the last word of ALIAS is made an alias of the last word of COMMAND.
1863 Example: alias set print elms = set pr elem
1864 Note that unambiguous abbreviations are allowed. */
1866 if (alias_argc == 1)
1868 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
1869 alias_cmd = add_com_alias (xstrdup (alias_argv[0]), command, class_alias,
1870 a_opts.abbrev_flag);
1872 else
1874 const char *alias_prefix, *command_prefix;
1875 struct cmd_list_element *c_alias, *c_command;
1877 if (alias_argc != command_argc)
1878 error (_("Mismatched command length between ALIAS and COMMAND."));
1880 /* Create copies of ALIAS and COMMAND without the last word,
1881 and use that to verify the leading elements give the same
1882 prefix command. */
1883 std::string alias_prefix_string (argv_to_string (alias_argv,
1884 alias_argc - 1));
1885 std::string command_prefix_string (argv_to_string (command_argv.get (),
1886 command_argc - 1));
1887 alias_prefix = alias_prefix_string.c_str ();
1888 command_prefix = command_prefix_string.c_str ();
1890 c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, NULL, 1);
1891 /* We've already tried to look up COMMAND. */
1892 gdb_assert (c_command != NULL
1893 && c_command != (struct cmd_list_element *) -1);
1894 gdb_assert (c_command->prefixlist != NULL);
1895 c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, NULL, 1);
1896 if (c_alias != c_command)
1897 error (_("ALIAS and COMMAND prefixes do not match."));
1899 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
1900 alias_cmd = add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]),
1901 command_argv[command_argc - 1],
1902 class_alias, a_opts.abbrev_flag,
1903 c_command->prefixlist);
1906 gdb_assert (alias_cmd != nullptr);
1907 gdb_assert (alias_cmd->default_args.empty ());
1908 if (default_args != nullptr)
1910 default_args = skip_spaces (default_args);
1912 alias_cmd->default_args = default_args;
1916 /* Print the file / line number / symbol name of the location
1917 specified by SAL. */
1919 static void
1920 print_sal_location (const symtab_and_line &sal)
1922 scoped_restore_current_program_space restore_pspace;
1923 set_current_program_space (sal.pspace);
1925 const char *sym_name = NULL;
1926 if (sal.symbol != NULL)
1927 sym_name = sal.symbol->print_name ();
1928 printf_filtered (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"),
1929 symtab_to_filename_for_display (sal.symtab),
1930 sal.line, sym_name != NULL ? sym_name : "???");
1933 /* Print a list of files and line numbers which a user may choose from
1934 in order to list a function which was specified ambiguously (as
1935 with `list classname::overloadedfuncname', for example). The SALS
1936 array provides the filenames and line numbers. FORMAT is a
1937 printf-style format string used to tell the user what was
1938 ambiguous. */
1940 static void
1941 ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
1942 const char *format, ...)
1944 va_list ap;
1945 va_start (ap, format);
1946 vprintf_filtered (format, ap);
1947 va_end (ap);
1949 for (const auto &sal : sals)
1950 print_sal_location (sal);
1953 /* Comparison function for filter_sals. Returns a qsort-style
1954 result. */
1956 static int
1957 cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb)
1959 const char *dira = SYMTAB_DIRNAME (sala.symtab);
1960 const char *dirb = SYMTAB_DIRNAME (salb.symtab);
1961 int r;
1963 if (dira == NULL)
1965 if (dirb != NULL)
1966 return -1;
1968 else if (dirb == NULL)
1970 if (dira != NULL)
1971 return 1;
1973 else
1975 r = filename_cmp (dira, dirb);
1976 if (r)
1977 return r;
1980 r = filename_cmp (sala.symtab->filename, salb.symtab->filename);
1981 if (r)
1982 return r;
1984 if (sala.line < salb.line)
1985 return -1;
1986 return sala.line == salb.line ? 0 : 1;
1989 /* Remove any SALs that do not match the current program space, or
1990 which appear to be "file:line" duplicates. */
1992 static void
1993 filter_sals (std::vector<symtab_and_line> &sals)
1995 /* Remove SALs that do not match. */
1996 auto from = std::remove_if (sals.begin (), sals.end (),
1997 [&] (const symtab_and_line &sal)
1998 { return (sal.pspace != current_program_space || sal.symtab == NULL); });
2000 /* Remove dups. */
2001 std::sort (sals.begin (), from,
2002 [] (const symtab_and_line &sala, const symtab_and_line &salb)
2003 { return cmp_symtabs (sala, salb) < 0; });
2005 from = std::unique (sals.begin (), from,
2006 [&] (const symtab_and_line &sala,
2007 const symtab_and_line &salb)
2008 { return cmp_symtabs (sala, salb) == 0; });
2010 sals.erase (from, sals.end ());
2013 void
2014 init_cmd_lists (void)
2016 max_user_call_depth = 1024;
2019 static void
2020 show_info_verbose (struct ui_file *file, int from_tty,
2021 struct cmd_list_element *c,
2022 const char *value)
2024 if (info_verbose)
2025 fprintf_filtered (file,
2026 _("Verbose printing of informational messages is %s.\n"),
2027 value);
2028 else
2029 fprintf_filtered (file, _("Verbosity is %s.\n"), value);
2032 static void
2033 show_history_expansion_p (struct ui_file *file, int from_tty,
2034 struct cmd_list_element *c, const char *value)
2036 fprintf_filtered (file, _("History expansion on command input is %s.\n"),
2037 value);
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)
2044 fprintf_filtered (file,
2045 _("The max call depth for user-defined commands is %s.\n"),
2046 value);
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. */
2054 static cmd_list_element *
2055 setting_cmd (const char *fnname, struct cmd_list_element *showlist,
2056 int argc, struct value **argv)
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);
2063 struct type *type0 = check_typedef (value_type (argv[0]));
2065 if (type0->code () != TYPE_CODE_ARRAY
2066 && type0->code () != TYPE_CODE_STRING)
2067 error (_("First argument of %s must be a string."), fnname);
2069 const char *a0 = (const char *) value_contents (argv[0]);
2070 cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", NULL, -1, 0);
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);
2076 return cmd;
2079 /* Builds a value from the show CMD. */
2081 static struct value *
2082 value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch)
2084 switch (cmd->var_type)
2086 case var_integer:
2087 if (*(int *) cmd->var == INT_MAX)
2088 return value_from_longest (builtin_type (gdbarch)->builtin_int,
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:
2104 int val;
2106 switch (*(enum auto_boolean*) cmd->var)
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");
2120 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2121 val);
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");
2150 /* Implementation of the convenience function $_gdb_setting. */
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)
2157 return value_from_setting (setting_cmd ("$_gdb_setting", showlist,
2158 argc, argv),
2159 gdbarch);
2162 /* Implementation of the convenience function $_gdb_maint_setting. */
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)
2169 return value_from_setting (setting_cmd ("$_gdb_maint_setting",
2170 maintenance_show_cmdlist,
2171 argc, argv),
2172 gdbarch);
2175 /* Builds a string value from the show CMD. */
2177 static struct value *
2178 str_value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch)
2180 switch (cmd->var_type)
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:
2190 std::string cmd_val = get_setshow_command_value_string (cmd);
2192 return value_cstring (cmd_val.c_str (), cmd_val.size (),
2193 builtin_type (gdbarch)->builtin_char);
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);
2212 default:
2213 gdb_assert_not_reached ("bad var_type");
2217 /* Implementation of the convenience function $_gdb_setting_str. */
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)
2224 return str_value_from_setting (setting_cmd ("$_gdb_setting_str",
2225 showlist, argc, argv),
2226 gdbarch);
2230 /* Implementation of the convenience function $_gdb_maint_setting_str. */
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)
2237 return str_value_from_setting (setting_cmd ("$_gdb_maint_setting_str",
2238 maintenance_show_cmdlist,
2239 argc, argv),
2240 gdbarch);
2243 void _initialize_cli_cmds ();
2244 void
2245 _initialize_cli_cmds ()
2247 struct cmd_list_element *c;
2249 /* Define the classes of commands.
2250 They will appear in the help list in alphabetical order. */
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);
2290 /* Define general commands. */
2292 add_com ("pwd", class_files, pwd_command, _("\
2293 Print working directory.\n\
2294 This is used for your program as well."));
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);
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."));
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"
2322 NULL,
2323 show_script_ext_mode,
2324 &setlist, &showlist);
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);
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);
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);
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);
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);
2365 add_com ("complete", class_obscure, complete_command,
2366 _("List the completions for the rest of the line as a command."));
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);
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\
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\
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);
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\
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);
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);
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\
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);
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);
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);
2435 add_cmd ("version", no_set_class, show_version,
2436 _("Show what version of GDB this is."), &showlist);
2438 add_cmd ("configuration", no_set_class, show_configuration,
2439 _("Show how GDB was configured at build time."), &showlist);
2441 add_basic_prefix_cmd ("debug", no_class,
2442 _("Generic command for setting gdb debugging flags."),
2443 &setdebuglist, "set debug ", 0, &setlist);
2445 add_show_prefix_cmd ("debug", no_class,
2446 _("Generic command for showing gdb debugging flags."),
2447 &showdebuglist, "show debug ", 0, &showlist);
2449 c = add_com ("shell", class_support, shell_command, _("\
2450 Execute the rest of the line as a shell command.\n\
2451 With no arguments, run an inferior shell."));
2452 set_cmd_completer (c, filename_completer);
2454 add_com_alias ("!", "shell", class_support, 0);
2456 c = add_com ("edit", class_files, edit_command, _("\
2457 Edit specified file or function.\n\
2458 With no argument, edits file containing most recent line listed.\n\
2459 Editing targets can be specified in these ways:\n\
2460 FILE:LINENUM, to edit at that line in that file,\n\
2461 FUNCTION, to edit at the beginning of that function,\n\
2462 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2463 *ADDRESS, to edit at the line containing that address.\n\
2464 Uses EDITOR environment variable contents as editor (or ex as default)."));
2466 c->completer = location_completer;
2468 c = add_com ("pipe", class_support, pipe_command, _("\
2469 Send the output of a gdb command to a shell command.\n\
2470 Usage: | [COMMAND] | SHELL_COMMAND\n\
2471 Usage: | -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2472 Usage: pipe [COMMAND] | SHELL_COMMAND\n\
2473 Usage: pipe -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2475 Executes COMMAND and sends its output to SHELL_COMMAND.\n\
2477 The -d option indicates to use the string DELIM to separate COMMAND\n\
2478 from SHELL_COMMAND, in alternative to |. This is useful in\n\
2479 case COMMAND contains a | character.\n\
2481 With no COMMAND, repeat the last executed command\n\
2482 and send its output to SHELL_COMMAND."));
2483 set_cmd_completer_handle_brkchars (c, pipe_command_completer);
2484 add_com_alias ("|", "pipe", class_support, 0);
2486 add_com ("list", class_files, list_command, _("\
2487 List specified function or line.\n\
2488 With no argument, lists ten more lines after or around previous listing.\n\
2489 \"list -\" lists the ten lines before a previous ten-line listing.\n\
2490 One argument specifies a line, and ten lines are listed around that line.\n\
2491 Two arguments with comma between specify starting and ending lines to list.\n\
2492 Lines can be specified in these ways:\n\
2493 LINENUM, to list around that line in current file,\n\
2494 FILE:LINENUM, to list around that line in that file,\n\
2495 FUNCTION, to list around beginning of that function,\n\
2496 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2497 *ADDRESS, to list around the line containing that address.\n\
2498 With two args, if one is empty, it stands for ten lines away from\n\
2499 the other arg.\n\
2501 By default, when a single location is given, display ten lines.\n\
2502 This can be changed using \"set listsize\", and the current value\n\
2503 can be shown using \"show listsize\"."));
2505 add_com_alias ("l", "list", class_files, 1);
2507 if (dbx_commands)
2508 add_com_alias ("file", "list", class_files, 1);
2510 c = add_com ("disassemble", class_vars, disassemble_command, _("\
2511 Disassemble a specified section of memory.\n\
2512 Usage: disassemble[/m|/r|/s] START [, END]\n\
2513 Default is the function surrounding the pc of the selected frame.\n\
2515 With a /s modifier, source lines are included (if available).\n\
2516 In this mode, the output is displayed in PC address order, and\n\
2517 file names and contents for all relevant source files are displayed.\n\
2519 With a /m modifier, source lines are included (if available).\n\
2520 This view is \"source centric\": the output is in source line order,\n\
2521 regardless of any optimization that is present. Only the main source file\n\
2522 is displayed, not those of, e.g., any inlined functions.\n\
2523 This modifier hasn't proved useful in practice and is deprecated\n\
2524 in favor of /s.\n\
2526 With a /r modifier, raw instructions in hex are included.\n\
2528 With a single argument, the function surrounding that address is dumped.\n\
2529 Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
2530 in the form of \"start,end\", or \"start,+length\".\n\
2532 Note that the address is interpreted as an expression, not as a location\n\
2533 like in the \"break\" command.\n\
2534 So, for example, if you want to disassemble function bar in file foo.c\n\
2535 you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
2536 set_cmd_completer (c, location_completer);
2538 c = add_com ("make", class_support, make_command, _("\
2539 Run the ``make'' program using the rest of the line as arguments."));
2540 set_cmd_completer (c, filename_completer);
2541 add_cmd ("user", no_class, show_user, _("\
2542 Show definitions of non-python/scheme user defined commands.\n\
2543 Argument is the name of the user defined command.\n\
2544 With no argument, show definitions of all user defined commands."), &showlist);
2545 add_com ("apropos", class_support, apropos_command, _("\
2546 Search for commands matching a REGEXP.\n\
2547 Usage: apropos [-v] REGEXP\n\
2548 Flag -v indicates to produce a verbose output, showing full documentation\n\
2549 of the matching commands."));
2551 add_setshow_uinteger_cmd ("max-user-call-depth", no_class,
2552 &max_user_call_depth, _("\
2553 Set the max call depth for non-python/scheme user-defined commands."), _("\
2554 Show the max call depth for non-python/scheme user-defined commands."), NULL,
2555 NULL,
2556 show_max_user_call_depth,
2557 &setlist, &showlist);
2559 add_setshow_boolean_cmd ("trace-commands", no_class, &trace_commands, _("\
2560 Set tracing of GDB CLI commands."), _("\
2561 Show state of GDB CLI command tracing."), _("\
2562 When 'on', each command is displayed as it is executed."),
2563 NULL,
2564 NULL,
2565 &setlist, &showlist);
2567 const auto alias_opts = make_alias_options_def_group (nullptr);
2569 static std::string alias_help
2570 = gdb::option::build_help (_("\
2571 Define a new command that is an alias of an existing command.\n\
2572 Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]\n\
2573 ALIAS is the name of the alias command to create.\n\
2574 COMMAND is the command being aliased to.\n\
2576 Options:\n\
2577 %OPTIONS%\n\
2579 GDB will automatically prepend the provided DEFAULT-ARGS to the list\n\
2580 of arguments explicitly provided when using ALIAS.\n\
2581 Use \"help aliases\" to list all user defined aliases and their default args.\n\
2583 Examples:\n\
2584 Make \"spe\" an alias of \"set print elements\":\n\
2585 alias spe = set print elements\n\
2586 Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
2587 alias -a set print elms = set print elements\n\
2588 Make \"btf\" an alias of \"backtrace -full -past-entry -past-main\" :\n\
2589 alias btf = backtrace -full -past-entry -past-main\n\
2590 Make \"wLapPeu\" an alias of 2 nested \"with\":\n\
2591 alias wLapPeu = with language pascal -- with print elements unlimited --"),
2592 alias_opts);
2594 c = add_com ("alias", class_support, alias_command,
2595 alias_help.c_str ());
2597 set_cmd_completer_handle_brkchars (c, alias_command_completer);
2599 const char *source_help_text = xstrprintf (_("\
2600 Read commands from a file named FILE.\n\
2602 Usage: source [-s] [-v] FILE\n\
2603 -s: search for the script in the source search path,\n\
2604 even if FILE contains directories.\n\
2605 -v: each command in FILE is echoed as it is executed.\n\
2607 Note that the file \"%s\" is read automatically in this way\n\
2608 when GDB is started."), GDBINIT);
2609 c = add_cmd ("source", class_support, source_command,
2610 source_help_text, &cmdlist);
2611 set_cmd_completer (c, filename_completer);