[gdb/tdep] Fix reverse execution of LDR(immediate) T4
[binutils-gdb.git] / gdb / cli / cli-cmds.c
blobdf11f956245c51efd35fffbb51c31133650ca001
1 /* GDB CLI commands.
3 Copyright (C) 2000-2024 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"
25 #include "gdbsupport/gdb_wait.h"
26 #include "gdbcmd.h"
27 #include "gdbsupport/gdb_regex.h"
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"
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 #include "valprint.h"
44 #include "ui-out.h"
45 #include "interps.h"
47 #include "top.h"
48 #include "ui.h"
49 #include "cli/cli-decode.h"
50 #include "cli/cli-script.h"
51 #include "cli/cli-setshow.h"
52 #include "cli/cli-cmds.h"
53 #include "cli/cli-style.h"
54 #include "cli/cli-utils.h"
55 #include "cli/cli-style.h"
57 #include "extension.h"
58 #include "gdbsupport/pathstuff.h"
59 #include "gdbsupport/gdb_tilde_expand.h"
61 #ifdef TUI
62 #include "tui/tui.h"
63 #endif
65 #include <fcntl.h>
66 #include <algorithm>
67 #include <string>
69 /* Prototypes for local utility functions */
71 static void print_sal_location (const symtab_and_line &sal);
73 static void ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
74 const char *format, ...)
75 ATTRIBUTE_PRINTF (2, 3);
77 static void filter_sals (std::vector<symtab_and_line> &);
80 /* See cli-cmds.h. */
81 unsigned int max_user_call_depth = 1024;
83 /* Define all cmd_list_elements. */
85 /* Chain containing all defined commands. */
87 struct cmd_list_element *cmdlist;
89 /* Chain containing all defined info subcommands. */
91 struct cmd_list_element *infolist;
93 /* Chain containing all defined enable subcommands. */
95 struct cmd_list_element *enablelist;
97 /* Chain containing all defined disable subcommands. */
99 struct cmd_list_element *disablelist;
101 /* Chain containing all defined stop subcommands. */
103 struct cmd_list_element *stoplist;
105 /* Chain containing all defined delete subcommands. */
107 struct cmd_list_element *deletelist;
109 /* Chain containing all defined detach subcommands. */
111 struct cmd_list_element *detachlist;
113 /* Chain containing all defined kill subcommands. */
115 struct cmd_list_element *killlist;
117 /* Chain containing all defined set subcommands */
119 struct cmd_list_element *setlist;
121 /* Chain containing all defined unset subcommands */
123 struct cmd_list_element *unsetlist;
125 /* Chain containing all defined show subcommands. */
127 struct cmd_list_element *showlist;
129 /* Chain containing all defined \"set history\". */
131 struct cmd_list_element *sethistlist;
133 /* Chain containing all defined \"show history\". */
135 struct cmd_list_element *showhistlist;
137 /* Chain containing all defined \"unset history\". */
139 struct cmd_list_element *unsethistlist;
141 /* Chain containing all defined maintenance subcommands. */
143 struct cmd_list_element *maintenancelist;
145 /* Chain containing all defined "maintenance info" subcommands. */
147 struct cmd_list_element *maintenanceinfolist;
149 /* Chain containing all defined "maintenance print" subcommands. */
151 struct cmd_list_element *maintenanceprintlist;
153 /* Chain containing all defined "maintenance check" subcommands. */
155 struct cmd_list_element *maintenancechecklist;
157 /* Chain containing all defined "maintenance flush" subcommands. */
159 struct cmd_list_element *maintenanceflushlist;
161 struct cmd_list_element *setprintlist;
163 struct cmd_list_element *showprintlist;
165 struct cmd_list_element *setdebuglist;
167 struct cmd_list_element *showdebuglist;
169 struct cmd_list_element *setchecklist;
171 struct cmd_list_element *showchecklist;
173 struct cmd_list_element *setsourcelist;
175 struct cmd_list_element *showsourcelist;
177 /* Command tracing state. */
179 int source_verbose = 0;
180 bool trace_commands = false;
182 /* 'script-extension' option support. */
184 static const char script_ext_off[] = "off";
185 static const char script_ext_soft[] = "soft";
186 static const char script_ext_strict[] = "strict";
188 static const char *const script_ext_enums[] = {
189 script_ext_off,
190 script_ext_soft,
191 script_ext_strict,
192 NULL
195 static const char *script_ext_mode = script_ext_soft;
198 /* User-controllable flag to suppress event notification on CLI. */
200 static bool user_wants_cli_suppress_notification = false;
202 /* Utility used everywhere when at least one argument is needed and
203 none is supplied. */
205 void
206 error_no_arg (const char *why)
208 error (_("Argument required (%s)."), why);
211 /* This implements the "info" prefix command. Normally such commands
212 are automatically handled by add_basic_prefix_cmd, but in this case
213 a separate command is used so that it can be hooked into by
214 gdb-gdb.gdb. */
216 static void
217 info_command (const char *arg, int from_tty)
219 help_list (infolist, "info ", all_commands, gdb_stdout);
222 /* See cli/cli-cmds.h. */
224 void
225 with_command_1 (const char *set_cmd_prefix,
226 cmd_list_element *setlist, const char *args, int from_tty)
228 if (args == nullptr)
229 error (_("Missing arguments."));
231 const char *delim = strstr (args, "--");
232 const char *nested_cmd = nullptr;
234 if (delim == args)
235 error (_("Missing setting before '--' delimiter"));
237 if (delim == nullptr || *skip_spaces (&delim[2]) == '\0')
238 nested_cmd = repeat_previous ();
240 cmd_list_element *set_cmd = lookup_cmd (&args, setlist, set_cmd_prefix,
241 nullptr,
242 /*allow_unknown=*/ 0,
243 /*ignore_help_classes=*/ 1);
244 gdb_assert (set_cmd != nullptr);
246 if (!set_cmd->var.has_value ())
247 error (_("Cannot use this setting with the \"with\" command"));
249 std::string temp_value
250 = (delim == nullptr ? args : std::string (args, delim - args));
252 if (nested_cmd == nullptr)
253 nested_cmd = skip_spaces (delim + 2);
255 gdb_assert (set_cmd->var.has_value ());
256 std::string org_value = get_setshow_command_value_string (*set_cmd->var);
258 /* Tweak the setting to the new temporary value. */
259 do_set_command (temp_value.c_str (), from_tty, set_cmd);
263 scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
265 /* Execute the nested command. */
266 execute_command (nested_cmd, from_tty);
268 catch (const gdb_exception &ex)
270 /* Restore the setting and rethrow. If restoring the setting
271 throws, swallow the new exception and warn. There's nothing
272 else we can reasonably do. */
275 do_set_command (org_value.c_str (), from_tty, set_cmd);
277 catch (const gdb_exception &ex2)
279 warning (_("Couldn't restore setting: %s"), ex2.what ());
282 throw;
285 /* Restore the setting. */
286 do_set_command (org_value.c_str (), from_tty, set_cmd);
289 /* See cli/cli-cmds.h. */
291 void
292 with_command_completer_1 (const char *set_cmd_prefix,
293 completion_tracker &tracker,
294 const char *text)
296 tracker.set_use_custom_word_point (true);
298 const char *delim = strstr (text, "--");
300 /* If we're still not past the "--" delimiter, complete the "with"
301 command as if it was a "set" command. */
302 if (delim == text
303 || delim == nullptr
304 || !isspace (delim[-1])
305 || !(isspace (delim[2]) || delim[2] == '\0'))
307 std::string new_text = std::string (set_cmd_prefix) + text;
308 tracker.advance_custom_word_point_by (-(int) strlen (set_cmd_prefix));
309 complete_nested_command_line (tracker, new_text.c_str ());
310 return;
313 /* We're past the "--" delimiter. Complete on the sub command. */
314 const char *nested_cmd = skip_spaces (delim + 2);
315 tracker.advance_custom_word_point_by (nested_cmd - text);
316 complete_nested_command_line (tracker, nested_cmd);
319 /* The "with" command. */
321 static void
322 with_command (const char *args, int from_tty)
324 with_command_1 ("set ", setlist, args, from_tty);
327 /* "with" command completer. */
329 static void
330 with_command_completer (struct cmd_list_element *ignore,
331 completion_tracker &tracker,
332 const char *text, const char * /*word*/)
334 with_command_completer_1 ("set ", tracker, text);
337 /* Look up the contents of TEXT as a command usable with default args.
338 Throws an error if no such command is found.
339 Return the found command and advances TEXT past the found command.
340 If the found command is a postfix command, set *PREFIX_CMD to its
341 prefix command. */
343 static struct cmd_list_element *
344 lookup_cmd_for_default_args (const char **text,
345 struct cmd_list_element **prefix_cmd)
347 const char *orig_text = *text;
348 struct cmd_list_element *lcmd;
350 if (*text == nullptr || skip_spaces (*text) == nullptr)
351 error (_("ALIAS missing."));
353 /* We first use lookup_cmd to verify TEXT unambiguously identifies
354 a command. */
355 lcmd = lookup_cmd (text, cmdlist, "", NULL,
356 /*allow_unknown=*/ 0,
357 /*ignore_help_classes=*/ 1);
359 /* Note that we accept default args for prefix commands,
360 as a prefix command can also be a valid usable
361 command accepting some arguments.
362 For example, "thread apply" applies a command to a
363 list of thread ids, and is also the prefix command for
364 thread apply all. */
366 /* We have an unambiguous command for which default args
367 can be specified. What remains after having found LCMD
368 is either spaces, or the default args character. */
370 /* We then use lookup_cmd_composition to detect if the user
371 has specified an alias, and find the possible prefix_cmd
372 of cmd. */
373 struct cmd_list_element *alias, *cmd;
374 lookup_cmd_composition
375 (std::string (orig_text, *text - orig_text).c_str (),
376 &alias, prefix_cmd, &cmd);
377 gdb_assert (cmd != nullptr);
378 gdb_assert (cmd == lcmd);
379 if (alias != nullptr)
380 cmd = alias;
382 return cmd;
385 /* Provide documentation on command or list given by COMMAND. FROM_TTY
386 is ignored. */
388 static void
389 help_command (const char *command, int from_tty)
391 help_cmd (command, gdb_stdout);
395 /* Note: The "complete" command is used by Emacs to implement completion.
396 [Is that why this function writes output with *_unfiltered?] */
398 static void
399 complete_command (const char *arg, int from_tty)
401 dont_repeat ();
403 if (max_completions == 0)
405 /* Only print this for non-mi frontends. An MI frontend may not
406 be able to handle this. */
407 if (!current_uiout->is_mi_like_p ())
409 printf_unfiltered (_("max-completions is zero,"
410 " completion is disabled.\n"));
412 return;
415 if (arg == NULL)
416 arg = "";
418 int quote_char = '\0';
419 const char *word;
421 completion_result result = complete (arg, &word, &quote_char);
423 if (result.number_matches != 0)
425 std::string arg_prefix (arg, word - arg);
427 if (result.number_matches == 1)
428 printf_unfiltered ("%s%s\n", arg_prefix.c_str (), result.match_list[0]);
429 else
431 result.sort_match_list ();
433 for (size_t i = 0; i < result.number_matches; i++)
435 printf_unfiltered ("%s%s",
436 arg_prefix.c_str (),
437 result.match_list[i + 1]);
438 if (quote_char)
439 printf_unfiltered ("%c", quote_char);
440 printf_unfiltered ("\n");
444 if (result.number_matches == max_completions)
446 /* ARG_PREFIX and WORD are included in the output so that emacs
447 will include the message in the output. */
448 printf_unfiltered (_("%s%s %s\n"),
449 arg_prefix.c_str (), word,
450 get_max_completions_reached_message ());
456 is_complete_command (struct cmd_list_element *c)
458 return cmd_simple_func_eq (c, complete_command);
461 static void
462 show_version (const char *args, int from_tty)
464 print_gdb_version (gdb_stdout, true);
465 gdb_printf ("\n");
468 static void
469 show_configuration (const char *args, int from_tty)
471 print_gdb_configuration (gdb_stdout);
474 /* Handle the quit command. */
476 void
477 quit_command (const char *args, int from_tty)
479 int exit_code = 0;
481 /* An optional expression may be used to cause gdb to terminate with
482 the value of that expression. */
483 if (args)
485 struct value *val = parse_and_eval (args);
487 exit_code = (int) value_as_long (val);
490 if (!quit_confirm ())
491 error (_("Not confirmed."));
495 query_if_trace_running (from_tty);
497 catch (const gdb_exception_error &ex)
499 if (ex.error == TARGET_CLOSE_ERROR)
500 /* We don't care about this since we're quitting anyway, so keep
501 quitting. */
502 exception_print (gdb_stderr, ex);
503 else
504 /* Rethrow, to properly handle error (_("Not confirmed.")). */
505 throw;
508 quit_force (args ? &exit_code : NULL, from_tty);
511 static void
512 pwd_command (const char *args, int from_tty)
514 if (args)
515 error (_("The \"pwd\" command does not take an argument: %s"), args);
517 gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
519 if (cwd == NULL)
520 error (_("Error finding name of working directory: %s"),
521 safe_strerror (errno));
523 if (strcmp (cwd.get (), current_directory) != 0)
524 gdb_printf (_("Working directory %ps\n (canonically %ps).\n"),
525 styled_string (file_name_style.style (),
526 current_directory),
527 styled_string (file_name_style.style (), cwd.get ()));
528 else
529 gdb_printf (_("Working directory %ps.\n"),
530 styled_string (file_name_style.style (),
531 current_directory));
534 void
535 cd_command (const char *dir, int from_tty)
537 int len;
538 /* Found something other than leading repetitions of "/..". */
539 int found_real_path;
540 char *p;
542 /* If the new directory is absolute, repeat is a no-op; if relative,
543 repeat might be useful but is more likely to be a mistake. */
544 dont_repeat ();
546 gdb::unique_xmalloc_ptr<char> dir_holder
547 (tilde_expand (dir != NULL ? dir : "~"));
548 dir = dir_holder.get ();
550 if (chdir (dir) < 0)
551 perror_with_name (dir);
553 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
554 /* There's too much mess with DOSish names like "d:", "d:.",
555 "d:./foo" etc. Instead of having lots of special #ifdef'ed code,
556 simply get the canonicalized name of the current directory. */
557 gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
558 dir = cwd.get ();
559 #endif
561 len = strlen (dir);
562 if (IS_DIR_SEPARATOR (dir[len - 1]))
564 /* Remove the trailing slash unless this is a root directory
565 (including a drive letter on non-Unix systems). */
566 if (!(len == 1) /* "/" */
567 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
568 && !(len == 3 && dir[1] == ':') /* "d:/" */
569 #endif
571 len--;
574 dir_holder.reset (savestring (dir, len));
575 if (IS_ABSOLUTE_PATH (dir_holder.get ()))
577 xfree (current_directory);
578 current_directory = dir_holder.release ();
580 else
582 if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]))
583 current_directory = concat (current_directory, dir_holder.get (),
584 (char *) NULL);
585 else
586 current_directory = concat (current_directory, SLASH_STRING,
587 dir_holder.get (), (char *) NULL);
590 /* Now simplify any occurrences of `.' and `..' in the pathname. */
592 found_real_path = 0;
593 for (p = current_directory; *p;)
595 if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.'
596 && (p[2] == 0 || IS_DIR_SEPARATOR (p[2])))
597 memmove (p, p + 2, strlen (p + 2) + 1);
598 else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.'
599 && (p[3] == 0 || IS_DIR_SEPARATOR (p[3])))
601 if (found_real_path)
603 /* Search backwards for the directory just before the "/.."
604 and obliterate it and the "/..". */
605 char *q = p;
607 while (q != current_directory && !IS_DIR_SEPARATOR (q[-1]))
608 --q;
610 if (q == current_directory)
611 /* current_directory is
612 a relative pathname ("can't happen"--leave it alone). */
613 ++p;
614 else
616 memmove (q - 1, p + 3, strlen (p + 3) + 1);
617 p = q - 1;
620 else
621 /* We are dealing with leading repetitions of "/..", for
622 example "/../..", which is the Mach super-root. */
623 p += 3;
625 else
627 found_real_path = 1;
628 ++p;
632 forget_cached_source_info ();
634 if (from_tty)
635 pwd_command ((char *) 0, 1);
638 /* Show the current value of the 'script-extension' option. */
640 static void
641 show_script_ext_mode (struct ui_file *file, int from_tty,
642 struct cmd_list_element *c, const char *value)
644 gdb_printf (file,
645 _("Script filename extension recognition is \"%s\".\n"),
646 value);
649 /* Try to open SCRIPT_FILE.
650 If successful, the full path name is stored in *FULL_PATHP,
651 and the stream is returned.
652 If not successful, return NULL; errno is set for the last file
653 we tried to open.
655 If SEARCH_PATH is non-zero, and the file isn't found in cwd,
656 search for it in the source search path. */
658 std::optional<open_script>
659 find_and_open_script (const char *script_file, int search_path)
661 int fd;
662 openp_flags search_flags = OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH;
663 std::optional<open_script> opened;
665 gdb::unique_xmalloc_ptr<char> file (tilde_expand (script_file));
667 if (search_path)
668 search_flags |= OPF_SEARCH_IN_PATH;
670 /* Search for and open 'file' on the search path used for source
671 files. Put the full location in *FULL_PATHP. */
672 gdb::unique_xmalloc_ptr<char> full_path;
673 fd = openp (source_path.c_str (), search_flags,
674 file.get (), O_RDONLY, &full_path);
676 if (fd == -1)
677 return opened;
679 FILE *result = fdopen (fd, FOPEN_RT);
680 if (result == NULL)
682 int save_errno = errno;
684 close (fd);
685 errno = save_errno;
687 else
688 opened.emplace (gdb_file_up (result), std::move (full_path));
690 return opened;
693 /* Load script FILE, which has already been opened as STREAM.
694 FILE_TO_OPEN is the form of FILE to use if one needs to open the file.
695 This is provided as FILE may have been found via the source search path.
696 An important thing to note here is that FILE may be a symlink to a file
697 with a different or non-existing suffix, and thus one cannot infer the
698 extension language from FILE_TO_OPEN. */
700 static void
701 source_script_from_stream (FILE *stream, const char *file,
702 const char *file_to_open)
704 if (script_ext_mode != script_ext_off)
706 const struct extension_language_defn *extlang
707 = get_ext_lang_of_file (file);
709 if (extlang != NULL)
711 if (ext_lang_present_p (extlang))
713 script_sourcer_func *sourcer
714 = ext_lang_script_sourcer (extlang);
716 gdb_assert (sourcer != NULL);
717 sourcer (extlang, stream, file_to_open);
718 return;
720 else if (script_ext_mode == script_ext_soft)
722 /* Assume the file is a gdb script.
723 This is handled below. */
725 else
726 throw_ext_lang_unsupported (extlang);
730 script_from_file (stream, file);
733 /* Worker to perform the "source" command.
734 Load script FILE.
735 If SEARCH_PATH is non-zero, and the file isn't found in cwd,
736 search for it in the source search path. */
738 static void
739 source_script_with_search (const char *file, int from_tty, int search_path)
742 if (file == NULL || *file == 0)
743 error (_("source command requires file name of file to source."));
745 std::optional<open_script> opened = find_and_open_script (file, search_path);
746 if (!opened)
748 /* The script wasn't found, or was otherwise inaccessible.
749 If the source command was invoked interactively, throw an
750 error. Otherwise (e.g. if it was invoked by a script),
751 just emit a warning, rather than cause an error. */
752 if (from_tty)
753 perror_with_name (file);
754 else
756 perror_warning_with_name (file);
757 return;
761 /* The python support reopens the file, so we need to pass full_path here
762 in case the file was found on the search path. It's useful to do this
763 anyway so that error messages show the actual file used. But only do
764 this if we (may have) used search_path, as printing the full path in
765 errors for the non-search case can be more noise than signal. */
766 const char *file_to_open;
767 std::string tilde_expanded_file;
768 if (search_path)
769 file_to_open = opened->full_path.get ();
770 else
772 tilde_expanded_file = gdb_tilde_expand (file);
773 file_to_open = tilde_expanded_file.c_str ();
775 source_script_from_stream (opened->stream.get (), file, file_to_open);
778 /* Wrapper around source_script_with_search to export it to main.c
779 for use in loading .gdbinit scripts. */
781 void
782 source_script (const char *file, int from_tty)
784 source_script_with_search (file, from_tty, 0);
787 static void
788 source_command (const char *args, int from_tty)
790 const char *file = args;
791 int search_path = 0;
793 scoped_restore save_source_verbose = make_scoped_restore (&source_verbose);
795 /* -v causes the source command to run in verbose mode.
796 -s causes the file to be searched in the source search path,
797 even if the file name contains a '/'.
798 We still have to be able to handle filenames with spaces in a
799 backward compatible way, so buildargv is not appropriate. */
801 if (args)
803 while (args[0] != '\0')
805 /* Make sure leading white space does not break the
806 comparisons. */
807 args = skip_spaces (args);
809 if (args[0] != '-')
810 break;
812 if (args[1] == 'v' && isspace (args[2]))
814 source_verbose = 1;
816 /* Skip passed -v. */
817 args = &args[3];
819 else if (args[1] == 's' && isspace (args[2]))
821 search_path = 1;
823 /* Skip passed -s. */
824 args = &args[3];
826 else
827 break;
830 file = skip_spaces (args);
833 source_script_with_search (file, from_tty, search_path);
837 static void
838 echo_command (const char *text, int from_tty)
840 const char *p = text;
841 int c;
843 if (text)
844 while ((c = *p++) != '\0')
846 if (c == '\\')
848 /* \ at end of argument is used after spaces
849 so they won't be lost. */
850 if (*p == 0)
851 return;
853 c = parse_escape (get_current_arch (), &p);
854 if (c >= 0)
855 gdb_printf ("%c", c);
857 else
858 gdb_printf ("%c", c);
861 gdb_stdout->reset_style ();
863 /* Force this output to appear now. */
864 gdb_flush (gdb_stdout);
867 /* Sets the last launched shell command convenience variables based on
868 EXIT_STATUS. */
870 static void
871 exit_status_set_internal_vars (int exit_status)
873 struct internalvar *var_code = lookup_internalvar ("_shell_exitcode");
874 struct internalvar *var_signal = lookup_internalvar ("_shell_exitsignal");
876 clear_internalvar (var_code);
877 clear_internalvar (var_signal);
879 /* Keep the logic here in sync with shell_internal_fn. */
881 if (WIFEXITED (exit_status))
882 set_internalvar_integer (var_code, WEXITSTATUS (exit_status));
883 #ifdef __MINGW32__
884 else if (WIFSIGNALED (exit_status) && WTERMSIG (exit_status) == -1)
886 /* The -1 condition can happen on MinGW, if we don't recognize
887 the fatal exception code encoded in the exit status; see
888 gdbsupport/gdb_wait.c. We don't want to lose information in
889 the exit status in that case. Record it as a normal exit
890 with the full exit status, including the higher 0xC0000000
891 bits. */
892 set_internalvar_integer (var_code, exit_status);
894 #endif
895 else if (WIFSIGNALED (exit_status))
896 set_internalvar_integer (var_signal, WTERMSIG (exit_status));
897 else
898 warning (_("unexpected shell command exit status %d"), exit_status);
901 /* Run ARG under the shell, and return the exit status. If ARG is
902 NULL, run an interactive shell. */
904 static int
905 run_under_shell (const char *arg, int from_tty)
907 #if defined(CANT_FORK) || \
908 (!defined(HAVE_WORKING_VFORK) && !defined(HAVE_WORKING_FORK))
909 /* If ARG is NULL, they want an inferior shell, but `system' just
910 reports if the shell is available when passed a NULL arg. */
911 int rc = system (arg ? arg : "");
913 if (!arg)
914 arg = "inferior shell";
916 if (rc == -1)
917 gdb_printf (gdb_stderr, "Cannot execute %s: %s\n", arg,
918 safe_strerror (errno));
919 else if (rc)
920 gdb_printf (gdb_stderr, "%s exited with status %d\n", arg, rc);
921 #ifdef GLOBAL_CURDIR
922 /* Make sure to return to the directory GDB thinks it is, in case
923 the shell command we just ran changed it. */
924 chdir (current_directory);
925 #endif
926 return rc;
927 #else /* Can fork. */
928 int status, pid;
930 if ((pid = vfork ()) == 0)
932 const char *p, *user_shell = get_shell ();
934 close_most_fds ();
936 /* Get the name of the shell for arg0. */
937 p = lbasename (user_shell);
939 if (!arg)
940 execl (user_shell, p, (char *) 0);
941 else
942 execl (user_shell, p, "-c", arg, (char *) 0);
944 gdb_printf (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
945 safe_strerror (errno));
946 _exit (0177);
949 if (pid != -1)
950 waitpid (pid, &status, 0);
951 else
952 error (_("Fork failed"));
953 return status;
954 #endif /* Can fork. */
957 /* Escape out to the shell to run ARG. If ARG is NULL, launch and
958 interactive shell. Sets $_shell_exitcode and $_shell_exitsignal
959 convenience variables based on the exits status. */
961 static void
962 shell_escape (const char *arg, int from_tty)
964 int status = run_under_shell (arg, from_tty);
965 exit_status_set_internal_vars (status);
968 /* Implementation of the "shell" command. */
970 static void
971 shell_command (const char *arg, int from_tty)
973 shell_escape (arg, from_tty);
976 static void
977 edit_command (const char *arg, int from_tty)
979 struct symtab_and_line sal;
980 struct symbol *sym;
981 const char *editor;
982 const char *fn;
984 /* Pull in the current default source line if necessary. */
985 if (arg == 0)
987 set_default_source_symtab_and_line ();
988 sal = get_current_source_symtab_and_line ();
991 /* Bare "edit" edits file with present line. */
993 if (arg == 0)
995 if (sal.symtab == 0)
996 error (_("No default source file yet."));
997 sal.line += get_lines_to_list () / 2;
999 else
1001 const char *arg1;
1003 /* Now should only be one argument -- decode it in SAL. */
1004 arg1 = arg;
1005 location_spec_up locspec = string_to_location_spec (&arg1,
1006 current_language);
1008 if (*arg1)
1009 error (_("Junk at end of line specification."));
1011 std::vector<symtab_and_line> sals = decode_line_1 (locspec.get (),
1012 DECODE_LINE_LIST_MODE,
1013 NULL, NULL, 0);
1015 filter_sals (sals);
1016 if (sals.empty ())
1018 /* C++ */
1019 return;
1021 if (sals.size () > 1)
1023 ambiguous_line_spec (sals,
1024 _("Specified line is ambiguous:\n"));
1025 return;
1028 sal = sals[0];
1030 /* If line was specified by address, first print exactly which
1031 line, and which file. In this case, sal.symtab == 0 means
1032 address is outside of all known source files, not that user
1033 failed to give a filename. */
1034 if (*arg == '*')
1036 struct gdbarch *gdbarch;
1038 if (sal.symtab == 0)
1039 error (_("No source file for address %s."),
1040 paddress (get_current_arch (), sal.pc));
1042 gdbarch = sal.symtab->compunit ()->objfile ()->arch ();
1043 sym = find_pc_function (sal.pc);
1044 if (sym)
1045 gdb_printf ("%s is in %s (%s:%d).\n",
1046 paddress (gdbarch, sal.pc),
1047 sym->print_name (),
1048 symtab_to_filename_for_display (sal.symtab),
1049 sal.line);
1050 else
1051 gdb_printf ("%s is at %s:%d.\n",
1052 paddress (gdbarch, sal.pc),
1053 symtab_to_filename_for_display (sal.symtab),
1054 sal.line);
1057 /* If what was given does not imply a symtab, it must be an
1058 undebuggable symbol which means no source code. */
1060 if (sal.symtab == 0)
1061 error (_("No line number known for %s."), arg);
1064 if ((editor = getenv ("EDITOR")) == NULL)
1065 editor = "/bin/ex";
1067 fn = symtab_to_fullname (sal.symtab);
1069 /* Quote the file name, in case it has whitespace or other special
1070 characters. */
1071 gdb::unique_xmalloc_ptr<char> p
1072 = xstrprintf ("%s +%d \"%s\"", editor, sal.line, fn);
1073 shell_escape (p.get (), from_tty);
1076 /* The options for the "pipe" command. */
1078 struct pipe_cmd_opts
1080 /* For "-d". */
1081 std::string delimiter;
1084 static const gdb::option::option_def pipe_cmd_option_defs[] = {
1086 gdb::option::string_option_def<pipe_cmd_opts> {
1087 "d",
1088 [] (pipe_cmd_opts *opts) { return &opts->delimiter; },
1089 nullptr,
1090 N_("Indicates to use the specified delimiter string to separate\n\
1091 COMMAND from SHELL_COMMAND, in alternative to |. This is useful in\n\
1092 case COMMAND contains a | character."),
1097 /* Create an option_def_group for the "pipe" command's options, with
1098 OPTS as context. */
1100 static inline gdb::option::option_def_group
1101 make_pipe_cmd_options_def_group (pipe_cmd_opts *opts)
1103 return {{pipe_cmd_option_defs}, opts};
1106 /* Implementation of the "pipe" command. */
1108 static void
1109 pipe_command (const char *arg, int from_tty)
1111 pipe_cmd_opts opts;
1113 auto grp = make_pipe_cmd_options_def_group (&opts);
1114 gdb::option::process_options
1115 (&arg, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
1117 const char *delim = "|";
1118 if (!opts.delimiter.empty ())
1119 delim = opts.delimiter.c_str ();
1121 const char *command = arg;
1122 if (command == nullptr)
1123 error (_("Missing COMMAND"));
1125 arg = strstr (arg, delim);
1127 if (arg == nullptr)
1128 error (_("Missing delimiter before SHELL_COMMAND"));
1130 std::string gdb_cmd (command, arg - command);
1132 arg += strlen (delim); /* Skip the delimiter. */
1134 if (gdb_cmd.empty ())
1135 gdb_cmd = repeat_previous ();
1137 const char *shell_command = skip_spaces (arg);
1138 if (*shell_command == '\0')
1139 error (_("Missing SHELL_COMMAND"));
1141 FILE *to_shell_command = popen (shell_command, "w");
1143 if (to_shell_command == nullptr)
1144 error (_("Error launching \"%s\""), shell_command);
1148 stdio_file pipe_file (to_shell_command);
1150 execute_command_to_ui_file (&pipe_file, gdb_cmd.c_str (), from_tty);
1152 catch (...)
1154 pclose (to_shell_command);
1155 throw;
1158 int exit_status = pclose (to_shell_command);
1160 if (exit_status < 0)
1161 error (_("shell command \"%s\" failed: %s"), shell_command,
1162 safe_strerror (errno));
1163 exit_status_set_internal_vars (exit_status);
1166 /* Completer for the pipe command. */
1168 static void
1169 pipe_command_completer (struct cmd_list_element *ignore,
1170 completion_tracker &tracker,
1171 const char *text, const char *word_ignored)
1173 pipe_cmd_opts opts;
1175 const char *org_text = text;
1176 auto grp = make_pipe_cmd_options_def_group (&opts);
1177 if (gdb::option::complete_options
1178 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp))
1179 return;
1181 const char *delimiter = "|";
1182 if (!opts.delimiter.empty ())
1183 delimiter = opts.delimiter.c_str ();
1185 /* Check if we're past option values already. */
1186 if (text > org_text && !isspace (text[-1]))
1187 return;
1189 const char *delim = strstr (text, delimiter);
1191 /* If we're still not past the delimiter, complete the gdb
1192 command. */
1193 if (delim == nullptr || delim == text)
1195 complete_nested_command_line (tracker, text);
1196 return;
1199 /* We're past the delimiter. What follows is a shell command, which
1200 we don't know how to complete. */
1203 /* Helper for the list_command function. Prints the lines around (and
1204 including) line stored in CURSAL. ARG contains the arguments used in
1205 the command invocation, and is used to determine a special case when
1206 printing backwards. */
1207 static void
1208 list_around_line (const char *arg, symtab_and_line cursal)
1210 int first;
1212 first = std::max (cursal.line - get_lines_to_list () / 2, 1);
1214 /* A small special case --- if listing backwards, and we
1215 should list only one line, list the preceding line,
1216 instead of the exact line we've just shown after e.g.,
1217 stopping for a breakpoint. */
1218 if (arg != NULL && arg[0] == '-'
1219 && get_lines_to_list () == 1 && first > 1)
1220 first -= 1;
1222 print_source_lines (cursal.symtab, source_lines_range (first), 0);
1225 static void
1226 list_command (const char *arg, int from_tty)
1228 struct symbol *sym;
1229 const char *arg1;
1230 int no_end = 1;
1231 int dummy_end = 0;
1232 int dummy_beg = 0;
1233 int linenum_beg = 0;
1234 const char *p;
1236 /* Pull in the current default source line if necessary. */
1237 if (arg == NULL || ((arg[0] == '+' || arg[0] == '-' || arg[0] == '.') && arg[1] == '\0'))
1239 set_default_source_symtab_and_line ();
1240 symtab_and_line cursal = get_current_source_symtab_and_line ();
1242 /* If this is the first "list" since we've set the current
1243 source line, center the listing around that line. */
1244 if (get_first_line_listed () == 0 && (arg == nullptr || arg[0] != '.'))
1246 list_around_line (arg, cursal);
1249 /* "l" and "l +" lists the next few lines, unless we're listing past
1250 the end of the file. */
1251 else if (arg == nullptr || arg[0] == '+')
1253 if (last_symtab_line (cursal.symtab) >= cursal.line)
1254 print_source_lines (cursal.symtab,
1255 source_lines_range (cursal.line), 0);
1256 else
1258 error (_("End of the file was already reached, use \"list .\" to"
1259 " list the current location again"));
1263 /* "l -" lists previous ten lines, the ones before the ten just
1264 listed. */
1265 else if (arg[0] == '-')
1267 if (get_first_line_listed () == 1)
1268 error (_("Already at the start of %s."),
1269 symtab_to_filename_for_display (cursal.symtab));
1270 source_lines_range range (get_first_line_listed (),
1271 source_lines_range::BACKWARD);
1272 print_source_lines (cursal.symtab, range, 0);
1275 /* "list ." lists the default location again. */
1276 else if (arg[0] == '.')
1278 if (target_has_stack ())
1280 /* Find the current line by getting the PC of the currently
1281 selected frame, and finding the line associated to it. */
1282 frame_info_ptr frame = get_selected_frame (nullptr);
1283 CORE_ADDR curr_pc = get_frame_pc (frame);
1284 cursal = find_pc_line (curr_pc, 0);
1286 else
1288 /* The inferior is not running, so reset the current source
1289 location to the default (usually the main function). */
1290 clear_current_source_symtab_and_line ();
1291 set_default_source_symtab_and_line ();
1292 cursal = get_current_source_symtab_and_line ();
1294 if (cursal.symtab == nullptr)
1295 error (_("No debug information available to print source lines."));
1296 list_around_line (arg, cursal);
1297 /* Set the repeat args so just pressing "enter" after using "list ."
1298 will print the following lines instead of the same lines again. */
1299 if (from_tty)
1300 set_repeat_arguments ("");
1303 return;
1306 /* Now if there is only one argument, decode it in SAL
1307 and set NO_END.
1308 If there are two arguments, decode them in SAL and SAL_END
1309 and clear NO_END; however, if one of the arguments is blank,
1310 set DUMMY_BEG or DUMMY_END to record that fact. */
1312 if (!have_full_symbols () && !have_partial_symbols ())
1313 error (_("No symbol table is loaded. Use the \"file\" command."));
1315 std::vector<symtab_and_line> sals;
1316 symtab_and_line sal, sal_end;
1318 arg1 = arg;
1319 if (*arg1 == ',')
1320 dummy_beg = 1;
1321 else
1323 location_spec_up locspec
1324 = string_to_location_spec (&arg1, current_language);
1326 /* We know that the ARG string is not empty, yet the attempt to
1327 parse a location spec from the string consumed no characters.
1328 This most likely means that the first thing in ARG looks like
1329 a location spec condition, and so the string_to_location_spec
1330 call stopped parsing. */
1331 if (arg1 == arg)
1332 error (_("Junk at end of line specification."));
1334 sals = decode_line_1 (locspec.get (), DECODE_LINE_LIST_MODE,
1335 NULL, NULL, 0);
1336 filter_sals (sals);
1337 if (sals.empty ())
1339 /* C++ */
1340 return;
1343 sal = sals[0];
1346 /* Record whether the BEG arg is all digits. */
1348 for (p = arg; p != arg1 && *p >= '0' && *p <= '9'; p++);
1349 linenum_beg = (p == arg1);
1351 /* Save the range of the first argument, in case we need to let the
1352 user know it was ambiguous. */
1353 const char *beg = arg;
1354 size_t beg_len = arg1 - beg;
1356 while (*arg1 == ' ' || *arg1 == '\t')
1357 arg1++;
1358 if (*arg1 == ',')
1360 no_end = 0;
1361 if (sals.size () > 1)
1363 ambiguous_line_spec (sals,
1364 _("Specified first line '%.*s' is ambiguous:\n"),
1365 (int) beg_len, beg);
1366 return;
1368 arg1++;
1369 while (*arg1 == ' ' || *arg1 == '\t')
1370 arg1++;
1371 if (*arg1 == 0)
1372 dummy_end = 1;
1373 else
1375 /* Save the last argument, in case we need to let the user
1376 know it was ambiguous. */
1377 const char *end_arg = arg1;
1379 location_spec_up locspec
1380 = string_to_location_spec (&arg1, current_language);
1382 if (*arg1)
1383 error (_("Junk at end of line specification."));
1385 std::vector<symtab_and_line> sals_end
1386 = (dummy_beg
1387 ? decode_line_1 (locspec.get (), DECODE_LINE_LIST_MODE,
1388 NULL, NULL, 0)
1389 : decode_line_1 (locspec.get (), DECODE_LINE_LIST_MODE,
1390 NULL, sal.symtab, sal.line));
1392 filter_sals (sals_end);
1393 if (sals_end.empty ())
1394 return;
1395 if (sals_end.size () > 1)
1397 ambiguous_line_spec (sals_end,
1398 _("Specified last line '%s' is ambiguous:\n"),
1399 end_arg);
1400 return;
1402 sal_end = sals_end[0];
1406 if (*arg1)
1407 error (_("Junk at end of line specification."));
1409 if (!no_end && !dummy_beg && !dummy_end
1410 && sal.symtab != sal_end.symtab)
1411 error (_("Specified first and last lines are in different files."));
1412 if (dummy_beg && dummy_end)
1413 error (_("Two empty args do not say what lines to list."));
1415 /* If line was specified by address,
1416 first print exactly which line, and which file.
1418 In this case, sal.symtab == 0 means address is outside of all
1419 known source files, not that user failed to give a filename. */
1420 if (*arg == '*')
1422 struct gdbarch *gdbarch;
1424 if (sal.symtab == 0)
1425 error (_("No source file for address %s."),
1426 paddress (get_current_arch (), sal.pc));
1428 gdbarch = sal.symtab->compunit ()->objfile ()->arch ();
1429 sym = find_pc_function (sal.pc);
1430 if (sym)
1431 gdb_printf ("%s is in %s (%s:%d).\n",
1432 paddress (gdbarch, sal.pc),
1433 sym->print_name (),
1434 symtab_to_filename_for_display (sal.symtab), sal.line);
1435 else
1436 gdb_printf ("%s is at %s:%d.\n",
1437 paddress (gdbarch, sal.pc),
1438 symtab_to_filename_for_display (sal.symtab), sal.line);
1441 /* If line was not specified by just a line number, and it does not
1442 imply a symtab, it must be an undebuggable symbol which means no
1443 source code. */
1445 if (!linenum_beg && sal.symtab == 0)
1446 error (_("No line number known for %s."), arg);
1448 /* If this command is repeated with RET,
1449 turn it into the no-arg variant. */
1451 if (from_tty)
1452 set_repeat_arguments ("");
1454 if (dummy_beg && sal_end.symtab == 0)
1455 error (_("No default source file yet. Do \"help list\"."));
1456 if (dummy_beg)
1458 source_lines_range range (sal_end.line + 1,
1459 source_lines_range::BACKWARD);
1460 print_source_lines (sal_end.symtab, range, 0);
1462 else if (sal.symtab == 0)
1463 error (_("No default source file yet. Do \"help list\"."));
1464 else if (no_end)
1466 for (int i = 0; i < sals.size (); i++)
1468 sal = sals[i];
1469 int first_line = sal.line - get_lines_to_list () / 2;
1470 if (first_line < 1)
1471 first_line = 1;
1472 if (sals.size () > 1)
1473 print_sal_location (sal);
1474 print_source_lines (sal.symtab, source_lines_range (first_line), 0);
1477 else if (dummy_end)
1478 print_source_lines (sal.symtab, source_lines_range (sal.line), 0);
1479 else
1480 print_source_lines (sal.symtab,
1481 source_lines_range (sal.line, (sal_end.line + 1)),
1485 /* Subroutine of disassemble_command to simplify it.
1486 Perform the disassembly.
1487 NAME is the name of the function if known, or NULL.
1488 [LOW,HIGH) are the range of addresses to disassemble.
1489 BLOCK is the block to disassemble; it needs to be provided
1490 when non-contiguous blocks are disassembled; otherwise
1491 it can be NULL.
1492 MIXED is non-zero to print source with the assembler. */
1494 static void
1495 print_disassembly (struct gdbarch *gdbarch, const char *name,
1496 CORE_ADDR low, CORE_ADDR high,
1497 const struct block *block,
1498 gdb_disassembly_flags flags)
1500 #if defined(TUI)
1501 if (tui_is_window_visible (DISASSEM_WIN))
1502 tui_show_assembly (gdbarch, low);
1503 else
1504 #endif
1506 gdb_printf (_("Dump of assembler code "));
1507 if (name != NULL)
1508 gdb_printf (_("for function %ps:\n"),
1509 styled_string (function_name_style.style (), name));
1510 if (block == nullptr || block->is_contiguous ())
1512 if (name == NULL)
1513 gdb_printf (_("from %ps to %ps:\n"),
1514 styled_string (address_style.style (),
1515 paddress (gdbarch, low)),
1516 styled_string (address_style.style (),
1517 paddress (gdbarch, high)));
1519 /* Dump the specified range. */
1520 gdb_disassembly (gdbarch, current_uiout, flags, -1, low, high);
1522 else
1524 for (const blockrange &range : block->ranges ())
1526 CORE_ADDR range_low = range.start ();
1527 CORE_ADDR range_high = range.end ();
1529 gdb_printf (_("Address range %ps to %ps:\n"),
1530 styled_string (address_style.style (),
1531 paddress (gdbarch, range_low)),
1532 styled_string (address_style.style (),
1533 paddress (gdbarch, range_high)));
1534 gdb_disassembly (gdbarch, current_uiout, flags, -1,
1535 range_low, range_high);
1538 gdb_printf (_("End of assembler dump.\n"));
1542 /* Subroutine of disassemble_command to simplify it.
1543 Print a disassembly of the current function according to FLAGS. */
1545 static void
1546 disassemble_current_function (gdb_disassembly_flags flags)
1548 frame_info_ptr frame;
1549 struct gdbarch *gdbarch;
1550 CORE_ADDR low, high, pc;
1551 const char *name;
1552 const struct block *block;
1554 frame = get_selected_frame (_("No frame selected."));
1555 gdbarch = get_frame_arch (frame);
1556 pc = get_frame_address_in_block (frame);
1557 if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
1558 error (_("No function contains program counter for selected frame."));
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);
1568 print_disassembly (gdbarch, name, low, high, block, flags);
1571 /* Dump a specified section of assembly code.
1573 Usage:
1574 disassemble [/mrs]
1575 - dump the assembly code for the function of the current pc
1576 disassemble [/mrs] addr
1577 - dump the assembly code for the function at ADDR
1578 disassemble [/mrs] low,high
1579 disassemble [/mrs] low,+length
1580 - dump the assembly code in the range [LOW,HIGH), or [LOW,LOW+length)
1582 A /m modifier will include source code with the assembly in a
1583 "source centric" view. This view lists only the file of the first insn,
1584 even if other source files are involved (e.g., inlined functions), and
1585 the output is in source order, even with optimized code. This view is
1586 considered deprecated as it hasn't been useful in practice.
1588 A /r modifier will include raw instructions in hex with the assembly.
1590 A /b modifier is similar to /r except the instruction bytes are printed
1591 as separate bytes with no grouping, or endian switching.
1593 A /s modifier will include source code with the assembly, like /m, with
1594 two important differences:
1595 1) The output is still in pc address order.
1596 2) File names and contents for all relevant source files are displayed. */
1598 static void
1599 disassemble_command (const char *arg, int from_tty)
1601 struct gdbarch *gdbarch = get_current_arch ();
1602 CORE_ADDR low, high;
1603 const general_symbol_info *symbol = nullptr;
1604 const char *name;
1605 CORE_ADDR pc;
1606 gdb_disassembly_flags flags;
1607 const char *p;
1608 const struct block *block = nullptr;
1610 p = arg;
1611 name = NULL;
1612 flags = 0;
1614 if (p && *p == '/')
1616 ++p;
1618 if (*p == '\0')
1619 error (_("Missing modifier."));
1621 while (*p && ! isspace (*p))
1623 switch (*p++)
1625 case 'm':
1626 flags |= DISASSEMBLY_SOURCE_DEPRECATED;
1627 break;
1628 case 'r':
1629 flags |= DISASSEMBLY_RAW_INSN;
1630 break;
1631 case 'b':
1632 flags |= DISASSEMBLY_RAW_BYTES;
1633 break;
1634 case 's':
1635 flags |= DISASSEMBLY_SOURCE;
1636 break;
1637 default:
1638 error (_("Invalid disassembly modifier."));
1642 p = skip_spaces (p);
1645 if ((flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1646 == (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1647 error (_("Cannot specify both /m and /s."));
1649 if ((flags & (DISASSEMBLY_RAW_INSN | DISASSEMBLY_RAW_BYTES))
1650 == (DISASSEMBLY_RAW_INSN | DISASSEMBLY_RAW_BYTES))
1651 error (_("Cannot specify both /r and /b."));
1653 if (! p || ! *p)
1655 flags |= DISASSEMBLY_OMIT_FNAME;
1656 disassemble_current_function (flags);
1657 return;
1660 pc = value_as_address (parse_to_comma_and_eval (&p));
1661 if (p[0] == ',')
1662 ++p;
1663 if (p[0] == '\0')
1665 /* One argument. */
1666 if (!find_pc_partial_function_sym (pc, &symbol, &low, &high, &block))
1667 error (_("No function contains specified address."));
1669 if (asm_demangle)
1670 name = symbol->print_name ();
1671 else
1672 name = symbol->linkage_name ();
1674 #if defined(TUI)
1675 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1676 `tui_version'. */
1677 if (tui_active)
1678 /* FIXME: cagney/2004-02-07: This should be an observer. */
1679 low = tui_get_low_disassembly_address (gdbarch, low, pc);
1680 #endif
1681 low += gdbarch_deprecated_function_start_offset (gdbarch);
1682 flags |= DISASSEMBLY_OMIT_FNAME;
1684 else
1686 /* Two arguments. */
1687 int incl_flag = 0;
1688 low = pc;
1689 p = skip_spaces (p);
1690 if (p[0] == '+')
1692 ++p;
1693 incl_flag = 1;
1695 high = parse_and_eval_address (p);
1696 if (incl_flag)
1697 high += low;
1700 print_disassembly (gdbarch, name, low, high, block, flags);
1703 /* Command completion for the disassemble command. */
1705 static void
1706 disassemble_command_completer (struct cmd_list_element *ignore,
1707 completion_tracker &tracker,
1708 const char *text, const char * /* word */)
1710 if (skip_over_slash_fmt (tracker, &text))
1711 return;
1713 const char *word = advance_to_expression_complete_word_point (tracker, text);
1714 expression_completer (ignore, tracker, text, word);
1717 static void
1718 make_command (const char *arg, int from_tty)
1720 if (arg == 0)
1721 shell_escape ("make", from_tty);
1722 else
1724 std::string cmd = std::string ("make ") + arg;
1726 shell_escape (cmd.c_str (), from_tty);
1730 static void
1731 show_user (const char *args, int from_tty)
1733 struct cmd_list_element *c;
1735 if (args)
1737 const char *comname = args;
1739 c = lookup_cmd (&comname, cmdlist, "", NULL, 0, 1);
1740 if (!cli_user_command_p (c))
1741 error (_("Not a user command."));
1742 show_user_1 (c, "", args, gdb_stdout);
1744 else
1746 for (c = cmdlist; c; c = c->next)
1748 if (cli_user_command_p (c) || c->is_prefix ())
1749 show_user_1 (c, "", c->name, gdb_stdout);
1754 /* Return true if COMMAND or any of its sub-commands is a user defined command.
1755 This is a helper function for show_user_completer. */
1757 static bool
1758 has_user_subcmd (struct cmd_list_element *command)
1760 if (cli_user_command_p (command))
1761 return true;
1763 /* Alias command can yield false positive. Ignore them as the targeted
1764 command should be reachable anyway. */
1765 if (command->is_alias ())
1766 return false;
1768 if (command->is_prefix ())
1769 for (struct cmd_list_element *subcommand = *command->subcommands;
1770 subcommand != nullptr;
1771 subcommand = subcommand->next)
1772 if (has_user_subcmd (subcommand))
1773 return true;
1775 return false;
1778 /* Implement completer for the 'show user' command. */
1780 static void
1781 show_user_completer (cmd_list_element *,
1782 completion_tracker &tracker, const char *text,
1783 const char *word)
1785 struct cmd_list_element *cmd_group = cmdlist;
1787 /* TEXT can contain a chain of commands and subcommands. Follow the
1788 commands chain until we reach the point where the user wants a
1789 completion. */
1790 while (word > text)
1792 const char *curr_cmd = text;
1793 const char *after = skip_to_space (text);
1794 const size_t curr_cmd_len = after - text;
1795 text = skip_spaces (after);
1797 for (struct cmd_list_element *c = cmd_group; c != nullptr; c = c->next)
1799 if (strlen (c->name) == curr_cmd_len
1800 && strncmp (c->name, curr_cmd, curr_cmd_len) == 0)
1802 if (c->subcommands == nullptr)
1803 /* We arrived after a command with no child, so nothing more
1804 to complete. */
1805 return;
1807 cmd_group = *c->subcommands;
1808 break;
1813 const int wordlen = strlen (word);
1814 for (struct cmd_list_element *c = cmd_group; c != nullptr; c = c->next)
1815 if (has_user_subcmd (c))
1817 if (strncmp (c->name, word, wordlen) == 0)
1818 tracker.add_completion
1819 (gdb::unique_xmalloc_ptr<char> (xstrdup (c->name)));
1823 /* Search through names of commands and documentations for a certain
1824 regular expression. */
1826 static void
1827 apropos_command (const char *arg, int from_tty)
1829 bool verbose = arg && check_for_argument (&arg, "-v", 2);
1831 if (arg == NULL || *arg == '\0')
1832 error (_("REGEXP string is empty"));
1834 compiled_regex pattern (arg, REG_ICASE,
1835 _("Error in regular expression"));
1837 apropos_cmd (gdb_stdout, cmdlist, verbose, pattern);
1840 /* The options for the "alias" command. */
1842 struct alias_opts
1844 /* For "-a". */
1845 bool abbrev_flag = false;
1848 static const gdb::option::option_def alias_option_defs[] = {
1850 gdb::option::flag_option_def<alias_opts> {
1851 "a",
1852 [] (alias_opts *opts) { return &opts->abbrev_flag; },
1853 N_("Specify that ALIAS is an abbreviation of COMMAND.\n\
1854 Abbreviations are not used in command completion."),
1859 /* Create an option_def_group for the "alias" options, with
1860 A_OPTS as context. */
1862 static gdb::option::option_def_group
1863 make_alias_options_def_group (alias_opts *a_opts)
1865 return {{alias_option_defs}, a_opts};
1868 /* Completer for the "alias_command". */
1870 static void
1871 alias_command_completer (struct cmd_list_element *ignore,
1872 completion_tracker &tracker,
1873 const char *text, const char *word)
1875 const auto grp = make_alias_options_def_group (nullptr);
1877 tracker.set_use_custom_word_point (true);
1879 if (gdb::option::complete_options
1880 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp))
1881 return;
1883 const char *delim = strchr (text, '=');
1885 /* If we're past the "=" delimiter, complete the
1886 "alias ALIAS = COMMAND [DEFAULT-ARGS...]" as if the user is
1887 typing COMMAND DEFAULT-ARGS... */
1888 if (delim != text
1889 && delim != nullptr
1890 && isspace (delim[-1])
1891 && (isspace (delim[1]) || delim[1] == '\0'))
1893 std::string new_text = std::string (delim + 1);
1895 tracker.advance_custom_word_point_by (delim + 1 - text);
1896 complete_nested_command_line (tracker, new_text.c_str ());
1897 return;
1900 /* We're not yet past the "=" delimiter. Complete a command, as
1901 the user might type an alias following a prefix command. */
1902 complete_nested_command_line (tracker, text);
1905 /* Subroutine of alias_command to simplify it.
1906 Return the first N elements of ARGV flattened back to a string
1907 with a space separating each element.
1908 ARGV may not be NULL.
1909 This does not take care of quoting elements in case they contain spaces
1910 on purpose. */
1912 static std::string
1913 argv_to_string (char **argv, int n)
1915 int i;
1916 std::string result;
1918 gdb_assert (argv != NULL);
1919 gdb_assert (n >= 0 && n <= countargv (argv));
1921 for (i = 0; i < n; ++i)
1923 if (i > 0)
1924 result += " ";
1925 result += argv[i];
1928 return result;
1931 /* Subroutine of alias_command to simplify it.
1932 Verifies that COMMAND can have an alias:
1933 COMMAND must exist.
1934 COMMAND must not have default args.
1935 This last condition is to avoid the following:
1936 alias aaa = backtrace -full
1937 alias bbb = aaa -past-main
1938 as (at least currently), alias default args are not cumulative
1939 and the user would expect bbb to execute 'backtrace -full -past-main'
1940 while it will execute 'backtrace -past-main'. */
1942 static cmd_list_element *
1943 validate_aliased_command (const char *command)
1945 std::string default_args;
1946 cmd_list_element *c
1947 = lookup_cmd_1 (& command, cmdlist, NULL, &default_args, 1);
1949 if (c == NULL || c == (struct cmd_list_element *) -1)
1950 error (_("Invalid command to alias to: %s"), command);
1952 if (!default_args.empty ())
1953 error (_("Cannot define an alias of an alias that has default args"));
1955 return c;
1958 /* Called when "alias" was incorrectly used. */
1960 static void
1961 alias_usage_error (void)
1963 error (_("Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]"));
1966 /* Make an alias of an existing command. */
1968 static void
1969 alias_command (const char *args, int from_tty)
1971 alias_opts a_opts;
1973 auto grp = make_alias_options_def_group (&a_opts);
1974 gdb::option::process_options
1975 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp);
1977 int i, alias_argc, command_argc;
1978 const char *equals;
1979 const char *alias, *command;
1981 if (args == NULL || strchr (args, '=') == NULL)
1982 alias_usage_error ();
1984 equals = strchr (args, '=');
1985 std::string args2 (args, equals - args);
1987 gdb_argv built_alias_argv (args2.c_str ());
1989 const char *default_args = equals + 1;
1990 struct cmd_list_element *c_command_prefix;
1992 lookup_cmd_for_default_args (&default_args, &c_command_prefix);
1993 std::string command_argv_str (equals + 1,
1994 default_args == nullptr
1995 ? strlen (equals + 1)
1996 : default_args - equals - 1);
1997 gdb_argv command_argv (command_argv_str.c_str ());
1999 char **alias_argv = built_alias_argv.get ();
2001 if (alias_argv[0] == NULL || command_argv[0] == NULL
2002 || *alias_argv[0] == '\0' || *command_argv[0] == '\0')
2003 alias_usage_error ();
2005 for (i = 0; alias_argv[i] != NULL; ++i)
2007 if (! valid_user_defined_cmd_name_p (alias_argv[i]))
2009 if (i == 0)
2010 error (_("Invalid command name: %s"), alias_argv[i]);
2011 else
2012 error (_("Invalid command element name: %s"), alias_argv[i]);
2016 alias_argc = countargv (alias_argv);
2017 command_argc = command_argv.count ();
2019 /* COMMAND must exist, and cannot have default args.
2020 Reconstruct the command to remove any extraneous spaces,
2021 for better error messages. */
2022 std::string command_string (argv_to_string (command_argv.get (),
2023 command_argc));
2024 command = command_string.c_str ();
2025 cmd_list_element *target_cmd = validate_aliased_command (command);
2027 /* ALIAS must not exist. */
2028 std::string alias_string (argv_to_string (alias_argv, alias_argc));
2029 alias = alias_string.c_str ();
2031 cmd_list_element *alias_cmd, *prefix_cmd, *cmd;
2033 if (lookup_cmd_composition (alias, &alias_cmd, &prefix_cmd, &cmd))
2035 const char *alias_name = alias_argv[alias_argc-1];
2037 /* If we found an existing ALIAS_CMD, check that the prefix differ or
2038 the name differ. */
2040 if (alias_cmd != nullptr
2041 && alias_cmd->prefix == prefix_cmd
2042 && strcmp (alias_name, alias_cmd->name) == 0)
2043 error (_("Alias already exists: %s"), alias);
2045 /* Check ALIAS differs from the found CMD. */
2047 if (cmd->prefix == prefix_cmd
2048 && strcmp (alias_name, cmd->name) == 0)
2049 error (_("Alias %s is the name of an existing command"), alias);
2054 struct cmd_list_element *alias_cmd;
2056 /* If ALIAS is one word, it is an alias for the entire COMMAND.
2057 Example: alias spe = set print elements
2059 Otherwise ALIAS and COMMAND must have the same number of words,
2060 and every word except the last must identify the same prefix command;
2061 and the last word of ALIAS is made an alias of the last word of COMMAND.
2062 Example: alias set print elms = set pr elem
2063 Note that unambiguous abbreviations are allowed. */
2065 if (alias_argc == 1)
2067 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
2068 alias_cmd = add_com_alias (xstrdup (alias_argv[0]), target_cmd,
2069 class_alias, a_opts.abbrev_flag);
2071 else
2073 const char *alias_prefix, *command_prefix;
2074 struct cmd_list_element *c_alias, *c_command;
2076 if (alias_argc != command_argc)
2077 error (_("Mismatched command length between ALIAS and COMMAND."));
2079 /* Create copies of ALIAS and COMMAND without the last word,
2080 and use that to verify the leading elements give the same
2081 prefix command. */
2082 std::string alias_prefix_string (argv_to_string (alias_argv,
2083 alias_argc - 1));
2084 std::string command_prefix_string (argv_to_string (command_argv.get (),
2085 command_argc - 1));
2086 alias_prefix = alias_prefix_string.c_str ();
2087 command_prefix = command_prefix_string.c_str ();
2089 c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, NULL, 1);
2090 /* We've already tried to look up COMMAND. */
2091 gdb_assert (c_command != NULL
2092 && c_command != (struct cmd_list_element *) -1);
2093 gdb_assert (c_command->is_prefix ());
2094 c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, NULL, 1);
2095 if (c_alias != c_command)
2096 error (_("ALIAS and COMMAND prefixes do not match."));
2098 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
2099 alias_cmd = add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]),
2100 target_cmd, class_alias, a_opts.abbrev_flag,
2101 c_command->subcommands);
2104 gdb_assert (alias_cmd != nullptr);
2105 gdb_assert (alias_cmd->default_args.empty ());
2106 if (default_args != nullptr)
2108 default_args = skip_spaces (default_args);
2110 alias_cmd->default_args = default_args;
2114 /* Print the file / line number / symbol name of the location
2115 specified by SAL. */
2117 static void
2118 print_sal_location (const symtab_and_line &sal)
2120 scoped_restore_current_program_space restore_pspace;
2121 set_current_program_space (sal.pspace);
2123 const char *sym_name = NULL;
2124 if (sal.symbol != NULL)
2125 sym_name = sal.symbol->print_name ();
2126 gdb_printf (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"),
2127 symtab_to_filename_for_display (sal.symtab),
2128 sal.line, sym_name != NULL ? sym_name : "???");
2131 /* Print a list of files and line numbers which a user may choose from
2132 in order to list a function which was specified ambiguously (as
2133 with `list classname::overloadedfuncname', for example). The SALS
2134 array provides the filenames and line numbers. FORMAT is a
2135 printf-style format string used to tell the user what was
2136 ambiguous. */
2138 static void
2139 ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
2140 const char *format, ...)
2142 va_list ap;
2143 va_start (ap, format);
2144 gdb_vprintf (format, ap);
2145 va_end (ap);
2147 for (const auto &sal : sals)
2148 print_sal_location (sal);
2151 /* Comparison function for filter_sals. Returns a qsort-style
2152 result. */
2154 static int
2155 cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb)
2157 const char *dira = sala.symtab->compunit ()->dirname ();
2158 const char *dirb = salb.symtab->compunit ()->dirname ();
2159 int r;
2161 if (dira == NULL)
2163 if (dirb != NULL)
2164 return -1;
2166 else if (dirb == NULL)
2168 if (dira != NULL)
2169 return 1;
2171 else
2173 r = filename_cmp (dira, dirb);
2174 if (r)
2175 return r;
2178 r = filename_cmp (sala.symtab->filename, salb.symtab->filename);
2179 if (r)
2180 return r;
2182 if (sala.line < salb.line)
2183 return -1;
2184 return sala.line == salb.line ? 0 : 1;
2187 /* Remove any SALs that do not match the current program space, or
2188 which appear to be "file:line" duplicates. */
2190 static void
2191 filter_sals (std::vector<symtab_and_line> &sals)
2193 /* Remove SALs that do not match. */
2194 auto from = std::remove_if (sals.begin (), sals.end (),
2195 [&] (const symtab_and_line &sal)
2196 { return (sal.pspace != current_program_space || sal.symtab == NULL); });
2198 /* Remove dups. */
2199 std::sort (sals.begin (), from,
2200 [] (const symtab_and_line &sala, const symtab_and_line &salb)
2201 { return cmp_symtabs (sala, salb) < 0; });
2203 from = std::unique (sals.begin (), from,
2204 [&] (const symtab_and_line &sala,
2205 const symtab_and_line &salb)
2206 { return cmp_symtabs (sala, salb) == 0; });
2208 sals.erase (from, sals.end ());
2211 static void
2212 show_info_verbose (struct ui_file *file, int from_tty,
2213 struct cmd_list_element *c,
2214 const char *value)
2216 if (info_verbose)
2217 gdb_printf (file,
2218 _("Verbose printing of informational messages is %s.\n"),
2219 value);
2220 else
2221 gdb_printf (file, _("Verbosity is %s.\n"), value);
2224 static void
2225 show_history_expansion_p (struct ui_file *file, int from_tty,
2226 struct cmd_list_element *c, const char *value)
2228 gdb_printf (file, _("History expansion on command input is %s.\n"),
2229 value);
2232 static void
2233 show_max_user_call_depth (struct ui_file *file, int from_tty,
2234 struct cmd_list_element *c, const char *value)
2236 gdb_printf (file,
2237 _("The max call depth for user-defined commands is %s.\n"),
2238 value);
2241 /* Implement 'show suppress-cli-notifications'. */
2243 static void
2244 show_suppress_cli_notifications (ui_file *file, int from_tty,
2245 cmd_list_element *c, const char *value)
2247 gdb_printf (file, _("Suppression of printing CLI notifications "
2248 "is %s.\n"), value);
2251 /* Implement 'set suppress-cli-notifications'. */
2253 static void
2254 set_suppress_cli_notifications (const char *args, int from_tty,
2255 cmd_list_element *c)
2257 cli_suppress_notification.user_selected_context
2258 = user_wants_cli_suppress_notification;
2259 cli_suppress_notification.normal_stop
2260 = user_wants_cli_suppress_notification;
2263 /* Returns the cmd_list_element in SHOWLIST corresponding to the first
2264 argument of ARGV, which must contain one single value.
2265 Throws an error if no value provided, or value not correct.
2266 FNNAME is used in the error message. */
2268 static cmd_list_element *
2269 setting_cmd (const char *fnname, struct cmd_list_element *showlist,
2270 int argc, struct value **argv)
2272 if (argc == 0)
2273 error (_("You must provide an argument to %s"), fnname);
2274 if (argc != 1)
2275 error (_("You can only provide one argument to %s"), fnname);
2277 struct type *type0 = check_typedef (argv[0]->type ());
2279 if (type0->code () != TYPE_CODE_ARRAY
2280 && type0->code () != TYPE_CODE_STRING)
2281 error (_("First argument of %s must be a string."), fnname);
2283 /* Not all languages null-terminate their strings, by moving the string
2284 content into a std::string we ensure that a null-terminator is added.
2285 For languages that do add a null-terminator the std::string might end
2286 up with two null characters at the end, but that's harmless. */
2287 const std::string setting ((const char *) argv[0]->contents ().data (),
2288 type0->length ());
2289 const char *a0 = setting.c_str ();
2290 cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", NULL, -1, 0);
2292 if (cmd == nullptr || cmd->type != show_cmd)
2294 gdb_assert (showlist->prefix != nullptr);
2295 std::vector<std::string> components
2296 = showlist->prefix->command_components ();
2297 std::string full_name = components[0];
2298 for (int i = 1; i < components.size (); ++i)
2299 full_name += " " + components[i];
2300 error (_("First argument of %s must be a valid setting of the "
2301 "'%s' command."), fnname, full_name.c_str ());
2304 return cmd;
2307 /* Builds a value from the show CMD. */
2309 static struct value *
2310 value_from_setting (const setting &var, struct gdbarch *gdbarch)
2312 switch (var.type ())
2314 case var_uinteger:
2315 case var_integer:
2316 case var_pinteger:
2318 LONGEST value
2319 = (var.type () == var_uinteger
2320 ? static_cast<LONGEST> (var.get<unsigned int> ())
2321 : static_cast<LONGEST> (var.get<int> ()));
2323 if (var.extra_literals () != nullptr)
2324 for (const literal_def *l = var.extra_literals ();
2325 l->literal != nullptr;
2326 l++)
2327 if (value == l->use)
2329 if (l->val.has_value ())
2330 value = *l->val;
2331 else
2332 return value::allocate (builtin_type (gdbarch)->builtin_void);
2333 break;
2336 if (var.type () == var_uinteger)
2337 return
2338 value_from_ulongest (builtin_type (gdbarch)->builtin_unsigned_int,
2339 static_cast<unsigned int> (value));
2340 else
2341 return
2342 value_from_longest (builtin_type (gdbarch)->builtin_int,
2343 static_cast<int> (value));
2345 case var_boolean:
2346 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2347 var.get<bool> () ? 1 : 0);
2348 case var_auto_boolean:
2350 int val;
2352 switch (var.get<enum auto_boolean> ())
2354 case AUTO_BOOLEAN_TRUE:
2355 val = 1;
2356 break;
2357 case AUTO_BOOLEAN_FALSE:
2358 val = 0;
2359 break;
2360 case AUTO_BOOLEAN_AUTO:
2361 val = -1;
2362 break;
2363 default:
2364 gdb_assert_not_reached ("invalid var_auto_boolean");
2366 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2367 val);
2369 case var_string:
2370 case var_string_noescape:
2371 case var_optional_filename:
2372 case var_filename:
2373 case var_enum:
2375 const char *value;
2376 size_t len;
2377 if (var.type () == var_enum)
2379 value = var.get<const char *> ();
2380 len = strlen (value);
2382 else
2384 const std::string &st = var.get<std::string> ();
2385 value = st.c_str ();
2386 len = st.length ();
2389 return current_language->value_string (gdbarch, value, len);
2391 default:
2392 gdb_assert_not_reached ("bad var_type");
2396 /* Implementation of the convenience function $_gdb_setting. */
2398 static struct value *
2399 gdb_setting_internal_fn (struct gdbarch *gdbarch,
2400 const struct language_defn *language,
2401 void *cookie, int argc, struct value **argv)
2403 cmd_list_element *show_cmd
2404 = setting_cmd ("$_gdb_setting", showlist, argc, argv);
2406 gdb_assert (show_cmd->var.has_value ());
2408 return value_from_setting (*show_cmd->var, gdbarch);
2411 /* Implementation of the convenience function $_gdb_maint_setting. */
2413 static struct value *
2414 gdb_maint_setting_internal_fn (struct gdbarch *gdbarch,
2415 const struct language_defn *language,
2416 void *cookie, int argc, struct value **argv)
2418 cmd_list_element *show_cmd
2419 = setting_cmd ("$_gdb_maint_setting", maintenance_show_cmdlist, argc, argv);
2421 gdb_assert (show_cmd->var.has_value ());
2423 return value_from_setting (*show_cmd->var, gdbarch);
2426 /* Builds a string value from the show CMD. */
2428 static struct value *
2429 str_value_from_setting (const setting &var, struct gdbarch *gdbarch)
2431 switch (var.type ())
2433 case var_uinteger:
2434 case var_integer:
2435 case var_pinteger:
2436 case var_boolean:
2437 case var_auto_boolean:
2439 std::string cmd_val = get_setshow_command_value_string (var);
2441 return current_language->value_string (gdbarch, cmd_val.c_str (),
2442 cmd_val.size ());
2445 case var_string:
2446 case var_string_noescape:
2447 case var_optional_filename:
2448 case var_filename:
2449 case var_enum:
2450 /* For these cases, we do not use get_setshow_command_value_string,
2451 as this function handle some characters specially, e.g. by
2452 escaping quotevar. So, we directly use the var string value,
2453 similarly to the value_from_setting code for these casevar. */
2455 const char *value;
2456 size_t len;
2457 if (var.type () == var_enum)
2459 value = var.get<const char *> ();
2460 len = strlen (value);
2462 else
2464 const std::string &st = var.get<std::string> ();
2465 value = st.c_str ();
2466 len = st.length ();
2469 return current_language->value_string (gdbarch, value, len);
2471 default:
2472 gdb_assert_not_reached ("bad var_type");
2476 /* Implementation of the convenience function $_gdb_setting_str. */
2478 static struct value *
2479 gdb_setting_str_internal_fn (struct gdbarch *gdbarch,
2480 const struct language_defn *language,
2481 void *cookie, int argc, struct value **argv)
2483 cmd_list_element *show_cmd
2484 = setting_cmd ("$_gdb_setting_str", showlist, argc, argv);
2486 gdb_assert (show_cmd->var.has_value ());
2488 return str_value_from_setting (*show_cmd->var, gdbarch);
2492 /* Implementation of the convenience function $_gdb_maint_setting_str. */
2494 static struct value *
2495 gdb_maint_setting_str_internal_fn (struct gdbarch *gdbarch,
2496 const struct language_defn *language,
2497 void *cookie, int argc, struct value **argv)
2499 cmd_list_element *show_cmd
2500 = setting_cmd ("$_gdb_maint_setting_str", maintenance_show_cmdlist, argc,
2501 argv);
2503 gdb_assert (show_cmd->var.has_value ());
2505 return str_value_from_setting (*show_cmd->var, gdbarch);
2508 /* Implementation of the convenience function $_shell. */
2510 static struct value *
2511 shell_internal_fn (struct gdbarch *gdbarch,
2512 const struct language_defn *language,
2513 void *cookie, int argc, struct value **argv)
2515 if (argc != 1)
2516 error (_("You must provide one argument for $_shell."));
2518 value *val = argv[0];
2519 struct type *type = check_typedef (val->type ());
2521 if (!language->is_string_type_p (type))
2522 error (_("Argument must be a string."));
2524 value_print_options opts;
2525 get_no_prettyformat_print_options (&opts);
2527 string_file stream;
2528 value_print (val, &stream, &opts);
2530 /* We should always have two quote chars, which we'll strip. */
2531 gdb_assert (stream.size () >= 2);
2533 /* Now strip them. We don't need the original string, so it's
2534 cheaper to do it in place, avoiding a string allocation. */
2535 std::string str = stream.release ();
2536 str[str.size () - 1] = 0;
2537 const char *command = str.c_str () + 1;
2539 int exit_status = run_under_shell (command, 0);
2541 struct type *int_type = builtin_type (gdbarch)->builtin_int;
2543 /* Keep the logic here in sync with
2544 exit_status_set_internal_vars. */
2546 if (WIFEXITED (exit_status))
2547 return value_from_longest (int_type, WEXITSTATUS (exit_status));
2548 #ifdef __MINGW32__
2549 else if (WIFSIGNALED (exit_status) && WTERMSIG (exit_status) == -1)
2551 /* See exit_status_set_internal_vars. */
2552 return value_from_longest (int_type, exit_status);
2554 #endif
2555 else if (WIFSIGNALED (exit_status))
2557 /* (0x80 | SIGNO) is what most (all?) POSIX-like shells set as
2558 exit code on fatal signal termination. */
2559 return value_from_longest (int_type, 0x80 | WTERMSIG (exit_status));
2561 else
2562 return value::allocate_optimized_out (int_type);
2565 void _initialize_cli_cmds ();
2566 void
2567 _initialize_cli_cmds ()
2569 struct cmd_list_element *c;
2571 /* Define the classes of commands.
2572 They will appear in the help list in alphabetical order. */
2574 add_cmd ("internals", class_maintenance, _("\
2575 Maintenance commands.\n\
2576 Some gdb commands are provided just for use by gdb maintainers.\n\
2577 These commands are subject to frequent change, and may not be as\n\
2578 well documented as user commands."),
2579 &cmdlist);
2580 add_cmd ("obscure", class_obscure, _("Obscure features."), &cmdlist);
2581 add_cmd ("aliases", class_alias,
2582 _("User-defined aliases of other commands."), &cmdlist);
2583 add_cmd ("user-defined", class_user, _("\
2584 User-defined commands.\n\
2585 The commands in this class are those defined by the user.\n\
2586 Use the \"define\" command to define a command."), &cmdlist);
2587 add_cmd ("support", class_support, _("Support facilities."), &cmdlist);
2588 add_cmd ("status", class_info, _("Status inquiries."), &cmdlist);
2589 add_cmd ("files", class_files, _("Specifying and examining files."),
2590 &cmdlist);
2591 add_cmd ("breakpoints", class_breakpoint,
2592 _("Making program stop at certain points."), &cmdlist);
2593 add_cmd ("data", class_vars, _("Examining data."), &cmdlist);
2594 add_cmd ("stack", class_stack, _("\
2595 Examining the stack.\n\
2596 The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
2597 counting from zero for the innermost (currently executing) frame.\n\n\
2598 At any time gdb identifies one frame as the \"selected\" frame.\n\
2599 Variable lookups are done with respect to the selected frame.\n\
2600 When the program being debugged stops, gdb selects the innermost frame.\n\
2601 The commands below can be used to select other frames by number or address."),
2602 &cmdlist);
2603 #ifdef TUI
2604 add_cmd ("text-user-interface", class_tui,
2605 _("TUI is the GDB text based interface.\n\
2606 In TUI mode, GDB can display several text windows showing\n\
2607 the source file, the processor registers, the program disassembly, ..."), &cmdlist);
2608 #endif
2609 add_cmd ("running", class_run, _("Running the program."), &cmdlist);
2611 /* Define general commands. */
2613 add_com ("pwd", class_files, pwd_command, _("\
2614 Print working directory.\n\
2615 This is used for your program as well."));
2617 c = add_cmd ("cd", class_files, cd_command, _("\
2618 Set working directory to DIR for debugger.\n\
2619 The debugger's current working directory specifies where scripts and other\n\
2620 files that can be loaded by GDB are located.\n\
2621 In order to change the inferior's current working directory, the recommended\n\
2622 way is to use the \"set cwd\" command."), &cmdlist);
2623 set_cmd_completer (c, filename_completer);
2625 add_com ("echo", class_support, echo_command, _("\
2626 Print a constant string. Give string as argument.\n\
2627 C escape sequences may be used in the argument.\n\
2628 No newline is added at the end of the argument;\n\
2629 use \"\\n\" if you want a newline to be printed.\n\
2630 Since leading and trailing whitespace are ignored in command arguments,\n\
2631 if you want to print some you must use \"\\\" before leading whitespace\n\
2632 to be printed or after trailing whitespace."));
2634 add_setshow_enum_cmd ("script-extension", class_support,
2635 script_ext_enums, &script_ext_mode, _("\
2636 Set mode for script filename extension recognition."), _("\
2637 Show mode for script filename extension recognition."), _("\
2638 off == no filename extension recognition (all sourced files are GDB scripts)\n\
2639 soft == evaluate script according to filename extension, fallback to GDB script"
2640 "\n\
2641 strict == evaluate script according to filename extension, error if not supported"
2643 NULL,
2644 show_script_ext_mode,
2645 &setlist, &showlist);
2647 cmd_list_element *quit_cmd
2648 = add_com ("quit", class_support, quit_command, _("\
2649 Exit gdb.\n\
2650 Usage: quit [EXPR] or exit [EXPR]\n\
2651 The optional expression EXPR, if present, is evaluated and the result\n\
2652 used as GDB's exit code. The default is zero."));
2653 cmd_list_element *help_cmd
2654 = add_com ("help", class_support, help_command,
2655 _("Print list of commands."));
2656 set_cmd_completer (help_cmd, command_completer);
2657 add_com_alias ("q", quit_cmd, class_support, 1);
2658 add_com_alias ("exit", quit_cmd, class_support, 1);
2659 add_com_alias ("h", help_cmd, class_support, 1);
2661 add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\
2662 Set verbosity."), _("\
2663 Show verbosity."), NULL,
2664 set_verbose,
2665 show_info_verbose,
2666 &setlist, &showlist);
2668 add_setshow_prefix_cmd
2669 ("history", class_support,
2670 _("Generic command for setting command history parameters."),
2671 _("Generic command for showing command history parameters."),
2672 &sethistlist, &showhistlist, &setlist, &showlist);
2674 add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\
2675 Set history expansion on command input."), _("\
2676 Show history expansion on command input."), _("\
2677 Without an argument, history expansion is enabled."),
2678 NULL,
2679 show_history_expansion_p,
2680 &sethistlist, &showhistlist);
2682 cmd_list_element *info_cmd
2683 = add_prefix_cmd ("info", class_info, info_command, _("\
2684 Generic command for showing things about the program being debugged."),
2685 &infolist, 0, &cmdlist);
2686 add_com_alias ("i", info_cmd, class_info, 1);
2687 add_com_alias ("inf", info_cmd, class_info, 1);
2689 add_com ("complete", class_obscure, complete_command,
2690 _("List the completions for the rest of the line as a command."));
2692 c = add_show_prefix_cmd ("show", class_info, _("\
2693 Generic command for showing things about the debugger."),
2694 &showlist, 0, &cmdlist);
2695 /* Another way to get at the same thing. */
2696 add_alias_cmd ("set", c, class_info, 0, &infolist);
2698 cmd_list_element *with_cmd
2699 = add_com ("with", class_vars, with_command, _("\
2700 Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING.\n\
2701 Usage: with SETTING [VALUE] [-- COMMAND]\n\
2702 Usage: w SETTING [VALUE] [-- COMMAND]\n\
2703 With no COMMAND, repeats the last executed command.\n\
2705 SETTING is any setting you can change with the \"set\" subcommands.\n\
2706 E.g.:\n\
2707 with language pascal -- print obj\n\
2708 with print elements unlimited -- print obj\n\
2710 You can change multiple settings using nested with, and use\n\
2711 abbreviations for commands and/or values. E.g.:\n\
2712 w la p -- w p el u -- p obj"));
2713 set_cmd_completer_handle_brkchars (with_cmd, with_command_completer);
2714 add_com_alias ("w", with_cmd, class_vars, 1);
2716 add_internal_function ("_gdb_setting_str", _("\
2717 $_gdb_setting_str - returns the value of a GDB setting as a string.\n\
2718 Usage: $_gdb_setting_str (setting)\n\
2720 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2721 boolean values are \"off\", \"on\".\n\
2722 Some integer settings accept an unlimited value, returned\n\
2723 as \"unlimited\"."),
2724 gdb_setting_str_internal_fn, NULL);
2726 add_internal_function ("_gdb_setting", _("\
2727 $_gdb_setting - returns the value of a GDB setting.\n\
2728 Usage: $_gdb_setting (setting)\n\
2729 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2730 boolean values are \"off\", \"on\".\n\
2731 Some integer settings accept an unlimited value, returned\n\
2732 as 0 or -1 depending on the setting."),
2733 gdb_setting_internal_fn, NULL);
2735 add_internal_function ("_gdb_maint_setting_str", _("\
2736 $_gdb_maint_setting_str - returns the value of a GDB maintenance setting as a string.\n\
2737 Usage: $_gdb_maint_setting_str (setting)\n\
2739 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2740 boolean values are \"off\", \"on\".\n\
2741 Some integer settings accept an unlimited value, returned\n\
2742 as \"unlimited\"."),
2743 gdb_maint_setting_str_internal_fn, NULL);
2745 add_internal_function ("_gdb_maint_setting", _("\
2746 $_gdb_maint_setting - returns the value of a GDB maintenance setting.\n\
2747 Usage: $_gdb_maint_setting (setting)\n\
2748 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2749 boolean values are \"off\", \"on\".\n\
2750 Some integer settings accept an unlimited value, returned\n\
2751 as 0 or -1 depending on the setting."),
2752 gdb_maint_setting_internal_fn, NULL);
2754 add_internal_function ("_shell", _("\
2755 $_shell - execute a shell command and return the result.\n\
2757 Usage: $_shell (COMMAND)\n\
2759 Arguments:\n\
2761 COMMAND: The command to execute. Must be a string.\n\
2763 Returns:\n\
2764 The command's exit code: zero on success, non-zero otherwise."),
2765 shell_internal_fn, NULL);
2767 add_cmd ("commands", no_set_class, show_commands, _("\
2768 Show the history of commands you typed.\n\
2769 You can supply a command number to start with, or a `+' to start after\n\
2770 the previous command number shown."),
2771 &showlist);
2773 add_cmd ("version", no_set_class, show_version,
2774 _("Show what version of GDB this is."), &showlist);
2776 add_cmd ("configuration", no_set_class, show_configuration,
2777 _("Show how GDB was configured at build time."), &showlist);
2779 add_setshow_prefix_cmd ("debug", no_class,
2780 _("Generic command for setting gdb debugging flags."),
2781 _("Generic command for showing gdb debugging flags."),
2782 &setdebuglist, &showdebuglist,
2783 &setlist, &showlist);
2785 cmd_list_element *shell_cmd
2786 = add_com ("shell", class_support, shell_command, _("\
2787 Execute the rest of the line as a shell command.\n\
2788 With no arguments, run an inferior shell."));
2789 set_cmd_completer (shell_cmd, filename_completer);
2791 add_com_alias ("!", shell_cmd, class_support, 0);
2793 c = add_com ("edit", class_files, edit_command, _("\
2794 Edit specified file or function.\n\
2795 With no argument, edits file containing most recent line listed.\n\
2796 Editing targets can be specified in these ways:\n\
2797 FILE:LINENUM, to edit at that line in that file,\n\
2798 FUNCTION, to edit at the beginning of that function,\n\
2799 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2800 *ADDRESS, to edit at the line containing that address.\n\
2801 Uses EDITOR environment variable contents as editor (or ex as default)."));
2803 c->completer = location_completer;
2805 cmd_list_element *pipe_cmd
2806 = add_com ("pipe", class_support, pipe_command, _("\
2807 Send the output of a gdb command to a shell command.\n\
2808 Usage: | [COMMAND] | SHELL_COMMAND\n\
2809 Usage: | -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2810 Usage: pipe [COMMAND] | SHELL_COMMAND\n\
2811 Usage: pipe -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2813 Executes COMMAND and sends its output to SHELL_COMMAND.\n\
2815 The -d option indicates to use the string DELIM to separate COMMAND\n\
2816 from SHELL_COMMAND, in alternative to |. This is useful in\n\
2817 case COMMAND contains a | character.\n\
2819 With no COMMAND, repeat the last executed command\n\
2820 and send its output to SHELL_COMMAND."));
2821 set_cmd_completer_handle_brkchars (pipe_cmd, pipe_command_completer);
2822 add_com_alias ("|", pipe_cmd, class_support, 0);
2824 cmd_list_element *list_cmd
2825 = add_com ("list", class_files, list_command, _("\
2826 List specified function or line.\n\
2827 With no argument, lists ten more lines after or around previous listing.\n\
2828 \"list +\" lists the ten lines following a previous ten-line listing.\n\
2829 \"list -\" lists the ten lines before a previous ten-line listing.\n\
2830 \"list .\" lists ten lines around the point of execution in the current frame.\n\
2831 One argument specifies a line, and ten lines are listed around that line.\n\
2832 Two arguments with comma between specify starting and ending lines to list.\n\
2833 Lines can be specified in these ways:\n\
2834 LINENUM, to list around that line in current file,\n\
2835 FILE:LINENUM, to list around that line in that file,\n\
2836 FUNCTION, to list around beginning of that function,\n\
2837 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2838 *ADDRESS, to list around the line containing that address.\n\
2839 With two args, if one is empty, it stands for ten lines away from\n\
2840 the other arg.\n\
2842 By default, when a single location is given, display ten lines.\n\
2843 This can be changed using \"set listsize\", and the current value\n\
2844 can be shown using \"show listsize\"."));
2846 add_com_alias ("l", list_cmd, class_files, 1);
2848 c = add_com ("disassemble", class_vars, disassemble_command, _("\
2849 Disassemble a specified section of memory.\n\
2850 Usage: disassemble[/m|/r|/s] START [, END]\n\
2851 Default is the function surrounding the pc of the selected frame.\n\
2853 With a /s modifier, source lines are included (if available).\n\
2854 In this mode, the output is displayed in PC address order, and\n\
2855 file names and contents for all relevant source files are displayed.\n\
2857 With a /m modifier, source lines are included (if available).\n\
2858 This view is \"source centric\": the output is in source line order,\n\
2859 regardless of any optimization that is present. Only the main source file\n\
2860 is displayed, not those of, e.g., any inlined functions.\n\
2861 This modifier hasn't proved useful in practice and is deprecated\n\
2862 in favor of /s.\n\
2864 With a /r modifier, raw instructions in hex are included.\n\
2866 With a single argument, the function surrounding that address is dumped.\n\
2867 Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
2868 in the form of \"start,end\", or \"start,+length\".\n\
2870 Note that the address is interpreted as an expression, not as a location\n\
2871 like in the \"break\" command.\n\
2872 So, for example, if you want to disassemble function bar in file foo.c\n\
2873 you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
2874 set_cmd_completer_handle_brkchars (c, disassemble_command_completer);
2876 c = add_com ("make", class_support, make_command, _("\
2877 Run the ``make'' program using the rest of the line as arguments."));
2878 set_cmd_completer (c, filename_completer);
2879 c = add_cmd ("user", no_class, show_user, _("\
2880 Show definitions of non-python/scheme user defined commands.\n\
2881 Argument is the name of the user defined command.\n\
2882 With no argument, show definitions of all user defined commands."), &showlist);
2883 set_cmd_completer (c, show_user_completer);
2884 add_com ("apropos", class_support, apropos_command, _("\
2885 Search for commands matching a REGEXP.\n\
2886 Usage: apropos [-v] REGEXP\n\
2887 Flag -v indicates to produce a verbose output, showing full documentation\n\
2888 of the matching commands."));
2890 add_setshow_uinteger_cmd ("max-user-call-depth", no_class,
2891 &max_user_call_depth, _("\
2892 Set the max call depth for non-python/scheme user-defined commands."), _("\
2893 Show the max call depth for non-python/scheme user-defined commands."), NULL,
2894 NULL,
2895 show_max_user_call_depth,
2896 &setlist, &showlist);
2898 add_setshow_boolean_cmd ("trace-commands", no_class, &trace_commands, _("\
2899 Set tracing of GDB CLI commands."), _("\
2900 Show state of GDB CLI command tracing."), _("\
2901 When 'on', each command is displayed as it is executed."),
2902 NULL,
2903 NULL,
2904 &setlist, &showlist);
2906 const auto alias_opts = make_alias_options_def_group (nullptr);
2908 static std::string alias_help
2909 = gdb::option::build_help (_("\
2910 Define a new command that is an alias of an existing command.\n\
2911 Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]\n\
2912 ALIAS is the name of the alias command to create.\n\
2913 COMMAND is the command being aliased to.\n\
2915 Options:\n\
2916 %OPTIONS%\n\
2918 GDB will automatically prepend the provided DEFAULT-ARGS to the list\n\
2919 of arguments explicitly provided when using ALIAS.\n\
2920 Use \"help aliases\" to list all user defined aliases and their default args.\n\
2922 Examples:\n\
2923 Make \"spe\" an alias of \"set print elements\":\n\
2924 alias spe = set print elements\n\
2925 Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
2926 alias -a set print elms = set print elements\n\
2927 Make \"btf\" an alias of \"backtrace -full -past-entry -past-main\" :\n\
2928 alias btf = backtrace -full -past-entry -past-main\n\
2929 Make \"wLapPeu\" an alias of 2 nested \"with\":\n\
2930 alias wLapPeu = with language pascal -- with print elements unlimited --"),
2931 alias_opts);
2933 c = add_com ("alias", class_support, alias_command,
2934 alias_help.c_str ());
2936 set_cmd_completer_handle_brkchars (c, alias_command_completer);
2938 add_setshow_boolean_cmd ("suppress-cli-notifications", no_class,
2939 &user_wants_cli_suppress_notification,
2940 _("\
2941 Set whether printing notifications on CLI is suppressed."), _("\
2942 Show whether printing notifications on CLI is suppressed."), _("\
2943 When on, printing notifications (such as inferior/thread switch)\n\
2944 on CLI is suppressed."),
2945 set_suppress_cli_notifications,
2946 show_suppress_cli_notifications,
2947 &setlist,
2948 &showlist);
2950 const char *source_help_text = xstrprintf (_("\
2951 Read commands from a file named FILE.\n\
2953 Usage: source [-s] [-v] FILE\n\
2954 -s: search for the script in the source search path,\n\
2955 even if FILE contains directories.\n\
2956 -v: each command in FILE is echoed as it is executed.\n\
2958 Note that the file \"%s\" is read automatically in this way\n\
2959 when GDB is started."), GDBINIT).release ();
2960 c = add_cmd ("source", class_support, source_command,
2961 source_help_text, &cmdlist);
2962 set_cmd_completer (c, filename_completer);