xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/cli/cli-cmds.c (revision 801f73adf8029e41ec107911c58034bb925796a2)
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 
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 
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 
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 
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 
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 %s:\n", name);
1401       if (block == nullptr || BLOCK_CONTIGUOUS_P (block))
1402         {
1403 	  if (name == NULL)
1404 	    printf_filtered ("from %s to %s:\n",
1405 			     paddress (gdbarch, low), paddress (gdbarch, high));
1406 
1407 	  /* Dump the specified range.  */
1408 	  gdb_disassembly (gdbarch, current_uiout, flags, -1, low, high);
1409 	}
1410       else
1411         {
1412 	  for (int i = 0; i < BLOCK_NRANGES (block); i++)
1413 	    {
1414 	      CORE_ADDR range_low = BLOCK_RANGE_START (block, i);
1415 	      CORE_ADDR range_high = BLOCK_RANGE_END (block, i);
1416 	      printf_filtered (_("Address range %s to %s:\n"),
1417 			       paddress (gdbarch, range_low),
1418 			       paddress (gdbarch, range_high));
1419 	      gdb_disassembly (gdbarch, current_uiout, flags, -1,
1420 			       range_low, range_high);
1421 	    }
1422 	}
1423       printf_filtered ("End of assembler dump.\n");
1424     }
1425 }
1426 
1427 /* Subroutine of disassemble_command to simplify it.
1428    Print a disassembly of the current function according to FLAGS.  */
1429 
1430 static void
1431 disassemble_current_function (gdb_disassembly_flags flags)
1432 {
1433   struct frame_info *frame;
1434   struct gdbarch *gdbarch;
1435   CORE_ADDR low, high, pc;
1436   const char *name;
1437   const struct block *block;
1438 
1439   frame = get_selected_frame (_("No frame selected."));
1440   gdbarch = get_frame_arch (frame);
1441   pc = get_frame_address_in_block (frame);
1442   if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
1443     error (_("No function contains program counter for selected frame."));
1444 #if defined(TUI)
1445   /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1446      `tui_version'.  */
1447   if (tui_active)
1448     /* FIXME: cagney/2004-02-07: This should be an observer.  */
1449     low = tui_get_low_disassembly_address (gdbarch, low, pc);
1450 #endif
1451   low += gdbarch_deprecated_function_start_offset (gdbarch);
1452 
1453   print_disassembly (gdbarch, name, low, high, block, flags);
1454 }
1455 
1456 /* Dump a specified section of assembly code.
1457 
1458    Usage:
1459      disassemble [/mrs]
1460        - dump the assembly code for the function of the current pc
1461      disassemble [/mrs] addr
1462        - dump the assembly code for the function at ADDR
1463      disassemble [/mrs] low,high
1464      disassemble [/mrs] low,+length
1465        - dump the assembly code in the range [LOW,HIGH), or [LOW,LOW+length)
1466 
1467    A /m modifier will include source code with the assembly in a
1468    "source centric" view.  This view lists only the file of the first insn,
1469    even if other source files are involved (e.g., inlined functions), and
1470    the output is in source order, even with optimized code.  This view is
1471    considered deprecated as it hasn't been useful in practice.
1472 
1473    A /r modifier will include raw instructions in hex with the assembly.
1474 
1475    A /s modifier will include source code with the assembly, like /m, with
1476    two important differences:
1477    1) The output is still in pc address order.
1478    2) File names and contents for all relevant source files are displayed.  */
1479 
1480 static void
1481 disassemble_command (const char *arg, int from_tty)
1482 {
1483   struct gdbarch *gdbarch = get_current_arch ();
1484   CORE_ADDR low, high;
1485   const general_symbol_info *symbol = nullptr;
1486   const char *name;
1487   CORE_ADDR pc;
1488   gdb_disassembly_flags flags;
1489   const char *p;
1490   const struct block *block = nullptr;
1491 
1492   p = arg;
1493   name = NULL;
1494   flags = 0;
1495 
1496   if (p && *p == '/')
1497     {
1498       ++p;
1499 
1500       if (*p == '\0')
1501 	error (_("Missing modifier."));
1502 
1503       while (*p && ! isspace (*p))
1504 	{
1505 	  switch (*p++)
1506 	    {
1507 	    case 'm':
1508 	      flags |= DISASSEMBLY_SOURCE_DEPRECATED;
1509 	      break;
1510 	    case 'r':
1511 	      flags |= DISASSEMBLY_RAW_INSN;
1512 	      break;
1513 	    case 's':
1514 	      flags |= DISASSEMBLY_SOURCE;
1515 	      break;
1516 	    default:
1517 	      error (_("Invalid disassembly modifier."));
1518 	    }
1519 	}
1520 
1521       p = skip_spaces (p);
1522     }
1523 
1524   if ((flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1525       == (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1526     error (_("Cannot specify both /m and /s."));
1527 
1528   if (! p || ! *p)
1529     {
1530       flags |= DISASSEMBLY_OMIT_FNAME;
1531       disassemble_current_function (flags);
1532       return;
1533     }
1534 
1535   pc = value_as_address (parse_to_comma_and_eval (&p));
1536   if (p[0] == ',')
1537     ++p;
1538   if (p[0] == '\0')
1539     {
1540       /* One argument.  */
1541       if (!find_pc_partial_function_sym (pc, &symbol, &low, &high, &block))
1542 	error (_("No function contains specified address."));
1543 
1544       if (asm_demangle)
1545 	name = symbol->print_name ();
1546       else
1547 	name = symbol->linkage_name ();
1548 
1549 #if defined(TUI)
1550       /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1551 	 `tui_version'.  */
1552       if (tui_active)
1553 	/* FIXME: cagney/2004-02-07: This should be an observer.  */
1554 	low = tui_get_low_disassembly_address (gdbarch, low, pc);
1555 #endif
1556       low += gdbarch_deprecated_function_start_offset (gdbarch);
1557       flags |= DISASSEMBLY_OMIT_FNAME;
1558     }
1559   else
1560     {
1561       /* Two arguments.  */
1562       int incl_flag = 0;
1563       low = pc;
1564       p = skip_spaces (p);
1565       if (p[0] == '+')
1566 	{
1567 	  ++p;
1568 	  incl_flag = 1;
1569 	}
1570       high = parse_and_eval_address (p);
1571       if (incl_flag)
1572 	high += low;
1573     }
1574 
1575   print_disassembly (gdbarch, name, low, high, block, flags);
1576 }
1577 
1578 static void
1579 make_command (const char *arg, int from_tty)
1580 {
1581   if (arg == 0)
1582     shell_escape ("make", from_tty);
1583   else
1584     {
1585       std::string cmd = std::string ("make ") + arg;
1586 
1587       shell_escape (cmd.c_str (), from_tty);
1588     }
1589 }
1590 
1591 static void
1592 show_user (const char *args, int from_tty)
1593 {
1594   struct cmd_list_element *c;
1595 
1596   if (args)
1597     {
1598       const char *comname = args;
1599 
1600       c = lookup_cmd (&comname, cmdlist, "", NULL, 0, 1);
1601       if (!cli_user_command_p (c))
1602 	error (_("Not a user command."));
1603       show_user_1 (c, "", args, gdb_stdout);
1604     }
1605   else
1606     {
1607       for (c = cmdlist; c; c = c->next)
1608 	{
1609 	  if (cli_user_command_p (c) || c->prefixlist != NULL)
1610 	    show_user_1 (c, "", c->name, gdb_stdout);
1611 	}
1612     }
1613 }
1614 
1615 /* Search through names of commands and documentations for a certain
1616    regular expression.  */
1617 
1618 static void
1619 apropos_command (const char *arg, int from_tty)
1620 {
1621   bool verbose = arg && check_for_argument (&arg, "-v", 2);
1622 
1623   if (arg == NULL || *arg == '\0')
1624     error (_("REGEXP string is empty"));
1625 
1626   compiled_regex pattern (arg, REG_ICASE,
1627 			  _("Error in regular expression"));
1628 
1629   apropos_cmd (gdb_stdout, cmdlist, verbose, pattern, "");
1630 }
1631 
1632 /* The options for the "alias" command.  */
1633 
1634 struct alias_opts
1635 {
1636   /* For "-a".  */
1637   bool abbrev_flag = false;
1638 };
1639 
1640 static const gdb::option::option_def alias_option_defs[] = {
1641 
1642   gdb::option::flag_option_def<alias_opts> {
1643     "a",
1644     [] (alias_opts *opts) { return &opts->abbrev_flag; },
1645     N_("Specify that ALIAS is an abbreviation of COMMAND.\n\
1646 Abbreviations are not used in command completion."),
1647   },
1648 
1649 };
1650 
1651 /* Create an option_def_group for the "alias" options, with
1652    A_OPTS as context.  */
1653 
1654 static gdb::option::option_def_group
1655 make_alias_options_def_group (alias_opts *a_opts)
1656 {
1657   return {{alias_option_defs}, a_opts};
1658 }
1659 
1660 /* Completer for the "alias_command".  */
1661 
1662 static void
1663 alias_command_completer (struct cmd_list_element *ignore,
1664 			 completion_tracker &tracker,
1665 			 const char *text, const char *word)
1666 {
1667   const auto grp = make_alias_options_def_group (nullptr);
1668 
1669   tracker.set_use_custom_word_point (true);
1670 
1671   if (gdb::option::complete_options
1672       (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp))
1673     return;
1674 
1675   const char *delim = strchr (text, '=');
1676 
1677   /* If we're past the "=" delimiter, complete the
1678      "alias ALIAS = COMMAND [DEFAULT-ARGS...]" as if the user is
1679      typing COMMAND DEFAULT-ARGS...  */
1680   if (delim != text
1681       && delim != nullptr
1682       && isspace (delim[-1])
1683       && (isspace (delim[1]) || delim[1] == '\0'))
1684     {
1685       std::string new_text = std::string (delim + 1);
1686 
1687       tracker.advance_custom_word_point_by (delim + 1 - text);
1688       complete_nested_command_line (tracker, new_text.c_str ());
1689       return;
1690     }
1691 
1692   /* We're not yet past the "=" delimiter.  Complete a command, as
1693      the user might type an alias following a prefix command.  */
1694   complete_nested_command_line (tracker, text);
1695 }
1696 
1697 /* Subroutine of alias_command to simplify it.
1698    Return the first N elements of ARGV flattened back to a string
1699    with a space separating each element.
1700    ARGV may not be NULL.
1701    This does not take care of quoting elements in case they contain spaces
1702    on purpose.  */
1703 
1704 static std::string
1705 argv_to_string (char **argv, int n)
1706 {
1707   int i;
1708   std::string result;
1709 
1710   gdb_assert (argv != NULL);
1711   gdb_assert (n >= 0 && n <= countargv (argv));
1712 
1713   for (i = 0; i < n; ++i)
1714     {
1715       if (i > 0)
1716 	result += " ";
1717       result += argv[i];
1718     }
1719 
1720   return result;
1721 }
1722 
1723 /* Subroutine of alias_command to simplify it.
1724    Verifies that COMMAND can have an alias:
1725       COMMAND must exist.
1726       COMMAND must not have default args.
1727    This last condition is to avoid the following:
1728      alias aaa = backtrace -full
1729      alias bbb = aaa -past-main
1730    as (at least currently), alias default args are not cumulative
1731    and the user would expect bbb to execute 'backtrace -full -past-main'
1732    while it will execute 'backtrace -past-main'.  */
1733 
1734 static void
1735 validate_aliased_command (const char *command)
1736 {
1737   struct cmd_list_element *c;
1738   std::string default_args;
1739 
1740   c = lookup_cmd_1 (& command, cmdlist, NULL, &default_args, 1);
1741 
1742   if (c == NULL || c == (struct cmd_list_element *) -1)
1743     error (_("Invalid command to alias to: %s"), command);
1744 
1745   if (!default_args.empty ())
1746     error (_("Cannot define an alias of an alias that has default args"));
1747 }
1748 
1749 /* Called when "alias" was incorrectly used.  */
1750 
1751 static void
1752 alias_usage_error (void)
1753 {
1754   error (_("Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]"));
1755 }
1756 
1757 /* Make an alias of an existing command.  */
1758 
1759 static void
1760 alias_command (const char *args, int from_tty)
1761 {
1762   alias_opts a_opts;
1763 
1764   auto grp = make_alias_options_def_group (&a_opts);
1765   gdb::option::process_options
1766     (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp);
1767 
1768   int i, alias_argc, command_argc;
1769   const char *equals;
1770   const char *alias, *command;
1771 
1772   if (args == NULL || strchr (args, '=') == NULL)
1773     alias_usage_error ();
1774 
1775   equals = strchr (args, '=');
1776   std::string args2 (args, equals - args);
1777 
1778   gdb_argv built_alias_argv (args2.c_str ());
1779 
1780   const char *default_args = equals + 1;
1781   struct cmd_list_element *c_command_prefix;
1782 
1783   lookup_cmd_for_default_args (&default_args, &c_command_prefix);
1784   std::string command_argv_str (equals + 1,
1785 				default_args == nullptr
1786 				? strlen (equals + 1)
1787 				: default_args - equals - 1);
1788   gdb_argv command_argv (command_argv_str.c_str ());
1789 
1790   char **alias_argv = built_alias_argv.get ();
1791 
1792   if (alias_argv[0] == NULL || command_argv[0] == NULL
1793       || *alias_argv[0] == '\0' || *command_argv[0] == '\0')
1794     alias_usage_error ();
1795 
1796   for (i = 0; alias_argv[i] != NULL; ++i)
1797     {
1798       if (! valid_user_defined_cmd_name_p (alias_argv[i]))
1799 	{
1800 	  if (i == 0)
1801 	    error (_("Invalid command name: %s"), alias_argv[i]);
1802 	  else
1803 	    error (_("Invalid command element name: %s"), alias_argv[i]);
1804 	}
1805     }
1806 
1807   alias_argc = countargv (alias_argv);
1808   command_argc = command_argv.count ();
1809 
1810   /* COMMAND must exist, and cannot have default args.
1811      Reconstruct the command to remove any extraneous spaces,
1812      for better error messages.  */
1813   std::string command_string (argv_to_string (command_argv.get (),
1814 					      command_argc));
1815   command = command_string.c_str ();
1816   validate_aliased_command (command);
1817 
1818   /* ALIAS must not exist.  */
1819   std::string alias_string (argv_to_string (alias_argv, alias_argc));
1820   alias = alias_string.c_str ();
1821   {
1822     cmd_list_element *alias_cmd, *prefix_cmd, *cmd;
1823 
1824     if (lookup_cmd_composition (alias, &alias_cmd, &prefix_cmd, &cmd))
1825       {
1826 	const char *alias_name = alias_argv[alias_argc-1];
1827 
1828 	/* If we found an existing ALIAS_CMD, check that the prefix differ or
1829 	   the name differ.  */
1830 
1831 	if (alias_cmd != nullptr
1832 	    && alias_cmd->prefix == prefix_cmd
1833 	    && strcmp (alias_name, alias_cmd->name) == 0)
1834 	  error (_("Alias already exists: %s"), alias);
1835 
1836 	/* Check ALIAS differs from the found CMD.  */
1837 
1838 	if (cmd->prefix == prefix_cmd
1839 	    && strcmp (alias_name, cmd->name) == 0)
1840 	  error (_("Alias %s is the name of an existing command"), alias);
1841       }
1842   }
1843 
1844 
1845   struct cmd_list_element *alias_cmd;
1846 
1847   /* If ALIAS is one word, it is an alias for the entire COMMAND.
1848      Example: alias spe = set print elements
1849 
1850      Otherwise ALIAS and COMMAND must have the same number of words,
1851      and every word except the last must identify the same prefix command;
1852      and the last word of ALIAS is made an alias of the last word of COMMAND.
1853      Example: alias set print elms = set pr elem
1854      Note that unambiguous abbreviations are allowed.  */
1855 
1856   if (alias_argc == 1)
1857     {
1858       /* add_cmd requires *we* allocate space for name, hence the xstrdup.  */
1859       alias_cmd = add_com_alias (xstrdup (alias_argv[0]), command, class_alias,
1860 				 a_opts.abbrev_flag);
1861     }
1862   else
1863     {
1864       const char *alias_prefix, *command_prefix;
1865       struct cmd_list_element *c_alias, *c_command;
1866 
1867       if (alias_argc != command_argc)
1868 	error (_("Mismatched command length between ALIAS and COMMAND."));
1869 
1870       /* Create copies of ALIAS and COMMAND without the last word,
1871 	 and use that to verify the leading elements give the same
1872 	 prefix command.  */
1873       std::string alias_prefix_string (argv_to_string (alias_argv,
1874 						       alias_argc - 1));
1875       std::string command_prefix_string (argv_to_string (command_argv.get (),
1876 							 command_argc - 1));
1877       alias_prefix = alias_prefix_string.c_str ();
1878       command_prefix = command_prefix_string.c_str ();
1879 
1880       c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, NULL, 1);
1881       /* We've already tried to look up COMMAND.  */
1882       gdb_assert (c_command != NULL
1883 		  && c_command != (struct cmd_list_element *) -1);
1884       gdb_assert (c_command->prefixlist != NULL);
1885       c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, NULL, 1);
1886       if (c_alias != c_command)
1887 	error (_("ALIAS and COMMAND prefixes do not match."));
1888 
1889       /* add_cmd requires *we* allocate space for name, hence the xstrdup.  */
1890       alias_cmd = add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]),
1891 				 command_argv[command_argc - 1],
1892 				 class_alias, a_opts.abbrev_flag,
1893 				 c_command->prefixlist);
1894     }
1895 
1896   gdb_assert (alias_cmd != nullptr);
1897   gdb_assert (alias_cmd->default_args.empty ());
1898   if (default_args != nullptr)
1899     {
1900       default_args = skip_spaces (default_args);
1901 
1902       alias_cmd->default_args = default_args;
1903     }
1904 }
1905 
1906 /* Print the file / line number / symbol name of the location
1907    specified by SAL.  */
1908 
1909 static void
1910 print_sal_location (const symtab_and_line &sal)
1911 {
1912   scoped_restore_current_program_space restore_pspace;
1913   set_current_program_space (sal.pspace);
1914 
1915   const char *sym_name = NULL;
1916   if (sal.symbol != NULL)
1917     sym_name = sal.symbol->print_name ();
1918   printf_filtered (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"),
1919 		   symtab_to_filename_for_display (sal.symtab),
1920 		   sal.line, sym_name != NULL ? sym_name : "???");
1921 }
1922 
1923 /* Print a list of files and line numbers which a user may choose from
1924    in order to list a function which was specified ambiguously (as
1925    with `list classname::overloadedfuncname', for example).  The SALS
1926    array provides the filenames and line numbers.  FORMAT is a
1927    printf-style format string used to tell the user what was
1928    ambiguous.  */
1929 
1930 static void
1931 ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
1932 		     const char *format, ...)
1933 {
1934   va_list ap;
1935   va_start (ap, format);
1936   vprintf_filtered (format, ap);
1937   va_end (ap);
1938 
1939   for (const auto &sal : sals)
1940     print_sal_location (sal);
1941 }
1942 
1943 /* Comparison function for filter_sals.  Returns a qsort-style
1944    result.  */
1945 
1946 static int
1947 cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb)
1948 {
1949   const char *dira = SYMTAB_DIRNAME (sala.symtab);
1950   const char *dirb = SYMTAB_DIRNAME (salb.symtab);
1951   int r;
1952 
1953   if (dira == NULL)
1954     {
1955       if (dirb != NULL)
1956 	return -1;
1957     }
1958   else if (dirb == NULL)
1959     {
1960       if (dira != NULL)
1961 	return 1;
1962     }
1963   else
1964     {
1965       r = filename_cmp (dira, dirb);
1966       if (r)
1967 	return r;
1968     }
1969 
1970   r = filename_cmp (sala.symtab->filename, salb.symtab->filename);
1971   if (r)
1972     return r;
1973 
1974   if (sala.line < salb.line)
1975     return -1;
1976   return sala.line == salb.line ? 0 : 1;
1977 }
1978 
1979 /* Remove any SALs that do not match the current program space, or
1980    which appear to be "file:line" duplicates.  */
1981 
1982 static void
1983 filter_sals (std::vector<symtab_and_line> &sals)
1984 {
1985   /* Remove SALs that do not match.  */
1986   auto from = std::remove_if (sals.begin (), sals.end (),
1987 			      [&] (const symtab_and_line &sal)
1988     { return (sal.pspace != current_program_space || sal.symtab == NULL); });
1989 
1990   /* Remove dups.  */
1991   std::sort (sals.begin (), from,
1992 	     [] (const symtab_and_line &sala, const symtab_and_line &salb)
1993    { return cmp_symtabs (sala, salb) < 0; });
1994 
1995   from = std::unique (sals.begin (), from,
1996 		      [&] (const symtab_and_line &sala,
1997 			   const symtab_and_line &salb)
1998     { return cmp_symtabs (sala, salb) == 0; });
1999 
2000   sals.erase (from, sals.end ());
2001 }
2002 
2003 void
2004 init_cmd_lists (void)
2005 {
2006   max_user_call_depth = 1024;
2007 }
2008 
2009 static void
2010 show_info_verbose (struct ui_file *file, int from_tty,
2011 		   struct cmd_list_element *c,
2012 		   const char *value)
2013 {
2014   if (info_verbose)
2015     fprintf_filtered (file,
2016 		      _("Verbose printing of informational messages is %s.\n"),
2017 		      value);
2018   else
2019     fprintf_filtered (file, _("Verbosity is %s.\n"), value);
2020 }
2021 
2022 static void
2023 show_history_expansion_p (struct ui_file *file, int from_tty,
2024 			  struct cmd_list_element *c, const char *value)
2025 {
2026   fprintf_filtered (file, _("History expansion on command input is %s.\n"),
2027 		    value);
2028 }
2029 
2030 static void
2031 show_remote_debug (struct ui_file *file, int from_tty,
2032 		   struct cmd_list_element *c, const char *value)
2033 {
2034   fprintf_filtered (file, _("Debugging of remote protocol is %s.\n"),
2035 		    value);
2036 }
2037 
2038 static void
2039 show_remote_timeout (struct ui_file *file, int from_tty,
2040 		     struct cmd_list_element *c, const char *value)
2041 {
2042   fprintf_filtered (file,
2043 		    _("Timeout limit to wait for target to respond is %s.\n"),
2044 		    value);
2045 }
2046 
2047 static void
2048 show_max_user_call_depth (struct ui_file *file, int from_tty,
2049 			  struct cmd_list_element *c, const char *value)
2050 {
2051   fprintf_filtered (file,
2052 		    _("The max call depth for user-defined commands is %s.\n"),
2053 		    value);
2054 }
2055 
2056 /* Returns the cmd_list_element in SHOWLIST corresponding to the first
2057    argument of ARGV, which must contain one single value.
2058    Throws an error if no value provided, or value not correct.
2059    FNNAME is used in the error message.  */
2060 
2061 static cmd_list_element *
2062 setting_cmd (const char *fnname, struct cmd_list_element *showlist,
2063 	     int argc, struct value **argv)
2064 {
2065   if (argc == 0)
2066     error (_("You must provide an argument to %s"), fnname);
2067   if (argc != 1)
2068     error (_("You can only provide one argument to %s"), fnname);
2069 
2070   struct type *type0 = check_typedef (value_type (argv[0]));
2071 
2072   if (type0->code () != TYPE_CODE_ARRAY
2073       && type0->code () != TYPE_CODE_STRING)
2074     error (_("First argument of %s must be a string."), fnname);
2075 
2076   const char *a0 = (const char *) value_contents (argv[0]);
2077   cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", NULL, -1, 0);
2078 
2079   if (cmd == nullptr || cmd->type != show_cmd)
2080     error (_("First argument of %s must be a "
2081 	     "valid setting of the 'show' command."), fnname);
2082 
2083   return cmd;
2084 }
2085 
2086 /* Builds a value from the show CMD.  */
2087 
2088 static struct value *
2089 value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch)
2090 {
2091   switch (cmd->var_type)
2092     {
2093     case var_integer:
2094       if (*(int *) cmd->var == INT_MAX)
2095 	return value_from_longest (builtin_type (gdbarch)->builtin_int,
2096 				   0);
2097       else
2098 	return value_from_longest (builtin_type (gdbarch)->builtin_int,
2099 				   *(int *) cmd->var);
2100     case var_zinteger:
2101       return value_from_longest (builtin_type (gdbarch)->builtin_int,
2102 				 *(int *) cmd->var);
2103     case var_boolean:
2104       return value_from_longest (builtin_type (gdbarch)->builtin_int,
2105 				 *(bool *) cmd->var ? 1 : 0);
2106     case var_zuinteger_unlimited:
2107       return value_from_longest (builtin_type (gdbarch)->builtin_int,
2108 				 *(int *) cmd->var);
2109     case var_auto_boolean:
2110       {
2111 	int val;
2112 
2113 	switch (*(enum auto_boolean*) cmd->var)
2114 	  {
2115 	  case AUTO_BOOLEAN_TRUE:
2116 	    val = 1;
2117 	    break;
2118 	  case AUTO_BOOLEAN_FALSE:
2119 	    val = 0;
2120 	    break;
2121 	  case AUTO_BOOLEAN_AUTO:
2122 	    val = -1;
2123 	    break;
2124 	  default:
2125 	    gdb_assert_not_reached ("invalid var_auto_boolean");
2126 	  }
2127 	return value_from_longest (builtin_type (gdbarch)->builtin_int,
2128 				   val);
2129       }
2130     case var_uinteger:
2131       if (*(unsigned int *) cmd->var == UINT_MAX)
2132 	return value_from_ulongest
2133 	  (builtin_type (gdbarch)->builtin_unsigned_int, 0);
2134       else
2135 	return value_from_ulongest
2136 	  (builtin_type (gdbarch)->builtin_unsigned_int,
2137 	   *(unsigned int *) cmd->var);
2138     case var_zuinteger:
2139       return value_from_ulongest (builtin_type (gdbarch)->builtin_unsigned_int,
2140 				  *(unsigned int *) cmd->var);
2141     case var_string:
2142     case var_string_noescape:
2143     case var_optional_filename:
2144     case var_filename:
2145     case var_enum:
2146       if (*(char **) cmd->var)
2147 	return value_cstring (*(char **) cmd->var, strlen (*(char **) cmd->var),
2148 			      builtin_type (gdbarch)->builtin_char);
2149       else
2150 	return value_cstring ("", 1,
2151 			      builtin_type (gdbarch)->builtin_char);
2152     default:
2153       gdb_assert_not_reached ("bad var_type");
2154     }
2155 }
2156 
2157 /* Implementation of the convenience function $_gdb_setting.  */
2158 
2159 static struct value *
2160 gdb_setting_internal_fn (struct gdbarch *gdbarch,
2161 			 const struct language_defn *language,
2162 			 void *cookie, int argc, struct value **argv)
2163 {
2164   return value_from_setting (setting_cmd ("$_gdb_setting", showlist,
2165 					  argc, argv),
2166 			     gdbarch);
2167 }
2168 
2169 /* Implementation of the convenience function $_gdb_maint_setting.  */
2170 
2171 static struct value *
2172 gdb_maint_setting_internal_fn (struct gdbarch *gdbarch,
2173 			       const struct language_defn *language,
2174 			       void *cookie, int argc, struct value **argv)
2175 {
2176   return value_from_setting (setting_cmd ("$_gdb_maint_setting",
2177 					  maintenance_show_cmdlist,
2178 					  argc, argv),
2179 			     gdbarch);
2180 }
2181 
2182 /* Builds a string value from the show CMD.  */
2183 
2184 static struct value *
2185 str_value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch)
2186 {
2187   switch (cmd->var_type)
2188     {
2189     case var_integer:
2190     case var_zinteger:
2191     case var_boolean:
2192     case var_zuinteger_unlimited:
2193     case var_auto_boolean:
2194     case var_uinteger:
2195     case var_zuinteger:
2196       {
2197 	std::string cmd_val = get_setshow_command_value_string (cmd);
2198 
2199 	return value_cstring (cmd_val.c_str (), cmd_val.size (),
2200 			      builtin_type (gdbarch)->builtin_char);
2201       }
2202 
2203     case var_string:
2204     case var_string_noescape:
2205     case var_optional_filename:
2206     case var_filename:
2207     case var_enum:
2208       /* For these cases, we do not use get_setshow_command_value_string,
2209 	 as this function handle some characters specially, e.g. by
2210 	 escaping quotes.  So, we directly use the cmd->var string value,
2211 	 similarly to the value_from_setting code for these cases.  */
2212       if (*(char **) cmd->var)
2213 	return value_cstring (*(char **) cmd->var, strlen (*(char **) cmd->var),
2214 			      builtin_type (gdbarch)->builtin_char);
2215       else
2216 	return value_cstring ("", 1,
2217 			      builtin_type (gdbarch)->builtin_char);
2218 
2219     default:
2220       gdb_assert_not_reached ("bad var_type");
2221     }
2222 }
2223 
2224 /* Implementation of the convenience function $_gdb_setting_str.  */
2225 
2226 static struct value *
2227 gdb_setting_str_internal_fn (struct gdbarch *gdbarch,
2228 			     const struct language_defn *language,
2229 			     void *cookie, int argc, struct value **argv)
2230 {
2231   return str_value_from_setting (setting_cmd ("$_gdb_setting_str",
2232 					      showlist, argc, argv),
2233 				 gdbarch);
2234 }
2235 
2236 
2237 /* Implementation of the convenience function $_gdb_maint_setting_str.  */
2238 
2239 static struct value *
2240 gdb_maint_setting_str_internal_fn (struct gdbarch *gdbarch,
2241 				   const struct language_defn *language,
2242 				   void *cookie, int argc, struct value **argv)
2243 {
2244   return str_value_from_setting (setting_cmd ("$_gdb_maint_setting_str",
2245 					      maintenance_show_cmdlist,
2246 					      argc, argv),
2247 				 gdbarch);
2248 }
2249 
2250 void _initialize_cli_cmds ();
2251 void
2252 _initialize_cli_cmds ()
2253 {
2254   struct cmd_list_element *c;
2255 
2256   /* Define the classes of commands.
2257      They will appear in the help list in alphabetical order.  */
2258 
2259   add_cmd ("internals", class_maintenance, _("\
2260 Maintenance commands.\n\
2261 Some gdb commands are provided just for use by gdb maintainers.\n\
2262 These commands are subject to frequent change, and may not be as\n\
2263 well documented as user commands."),
2264 	   &cmdlist);
2265   add_cmd ("obscure", class_obscure, _("Obscure features."), &cmdlist);
2266   add_cmd ("aliases", class_alias,
2267 	   _("User-defined aliases of other commands."), &cmdlist);
2268   add_cmd ("user-defined", class_user, _("\
2269 User-defined commands.\n\
2270 The commands in this class are those defined by the user.\n\
2271 Use the \"define\" command to define a command."), &cmdlist);
2272   add_cmd ("support", class_support, _("Support facilities."), &cmdlist);
2273   if (!dbx_commands)
2274     add_cmd ("status", class_info, _("Status inquiries."), &cmdlist);
2275   add_cmd ("files", class_files, _("Specifying and examining files."),
2276 	   &cmdlist);
2277   add_cmd ("breakpoints", class_breakpoint,
2278 	   _("Making program stop at certain points."), &cmdlist);
2279   add_cmd ("data", class_vars, _("Examining data."), &cmdlist);
2280   add_cmd ("stack", class_stack, _("\
2281 Examining the stack.\n\
2282 The stack is made up of stack frames.  Gdb assigns numbers to stack frames\n\
2283 counting from zero for the innermost (currently executing) frame.\n\n\
2284 At any time gdb identifies one frame as the \"selected\" frame.\n\
2285 Variable lookups are done with respect to the selected frame.\n\
2286 When the program being debugged stops, gdb selects the innermost frame.\n\
2287 The commands below can be used to select other frames by number or address."),
2288 	   &cmdlist);
2289 #ifdef TUI
2290   add_cmd ("text-user-interface", class_tui,
2291 	   _("TUI is the GDB text based interface.\n\
2292 In TUI mode, GDB can display several text windows showing\n\
2293 the source file, the processor registers, the program disassembly, ..."), &cmdlist);
2294 #endif
2295   add_cmd ("running", class_run, _("Running the program."), &cmdlist);
2296 
2297   /* Define general commands.  */
2298 
2299   add_com ("pwd", class_files, pwd_command, _("\
2300 Print working directory.\n\
2301 This is used for your program as well."));
2302 
2303   c = add_cmd ("cd", class_files, cd_command, _("\
2304 Set working directory to DIR for debugger.\n\
2305 The debugger's current working directory specifies where scripts and other\n\
2306 files that can be loaded by GDB are located.\n\
2307 In order to change the inferior's current working directory, the recommended\n\
2308 way is to use the \"set cwd\" command."), &cmdlist);
2309   set_cmd_completer (c, filename_completer);
2310 
2311   add_com ("echo", class_support, echo_command, _("\
2312 Print a constant string.  Give string as argument.\n\
2313 C escape sequences may be used in the argument.\n\
2314 No newline is added at the end of the argument;\n\
2315 use \"\\n\" if you want a newline to be printed.\n\
2316 Since leading and trailing whitespace are ignored in command arguments,\n\
2317 if you want to print some you must use \"\\\" before leading whitespace\n\
2318 to be printed or after trailing whitespace."));
2319 
2320   add_setshow_enum_cmd ("script-extension", class_support,
2321 			script_ext_enums, &script_ext_mode, _("\
2322 Set mode for script filename extension recognition."), _("\
2323 Show mode for script filename extension recognition."), _("\
2324 off  == no filename extension recognition (all sourced files are GDB scripts)\n\
2325 soft == evaluate script according to filename extension, fallback to GDB script"
2326   "\n\
2327 strict == evaluate script according to filename extension, error if not supported"
2328   ),
2329 			NULL,
2330 			show_script_ext_mode,
2331 			&setlist, &showlist);
2332 
2333   add_com ("quit", class_support, quit_command, _("\
2334 Exit gdb.\n\
2335 Usage: quit [EXPR]\n\
2336 The optional expression EXPR, if present, is evaluated and the result\n\
2337 used as GDB's exit code.  The default is zero."));
2338   c = add_com ("help", class_support, help_command,
2339 	       _("Print list of commands."));
2340   set_cmd_completer (c, command_completer);
2341   add_com_alias ("q", "quit", class_support, 1);
2342   add_com_alias ("h", "help", class_support, 1);
2343 
2344   add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\
2345 Set verbosity."), _("\
2346 Show verbosity."), NULL,
2347 			   set_verbose,
2348 			   show_info_verbose,
2349 			   &setlist, &showlist);
2350 
2351   add_basic_prefix_cmd ("history", class_support, _("\
2352 Generic command for setting command history parameters."),
2353 			&sethistlist, "set history ", 0, &setlist);
2354   add_show_prefix_cmd ("history", class_support, _("\
2355 Generic command for showing command history parameters."),
2356 		       &showhistlist, "show history ", 0, &showlist);
2357 
2358   add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\
2359 Set history expansion on command input."), _("\
2360 Show history expansion on command input."), _("\
2361 Without an argument, history expansion is enabled."),
2362 			   NULL,
2363 			   show_history_expansion_p,
2364 			   &sethistlist, &showhistlist);
2365 
2366   add_prefix_cmd ("info", class_info, info_command, _("\
2367 Generic command for showing things about the program being debugged."),
2368 		  &infolist, "info ", 0, &cmdlist);
2369   add_com_alias ("i", "info", class_info, 1);
2370   add_com_alias ("inf", "info", class_info, 1);
2371 
2372   add_com ("complete", class_obscure, complete_command,
2373 	   _("List the completions for the rest of the line as a command."));
2374 
2375   c = add_show_prefix_cmd ("show", class_info, _("\
2376 Generic command for showing things about the debugger."),
2377 			   &showlist, "show ", 0, &cmdlist);
2378   /* Another way to get at the same thing.  */
2379   add_alias_cmd ("set", c, class_info, 0, &infolist);
2380 
2381   c = add_com ("with", class_vars, with_command, _("\
2382 Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING.\n\
2383 Usage: with SETTING [VALUE] [-- COMMAND]\n\
2384 Usage: w SETTING [VALUE] [-- COMMAND]\n\
2385 With no COMMAND, repeats the last executed command.\n\
2386 \n\
2387 SETTING is any setting you can change with the \"set\" subcommands.\n\
2388 E.g.:\n\
2389   with language pascal -- print obj\n\
2390   with print elements unlimited -- print obj\n\
2391 \n\
2392 You can change multiple settings using nested with, and use\n\
2393 abbreviations for commands and/or values.  E.g.:\n\
2394   w la p -- w p el u -- p obj"));
2395   set_cmd_completer_handle_brkchars (c, with_command_completer);
2396   add_com_alias ("w", "with", class_vars, 1);
2397 
2398   add_internal_function ("_gdb_setting_str", _("\
2399 $_gdb_setting_str - returns the value of a GDB setting as a string.\n\
2400 Usage: $_gdb_setting_str (setting)\n\
2401 \n\
2402 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2403 boolean values are \"off\", \"on\".\n\
2404 Some integer settings accept an unlimited value, returned\n\
2405 as \"unlimited\"."),
2406 			 gdb_setting_str_internal_fn, NULL);
2407 
2408   add_internal_function ("_gdb_setting", _("\
2409 $_gdb_setting - returns the value of a GDB setting.\n\
2410 Usage: $_gdb_setting (setting)\n\
2411 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2412 boolean values are \"off\", \"on\".\n\
2413 Some integer settings accept an unlimited value, returned\n\
2414 as 0 or -1 depending on the setting."),
2415 			 gdb_setting_internal_fn, NULL);
2416 
2417   add_internal_function ("_gdb_maint_setting_str", _("\
2418 $_gdb_maint_setting_str - returns the value of a GDB maintenance setting as a string.\n\
2419 Usage: $_gdb_maint_setting_str (setting)\n\
2420 \n\
2421 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2422 boolean values are \"off\", \"on\".\n\
2423 Some integer settings accept an unlimited value, returned\n\
2424 as \"unlimited\"."),
2425 			 gdb_maint_setting_str_internal_fn, NULL);
2426 
2427   add_internal_function ("_gdb_maint_setting", _("\
2428 $_gdb_maint_setting - returns the value of a GDB maintenance setting.\n\
2429 Usage: $_gdb_maint_setting (setting)\n\
2430 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2431 boolean values are \"off\", \"on\".\n\
2432 Some integer settings accept an unlimited value, returned\n\
2433 as 0 or -1 depending on the setting."),
2434 			 gdb_maint_setting_internal_fn, NULL);
2435 
2436   add_cmd ("commands", no_set_class, show_commands, _("\
2437 Show the history of commands you typed.\n\
2438 You can supply a command number to start with, or a `+' to start after\n\
2439 the previous command number shown."),
2440 	   &showlist);
2441 
2442   add_cmd ("version", no_set_class, show_version,
2443 	   _("Show what version of GDB this is."), &showlist);
2444 
2445   add_cmd ("configuration", no_set_class, show_configuration,
2446 	   _("Show how GDB was configured at build time."), &showlist);
2447 
2448   add_setshow_zinteger_cmd ("remote", no_class, &remote_debug, _("\
2449 Set debugging of remote protocol."), _("\
2450 Show debugging of remote protocol."), _("\
2451 When enabled, each packet sent or received with the remote target\n\
2452 is displayed."),
2453 			    NULL,
2454 			    show_remote_debug,
2455 			    &setdebuglist, &showdebuglist);
2456 
2457   add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class,
2458 				       &remote_timeout, _("\
2459 Set timeout limit to wait for target to respond."), _("\
2460 Show timeout limit to wait for target to respond."), _("\
2461 This value is used to set the time limit for gdb to wait for a response\n\
2462 from the target."),
2463 				       NULL,
2464 				       show_remote_timeout,
2465 				       &setlist, &showlist);
2466 
2467   add_basic_prefix_cmd ("debug", no_class,
2468 			_("Generic command for setting gdb debugging flags."),
2469 			&setdebuglist, "set debug ", 0, &setlist);
2470 
2471   add_show_prefix_cmd ("debug", no_class,
2472 		       _("Generic command for showing gdb debugging flags."),
2473 		       &showdebuglist, "show debug ", 0, &showlist);
2474 
2475   c = add_com ("shell", class_support, shell_command, _("\
2476 Execute the rest of the line as a shell command.\n\
2477 With no arguments, run an inferior shell."));
2478   set_cmd_completer (c, filename_completer);
2479 
2480   add_com_alias ("!", "shell", class_support, 0);
2481 
2482   c = add_com ("edit", class_files, edit_command, _("\
2483 Edit specified file or function.\n\
2484 With no argument, edits file containing most recent line listed.\n\
2485 Editing targets can be specified in these ways:\n\
2486   FILE:LINENUM, to edit at that line in that file,\n\
2487   FUNCTION, to edit at the beginning of that function,\n\
2488   FILE:FUNCTION, to distinguish among like-named static functions.\n\
2489   *ADDRESS, to edit at the line containing that address.\n\
2490 Uses EDITOR environment variable contents as editor (or ex as default)."));
2491 
2492   c->completer = location_completer;
2493 
2494   c = add_com ("pipe", class_support, pipe_command, _("\
2495 Send the output of a gdb command to a shell command.\n\
2496 Usage: | [COMMAND] | SHELL_COMMAND\n\
2497 Usage: | -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2498 Usage: pipe [COMMAND] | SHELL_COMMAND\n\
2499 Usage: pipe -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2500 \n\
2501 Executes COMMAND and sends its output to SHELL_COMMAND.\n\
2502 \n\
2503 The -d option indicates to use the string DELIM to separate COMMAND\n\
2504 from SHELL_COMMAND, in alternative to |.  This is useful in\n\
2505 case COMMAND contains a | character.\n\
2506 \n\
2507 With no COMMAND, repeat the last executed command\n\
2508 and send its output to SHELL_COMMAND."));
2509   set_cmd_completer_handle_brkchars (c, pipe_command_completer);
2510   add_com_alias ("|", "pipe", class_support, 0);
2511 
2512   add_com ("list", class_files, list_command, _("\
2513 List specified function or line.\n\
2514 With no argument, lists ten more lines after or around previous listing.\n\
2515 \"list -\" lists the ten lines before a previous ten-line listing.\n\
2516 One argument specifies a line, and ten lines are listed around that line.\n\
2517 Two arguments with comma between specify starting and ending lines to list.\n\
2518 Lines can be specified in these ways:\n\
2519   LINENUM, to list around that line in current file,\n\
2520   FILE:LINENUM, to list around that line in that file,\n\
2521   FUNCTION, to list around beginning of that function,\n\
2522   FILE:FUNCTION, to distinguish among like-named static functions.\n\
2523   *ADDRESS, to list around the line containing that address.\n\
2524 With two args, if one is empty, it stands for ten lines away from\n\
2525 the other arg.\n\
2526 \n\
2527 By default, when a single location is given, display ten lines.\n\
2528 This can be changed using \"set listsize\", and the current value\n\
2529 can be shown using \"show listsize\"."));
2530 
2531   add_com_alias ("l", "list", class_files, 1);
2532 
2533   if (dbx_commands)
2534     add_com_alias ("file", "list", class_files, 1);
2535 
2536   c = add_com ("disassemble", class_vars, disassemble_command, _("\
2537 Disassemble a specified section of memory.\n\
2538 Usage: disassemble[/m|/r|/s] START [, END]\n\
2539 Default is the function surrounding the pc of the selected frame.\n\
2540 \n\
2541 With a /s modifier, source lines are included (if available).\n\
2542 In this mode, the output is displayed in PC address order, and\n\
2543 file names and contents for all relevant source files are displayed.\n\
2544 \n\
2545 With a /m modifier, source lines are included (if available).\n\
2546 This view is \"source centric\": the output is in source line order,\n\
2547 regardless of any optimization that is present.  Only the main source file\n\
2548 is displayed, not those of, e.g., any inlined functions.\n\
2549 This modifier hasn't proved useful in practice and is deprecated\n\
2550 in favor of /s.\n\
2551 \n\
2552 With a /r modifier, raw instructions in hex are included.\n\
2553 \n\
2554 With a single argument, the function surrounding that address is dumped.\n\
2555 Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
2556   in the form of \"start,end\", or \"start,+length\".\n\
2557 \n\
2558 Note that the address is interpreted as an expression, not as a location\n\
2559 like in the \"break\" command.\n\
2560 So, for example, if you want to disassemble function bar in file foo.c\n\
2561 you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
2562   set_cmd_completer (c, location_completer);
2563 
2564   c = add_com ("make", class_support, make_command, _("\
2565 Run the ``make'' program using the rest of the line as arguments."));
2566   set_cmd_completer (c, filename_completer);
2567   add_cmd ("user", no_class, show_user, _("\
2568 Show definitions of non-python/scheme user defined commands.\n\
2569 Argument is the name of the user defined command.\n\
2570 With no argument, show definitions of all user defined commands."), &showlist);
2571   add_com ("apropos", class_support, apropos_command, _("\
2572 Search for commands matching a REGEXP.\n\
2573 Usage: apropos [-v] REGEXP\n\
2574 Flag -v indicates to produce a verbose output, showing full documentation\n\
2575 of the matching commands."));
2576 
2577   add_setshow_uinteger_cmd ("max-user-call-depth", no_class,
2578 			   &max_user_call_depth, _("\
2579 Set the max call depth for non-python/scheme user-defined commands."), _("\
2580 Show the max call depth for non-python/scheme user-defined commands."), NULL,
2581 			    NULL,
2582 			    show_max_user_call_depth,
2583 			    &setlist, &showlist);
2584 
2585   add_setshow_boolean_cmd ("trace-commands", no_class, &trace_commands, _("\
2586 Set tracing of GDB CLI commands."), _("\
2587 Show state of GDB CLI command tracing."), _("\
2588 When 'on', each command is displayed as it is executed."),
2589 			   NULL,
2590 			   NULL,
2591 			   &setlist, &showlist);
2592 
2593   const auto alias_opts = make_alias_options_def_group (nullptr);
2594 
2595   static std::string alias_help
2596     = gdb::option::build_help (_("\
2597 Define a new command that is an alias of an existing command.\n\
2598 Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]\n\
2599 ALIAS is the name of the alias command to create.\n\
2600 COMMAND is the command being aliased to.\n\
2601 \n\
2602 Options:\n\
2603 %OPTIONS%\n\
2604 \n\
2605 GDB will automatically prepend the provided DEFAULT-ARGS to the list\n\
2606 of arguments explicitly provided when using ALIAS.\n\
2607 Use \"help aliases\" to list all user defined aliases and their default args.\n\
2608 \n\
2609 Examples:\n\
2610 Make \"spe\" an alias of \"set print elements\":\n\
2611   alias spe set print elements\n\
2612 Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
2613   alias -a set print elms set print elements\n\
2614 Make \"btf\" an alias of \"backtrace -full -past-entry -past-main\" :\n\
2615   alias btf = backtrace -full -past-entry -past-main\n\
2616 Make \"wLapPeu\" an alias of 2 nested \"with\":\n\
2617   alias wLapPeu = with language pascal -- with print elements unlimited --"),
2618 			       alias_opts);
2619 
2620   c = add_com ("alias", class_support, alias_command,
2621 	       alias_help.c_str ());
2622 
2623   set_cmd_completer_handle_brkchars (c, alias_command_completer);
2624 
2625   const char *source_help_text = xstrprintf (_("\
2626 Read commands from a file named FILE.\n\
2627 \n\
2628 Usage: source [-s] [-v] FILE\n\
2629 -s: search for the script in the source search path,\n\
2630     even if FILE contains directories.\n\
2631 -v: each command in FILE is echoed as it is executed.\n\
2632 \n\
2633 Note that the file \"%s\" is read automatically in this way\n\
2634 when GDB is started."), GDBINIT);
2635   c = add_cmd ("source", class_support, source_command,
2636 	       source_help_text, &cmdlist);
2637   set_cmd_completer (c, filename_completer);
2638 }
2639