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