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