]> Git Repo - binutils.git/blob - gdb/cli/cli-cmds.c
Move gdb_regex to gdbsupport
[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   wrap_here ("");
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       std::vector<symtab_and_line> sals = decode_line_1 (location.get (),
972                                                          DECODE_LINE_LIST_MODE,
973                                                          NULL, NULL, 0);
974
975       filter_sals (sals);
976       if (sals.empty ())
977         {
978           /*  C++  */
979           return;
980         }
981       if (sals.size () > 1)
982         {
983           ambiguous_line_spec (sals,
984                                _("Specified line is ambiguous:\n"));
985           return;
986         }
987
988       sal = sals[0];
989
990       if (*arg1)
991         error (_("Junk at end of line specification."));
992
993       /* If line was specified by address, first print exactly which
994          line, and which file.  In this case, sal.symtab == 0 means
995          address is outside of all known source files, not that user
996          failed to give a filename.  */
997       if (*arg == '*')
998         {
999           struct gdbarch *gdbarch;
1000
1001           if (sal.symtab == 0)
1002             error (_("No source file for address %s."),
1003                    paddress (get_current_arch (), sal.pc));
1004
1005           gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch ();
1006           sym = find_pc_function (sal.pc);
1007           if (sym)
1008             printf_filtered ("%s is in %s (%s:%d).\n",
1009                              paddress (gdbarch, sal.pc),
1010                              sym->print_name (),
1011                              symtab_to_filename_for_display (sal.symtab),
1012                              sal.line);
1013           else
1014             printf_filtered ("%s is at %s:%d.\n",
1015                              paddress (gdbarch, sal.pc),
1016                              symtab_to_filename_for_display (sal.symtab),
1017                              sal.line);
1018         }
1019
1020       /* If what was given does not imply a symtab, it must be an
1021          undebuggable symbol which means no source code.  */
1022
1023       if (sal.symtab == 0)
1024         error (_("No line number known for %s."), arg);
1025     }
1026
1027   if ((editor = getenv ("EDITOR")) == NULL)
1028     editor = "/bin/ex";
1029
1030   fn = symtab_to_fullname (sal.symtab);
1031
1032   /* Quote the file name, in case it has whitespace or other special
1033      characters.  */
1034   gdb::unique_xmalloc_ptr<char> p
1035     = xstrprintf ("%s +%d \"%s\"", editor, sal.line, fn);
1036   shell_escape (p.get (), from_tty);
1037 }
1038
1039 /* The options for the "pipe" command.  */
1040
1041 struct pipe_cmd_opts
1042 {
1043   /* For "-d".  */
1044   std::string delimiter;
1045 };
1046
1047 static const gdb::option::option_def pipe_cmd_option_defs[] = {
1048
1049   gdb::option::string_option_def<pipe_cmd_opts> {
1050     "d",
1051     [] (pipe_cmd_opts *opts) { return &opts->delimiter; },
1052     nullptr,
1053     N_("Indicates to use the specified delimiter string to separate\n\
1054 COMMAND from SHELL_COMMAND, in alternative to |.  This is useful in\n\
1055 case COMMAND contains a | character."),
1056   },
1057
1058 };
1059
1060 /* Create an option_def_group for the "pipe" command's options, with
1061    OPTS as context.  */
1062
1063 static inline gdb::option::option_def_group
1064 make_pipe_cmd_options_def_group (pipe_cmd_opts *opts)
1065 {
1066   return {{pipe_cmd_option_defs}, opts};
1067 }
1068
1069 /* Implementation of the "pipe" command.  */
1070
1071 static void
1072 pipe_command (const char *arg, int from_tty)
1073 {
1074   pipe_cmd_opts opts;
1075
1076   auto grp = make_pipe_cmd_options_def_group (&opts);
1077   gdb::option::process_options
1078     (&arg, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
1079
1080   const char *delim = "|";
1081   if (!opts.delimiter.empty ())
1082     delim = opts.delimiter.c_str ();
1083
1084   const char *command = arg;
1085   if (command == nullptr)
1086     error (_("Missing COMMAND"));
1087
1088   arg = strstr (arg, delim);
1089
1090   if (arg == nullptr)
1091     error (_("Missing delimiter before SHELL_COMMAND"));
1092
1093   std::string gdb_cmd (command, arg - command);
1094
1095   arg += strlen (delim); /* Skip the delimiter.  */
1096
1097   if (gdb_cmd.empty ())
1098     gdb_cmd = repeat_previous ();
1099
1100   const char *shell_command = skip_spaces (arg);
1101   if (*shell_command == '\0')
1102     error (_("Missing SHELL_COMMAND"));
1103
1104   FILE *to_shell_command = popen (shell_command, "w");
1105
1106   if (to_shell_command == nullptr)
1107     error (_("Error launching \"%s\""), shell_command);
1108
1109   try
1110     {
1111       stdio_file pipe_file (to_shell_command);
1112
1113       execute_command_to_ui_file (&pipe_file, gdb_cmd.c_str (), from_tty);
1114     }
1115   catch (...)
1116     {
1117       pclose (to_shell_command);
1118       throw;
1119     }
1120
1121   int exit_status = pclose (to_shell_command);
1122
1123   if (exit_status < 0)
1124     error (_("shell command \"%s\" failed: %s"), shell_command,
1125            safe_strerror (errno));
1126   exit_status_set_internal_vars (exit_status);
1127 }
1128
1129 /* Completer for the pipe command.  */
1130
1131 static void
1132 pipe_command_completer (struct cmd_list_element *ignore,
1133                         completion_tracker &tracker,
1134                         const char *text, const char *word_ignored)
1135 {
1136   pipe_cmd_opts opts;
1137
1138   const char *org_text = text;
1139   auto grp = make_pipe_cmd_options_def_group (&opts);
1140   if (gdb::option::complete_options
1141       (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp))
1142     return;
1143
1144   const char *delimiter = "|";
1145   if (!opts.delimiter.empty ())
1146     delimiter = opts.delimiter.c_str ();
1147
1148   /* Check if we're past option values already.  */
1149   if (text > org_text && !isspace (text[-1]))
1150     return;
1151
1152   const char *delim = strstr (text, delimiter);
1153
1154   /* If we're still not past the delimiter, complete the gdb
1155      command.  */
1156   if (delim == nullptr || delim == text)
1157     {
1158       complete_nested_command_line (tracker, text);
1159       return;
1160     }
1161
1162   /* We're past the delimiter.  What follows is a shell command, which
1163      we don't know how to complete.  */
1164 }
1165
1166 static void
1167 list_command (const char *arg, int from_tty)
1168 {
1169   struct symbol *sym;
1170   const char *arg1;
1171   int no_end = 1;
1172   int dummy_end = 0;
1173   int dummy_beg = 0;
1174   int linenum_beg = 0;
1175   const char *p;
1176
1177   /* Pull in the current default source line if necessary.  */
1178   if (arg == NULL || ((arg[0] == '+' || arg[0] == '-') && arg[1] == '\0'))
1179     {
1180       set_default_source_symtab_and_line ();
1181       symtab_and_line cursal = get_current_source_symtab_and_line ();
1182
1183       /* If this is the first "list" since we've set the current
1184          source line, center the listing around that line.  */
1185       if (get_first_line_listed () == 0)
1186         {
1187           int first;
1188
1189           first = std::max (cursal.line - get_lines_to_list () / 2, 1);
1190
1191           /* A small special case --- if listing backwards, and we
1192              should list only one line, list the preceding line,
1193              instead of the exact line we've just shown after e.g.,
1194              stopping for a breakpoint.  */
1195           if (arg != NULL && arg[0] == '-'
1196               && get_lines_to_list () == 1 && first > 1)
1197             first -= 1;
1198
1199           print_source_lines (cursal.symtab, source_lines_range (first), 0);
1200         }
1201
1202       /* "l" or "l +" lists next ten lines.  */
1203       else if (arg == NULL || arg[0] == '+')
1204         print_source_lines (cursal.symtab,
1205                             source_lines_range (cursal.line), 0);
1206
1207       /* "l -" lists previous ten lines, the ones before the ten just
1208          listed.  */
1209       else if (arg[0] == '-')
1210         {
1211           if (get_first_line_listed () == 1)
1212             error (_("Already at the start of %s."),
1213                    symtab_to_filename_for_display (cursal.symtab));
1214           source_lines_range range (get_first_line_listed (),
1215                                     source_lines_range::BACKWARD);
1216           print_source_lines (cursal.symtab, range, 0);
1217         }
1218
1219       return;
1220     }
1221
1222   /* Now if there is only one argument, decode it in SAL
1223      and set NO_END.
1224      If there are two arguments, decode them in SAL and SAL_END
1225      and clear NO_END; however, if one of the arguments is blank,
1226      set DUMMY_BEG or DUMMY_END to record that fact.  */
1227
1228   if (!have_full_symbols () && !have_partial_symbols ())
1229     error (_("No symbol table is loaded.  Use the \"file\" command."));
1230
1231   std::vector<symtab_and_line> sals;
1232   symtab_and_line sal, sal_end;
1233
1234   arg1 = arg;
1235   if (*arg1 == ',')
1236     dummy_beg = 1;
1237   else
1238     {
1239       event_location_up location = string_to_event_location (&arg1,
1240                                                              current_language);
1241       sals = decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
1242                             NULL, NULL, 0);
1243       filter_sals (sals);
1244       if (sals.empty ())
1245         {
1246           /*  C++  */
1247           return;
1248         }
1249
1250       sal = sals[0];
1251     }
1252
1253   /* Record whether the BEG arg is all digits.  */
1254
1255   for (p = arg; p != arg1 && *p >= '0' && *p <= '9'; p++);
1256   linenum_beg = (p == arg1);
1257
1258   /* Save the range of the first argument, in case we need to let the
1259      user know it was ambiguous.  */
1260   const char *beg = arg;
1261   size_t beg_len = arg1 - beg;
1262
1263   while (*arg1 == ' ' || *arg1 == '\t')
1264     arg1++;
1265   if (*arg1 == ',')
1266     {
1267       no_end = 0;
1268       if (sals.size () > 1)
1269         {
1270           ambiguous_line_spec (sals,
1271                                _("Specified first line '%.*s' is ambiguous:\n"),
1272                                (int) beg_len, beg);
1273           return;
1274         }
1275       arg1++;
1276       while (*arg1 == ' ' || *arg1 == '\t')
1277         arg1++;
1278       if (*arg1 == 0)
1279         dummy_end = 1;
1280       else
1281         {
1282           /* Save the last argument, in case we need to let the user
1283              know it was ambiguous.  */
1284           const char *end_arg = arg1;
1285
1286           event_location_up location
1287             = string_to_event_location (&arg1, current_language);
1288
1289           std::vector<symtab_and_line> sals_end
1290             = (dummy_beg
1291                ? decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
1292                                 NULL, NULL, 0)
1293                : decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
1294                                 NULL, sal.symtab, sal.line));
1295
1296           filter_sals (sals_end);
1297           if (sals_end.empty ())
1298             return;
1299           if (sals_end.size () > 1)
1300             {
1301               ambiguous_line_spec (sals_end,
1302                                    _("Specified last line '%s' is ambiguous:\n"),
1303                                    end_arg);
1304               return;
1305             }
1306           sal_end = sals_end[0];
1307         }
1308     }
1309
1310   if (*arg1)
1311     error (_("Junk at end of line specification."));
1312
1313   if (!no_end && !dummy_beg && !dummy_end
1314       && sal.symtab != sal_end.symtab)
1315     error (_("Specified first and last lines are in different files."));
1316   if (dummy_beg && dummy_end)
1317     error (_("Two empty args do not say what lines to list."));
1318
1319   /* If line was specified by address,
1320      first print exactly which line, and which file.
1321
1322      In this case, sal.symtab == 0 means address is outside of all
1323      known source files, not that user failed to give a filename.  */
1324   if (*arg == '*')
1325     {
1326       struct gdbarch *gdbarch;
1327
1328       if (sal.symtab == 0)
1329         error (_("No source file for address %s."),
1330                paddress (get_current_arch (), sal.pc));
1331
1332       gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch ();
1333       sym = find_pc_function (sal.pc);
1334       if (sym)
1335         printf_filtered ("%s is in %s (%s:%d).\n",
1336                          paddress (gdbarch, sal.pc),
1337                          sym->print_name (),
1338                          symtab_to_filename_for_display (sal.symtab), sal.line);
1339       else
1340         printf_filtered ("%s is at %s:%d.\n",
1341                          paddress (gdbarch, sal.pc),
1342                          symtab_to_filename_for_display (sal.symtab), sal.line);
1343     }
1344
1345   /* If line was not specified by just a line number, and it does not
1346      imply a symtab, it must be an undebuggable symbol which means no
1347      source code.  */
1348
1349   if (!linenum_beg && sal.symtab == 0)
1350     error (_("No line number known for %s."), arg);
1351
1352   /* If this command is repeated with RET,
1353      turn it into the no-arg variant.  */
1354
1355   if (from_tty)
1356     set_repeat_arguments ("");
1357
1358   if (dummy_beg && sal_end.symtab == 0)
1359     error (_("No default source file yet.  Do \"help list\"."));
1360   if (dummy_beg)
1361     {
1362       source_lines_range range (sal_end.line + 1,
1363                                 source_lines_range::BACKWARD);
1364       print_source_lines (sal_end.symtab, range, 0);
1365     }
1366   else if (sal.symtab == 0)
1367     error (_("No default source file yet.  Do \"help list\"."));
1368   else if (no_end)
1369     {
1370       for (int i = 0; i < sals.size (); i++)
1371         {
1372           sal = sals[i];
1373           int first_line = sal.line - get_lines_to_list () / 2;
1374           if (first_line < 1)
1375             first_line = 1;
1376           if (sals.size () > 1)
1377             print_sal_location (sal);
1378           print_source_lines (sal.symtab, source_lines_range (first_line), 0);
1379         }
1380     }
1381   else if (dummy_end)
1382     print_source_lines (sal.symtab, source_lines_range (sal.line), 0);
1383   else
1384     print_source_lines (sal.symtab,
1385                         source_lines_range (sal.line, (sal_end.line + 1)),
1386                         0);
1387 }
1388
1389 /* Subroutine of disassemble_command to simplify it.
1390    Perform the disassembly.
1391    NAME is the name of the function if known, or NULL.
1392    [LOW,HIGH) are the range of addresses to disassemble.
1393    BLOCK is the block to disassemble; it needs to be provided
1394    when non-contiguous blocks are disassembled; otherwise
1395    it can be NULL.
1396    MIXED is non-zero to print source with the assembler.  */
1397
1398 static void
1399 print_disassembly (struct gdbarch *gdbarch, const char *name,
1400                    CORE_ADDR low, CORE_ADDR high,
1401                    const struct block *block,
1402                    gdb_disassembly_flags flags)
1403 {
1404 #if defined(TUI)
1405   if (tui_is_window_visible (DISASSEM_WIN))
1406     tui_show_assembly (gdbarch, low);
1407   else
1408 #endif
1409     {
1410       printf_filtered (_("Dump of assembler code "));
1411       if (name != NULL)
1412         printf_filtered (_("for function %ps:\n"),
1413                          styled_string (function_name_style.style (), name));
1414       if (block == nullptr || BLOCK_CONTIGUOUS_P (block))
1415         {
1416           if (name == NULL)
1417             printf_filtered (_("from %ps to %ps:\n"),
1418                              styled_string (address_style.style (),
1419                                             paddress (gdbarch, low)),
1420                              styled_string (address_style.style (),
1421                                             paddress (gdbarch, high)));
1422
1423           /* Dump the specified range.  */
1424           gdb_disassembly (gdbarch, current_uiout, flags, -1, low, high);
1425         }
1426       else
1427         {
1428           for (int i = 0; i < BLOCK_NRANGES (block); i++)
1429             {
1430               CORE_ADDR range_low = BLOCK_RANGE_START (block, i);
1431               CORE_ADDR range_high = BLOCK_RANGE_END (block, i);
1432               printf_filtered (_("Address range %ps to %ps:\n"),
1433                                styled_string (address_style.style (),
1434                                               paddress (gdbarch, range_low)),
1435                                styled_string (address_style.style (),
1436                                               paddress (gdbarch, range_high)));
1437               gdb_disassembly (gdbarch, current_uiout, flags, -1,
1438                                range_low, range_high);
1439             }
1440         }
1441       printf_filtered (_("End of assembler dump.\n"));
1442     }
1443 }
1444
1445 /* Subroutine of disassemble_command to simplify it.
1446    Print a disassembly of the current function according to FLAGS.  */
1447
1448 static void
1449 disassemble_current_function (gdb_disassembly_flags flags)
1450 {
1451   struct frame_info *frame;
1452   struct gdbarch *gdbarch;
1453   CORE_ADDR low, high, pc;
1454   const char *name;
1455   const struct block *block;
1456
1457   frame = get_selected_frame (_("No frame selected."));
1458   gdbarch = get_frame_arch (frame);
1459   pc = get_frame_address_in_block (frame);
1460   if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
1461     error (_("No function contains program counter for selected frame."));
1462 #if defined(TUI)
1463   /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1464      `tui_version'.  */
1465   if (tui_active)
1466     /* FIXME: cagney/2004-02-07: This should be an observer.  */
1467     low = tui_get_low_disassembly_address (gdbarch, low, pc);
1468 #endif
1469   low += gdbarch_deprecated_function_start_offset (gdbarch);
1470
1471   print_disassembly (gdbarch, name, low, high, block, flags);
1472 }
1473
1474 /* Dump a specified section of assembly code.
1475
1476    Usage:
1477      disassemble [/mrs]
1478        - dump the assembly code for the function of the current pc
1479      disassemble [/mrs] addr
1480        - dump the assembly code for the function at ADDR
1481      disassemble [/mrs] low,high
1482      disassemble [/mrs] low,+length
1483        - dump the assembly code in the range [LOW,HIGH), or [LOW,LOW+length)
1484
1485    A /m modifier will include source code with the assembly in a
1486    "source centric" view.  This view lists only the file of the first insn,
1487    even if other source files are involved (e.g., inlined functions), and
1488    the output is in source order, even with optimized code.  This view is
1489    considered deprecated as it hasn't been useful in practice.
1490
1491    A /r modifier will include raw instructions in hex with the assembly.
1492
1493    A /s modifier will include source code with the assembly, like /m, with
1494    two important differences:
1495    1) The output is still in pc address order.
1496    2) File names and contents for all relevant source files are displayed.  */
1497
1498 static void
1499 disassemble_command (const char *arg, int from_tty)
1500 {
1501   struct gdbarch *gdbarch = get_current_arch ();
1502   CORE_ADDR low, high;
1503   const general_symbol_info *symbol = nullptr;
1504   const char *name;
1505   CORE_ADDR pc;
1506   gdb_disassembly_flags flags;
1507   const char *p;
1508   const struct block *block = nullptr;
1509
1510   p = arg;
1511   name = NULL;
1512   flags = 0;
1513
1514   if (p && *p == '/')
1515     {
1516       ++p;
1517
1518       if (*p == '\0')
1519         error (_("Missing modifier."));
1520
1521       while (*p && ! isspace (*p))
1522         {
1523           switch (*p++)
1524             {
1525             case 'm':
1526               flags |= DISASSEMBLY_SOURCE_DEPRECATED;
1527               break;
1528             case 'r':
1529               flags |= DISASSEMBLY_RAW_INSN;
1530               break;
1531             case 's':
1532               flags |= DISASSEMBLY_SOURCE;
1533               break;
1534             default:
1535               error (_("Invalid disassembly modifier."));
1536             }
1537         }
1538
1539       p = skip_spaces (p);
1540     }
1541
1542   if ((flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1543       == (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1544     error (_("Cannot specify both /m and /s."));
1545
1546   if (! p || ! *p)
1547     {
1548       flags |= DISASSEMBLY_OMIT_FNAME;
1549       disassemble_current_function (flags);
1550       return;
1551     }
1552
1553   pc = value_as_address (parse_to_comma_and_eval (&p));
1554   if (p[0] == ',')
1555     ++p;
1556   if (p[0] == '\0')
1557     {
1558       /* One argument.  */
1559       if (!find_pc_partial_function_sym (pc, &symbol, &low, &high, &block))
1560         error (_("No function contains specified address."));
1561
1562       if (asm_demangle)
1563         name = symbol->print_name ();
1564       else
1565         name = symbol->linkage_name ();
1566
1567 #if defined(TUI)
1568       /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1569          `tui_version'.  */
1570       if (tui_active)
1571         /* FIXME: cagney/2004-02-07: This should be an observer.  */
1572         low = tui_get_low_disassembly_address (gdbarch, low, pc);
1573 #endif
1574       low += gdbarch_deprecated_function_start_offset (gdbarch);
1575       flags |= DISASSEMBLY_OMIT_FNAME;
1576     }
1577   else
1578     {
1579       /* Two arguments.  */
1580       int incl_flag = 0;
1581       low = pc;
1582       p = skip_spaces (p);
1583       if (p[0] == '+')
1584         {
1585           ++p;
1586           incl_flag = 1;
1587         }
1588       high = parse_and_eval_address (p);
1589       if (incl_flag)
1590         high += low;
1591     }
1592
1593   print_disassembly (gdbarch, name, low, high, block, flags);
1594 }
1595
1596 static void
1597 make_command (const char *arg, int from_tty)
1598 {
1599   if (arg == 0)
1600     shell_escape ("make", from_tty);
1601   else
1602     {
1603       std::string cmd = std::string ("make ") + arg;
1604
1605       shell_escape (cmd.c_str (), from_tty);
1606     }
1607 }
1608
1609 static void
1610 show_user (const char *args, int from_tty)
1611 {
1612   struct cmd_list_element *c;
1613
1614   if (args)
1615     {
1616       const char *comname = args;
1617
1618       c = lookup_cmd (&comname, cmdlist, "", NULL, 0, 1);
1619       if (!cli_user_command_p (c))
1620         error (_("Not a user command."));
1621       show_user_1 (c, "", args, gdb_stdout);
1622     }
1623   else
1624     {
1625       for (c = cmdlist; c; c = c->next)
1626         {
1627           if (cli_user_command_p (c) || c->is_prefix ())
1628             show_user_1 (c, "", c->name, gdb_stdout);
1629         }
1630     }
1631 }
1632
1633 /* Return true if COMMAND or any of its sub-commands is a user defined command.
1634    This is a helper function for show_user_completer.  */
1635
1636 static bool
1637 has_user_subcmd (struct cmd_list_element *command)
1638 {
1639   if (cli_user_command_p (command))
1640     return true;
1641
1642   /* Alias command can yield false positive.  Ignore them as the targeted
1643      command should be reachable anyway.  */
1644   if (command->is_alias ())
1645     return false;
1646
1647   if (command->is_prefix ())
1648     for (struct cmd_list_element *subcommand = *command->subcommands;
1649          subcommand != nullptr;
1650          subcommand = subcommand->next)
1651       if (has_user_subcmd (subcommand))
1652         return true;
1653
1654   return false;
1655 }
1656
1657 /* Implement completer for the 'show user' command.  */
1658
1659 static void
1660 show_user_completer (cmd_list_element *,
1661                      completion_tracker &tracker, const char *text,
1662                      const char *word)
1663 {
1664   struct cmd_list_element *cmd_group = cmdlist;
1665
1666   /* TEXT can contain a chain of commands and subcommands.  Follow the
1667      commands chain until we reach the point where the user wants a
1668      completion.  */
1669   while (word > text)
1670     {
1671       const char *curr_cmd = text;
1672       const char *after = skip_to_space (text);
1673       const size_t curr_cmd_len = after - text;
1674       text = skip_spaces (after);
1675
1676       for (struct cmd_list_element *c = cmd_group; c != nullptr; c = c->next)
1677         {
1678           if (strlen (c->name) == curr_cmd_len
1679               && strncmp (c->name, curr_cmd, curr_cmd_len) == 0)
1680             {
1681               if (c->subcommands == nullptr)
1682                 /* We arrived after a command with no child, so nothing more
1683                    to complete.  */
1684                 return;
1685
1686               cmd_group = *c->subcommands;
1687               break;
1688             }
1689         }
1690     }
1691
1692   const int wordlen = strlen (word);
1693   for (struct cmd_list_element *c = cmd_group; c != nullptr; c = c->next)
1694     if (has_user_subcmd (c))
1695       {
1696         if (strncmp (c->name, word, wordlen) == 0)
1697           tracker.add_completion
1698             (gdb::unique_xmalloc_ptr<char> (xstrdup (c->name)));
1699       }
1700 }
1701
1702 /* Search through names of commands and documentations for a certain
1703    regular expression.  */
1704
1705 static void
1706 apropos_command (const char *arg, int from_tty)
1707 {
1708   bool verbose = arg && check_for_argument (&arg, "-v", 2);
1709
1710   if (arg == NULL || *arg == '\0')
1711     error (_("REGEXP string is empty"));
1712
1713   compiled_regex pattern (arg, REG_ICASE,
1714                           _("Error in regular expression"));
1715
1716   apropos_cmd (gdb_stdout, cmdlist, verbose, pattern, "");
1717 }
1718
1719 /* The options for the "alias" command.  */
1720
1721 struct alias_opts
1722 {
1723   /* For "-a".  */
1724   bool abbrev_flag = false;
1725 };
1726
1727 static const gdb::option::option_def alias_option_defs[] = {
1728
1729   gdb::option::flag_option_def<alias_opts> {
1730     "a",
1731     [] (alias_opts *opts) { return &opts->abbrev_flag; },
1732     N_("Specify that ALIAS is an abbreviation of COMMAND.\n\
1733 Abbreviations are not used in command completion."),
1734   },
1735
1736 };
1737
1738 /* Create an option_def_group for the "alias" options, with
1739    A_OPTS as context.  */
1740
1741 static gdb::option::option_def_group
1742 make_alias_options_def_group (alias_opts *a_opts)
1743 {
1744   return {{alias_option_defs}, a_opts};
1745 }
1746
1747 /* Completer for the "alias_command".  */
1748
1749 static void
1750 alias_command_completer (struct cmd_list_element *ignore,
1751                          completion_tracker &tracker,
1752                          const char *text, const char *word)
1753 {
1754   const auto grp = make_alias_options_def_group (nullptr);
1755
1756   tracker.set_use_custom_word_point (true);
1757
1758   if (gdb::option::complete_options
1759       (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp))
1760     return;
1761
1762   const char *delim = strchr (text, '=');
1763
1764   /* If we're past the "=" delimiter, complete the
1765      "alias ALIAS = COMMAND [DEFAULT-ARGS...]" as if the user is
1766      typing COMMAND DEFAULT-ARGS...  */
1767   if (delim != text
1768       && delim != nullptr
1769       && isspace (delim[-1])
1770       && (isspace (delim[1]) || delim[1] == '\0'))
1771     {
1772       std::string new_text = std::string (delim + 1);
1773
1774       tracker.advance_custom_word_point_by (delim + 1 - text);
1775       complete_nested_command_line (tracker, new_text.c_str ());
1776       return;
1777     }
1778
1779   /* We're not yet past the "=" delimiter.  Complete a command, as
1780      the user might type an alias following a prefix command.  */
1781   complete_nested_command_line (tracker, text);
1782 }
1783
1784 /* Subroutine of alias_command to simplify it.
1785    Return the first N elements of ARGV flattened back to a string
1786    with a space separating each element.
1787    ARGV may not be NULL.
1788    This does not take care of quoting elements in case they contain spaces
1789    on purpose.  */
1790
1791 static std::string
1792 argv_to_string (char **argv, int n)
1793 {
1794   int i;
1795   std::string result;
1796
1797   gdb_assert (argv != NULL);
1798   gdb_assert (n >= 0 && n <= countargv (argv));
1799
1800   for (i = 0; i < n; ++i)
1801     {
1802       if (i > 0)
1803         result += " ";
1804       result += argv[i];
1805     }
1806
1807   return result;
1808 }
1809
1810 /* Subroutine of alias_command to simplify it.
1811    Verifies that COMMAND can have an alias:
1812       COMMAND must exist.
1813       COMMAND must not have default args.
1814    This last condition is to avoid the following:
1815      alias aaa = backtrace -full
1816      alias bbb = aaa -past-main
1817    as (at least currently), alias default args are not cumulative
1818    and the user would expect bbb to execute 'backtrace -full -past-main'
1819    while it will execute 'backtrace -past-main'.  */
1820
1821 static cmd_list_element *
1822 validate_aliased_command (const char *command)
1823 {
1824   std::string default_args;
1825   cmd_list_element *c
1826     = lookup_cmd_1 (& command, cmdlist, NULL, &default_args, 1);
1827
1828   if (c == NULL || c == (struct cmd_list_element *) -1)
1829     error (_("Invalid command to alias to: %s"), command);
1830
1831   if (!default_args.empty ())
1832     error (_("Cannot define an alias of an alias that has default args"));
1833
1834   return c;
1835 }
1836
1837 /* Called when "alias" was incorrectly used.  */
1838
1839 static void
1840 alias_usage_error (void)
1841 {
1842   error (_("Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]"));
1843 }
1844
1845 /* Make an alias of an existing command.  */
1846
1847 static void
1848 alias_command (const char *args, int from_tty)
1849 {
1850   alias_opts a_opts;
1851
1852   auto grp = make_alias_options_def_group (&a_opts);
1853   gdb::option::process_options
1854     (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp);
1855
1856   int i, alias_argc, command_argc;
1857   const char *equals;
1858   const char *alias, *command;
1859
1860   if (args == NULL || strchr (args, '=') == NULL)
1861     alias_usage_error ();
1862
1863   equals = strchr (args, '=');
1864   std::string args2 (args, equals - args);
1865
1866   gdb_argv built_alias_argv (args2.c_str ());
1867
1868   const char *default_args = equals + 1;
1869   struct cmd_list_element *c_command_prefix;
1870
1871   lookup_cmd_for_default_args (&default_args, &c_command_prefix);
1872   std::string command_argv_str (equals + 1,
1873                                 default_args == nullptr
1874                                 ? strlen (equals + 1)
1875                                 : default_args - equals - 1);
1876   gdb_argv command_argv (command_argv_str.c_str ());
1877
1878   char **alias_argv = built_alias_argv.get ();
1879
1880   if (alias_argv[0] == NULL || command_argv[0] == NULL
1881       || *alias_argv[0] == '\0' || *command_argv[0] == '\0')
1882     alias_usage_error ();
1883
1884   for (i = 0; alias_argv[i] != NULL; ++i)
1885     {
1886       if (! valid_user_defined_cmd_name_p (alias_argv[i]))
1887         {
1888           if (i == 0)
1889             error (_("Invalid command name: %s"), alias_argv[i]);
1890           else
1891             error (_("Invalid command element name: %s"), alias_argv[i]);
1892         }
1893     }
1894
1895   alias_argc = countargv (alias_argv);
1896   command_argc = command_argv.count ();
1897
1898   /* COMMAND must exist, and cannot have default args.
1899      Reconstruct the command to remove any extraneous spaces,
1900      for better error messages.  */
1901   std::string command_string (argv_to_string (command_argv.get (),
1902                                               command_argc));
1903   command = command_string.c_str ();
1904   cmd_list_element *target_cmd = validate_aliased_command (command);
1905
1906   /* ALIAS must not exist.  */
1907   std::string alias_string (argv_to_string (alias_argv, alias_argc));
1908   alias = alias_string.c_str ();
1909   {
1910     cmd_list_element *alias_cmd, *prefix_cmd, *cmd;
1911
1912     if (lookup_cmd_composition (alias, &alias_cmd, &prefix_cmd, &cmd))
1913       {
1914         const char *alias_name = alias_argv[alias_argc-1];
1915
1916         /* If we found an existing ALIAS_CMD, check that the prefix differ or
1917            the name differ.  */
1918
1919         if (alias_cmd != nullptr
1920             && alias_cmd->prefix == prefix_cmd
1921             && strcmp (alias_name, alias_cmd->name) == 0)
1922           error (_("Alias already exists: %s"), alias);
1923
1924         /* Check ALIAS differs from the found CMD.  */
1925
1926         if (cmd->prefix == prefix_cmd
1927             && strcmp (alias_name, cmd->name) == 0)
1928           error (_("Alias %s is the name of an existing command"), alias);
1929       }
1930   }
1931
1932
1933   struct cmd_list_element *alias_cmd;
1934
1935   /* If ALIAS is one word, it is an alias for the entire COMMAND.
1936      Example: alias spe = set print elements
1937
1938      Otherwise ALIAS and COMMAND must have the same number of words,
1939      and every word except the last must identify the same prefix command;
1940      and the last word of ALIAS is made an alias of the last word of COMMAND.
1941      Example: alias set print elms = set pr elem
1942      Note that unambiguous abbreviations are allowed.  */
1943
1944   if (alias_argc == 1)
1945     {
1946       /* add_cmd requires *we* allocate space for name, hence the xstrdup.  */
1947       alias_cmd = add_com_alias (xstrdup (alias_argv[0]), target_cmd,
1948                                  class_alias, a_opts.abbrev_flag);
1949     }
1950   else
1951     {
1952       const char *alias_prefix, *command_prefix;
1953       struct cmd_list_element *c_alias, *c_command;
1954
1955       if (alias_argc != command_argc)
1956         error (_("Mismatched command length between ALIAS and COMMAND."));
1957
1958       /* Create copies of ALIAS and COMMAND without the last word,
1959          and use that to verify the leading elements give the same
1960          prefix command.  */
1961       std::string alias_prefix_string (argv_to_string (alias_argv,
1962                                                        alias_argc - 1));
1963       std::string command_prefix_string (argv_to_string (command_argv.get (),
1964                                                          command_argc - 1));
1965       alias_prefix = alias_prefix_string.c_str ();
1966       command_prefix = command_prefix_string.c_str ();
1967
1968       c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, NULL, 1);
1969       /* We've already tried to look up COMMAND.  */
1970       gdb_assert (c_command != NULL
1971                   && c_command != (struct cmd_list_element *) -1);
1972       gdb_assert (c_command->is_prefix ());
1973       c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, NULL, 1);
1974       if (c_alias != c_command)
1975         error (_("ALIAS and COMMAND prefixes do not match."));
1976
1977       /* add_cmd requires *we* allocate space for name, hence the xstrdup.  */
1978       alias_cmd = add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]),
1979                                  target_cmd, class_alias, a_opts.abbrev_flag,
1980                                  c_command->subcommands);
1981     }
1982
1983   gdb_assert (alias_cmd != nullptr);
1984   gdb_assert (alias_cmd->default_args.empty ());
1985   if (default_args != nullptr)
1986     {
1987       default_args = skip_spaces (default_args);
1988
1989       alias_cmd->default_args = default_args;
1990     }
1991 }
1992 \f
1993 /* Print the file / line number / symbol name of the location
1994    specified by SAL.  */
1995
1996 static void
1997 print_sal_location (const symtab_and_line &sal)
1998 {
1999   scoped_restore_current_program_space restore_pspace;
2000   set_current_program_space (sal.pspace);
2001
2002   const char *sym_name = NULL;
2003   if (sal.symbol != NULL)
2004     sym_name = sal.symbol->print_name ();
2005   printf_filtered (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"),
2006                    symtab_to_filename_for_display (sal.symtab),
2007                    sal.line, sym_name != NULL ? sym_name : "???");
2008 }
2009
2010 /* Print a list of files and line numbers which a user may choose from
2011    in order to list a function which was specified ambiguously (as
2012    with `list classname::overloadedfuncname', for example).  The SALS
2013    array provides the filenames and line numbers.  FORMAT is a
2014    printf-style format string used to tell the user what was
2015    ambiguous.  */
2016
2017 static void
2018 ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
2019                      const char *format, ...)
2020 {
2021   va_list ap;
2022   va_start (ap, format);
2023   vprintf_filtered (format, ap);
2024   va_end (ap);
2025
2026   for (const auto &sal : sals)
2027     print_sal_location (sal);
2028 }
2029
2030 /* Comparison function for filter_sals.  Returns a qsort-style
2031    result.  */
2032
2033 static int
2034 cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb)
2035 {
2036   const char *dira = SYMTAB_DIRNAME (sala.symtab);
2037   const char *dirb = SYMTAB_DIRNAME (salb.symtab);
2038   int r;
2039
2040   if (dira == NULL)
2041     {
2042       if (dirb != NULL)
2043         return -1;
2044     }
2045   else if (dirb == NULL)
2046     {
2047       if (dira != NULL)
2048         return 1;
2049     }
2050   else
2051     {
2052       r = filename_cmp (dira, dirb);
2053       if (r)
2054         return r;
2055     }
2056
2057   r = filename_cmp (sala.symtab->filename, salb.symtab->filename);
2058   if (r)
2059     return r;
2060
2061   if (sala.line < salb.line)
2062     return -1;
2063   return sala.line == salb.line ? 0 : 1;
2064 }
2065
2066 /* Remove any SALs that do not match the current program space, or
2067    which appear to be "file:line" duplicates.  */
2068
2069 static void
2070 filter_sals (std::vector<symtab_and_line> &sals)
2071 {
2072   /* Remove SALs that do not match.  */
2073   auto from = std::remove_if (sals.begin (), sals.end (),
2074                               [&] (const symtab_and_line &sal)
2075     { return (sal.pspace != current_program_space || sal.symtab == NULL); });
2076
2077   /* Remove dups.  */
2078   std::sort (sals.begin (), from,
2079              [] (const symtab_and_line &sala, const symtab_and_line &salb)
2080    { return cmp_symtabs (sala, salb) < 0; });
2081
2082   from = std::unique (sals.begin (), from,
2083                       [&] (const symtab_and_line &sala,
2084                            const symtab_and_line &salb)
2085     { return cmp_symtabs (sala, salb) == 0; });
2086
2087   sals.erase (from, sals.end ());
2088 }
2089
2090 void
2091 init_cmd_lists (void)
2092 {
2093   max_user_call_depth = 1024;
2094 }
2095
2096 static void
2097 show_info_verbose (struct ui_file *file, int from_tty,
2098                    struct cmd_list_element *c,
2099                    const char *value)
2100 {
2101   if (info_verbose)
2102     fprintf_filtered (file,
2103                       _("Verbose printing of informational messages is %s.\n"),
2104                       value);
2105   else
2106     fprintf_filtered (file, _("Verbosity is %s.\n"), value);
2107 }
2108
2109 static void
2110 show_history_expansion_p (struct ui_file *file, int from_tty,
2111                           struct cmd_list_element *c, const char *value)
2112 {
2113   fprintf_filtered (file, _("History expansion on command input is %s.\n"),
2114                     value);
2115 }
2116
2117 static void
2118 show_max_user_call_depth (struct ui_file *file, int from_tty,
2119                           struct cmd_list_element *c, const char *value)
2120 {
2121   fprintf_filtered (file,
2122                     _("The max call depth for user-defined commands is %s.\n"),
2123                     value);
2124 }
2125
2126 /* Returns the cmd_list_element in SHOWLIST corresponding to the first
2127    argument of ARGV, which must contain one single value.
2128    Throws an error if no value provided, or value not correct.
2129    FNNAME is used in the error message.  */
2130
2131 static cmd_list_element *
2132 setting_cmd (const char *fnname, struct cmd_list_element *showlist,
2133              int argc, struct value **argv)
2134 {
2135   if (argc == 0)
2136     error (_("You must provide an argument to %s"), fnname);
2137   if (argc != 1)
2138     error (_("You can only provide one argument to %s"), fnname);
2139
2140   struct type *type0 = check_typedef (value_type (argv[0]));
2141
2142   if (type0->code () != TYPE_CODE_ARRAY
2143       && type0->code () != TYPE_CODE_STRING)
2144     error (_("First argument of %s must be a string."), fnname);
2145
2146   const char *a0 = (const char *) value_contents (argv[0]).data ();
2147   cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", NULL, -1, 0);
2148
2149   if (cmd == nullptr || cmd->type != show_cmd)
2150     error (_("First argument of %s must be a "
2151              "valid setting of the 'show' command."), fnname);
2152
2153   return cmd;
2154 }
2155
2156 /* Builds a value from the show CMD.  */
2157
2158 static struct value *
2159 value_from_setting (const setting &var, struct gdbarch *gdbarch)
2160 {
2161   switch (var.type ())
2162     {
2163     case var_integer:
2164       if (var.get<int> () == INT_MAX)
2165         return value_from_longest (builtin_type (gdbarch)->builtin_int,
2166                                    0);
2167       else
2168         return value_from_longest (builtin_type (gdbarch)->builtin_int,
2169                                    var.get<int> ());
2170     case var_zinteger:
2171       return value_from_longest (builtin_type (gdbarch)->builtin_int,
2172                                  var.get<int> ());
2173     case var_boolean:
2174       return value_from_longest (builtin_type (gdbarch)->builtin_int,
2175                                  var.get<bool> () ? 1 : 0);
2176     case var_zuinteger_unlimited:
2177       return value_from_longest (builtin_type (gdbarch)->builtin_int,
2178                                  var.get<int> ());
2179     case var_auto_boolean:
2180       {
2181         int val;
2182
2183         switch (var.get<enum auto_boolean> ())
2184           {
2185           case AUTO_BOOLEAN_TRUE:
2186             val = 1;
2187             break;
2188           case AUTO_BOOLEAN_FALSE:
2189             val = 0;
2190             break;
2191           case AUTO_BOOLEAN_AUTO:
2192             val = -1;
2193             break;
2194           default:
2195             gdb_assert_not_reached ("invalid var_auto_boolean");
2196           }
2197         return value_from_longest (builtin_type (gdbarch)->builtin_int,
2198                                    val);
2199       }
2200     case var_uinteger:
2201       if (var.get<unsigned int> () == UINT_MAX)
2202         return value_from_ulongest
2203           (builtin_type (gdbarch)->builtin_unsigned_int, 0);
2204       else
2205         return value_from_ulongest
2206           (builtin_type (gdbarch)->builtin_unsigned_int,
2207            var.get<unsigned int> ());
2208     case var_zuinteger:
2209       return value_from_ulongest (builtin_type (gdbarch)->builtin_unsigned_int,
2210                                   var.get<unsigned int> ());
2211     case var_string:
2212     case var_string_noescape:
2213     case var_optional_filename:
2214     case var_filename:
2215     case var_enum:
2216       {
2217         const char *value;
2218         size_t len;
2219         if (var.type () == var_enum)
2220           {
2221             value = var.get<const char *> ();
2222             len = strlen (value);
2223           }
2224         else
2225           {
2226             const std::string &st = var.get<std::string> ();
2227             value = st.c_str ();
2228             len = st.length ();
2229           }
2230
2231         if (len > 0)
2232           return value_cstring (value, len,
2233                                 builtin_type (gdbarch)->builtin_char);
2234         else
2235           return value_cstring ("", 1,
2236                                 builtin_type (gdbarch)->builtin_char);
2237       }
2238     default:
2239       gdb_assert_not_reached ("bad var_type");
2240     }
2241 }
2242
2243 /* Implementation of the convenience function $_gdb_setting.  */
2244
2245 static struct value *
2246 gdb_setting_internal_fn (struct gdbarch *gdbarch,
2247                          const struct language_defn *language,
2248                          void *cookie, int argc, struct value **argv)
2249 {
2250   cmd_list_element *show_cmd
2251     = setting_cmd ("$_gdb_setting", showlist, argc, argv);
2252
2253   gdb_assert (show_cmd->var.has_value ());
2254
2255   return value_from_setting (*show_cmd->var, gdbarch);
2256 }
2257
2258 /* Implementation of the convenience function $_gdb_maint_setting.  */
2259
2260 static struct value *
2261 gdb_maint_setting_internal_fn (struct gdbarch *gdbarch,
2262                                const struct language_defn *language,
2263                                void *cookie, int argc, struct value **argv)
2264 {
2265   cmd_list_element *show_cmd
2266     = setting_cmd ("$_gdb_maint_setting", maintenance_show_cmdlist, argc, argv);
2267
2268   gdb_assert (show_cmd->var.has_value ());
2269
2270   return value_from_setting (*show_cmd->var, gdbarch);
2271 }
2272
2273 /* Builds a string value from the show CMD.  */
2274
2275 static struct value *
2276 str_value_from_setting (const setting &var, struct gdbarch *gdbarch)
2277 {
2278   switch (var.type ())
2279     {
2280     case var_integer:
2281     case var_zinteger:
2282     case var_boolean:
2283     case var_zuinteger_unlimited:
2284     case var_auto_boolean:
2285     case var_uinteger:
2286     case var_zuinteger:
2287       {
2288         std::string cmd_val = get_setshow_command_value_string (var);
2289
2290         return value_cstring (cmd_val.c_str (), cmd_val.size (),
2291                               builtin_type (gdbarch)->builtin_char);
2292       }
2293
2294     case var_string:
2295     case var_string_noescape:
2296     case var_optional_filename:
2297     case var_filename:
2298     case var_enum:
2299       /* For these cases, we do not use get_setshow_command_value_string,
2300          as this function handle some characters specially, e.g. by
2301          escaping quotevar.  So, we directly use the var string value,
2302          similarly to the value_from_setting code for these casevar.  */
2303       {
2304         const char *value;
2305         size_t len;
2306         if (var.type () == var_enum)
2307           {
2308             value = var.get<const char *> ();
2309             len = strlen (value);
2310           }
2311         else
2312           {
2313             const std::string &st = var.get<std::string> ();
2314             value = st.c_str ();
2315             len = st.length ();
2316           }
2317
2318         if (len > 0)
2319           return value_cstring (value, len,
2320                                 builtin_type (gdbarch)->builtin_char);
2321         else
2322           return value_cstring ("", 1,
2323                                 builtin_type (gdbarch)->builtin_char);
2324       }
2325     default:
2326       gdb_assert_not_reached ("bad var_type");
2327     }
2328 }
2329
2330 /* Implementation of the convenience function $_gdb_setting_str.  */
2331
2332 static struct value *
2333 gdb_setting_str_internal_fn (struct gdbarch *gdbarch,
2334                              const struct language_defn *language,
2335                              void *cookie, int argc, struct value **argv)
2336 {
2337   cmd_list_element *show_cmd
2338     = setting_cmd ("$_gdb_setting_str", showlist, argc, argv);
2339
2340   gdb_assert (show_cmd->var.has_value ());
2341
2342   return str_value_from_setting (*show_cmd->var, gdbarch);
2343 }
2344
2345
2346 /* Implementation of the convenience function $_gdb_maint_setting_str.  */
2347
2348 static struct value *
2349 gdb_maint_setting_str_internal_fn (struct gdbarch *gdbarch,
2350                                    const struct language_defn *language,
2351                                    void *cookie, int argc, struct value **argv)
2352 {
2353   cmd_list_element *show_cmd
2354     = setting_cmd ("$_gdb_maint_setting_str", maintenance_show_cmdlist, argc,
2355                    argv);
2356
2357   gdb_assert (show_cmd->var.has_value ());
2358
2359   return str_value_from_setting (*show_cmd->var, gdbarch);
2360 }
2361
2362 void _initialize_cli_cmds ();
2363 void
2364 _initialize_cli_cmds ()
2365 {
2366   struct cmd_list_element *c;
2367
2368   /* Define the classes of commands.
2369      They will appear in the help list in alphabetical order.  */
2370
2371   add_cmd ("internals", class_maintenance, _("\
2372 Maintenance commands.\n\
2373 Some gdb commands are provided just for use by gdb maintainers.\n\
2374 These commands are subject to frequent change, and may not be as\n\
2375 well documented as user commands."),
2376            &cmdlist);
2377   add_cmd ("obscure", class_obscure, _("Obscure features."), &cmdlist);
2378   add_cmd ("aliases", class_alias,
2379            _("User-defined aliases of other commands."), &cmdlist);
2380   add_cmd ("user-defined", class_user, _("\
2381 User-defined commands.\n\
2382 The commands in this class are those defined by the user.\n\
2383 Use the \"define\" command to define a command."), &cmdlist);
2384   add_cmd ("support", class_support, _("Support facilities."), &cmdlist);
2385   if (!dbx_commands)
2386     add_cmd ("status", class_info, _("Status inquiries."), &cmdlist);
2387   add_cmd ("files", class_files, _("Specifying and examining files."),
2388            &cmdlist);
2389   add_cmd ("breakpoints", class_breakpoint,
2390            _("Making program stop at certain points."), &cmdlist);
2391   add_cmd ("data", class_vars, _("Examining data."), &cmdlist);
2392   add_cmd ("stack", class_stack, _("\
2393 Examining the stack.\n\
2394 The stack is made up of stack frames.  Gdb assigns numbers to stack frames\n\
2395 counting from zero for the innermost (currently executing) frame.\n\n\
2396 At any time gdb identifies one frame as the \"selected\" frame.\n\
2397 Variable lookups are done with respect to the selected frame.\n\
2398 When the program being debugged stops, gdb selects the innermost frame.\n\
2399 The commands below can be used to select other frames by number or address."),
2400            &cmdlist);
2401 #ifdef TUI
2402   add_cmd ("text-user-interface", class_tui,
2403            _("TUI is the GDB text based interface.\n\
2404 In TUI mode, GDB can display several text windows showing\n\
2405 the source file, the processor registers, the program disassembly, ..."), &cmdlist);
2406 #endif
2407   add_cmd ("running", class_run, _("Running the program."), &cmdlist);
2408
2409   /* Define general commands.  */
2410
2411   add_com ("pwd", class_files, pwd_command, _("\
2412 Print working directory.\n\
2413 This is used for your program as well."));
2414
2415   c = add_cmd ("cd", class_files, cd_command, _("\
2416 Set working directory to DIR for debugger.\n\
2417 The debugger's current working directory specifies where scripts and other\n\
2418 files that can be loaded by GDB are located.\n\
2419 In order to change the inferior's current working directory, the recommended\n\
2420 way is to use the \"set cwd\" command."), &cmdlist);
2421   set_cmd_completer (c, filename_completer);
2422
2423   add_com ("echo", class_support, echo_command, _("\
2424 Print a constant string.  Give string as argument.\n\
2425 C escape sequences may be used in the argument.\n\
2426 No newline is added at the end of the argument;\n\
2427 use \"\\n\" if you want a newline to be printed.\n\
2428 Since leading and trailing whitespace are ignored in command arguments,\n\
2429 if you want to print some you must use \"\\\" before leading whitespace\n\
2430 to be printed or after trailing whitespace."));
2431
2432   add_setshow_enum_cmd ("script-extension", class_support,
2433                         script_ext_enums, &script_ext_mode, _("\
2434 Set mode for script filename extension recognition."), _("\
2435 Show mode for script filename extension recognition."), _("\
2436 off  == no filename extension recognition (all sourced files are GDB scripts)\n\
2437 soft == evaluate script according to filename extension, fallback to GDB script"
2438   "\n\
2439 strict == evaluate script according to filename extension, error if not supported"
2440   ),
2441                         NULL,
2442                         show_script_ext_mode,
2443                         &setlist, &showlist);
2444
2445   cmd_list_element *quit_cmd
2446     = add_com ("quit", class_support, quit_command, _("\
2447 Exit gdb.\n\
2448 Usage: quit [EXPR] or exit [EXPR]\n\
2449 The optional expression EXPR, if present, is evaluated and the result\n\
2450 used as GDB's exit code.  The default is zero."));
2451   cmd_list_element *help_cmd
2452     = add_com ("help", class_support, help_command,
2453                _("Print list of commands."));
2454   set_cmd_completer (help_cmd, command_completer);
2455   add_com_alias ("q", quit_cmd, class_support, 1);
2456   add_com_alias ("exit", quit_cmd, class_support, 1);
2457   add_com_alias ("h", help_cmd, class_support, 1);
2458
2459   add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\
2460 Set verbosity."), _("\
2461 Show verbosity."), NULL,
2462                            set_verbose,
2463                            show_info_verbose,
2464                            &setlist, &showlist);
2465
2466   add_setshow_prefix_cmd
2467     ("history", class_support,
2468      _("Generic command for setting command history parameters."),
2469      _("Generic command for showing command history parameters."),
2470      &sethistlist, &showhistlist, &setlist, &showlist);
2471
2472   add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\
2473 Set history expansion on command input."), _("\
2474 Show history expansion on command input."), _("\
2475 Without an argument, history expansion is enabled."),
2476                            NULL,
2477                            show_history_expansion_p,
2478                            &sethistlist, &showhistlist);
2479
2480   cmd_list_element *info_cmd
2481     = add_prefix_cmd ("info", class_info, info_command, _("\
2482 Generic command for showing things about the program being debugged."),
2483                       &infolist, 0, &cmdlist);
2484   add_com_alias ("i", info_cmd, class_info, 1);
2485   add_com_alias ("inf", info_cmd, class_info, 1);
2486
2487   add_com ("complete", class_obscure, complete_command,
2488            _("List the completions for the rest of the line as a command."));
2489
2490   c = add_show_prefix_cmd ("show", class_info, _("\
2491 Generic command for showing things about the debugger."),
2492                            &showlist, 0, &cmdlist);
2493   /* Another way to get at the same thing.  */
2494   add_alias_cmd ("set", c, class_info, 0, &infolist);
2495
2496   cmd_list_element *with_cmd
2497     = add_com ("with", class_vars, with_command, _("\
2498 Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING.\n\
2499 Usage: with SETTING [VALUE] [-- COMMAND]\n\
2500 Usage: w SETTING [VALUE] [-- COMMAND]\n\
2501 With no COMMAND, repeats the last executed command.\n\
2502 \n\
2503 SETTING is any setting you can change with the \"set\" subcommands.\n\
2504 E.g.:\n\
2505   with language pascal -- print obj\n\
2506   with print elements unlimited -- print obj\n\
2507 \n\
2508 You can change multiple settings using nested with, and use\n\
2509 abbreviations for commands and/or values.  E.g.:\n\
2510   w la p -- w p el u -- p obj"));
2511   set_cmd_completer_handle_brkchars (with_cmd, with_command_completer);
2512   add_com_alias ("w", with_cmd, class_vars, 1);
2513
2514   add_internal_function ("_gdb_setting_str", _("\
2515 $_gdb_setting_str - returns the value of a GDB setting as a string.\n\
2516 Usage: $_gdb_setting_str (setting)\n\
2517 \n\
2518 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2519 boolean values are \"off\", \"on\".\n\
2520 Some integer settings accept an unlimited value, returned\n\
2521 as \"unlimited\"."),
2522                          gdb_setting_str_internal_fn, NULL);
2523
2524   add_internal_function ("_gdb_setting", _("\
2525 $_gdb_setting - returns the value of a GDB setting.\n\
2526 Usage: $_gdb_setting (setting)\n\
2527 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2528 boolean values are \"off\", \"on\".\n\
2529 Some integer settings accept an unlimited value, returned\n\
2530 as 0 or -1 depending on the setting."),
2531                          gdb_setting_internal_fn, NULL);
2532
2533   add_internal_function ("_gdb_maint_setting_str", _("\
2534 $_gdb_maint_setting_str - returns the value of a GDB maintenance setting as a string.\n\
2535 Usage: $_gdb_maint_setting_str (setting)\n\
2536 \n\
2537 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2538 boolean values are \"off\", \"on\".\n\
2539 Some integer settings accept an unlimited value, returned\n\
2540 as \"unlimited\"."),
2541                          gdb_maint_setting_str_internal_fn, NULL);
2542
2543   add_internal_function ("_gdb_maint_setting", _("\
2544 $_gdb_maint_setting - returns the value of a GDB maintenance setting.\n\
2545 Usage: $_gdb_maint_setting (setting)\n\
2546 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2547 boolean values are \"off\", \"on\".\n\
2548 Some integer settings accept an unlimited value, returned\n\
2549 as 0 or -1 depending on the setting."),
2550                          gdb_maint_setting_internal_fn, NULL);
2551
2552   add_cmd ("commands", no_set_class, show_commands, _("\
2553 Show the history of commands you typed.\n\
2554 You can supply a command number to start with, or a `+' to start after\n\
2555 the previous command number shown."),
2556            &showlist);
2557
2558   add_cmd ("version", no_set_class, show_version,
2559            _("Show what version of GDB this is."), &showlist);
2560
2561   add_cmd ("configuration", no_set_class, show_configuration,
2562            _("Show how GDB was configured at build time."), &showlist);
2563
2564   add_setshow_prefix_cmd ("debug", no_class,
2565                           _("Generic command for setting gdb debugging flags."),
2566                           _("Generic command for showing gdb debugging flags."),
2567                           &setdebuglist, &showdebuglist,
2568                           &setlist, &showlist);
2569
2570   cmd_list_element *shell_cmd
2571     = add_com ("shell", class_support, shell_command, _("\
2572 Execute the rest of the line as a shell command.\n\
2573 With no arguments, run an inferior shell."));
2574   set_cmd_completer (shell_cmd, filename_completer);
2575
2576   add_com_alias ("!", shell_cmd, class_support, 0);
2577
2578   c = add_com ("edit", class_files, edit_command, _("\
2579 Edit specified file or function.\n\
2580 With no argument, edits file containing most recent line listed.\n\
2581 Editing targets can be specified in these ways:\n\
2582   FILE:LINENUM, to edit at that line in that file,\n\
2583   FUNCTION, to edit at the beginning of that function,\n\
2584   FILE:FUNCTION, to distinguish among like-named static functions.\n\
2585   *ADDRESS, to edit at the line containing that address.\n\
2586 Uses EDITOR environment variable contents as editor (or ex as default)."));
2587
2588   c->completer = location_completer;
2589
2590   cmd_list_element *pipe_cmd
2591     = add_com ("pipe", class_support, pipe_command, _("\
2592 Send the output of a gdb command to a shell command.\n\
2593 Usage: | [COMMAND] | SHELL_COMMAND\n\
2594 Usage: | -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2595 Usage: pipe [COMMAND] | SHELL_COMMAND\n\
2596 Usage: pipe -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2597 \n\
2598 Executes COMMAND and sends its output to SHELL_COMMAND.\n\
2599 \n\
2600 The -d option indicates to use the string DELIM to separate COMMAND\n\
2601 from SHELL_COMMAND, in alternative to |.  This is useful in\n\
2602 case COMMAND contains a | character.\n\
2603 \n\
2604 With no COMMAND, repeat the last executed command\n\
2605 and send its output to SHELL_COMMAND."));
2606   set_cmd_completer_handle_brkchars (pipe_cmd, pipe_command_completer);
2607   add_com_alias ("|", pipe_cmd, class_support, 0);
2608
2609   cmd_list_element *list_cmd
2610     = add_com ("list", class_files, list_command, _("\
2611 List specified function or line.\n\
2612 With no argument, lists ten more lines after or around previous listing.\n\
2613 \"list -\" lists the ten lines before a previous ten-line listing.\n\
2614 One argument specifies a line, and ten lines are listed around that line.\n\
2615 Two arguments with comma between specify starting and ending lines to list.\n\
2616 Lines can be specified in these ways:\n\
2617   LINENUM, to list around that line in current file,\n\
2618   FILE:LINENUM, to list around that line in that file,\n\
2619   FUNCTION, to list around beginning of that function,\n\
2620   FILE:FUNCTION, to distinguish among like-named static functions.\n\
2621   *ADDRESS, to list around the line containing that address.\n\
2622 With two args, if one is empty, it stands for ten lines away from\n\
2623 the other arg.\n\
2624 \n\
2625 By default, when a single location is given, display ten lines.\n\
2626 This can be changed using \"set listsize\", and the current value\n\
2627 can be shown using \"show listsize\"."));
2628
2629   add_com_alias ("l", list_cmd, class_files, 1);
2630
2631   if (dbx_commands)
2632     add_com_alias ("file", list_cmd, class_files, 1);
2633
2634   c = add_com ("disassemble", class_vars, disassemble_command, _("\
2635 Disassemble a specified section of memory.\n\
2636 Usage: disassemble[/m|/r|/s] START [, END]\n\
2637 Default is the function surrounding the pc of the selected frame.\n\
2638 \n\
2639 With a /s modifier, source lines are included (if available).\n\
2640 In this mode, the output is displayed in PC address order, and\n\
2641 file names and contents for all relevant source files are displayed.\n\
2642 \n\
2643 With a /m modifier, source lines are included (if available).\n\
2644 This view is \"source centric\": the output is in source line order,\n\
2645 regardless of any optimization that is present.  Only the main source file\n\
2646 is displayed, not those of, e.g., any inlined functions.\n\
2647 This modifier hasn't proved useful in practice and is deprecated\n\
2648 in favor of /s.\n\
2649 \n\
2650 With a /r modifier, raw instructions in hex are included.\n\
2651 \n\
2652 With a single argument, the function surrounding that address is dumped.\n\
2653 Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
2654   in the form of \"start,end\", or \"start,+length\".\n\
2655 \n\
2656 Note that the address is interpreted as an expression, not as a location\n\
2657 like in the \"break\" command.\n\
2658 So, for example, if you want to disassemble function bar in file foo.c\n\
2659 you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
2660   set_cmd_completer (c, location_completer);
2661
2662   c = add_com ("make", class_support, make_command, _("\
2663 Run the ``make'' program using the rest of the line as arguments."));
2664   set_cmd_completer (c, filename_completer);
2665   c = add_cmd ("user", no_class, show_user, _("\
2666 Show definitions of non-python/scheme user defined commands.\n\
2667 Argument is the name of the user defined command.\n\
2668 With no argument, show definitions of all user defined commands."), &showlist);
2669   set_cmd_completer (c, show_user_completer);
2670   add_com ("apropos", class_support, apropos_command, _("\
2671 Search for commands matching a REGEXP.\n\
2672 Usage: apropos [-v] REGEXP\n\
2673 Flag -v indicates to produce a verbose output, showing full documentation\n\
2674 of the matching commands."));
2675
2676   add_setshow_uinteger_cmd ("max-user-call-depth", no_class,
2677                            &max_user_call_depth, _("\
2678 Set the max call depth for non-python/scheme user-defined commands."), _("\
2679 Show the max call depth for non-python/scheme user-defined commands."), NULL,
2680                             NULL,
2681                             show_max_user_call_depth,
2682                             &setlist, &showlist);
2683
2684   add_setshow_boolean_cmd ("trace-commands", no_class, &trace_commands, _("\
2685 Set tracing of GDB CLI commands."), _("\
2686 Show state of GDB CLI command tracing."), _("\
2687 When 'on', each command is displayed as it is executed."),
2688                            NULL,
2689                            NULL,
2690                            &setlist, &showlist);
2691
2692   const auto alias_opts = make_alias_options_def_group (nullptr);
2693
2694   static std::string alias_help
2695     = gdb::option::build_help (_("\
2696 Define a new command that is an alias of an existing command.\n\
2697 Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]\n\
2698 ALIAS is the name of the alias command to create.\n\
2699 COMMAND is the command being aliased to.\n\
2700 \n\
2701 Options:\n\
2702 %OPTIONS%\n\
2703 \n\
2704 GDB will automatically prepend the provided DEFAULT-ARGS to the list\n\
2705 of arguments explicitly provided when using ALIAS.\n\
2706 Use \"help aliases\" to list all user defined aliases and their default args.\n\
2707 \n\
2708 Examples:\n\
2709 Make \"spe\" an alias of \"set print elements\":\n\
2710   alias spe = set print elements\n\
2711 Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
2712   alias -a set print elms = set print elements\n\
2713 Make \"btf\" an alias of \"backtrace -full -past-entry -past-main\" :\n\
2714   alias btf = backtrace -full -past-entry -past-main\n\
2715 Make \"wLapPeu\" an alias of 2 nested \"with\":\n\
2716   alias wLapPeu = with language pascal -- with print elements unlimited --"),
2717                                alias_opts);
2718
2719   c = add_com ("alias", class_support, alias_command,
2720                alias_help.c_str ());
2721
2722   set_cmd_completer_handle_brkchars (c, alias_command_completer);
2723
2724   const char *source_help_text = xstrprintf (_("\
2725 Read commands from a file named FILE.\n\
2726 \n\
2727 Usage: source [-s] [-v] FILE\n\
2728 -s: search for the script in the source search path,\n\
2729     even if FILE contains directories.\n\
2730 -v: each command in FILE is echoed as it is executed.\n\
2731 \n\
2732 Note that the file \"%s\" is read automatically in this way\n\
2733 when GDB is started."), GDBINIT).release ();
2734   c = add_cmd ("source", class_support, source_command,
2735                source_help_text, &cmdlist);
2736   set_cmd_completer (c, filename_completer);
2737 }
This page took 0.177379 seconds and 4 git commands to generate.