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