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