Home | History | Annotate | Line # | Download | only in cli
cli-cmds.c revision 1.8
      1 /* GDB CLI commands.
      2 
      3    Copyright (C) 2000-2019 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/readline.h"
     23 #include "readline/tilde.h"
     24 #include "completer.h"
     25 #include "target.h"	/* For baud_rate, remote_debug and remote_timeout.  */
     26 #include "common/gdb_wait.h"	/* For shell escape implementation.  */
     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 "common/filestuff.h"
     40 #include "location.h"
     41 #include "block.h"
     42 
     43 #include "ui-out.h"
     44 
     45 #include "top.h"
     46 #include "cli/cli-decode.h"
     47 #include "cli/cli-script.h"
     48 #include "cli/cli-setshow.h"
     49 #include "cli/cli-cmds.h"
     50 #include "cli/cli-utils.h"
     51 
     52 #include "extension.h"
     53 #include "common/pathstuff.h"
     54 
     55 #ifdef TUI
     56 #include "tui/tui.h"	/* For tui_active et.al.  */
     57 #endif
     58 
     59 #include <fcntl.h>
     60 #include <algorithm>
     61 #include <string>
     62 
     63 /* Prototypes for local utility functions */
     64 
     65 static void print_sal_location (const symtab_and_line &sal);
     66 
     67 static void ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
     68 				 const char *format, ...)
     69   ATTRIBUTE_PRINTF (2, 3);
     70 
     71 static void filter_sals (std::vector<symtab_and_line> &);
     72 
     73 
     74 /* Limit the call depth of user-defined commands */
     76 unsigned int max_user_call_depth;
     77 
     78 /* Define all cmd_list_elements.  */
     79 
     80 /* Chain containing all defined commands.  */
     81 
     82 struct cmd_list_element *cmdlist;
     83 
     84 /* Chain containing all defined info subcommands.  */
     85 
     86 struct cmd_list_element *infolist;
     87 
     88 /* Chain containing all defined enable subcommands.  */
     89 
     90 struct cmd_list_element *enablelist;
     91 
     92 /* Chain containing all defined disable subcommands.  */
     93 
     94 struct cmd_list_element *disablelist;
     95 
     96 /* Chain containing all defined stop subcommands.  */
     97 
     98 struct cmd_list_element *stoplist;
     99 
    100 /* Chain containing all defined delete subcommands.  */
    101 
    102 struct cmd_list_element *deletelist;
    103 
    104 /* Chain containing all defined detach subcommands.  */
    105 
    106 struct cmd_list_element *detachlist;
    107 
    108 /* Chain containing all defined kill subcommands.  */
    109 
    110 struct cmd_list_element *killlist;
    111 
    112 /* Chain containing all defined set subcommands */
    113 
    114 struct cmd_list_element *setlist;
    115 
    116 /* Chain containing all defined unset subcommands */
    117 
    118 struct cmd_list_element *unsetlist;
    119 
    120 /* Chain containing all defined show subcommands.  */
    121 
    122 struct cmd_list_element *showlist;
    123 
    124 /* Chain containing all defined \"set history\".  */
    125 
    126 struct cmd_list_element *sethistlist;
    127 
    128 /* Chain containing all defined \"show history\".  */
    129 
    130 struct cmd_list_element *showhistlist;
    131 
    132 /* Chain containing all defined \"unset history\".  */
    133 
    134 struct cmd_list_element *unsethistlist;
    135 
    136 /* Chain containing all defined maintenance subcommands.  */
    137 
    138 struct cmd_list_element *maintenancelist;
    139 
    140 /* Chain containing all defined "maintenance info" subcommands.  */
    141 
    142 struct cmd_list_element *maintenanceinfolist;
    143 
    144 /* Chain containing all defined "maintenance print" subcommands.  */
    145 
    146 struct cmd_list_element *maintenanceprintlist;
    147 
    148 /* Chain containing all defined "maintenance check" subcommands.  */
    149 
    150 struct cmd_list_element *maintenancechecklist;
    151 
    152 struct cmd_list_element *setprintlist;
    153 
    154 struct cmd_list_element *showprintlist;
    155 
    156 struct cmd_list_element *setdebuglist;
    157 
    158 struct cmd_list_element *showdebuglist;
    159 
    160 struct cmd_list_element *setchecklist;
    161 
    162 struct cmd_list_element *showchecklist;
    163 
    164 /* Command tracing state.  */
    165 
    166 int source_verbose = 0;
    167 int trace_commands = 0;
    168 
    169 /* 'script-extension' option support.  */
    171 
    172 static const char script_ext_off[] = "off";
    173 static const char script_ext_soft[] = "soft";
    174 static const char script_ext_strict[] = "strict";
    175 
    176 static const char *const script_ext_enums[] = {
    177   script_ext_off,
    178   script_ext_soft,
    179   script_ext_strict,
    180   NULL
    181 };
    182 
    183 static const char *script_ext_mode = script_ext_soft;
    184 
    185 /* 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 /* The "info" command is defined as a prefix, with allow_unknown = 0.
    196    Therefore, its own definition is called only for "info" with no
    197    args.  */
    198 
    199 static void
    200 info_command (const char *arg, int from_tty)
    201 {
    202   printf_unfiltered (_("\"info\" must be followed by "
    203 		       "the name of an info command.\n"));
    204   help_list (infolist, "info ", all_commands, gdb_stdout);
    205 }
    206 
    207 /* The "show" command with no arguments shows all the settings.  */
    208 
    209 static void
    210 show_command (const char *arg, int from_tty)
    211 {
    212   cmd_show_list (showlist, from_tty, "");
    213 }
    214 
    215 
    216 /* Provide documentation on command or list given by COMMAND.  FROM_TTY
    218    is ignored.  */
    219 
    220 static void
    221 help_command (const char *command, int from_tty)
    222 {
    223   help_cmd (command, gdb_stdout);
    224 }
    225 
    226 
    228 /* Note: The "complete" command is used by Emacs to implement completion.
    229    [Is that why this function writes output with *_unfiltered?]  */
    230 
    231 static void
    232 complete_command (const char *arg, int from_tty)
    233 {
    234   dont_repeat ();
    235 
    236   if (max_completions == 0)
    237     {
    238       /* Only print this for non-mi frontends.  An MI frontend may not
    239 	 be able to handle this.  */
    240       if (!current_uiout->is_mi_like_p ())
    241 	{
    242 	  printf_unfiltered (_("max-completions is zero,"
    243 			       " completion is disabled.\n"));
    244 	}
    245       return;
    246     }
    247 
    248   if (arg == NULL)
    249     arg = "";
    250 
    251   completion_tracker tracker_handle_brkchars;
    252   completion_tracker tracker_handle_completions;
    253   completion_tracker *tracker;
    254 
    255   int quote_char = '\0';
    256   const char *word;
    257 
    258   TRY
    259     {
    260       word = completion_find_completion_word (tracker_handle_brkchars,
    261 					      arg, &quote_char);
    262 
    263       /* Completers that provide a custom word point in the
    264 	 handle_brkchars phase also compute their completions then.
    265 	 Completers that leave the completion word handling to readline
    266 	 must be called twice.  */
    267       if (tracker_handle_brkchars.use_custom_word_point ())
    268 	tracker = &tracker_handle_brkchars;
    269       else
    270 	{
    271 	  complete_line (tracker_handle_completions, word, arg, strlen (arg));
    272 	  tracker = &tracker_handle_completions;
    273 	}
    274     }
    275   CATCH (ex, RETURN_MASK_ALL)
    276     {
    277       return;
    278     }
    279   END_CATCH
    280 
    281   std::string arg_prefix (arg, word - arg);
    282 
    283   completion_result result
    284     = tracker->build_completion_result (word, word - arg, strlen (arg));
    285 
    286   if (result.number_matches != 0)
    287     {
    288       if (result.number_matches == 1)
    289 	printf_unfiltered ("%s%s\n", arg_prefix.c_str (), result.match_list[0]);
    290       else
    291 	{
    292 	  result.sort_match_list ();
    293 
    294 	  for (size_t i = 0; i < result.number_matches; i++)
    295 	    {
    296 	      printf_unfiltered ("%s%s",
    297 				 arg_prefix.c_str (),
    298 				 result.match_list[i + 1]);
    299 	      if (quote_char)
    300 		printf_unfiltered ("%c", quote_char);
    301 	      printf_unfiltered ("\n");
    302 	    }
    303 	}
    304 
    305       if (result.number_matches == max_completions)
    306 	{
    307 	  /* ARG_PREFIX and WORD are included in the output so that emacs
    308 	     will include the message in the output.  */
    309 	  printf_unfiltered (_("%s%s %s\n"),
    310 			     arg_prefix.c_str (), word,
    311 			     get_max_completions_reached_message ());
    312 	}
    313     }
    314 }
    315 
    316 int
    317 is_complete_command (struct cmd_list_element *c)
    318 {
    319   return cmd_cfunc_eq (c, complete_command);
    320 }
    321 
    322 static void
    323 show_version (const char *args, int from_tty)
    324 {
    325   print_gdb_version (gdb_stdout, true);
    326   printf_filtered ("\n");
    327 }
    328 
    329 static void
    330 show_configuration (const char *args, int from_tty)
    331 {
    332   print_gdb_configuration (gdb_stdout);
    333 }
    334 
    335 /* Handle the quit command.  */
    336 
    337 void
    338 quit_command (const char *args, int from_tty)
    339 {
    340   int exit_code = 0;
    341 
    342   /* An optional expression may be used to cause gdb to terminate with
    343      the value of that expression.  */
    344   if (args)
    345     {
    346       struct value *val = parse_and_eval (args);
    347 
    348       exit_code = (int) value_as_long (val);
    349     }
    350 
    351   if (!quit_confirm ())
    352     error (_("Not confirmed."));
    353 
    354   query_if_trace_running (from_tty);
    355 
    356   quit_force (args ? &exit_code : NULL, from_tty);
    357 }
    358 
    359 static void
    360 pwd_command (const char *args, int from_tty)
    361 {
    362   if (args)
    363     error (_("The \"pwd\" command does not take an argument: %s"), args);
    364 
    365   gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
    366 
    367   if (cwd == NULL)
    368     error (_("Error finding name of working directory: %s"),
    369            safe_strerror (errno));
    370 
    371   if (strcmp (cwd.get (), current_directory) != 0)
    372     printf_unfiltered (_("Working directory %s\n (canonically %s).\n"),
    373 		       current_directory, cwd.get ());
    374   else
    375     printf_unfiltered (_("Working directory %s.\n"), current_directory);
    376 }
    377 
    378 void
    379 cd_command (const char *dir, int from_tty)
    380 {
    381   int len;
    382   /* Found something other than leading repetitions of "/..".  */
    383   int found_real_path;
    384   char *p;
    385 
    386   /* If the new directory is absolute, repeat is a no-op; if relative,
    387      repeat might be useful but is more likely to be a mistake.  */
    388   dont_repeat ();
    389 
    390   gdb::unique_xmalloc_ptr<char> dir_holder
    391     (tilde_expand (dir != NULL ? dir : "~"));
    392   dir = dir_holder.get ();
    393 
    394   if (chdir (dir) < 0)
    395     perror_with_name (dir);
    396 
    397 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
    398   /* There's too much mess with DOSish names like "d:", "d:.",
    399      "d:./foo" etc.  Instead of having lots of special #ifdef'ed code,
    400      simply get the canonicalized name of the current directory.  */
    401   gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
    402   dir = cwd.get ();
    403 #endif
    404 
    405   len = strlen (dir);
    406   if (IS_DIR_SEPARATOR (dir[len - 1]))
    407     {
    408       /* Remove the trailing slash unless this is a root directory
    409          (including a drive letter on non-Unix systems).  */
    410       if (!(len == 1)		/* "/" */
    411 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
    412 	  && !(len == 3 && dir[1] == ':') /* "d:/" */
    413 #endif
    414 	  )
    415 	len--;
    416     }
    417 
    418   dir_holder.reset (savestring (dir, len));
    419   if (IS_ABSOLUTE_PATH (dir_holder.get ()))
    420     {
    421       xfree (current_directory);
    422       current_directory = dir_holder.release ();
    423     }
    424   else
    425     {
    426       if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]))
    427 	current_directory = concat (current_directory, dir_holder.get (),
    428 				    (char *) NULL);
    429       else
    430 	current_directory = concat (current_directory, SLASH_STRING,
    431 				    dir_holder.get (), (char *) NULL);
    432     }
    433 
    434   /* Now simplify any occurrences of `.' and `..' in the pathname.  */
    435 
    436   found_real_path = 0;
    437   for (p = current_directory; *p;)
    438     {
    439       if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.'
    440 	  && (p[2] == 0 || IS_DIR_SEPARATOR (p[2])))
    441 	memmove (p, p + 2, strlen (p + 2) + 1);
    442       else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.'
    443 	       && (p[3] == 0 || IS_DIR_SEPARATOR (p[3])))
    444 	{
    445 	  if (found_real_path)
    446 	    {
    447 	      /* Search backwards for the directory just before the "/.."
    448 	         and obliterate it and the "/..".  */
    449 	      char *q = p;
    450 
    451 	      while (q != current_directory && !IS_DIR_SEPARATOR (q[-1]))
    452 		--q;
    453 
    454 	      if (q == current_directory)
    455 		/* current_directory is
    456 		   a relative pathname ("can't happen"--leave it alone).  */
    457 		++p;
    458 	      else
    459 		{
    460 		  memmove (q - 1, p + 3, strlen (p + 3) + 1);
    461 		  p = q - 1;
    462 		}
    463 	    }
    464 	  else
    465 	    /* We are dealing with leading repetitions of "/..", for
    466 	       example "/../..", which is the Mach super-root.  */
    467 	    p += 3;
    468 	}
    469       else
    470 	{
    471 	  found_real_path = 1;
    472 	  ++p;
    473 	}
    474     }
    475 
    476   forget_cached_source_info ();
    477 
    478   if (from_tty)
    479     pwd_command ((char *) 0, 1);
    480 }
    481 
    482 /* Show the current value of the 'script-extension' option.  */
    484 
    485 static void
    486 show_script_ext_mode (struct ui_file *file, int from_tty,
    487 		     struct cmd_list_element *c, const char *value)
    488 {
    489   fprintf_filtered (file,
    490 		    _("Script filename extension recognition is \"%s\".\n"),
    491 		    value);
    492 }
    493 
    494 /* Try to open SCRIPT_FILE.
    495    If successful, the full path name is stored in *FULL_PATHP,
    496    and the stream is returned.
    497    If not successful, return NULL; errno is set for the last file
    498    we tried to open.
    499 
    500    If SEARCH_PATH is non-zero, and the file isn't found in cwd,
    501    search for it in the source search path.  */
    502 
    503 gdb::optional<open_script>
    504 find_and_open_script (const char *script_file, int search_path)
    505 {
    506   int fd;
    507   openp_flags search_flags = OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH;
    508   gdb::optional<open_script> opened;
    509 
    510   gdb::unique_xmalloc_ptr<char> file (tilde_expand (script_file));
    511 
    512   if (search_path)
    513     search_flags |= OPF_SEARCH_IN_PATH;
    514 
    515   /* Search for and open 'file' on the search path used for source
    516      files.  Put the full location in *FULL_PATHP.  */
    517   gdb::unique_xmalloc_ptr<char> full_path;
    518   fd = openp (source_path, search_flags,
    519 	      file.get (), O_RDONLY, &full_path);
    520 
    521   if (fd == -1)
    522     return opened;
    523 
    524   FILE *result = fdopen (fd, FOPEN_RT);
    525   if (result == NULL)
    526     {
    527       int save_errno = errno;
    528 
    529       close (fd);
    530       errno = save_errno;
    531     }
    532   else
    533     opened.emplace (gdb_file_up (result), std::move (full_path));
    534 
    535   return opened;
    536 }
    537 
    538 /* Load script FILE, which has already been opened as STREAM.
    539    FILE_TO_OPEN is the form of FILE to use if one needs to open the file.
    540    This is provided as FILE may have been found via the source search path.
    541    An important thing to note here is that FILE may be a symlink to a file
    542    with a different or non-existing suffix, and thus one cannot infer the
    543    extension language from FILE_TO_OPEN.  */
    544 
    545 static void
    546 source_script_from_stream (FILE *stream, const char *file,
    547 			   const char *file_to_open)
    548 {
    549   if (script_ext_mode != script_ext_off)
    550     {
    551       const struct extension_language_defn *extlang
    552 	= get_ext_lang_of_file (file);
    553 
    554       if (extlang != NULL)
    555 	{
    556 	  if (ext_lang_present_p (extlang))
    557 	    {
    558 	      script_sourcer_func *sourcer
    559 		= ext_lang_script_sourcer (extlang);
    560 
    561 	      gdb_assert (sourcer != NULL);
    562 	      sourcer (extlang, stream, file_to_open);
    563 	      return;
    564 	    }
    565 	  else if (script_ext_mode == script_ext_soft)
    566 	    {
    567 	      /* Assume the file is a gdb script.
    568 		 This is handled below.  */
    569 	    }
    570 	  else
    571 	    throw_ext_lang_unsupported (extlang);
    572 	}
    573     }
    574 
    575   script_from_file (stream, file);
    576 }
    577 
    578 /* Worker to perform the "source" command.
    579    Load script FILE.
    580    If SEARCH_PATH is non-zero, and the file isn't found in cwd,
    581    search for it in the source search path.  */
    582 
    583 static void
    584 source_script_with_search (const char *file, int from_tty, int search_path)
    585 {
    586 
    587   if (file == NULL || *file == 0)
    588     error (_("source command requires file name of file to source."));
    589 
    590   gdb::optional<open_script> opened = find_and_open_script (file, search_path);
    591   if (!opened)
    592     {
    593       /* The script wasn't found, or was otherwise inaccessible.
    594          If the source command was invoked interactively, throw an
    595 	 error.  Otherwise (e.g. if it was invoked by a script),
    596 	 just emit a warning, rather than cause an error.  */
    597       if (from_tty)
    598 	perror_with_name (file);
    599       else
    600 	{
    601 	  perror_warning_with_name (file);
    602 	  return;
    603 	}
    604     }
    605 
    606   /* The python support reopens the file, so we need to pass full_path here
    607      in case the file was found on the search path.  It's useful to do this
    608      anyway so that error messages show the actual file used.  But only do
    609      this if we (may have) used search_path, as printing the full path in
    610      errors for the non-search case can be more noise than signal.  */
    611   source_script_from_stream (opened->stream.get (), file,
    612 			     search_path ? opened->full_path.get () : file);
    613 }
    614 
    615 /* Wrapper around source_script_with_search to export it to main.c
    616    for use in loading .gdbinit scripts.  */
    617 
    618 void
    619 source_script (const char *file, int from_tty)
    620 {
    621   source_script_with_search (file, from_tty, 0);
    622 }
    623 
    624 static void
    625 source_command (const char *args, int from_tty)
    626 {
    627   const char *file = args;
    628   int search_path = 0;
    629 
    630   scoped_restore save_source_verbose = make_scoped_restore (&source_verbose);
    631 
    632   /* -v causes the source command to run in verbose mode.
    633      -s causes the file to be searched in the source search path,
    634      even if the file name contains a '/'.
    635      We still have to be able to handle filenames with spaces in a
    636      backward compatible way, so buildargv is not appropriate.  */
    637 
    638   if (args)
    639     {
    640       while (args[0] != '\0')
    641 	{
    642 	  /* Make sure leading white space does not break the
    643 	     comparisons.  */
    644 	  args = skip_spaces (args);
    645 
    646 	  if (args[0] != '-')
    647 	    break;
    648 
    649 	  if (args[1] == 'v' && isspace (args[2]))
    650 	    {
    651 	      source_verbose = 1;
    652 
    653 	      /* Skip passed -v.  */
    654 	      args = &args[3];
    655 	    }
    656 	  else if (args[1] == 's' && isspace (args[2]))
    657 	    {
    658 	      search_path = 1;
    659 
    660 	      /* Skip passed -s.  */
    661 	      args = &args[3];
    662 	    }
    663 	  else
    664 	    break;
    665 	}
    666 
    667       file = skip_spaces (args);
    668     }
    669 
    670   source_script_with_search (file, from_tty, search_path);
    671 }
    672 
    673 
    674 static void
    675 echo_command (const char *text, int from_tty)
    676 {
    677   const char *p = text;
    678   int c;
    679 
    680   if (text)
    681     while ((c = *p++) != '\0')
    682       {
    683 	if (c == '\\')
    684 	  {
    685 	    /* \ at end of argument is used after spaces
    686 	       so they won't be lost.  */
    687 	    if (*p == 0)
    688 	      return;
    689 
    690 	    c = parse_escape (get_current_arch (), &p);
    691 	    if (c >= 0)
    692 	      printf_filtered ("%c", c);
    693 	  }
    694 	else
    695 	  printf_filtered ("%c", c);
    696       }
    697 
    698   reset_terminal_style (gdb_stdout);
    699 
    700   /* Force this output to appear now.  */
    701   wrap_here ("");
    702   gdb_flush (gdb_stdout);
    703 }
    704 
    705 static void
    706 shell_escape (const char *arg, int from_tty)
    707 {
    708 #if defined(CANT_FORK) || \
    709       (!defined(HAVE_WORKING_VFORK) && !defined(HAVE_WORKING_FORK))
    710   /* If ARG is NULL, they want an inferior shell, but `system' just
    711      reports if the shell is available when passed a NULL arg.  */
    712   int rc = system (arg ? arg : "");
    713 
    714   if (!arg)
    715     arg = "inferior shell";
    716 
    717   if (rc == -1)
    718     {
    719       fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
    720 			  safe_strerror (errno));
    721       gdb_flush (gdb_stderr);
    722     }
    723   else if (rc)
    724     {
    725       fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
    726       gdb_flush (gdb_stderr);
    727     }
    728 #ifdef GLOBAL_CURDIR
    729   /* Make sure to return to the directory GDB thinks it is, in case
    730      the shell command we just ran changed it.  */
    731   chdir (current_directory);
    732 #endif
    733 #else /* Can fork.  */
    734   int status, pid;
    735 
    736   if ((pid = vfork ()) == 0)
    737     {
    738       const char *p, *user_shell = get_shell ();
    739 
    740       close_most_fds ();
    741 
    742       /* Get the name of the shell for arg0.  */
    743       p = lbasename (user_shell);
    744 
    745       if (!arg)
    746 	execl (user_shell, p, (char *) 0);
    747       else
    748 	execl (user_shell, p, "-c", arg, (char *) 0);
    749 
    750       fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
    751 			  safe_strerror (errno));
    752       gdb_flush (gdb_stderr);
    753       _exit (0177);
    754     }
    755 
    756   if (pid != -1)
    757     waitpid (pid, &status, 0);
    758   else
    759     error (_("Fork failed"));
    760 #endif /* Can fork.  */
    761 }
    762 
    763 /* Implementation of the "shell" command.  */
    764 
    765 static void
    766 shell_command (const char *arg, int from_tty)
    767 {
    768   shell_escape (arg, from_tty);
    769 }
    770 
    771 static void
    772 edit_command (const char *arg, int from_tty)
    773 {
    774   struct symtab_and_line sal;
    775   struct symbol *sym;
    776   const char *editor;
    777   char *p;
    778   const char *fn;
    779 
    780   /* Pull in the current default source line if necessary.  */
    781   if (arg == 0)
    782     {
    783       set_default_source_symtab_and_line ();
    784       sal = get_current_source_symtab_and_line ();
    785     }
    786 
    787   /* Bare "edit" edits file with present line.  */
    788 
    789   if (arg == 0)
    790     {
    791       if (sal.symtab == 0)
    792 	error (_("No default source file yet."));
    793       sal.line += get_lines_to_list () / 2;
    794     }
    795   else
    796     {
    797       const char *arg1;
    798 
    799       /* Now should only be one argument -- decode it in SAL.  */
    800       arg1 = arg;
    801       event_location_up location = string_to_event_location (&arg1,
    802 							     current_language);
    803       std::vector<symtab_and_line> sals = decode_line_1 (location.get (),
    804 							 DECODE_LINE_LIST_MODE,
    805 							 NULL, NULL, 0);
    806 
    807       filter_sals (sals);
    808       if (sals.empty ())
    809 	{
    810 	  /*  C++  */
    811 	  return;
    812 	}
    813       if (sals.size () > 1)
    814 	{
    815 	  ambiguous_line_spec (sals,
    816 			       _("Specified line is ambiguous:\n"));
    817 	  return;
    818 	}
    819 
    820       sal = sals[0];
    821 
    822       if (*arg1)
    823         error (_("Junk at end of line specification."));
    824 
    825       /* If line was specified by address, first print exactly which
    826          line, and which file.  In this case, sal.symtab == 0 means
    827          address is outside of all known source files, not that user
    828          failed to give a filename.  */
    829       if (*arg == '*')
    830         {
    831 	  struct gdbarch *gdbarch;
    832 
    833           if (sal.symtab == 0)
    834 	    error (_("No source file for address %s."),
    835 		   paddress (get_current_arch (), sal.pc));
    836 
    837 	  gdbarch = get_objfile_arch (SYMTAB_OBJFILE (sal.symtab));
    838           sym = find_pc_function (sal.pc);
    839           if (sym)
    840 	    printf_filtered ("%s is in %s (%s:%d).\n",
    841 			     paddress (gdbarch, sal.pc),
    842 			     SYMBOL_PRINT_NAME (sym),
    843 			     symtab_to_filename_for_display (sal.symtab),
    844 			     sal.line);
    845           else
    846 	    printf_filtered ("%s is at %s:%d.\n",
    847 			     paddress (gdbarch, sal.pc),
    848 			     symtab_to_filename_for_display (sal.symtab),
    849 			     sal.line);
    850         }
    851 
    852       /* If what was given does not imply a symtab, it must be an
    853          undebuggable symbol which means no source code.  */
    854 
    855       if (sal.symtab == 0)
    856         error (_("No line number known for %s."), arg);
    857     }
    858 
    859   if ((editor = getenv ("EDITOR")) == NULL)
    860     editor = "/bin/ex";
    861 
    862   fn = symtab_to_fullname (sal.symtab);
    863 
    864   /* Quote the file name, in case it has whitespace or other special
    865      characters.  */
    866   p = xstrprintf ("%s +%d \"%s\"", editor, sal.line, fn);
    867   shell_escape (p, from_tty);
    868   xfree (p);
    869 }
    870 
    871 static void
    872 list_command (const char *arg, int from_tty)
    873 {
    874   struct symbol *sym;
    875   const char *arg1;
    876   int no_end = 1;
    877   int dummy_end = 0;
    878   int dummy_beg = 0;
    879   int linenum_beg = 0;
    880   const char *p;
    881 
    882   /* Pull in the current default source line if necessary.  */
    883   if (arg == NULL || ((arg[0] == '+' || arg[0] == '-') && arg[1] == '\0'))
    884     {
    885       set_default_source_symtab_and_line ();
    886       symtab_and_line cursal = get_current_source_symtab_and_line ();
    887 
    888       /* If this is the first "list" since we've set the current
    889 	 source line, center the listing around that line.  */
    890       if (get_first_line_listed () == 0)
    891 	{
    892 	  int first;
    893 
    894 	  first = std::max (cursal.line - get_lines_to_list () / 2, 1);
    895 
    896 	  /* A small special case --- if listing backwards, and we
    897 	     should list only one line, list the preceding line,
    898 	     instead of the exact line we've just shown after e.g.,
    899 	     stopping for a breakpoint.  */
    900 	  if (arg != NULL && arg[0] == '-'
    901 	      && get_lines_to_list () == 1 && first > 1)
    902 	    first -= 1;
    903 
    904 	  print_source_lines (cursal.symtab, source_lines_range (first), 0);
    905 	}
    906 
    907       /* "l" or "l +" lists next ten lines.  */
    908       else if (arg == NULL || arg[0] == '+')
    909 	print_source_lines (cursal.symtab,
    910 			    source_lines_range (cursal.line), 0);
    911 
    912       /* "l -" lists previous ten lines, the ones before the ten just
    913 	 listed.  */
    914       else if (arg[0] == '-')
    915 	{
    916 	  if (get_first_line_listed () == 1)
    917 	    error (_("Already at the start of %s."),
    918 		   symtab_to_filename_for_display (cursal.symtab));
    919 	  source_lines_range range (get_first_line_listed (),
    920 				    source_lines_range::BACKWARD);
    921 	  print_source_lines (cursal.symtab, range, 0);
    922 	}
    923 
    924       return;
    925     }
    926 
    927   /* Now if there is only one argument, decode it in SAL
    928      and set NO_END.
    929      If there are two arguments, decode them in SAL and SAL_END
    930      and clear NO_END; however, if one of the arguments is blank,
    931      set DUMMY_BEG or DUMMY_END to record that fact.  */
    932 
    933   if (!have_full_symbols () && !have_partial_symbols ())
    934     error (_("No symbol table is loaded.  Use the \"file\" command."));
    935 
    936   std::vector<symtab_and_line> sals;
    937   symtab_and_line sal, sal_end;
    938 
    939   arg1 = arg;
    940   if (*arg1 == ',')
    941     dummy_beg = 1;
    942   else
    943     {
    944       event_location_up location = string_to_event_location (&arg1,
    945 							     current_language);
    946       sals = decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
    947 			    NULL, NULL, 0);
    948       filter_sals (sals);
    949       if (sals.empty ())
    950 	{
    951 	  /*  C++  */
    952 	  return;
    953 	}
    954 
    955       sal = sals[0];
    956     }
    957 
    958   /* Record whether the BEG arg is all digits.  */
    959 
    960   for (p = arg; p != arg1 && *p >= '0' && *p <= '9'; p++);
    961   linenum_beg = (p == arg1);
    962 
    963   /* Save the range of the first argument, in case we need to let the
    964      user know it was ambiguous.  */
    965   const char *beg = arg;
    966   size_t beg_len = arg1 - beg;
    967 
    968   while (*arg1 == ' ' || *arg1 == '\t')
    969     arg1++;
    970   if (*arg1 == ',')
    971     {
    972       no_end = 0;
    973       if (sals.size () > 1)
    974 	{
    975 	  ambiguous_line_spec (sals,
    976 			       _("Specified first line '%.*s' is ambiguous:\n"),
    977 			       (int) beg_len, beg);
    978 	  return;
    979 	}
    980       arg1++;
    981       while (*arg1 == ' ' || *arg1 == '\t')
    982 	arg1++;
    983       if (*arg1 == 0)
    984 	dummy_end = 1;
    985       else
    986 	{
    987 	  /* Save the last argument, in case we need to let the user
    988 	     know it was ambiguous.  */
    989 	  const char *end_arg = arg1;
    990 
    991 	  event_location_up location
    992 	    = string_to_event_location (&arg1, current_language);
    993 
    994 	  std::vector<symtab_and_line> sals_end
    995 	    = (dummy_beg
    996 	       ? decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
    997 				NULL, NULL, 0)
    998 	       : decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
    999 				NULL, sal.symtab, sal.line));
   1000 
   1001 	  filter_sals (sals_end);
   1002 	  if (sals_end.empty ())
   1003 	    return;
   1004 	  if (sals_end.size () > 1)
   1005 	    {
   1006 	      ambiguous_line_spec (sals_end,
   1007 				   _("Specified last line '%s' is ambiguous:\n"),
   1008 				   end_arg);
   1009 	      return;
   1010 	    }
   1011 	  sal_end = sals_end[0];
   1012 	}
   1013     }
   1014 
   1015   if (*arg1)
   1016     error (_("Junk at end of line specification."));
   1017 
   1018   if (!no_end && !dummy_beg && !dummy_end
   1019       && sal.symtab != sal_end.symtab)
   1020     error (_("Specified first and last lines are in different files."));
   1021   if (dummy_beg && dummy_end)
   1022     error (_("Two empty args do not say what lines to list."));
   1023 
   1024   /* If line was specified by address,
   1025      first print exactly which line, and which file.
   1026 
   1027      In this case, sal.symtab == 0 means address is outside of all
   1028      known source files, not that user failed to give a filename.  */
   1029   if (*arg == '*')
   1030     {
   1031       struct gdbarch *gdbarch;
   1032 
   1033       if (sal.symtab == 0)
   1034 	error (_("No source file for address %s."),
   1035 	       paddress (get_current_arch (), sal.pc));
   1036 
   1037       gdbarch = get_objfile_arch (SYMTAB_OBJFILE (sal.symtab));
   1038       sym = find_pc_function (sal.pc);
   1039       if (sym)
   1040 	printf_filtered ("%s is in %s (%s:%d).\n",
   1041 			 paddress (gdbarch, sal.pc),
   1042 			 SYMBOL_PRINT_NAME (sym),
   1043 			 symtab_to_filename_for_display (sal.symtab), sal.line);
   1044       else
   1045 	printf_filtered ("%s is at %s:%d.\n",
   1046 			 paddress (gdbarch, sal.pc),
   1047 			 symtab_to_filename_for_display (sal.symtab), sal.line);
   1048     }
   1049 
   1050   /* If line was not specified by just a line number, and it does not
   1051      imply a symtab, it must be an undebuggable symbol which means no
   1052      source code.  */
   1053 
   1054   if (!linenum_beg && sal.symtab == 0)
   1055     error (_("No line number known for %s."), arg);
   1056 
   1057   /* If this command is repeated with RET,
   1058      turn it into the no-arg variant.  */
   1059 
   1060   if (from_tty)
   1061     set_repeat_arguments ("");
   1062 
   1063   if (dummy_beg && sal_end.symtab == 0)
   1064     error (_("No default source file yet.  Do \"help list\"."));
   1065   if (dummy_beg)
   1066     {
   1067       source_lines_range range (sal_end.line + 1,
   1068 				source_lines_range::BACKWARD);
   1069       print_source_lines (sal_end.symtab, range, 0);
   1070     }
   1071   else if (sal.symtab == 0)
   1072     error (_("No default source file yet.  Do \"help list\"."));
   1073   else if (no_end)
   1074     {
   1075       for (int i = 0; i < sals.size (); i++)
   1076 	{
   1077 	  sal = sals[i];
   1078 	  int first_line = sal.line - get_lines_to_list () / 2;
   1079 	  if (first_line < 1)
   1080 	    first_line = 1;
   1081 	  if (sals.size () > 1)
   1082 	    print_sal_location (sal);
   1083 	  print_source_lines (sal.symtab, source_lines_range (first_line), 0);
   1084 	}
   1085     }
   1086   else if (dummy_end)
   1087     print_source_lines (sal.symtab, source_lines_range (sal.line), 0);
   1088   else
   1089     print_source_lines (sal.symtab,
   1090 			source_lines_range (sal.line, (sal_end.line + 1)),
   1091 			0);
   1092 }
   1093 
   1094 /* Subroutine of disassemble_command to simplify it.
   1095    Perform the disassembly.
   1096    NAME is the name of the function if known, or NULL.
   1097    [LOW,HIGH) are the range of addresses to disassemble.
   1098    BLOCK is the block to disassemble; it needs to be provided
   1099    when non-contiguous blocks are disassembled; otherwise
   1100    it can be NULL.
   1101    MIXED is non-zero to print source with the assembler.  */
   1102 
   1103 static void
   1104 print_disassembly (struct gdbarch *gdbarch, const char *name,
   1105 		   CORE_ADDR low, CORE_ADDR high,
   1106 		   const struct block *block,
   1107 		   gdb_disassembly_flags flags)
   1108 {
   1109 #if defined(TUI)
   1110   if (!tui_is_window_visible (DISASSEM_WIN))
   1111 #endif
   1112     {
   1113       printf_filtered ("Dump of assembler code ");
   1114       if (name != NULL)
   1115 	printf_filtered ("for function %s:\n", name);
   1116       if (block == nullptr || BLOCK_CONTIGUOUS_P (block))
   1117         {
   1118 	  if (name == NULL)
   1119 	    printf_filtered ("from %s to %s:\n",
   1120 			     paddress (gdbarch, low), paddress (gdbarch, high));
   1121 
   1122 	  /* Dump the specified range.  */
   1123 	  gdb_disassembly (gdbarch, current_uiout, flags, -1, low, high);
   1124 	}
   1125       else
   1126         {
   1127 	  for (int i = 0; i < BLOCK_NRANGES (block); i++)
   1128 	    {
   1129 	      CORE_ADDR range_low = BLOCK_RANGE_START (block, i);
   1130 	      CORE_ADDR range_high = BLOCK_RANGE_END (block, i);
   1131 	      printf_filtered (_("Address range %s to %s:\n"),
   1132 			       paddress (gdbarch, range_low),
   1133 			       paddress (gdbarch, range_high));
   1134 	      gdb_disassembly (gdbarch, current_uiout, flags, -1,
   1135 			       range_low, range_high);
   1136 	    }
   1137 	}
   1138       printf_filtered ("End of assembler dump.\n");
   1139       gdb_flush (gdb_stdout);
   1140     }
   1141 #if defined(TUI)
   1142   else
   1143     {
   1144       tui_show_assembly (gdbarch, low);
   1145     }
   1146 #endif
   1147 }
   1148 
   1149 /* Subroutine of disassemble_command to simplify it.
   1150    Print a disassembly of the current function according to FLAGS.  */
   1151 
   1152 static void
   1153 disassemble_current_function (gdb_disassembly_flags flags)
   1154 {
   1155   struct frame_info *frame;
   1156   struct gdbarch *gdbarch;
   1157   CORE_ADDR low, high, pc;
   1158   const char *name;
   1159   const struct block *block;
   1160 
   1161   frame = get_selected_frame (_("No frame selected."));
   1162   gdbarch = get_frame_arch (frame);
   1163   pc = get_frame_address_in_block (frame);
   1164   if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
   1165     error (_("No function contains program counter for selected frame."));
   1166 #if defined(TUI)
   1167   /* NOTE: cagney/2003-02-13 The `tui_active' was previously
   1168      `tui_version'.  */
   1169   if (tui_active)
   1170     /* FIXME: cagney/2004-02-07: This should be an observer.  */
   1171     low = tui_get_low_disassembly_address (gdbarch, low, pc);
   1172 #endif
   1173   low += gdbarch_deprecated_function_start_offset (gdbarch);
   1174 
   1175   print_disassembly (gdbarch, name, low, high, block, flags);
   1176 }
   1177 
   1178 /* Dump a specified section of assembly code.
   1179 
   1180    Usage:
   1181      disassemble [/mrs]
   1182        - dump the assembly code for the function of the current pc
   1183      disassemble [/mrs] addr
   1184        - dump the assembly code for the function at ADDR
   1185      disassemble [/mrs] low,high
   1186      disassemble [/mrs] low,+length
   1187        - dump the assembly code in the range [LOW,HIGH), or [LOW,LOW+length)
   1188 
   1189    A /m modifier will include source code with the assembly in a
   1190    "source centric" view.  This view lists only the file of the first insn,
   1191    even if other source files are involved (e.g., inlined functions), and
   1192    the output is in source order, even with optimized code.  This view is
   1193    considered deprecated as it hasn't been useful in practice.
   1194 
   1195    A /r modifier will include raw instructions in hex with the assembly.
   1196 
   1197    A /s modifier will include source code with the assembly, like /m, with
   1198    two important differences:
   1199    1) The output is still in pc address order.
   1200    2) File names and contents for all relevant source files are displayed.  */
   1201 
   1202 static void
   1203 disassemble_command (const char *arg, int from_tty)
   1204 {
   1205   struct gdbarch *gdbarch = get_current_arch ();
   1206   CORE_ADDR low, high;
   1207   const char *name;
   1208   CORE_ADDR pc;
   1209   gdb_disassembly_flags flags;
   1210   const char *p;
   1211   const struct block *block = nullptr;
   1212 
   1213   p = arg;
   1214   name = NULL;
   1215   flags = 0;
   1216 
   1217   if (p && *p == '/')
   1218     {
   1219       ++p;
   1220 
   1221       if (*p == '\0')
   1222 	error (_("Missing modifier."));
   1223 
   1224       while (*p && ! isspace (*p))
   1225 	{
   1226 	  switch (*p++)
   1227 	    {
   1228 	    case 'm':
   1229 	      flags |= DISASSEMBLY_SOURCE_DEPRECATED;
   1230 	      break;
   1231 	    case 'r':
   1232 	      flags |= DISASSEMBLY_RAW_INSN;
   1233 	      break;
   1234 	    case 's':
   1235 	      flags |= DISASSEMBLY_SOURCE;
   1236 	      break;
   1237 	    default:
   1238 	      error (_("Invalid disassembly modifier."));
   1239 	    }
   1240 	}
   1241 
   1242       p = skip_spaces (p);
   1243     }
   1244 
   1245   if ((flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
   1246       == (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
   1247     error (_("Cannot specify both /m and /s."));
   1248 
   1249   if (! p || ! *p)
   1250     {
   1251       flags |= DISASSEMBLY_OMIT_FNAME;
   1252       disassemble_current_function (flags);
   1253       return;
   1254     }
   1255 
   1256   pc = value_as_address (parse_to_comma_and_eval (&p));
   1257   if (p[0] == ',')
   1258     ++p;
   1259   if (p[0] == '\0')
   1260     {
   1261       /* One argument.  */
   1262       if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
   1263 	error (_("No function contains specified address."));
   1264 #if defined(TUI)
   1265       /* NOTE: cagney/2003-02-13 The `tui_active' was previously
   1266 	 `tui_version'.  */
   1267       if (tui_active)
   1268 	/* FIXME: cagney/2004-02-07: This should be an observer.  */
   1269 	low = tui_get_low_disassembly_address (gdbarch, low, pc);
   1270 #endif
   1271       low += gdbarch_deprecated_function_start_offset (gdbarch);
   1272       flags |= DISASSEMBLY_OMIT_FNAME;
   1273     }
   1274   else
   1275     {
   1276       /* Two arguments.  */
   1277       int incl_flag = 0;
   1278       low = pc;
   1279       p = skip_spaces (p);
   1280       if (p[0] == '+')
   1281 	{
   1282 	  ++p;
   1283 	  incl_flag = 1;
   1284 	}
   1285       high = parse_and_eval_address (p);
   1286       if (incl_flag)
   1287 	high += low;
   1288     }
   1289 
   1290   print_disassembly (gdbarch, name, low, high, block, flags);
   1291 }
   1292 
   1293 static void
   1294 make_command (const char *arg, int from_tty)
   1295 {
   1296   if (arg == 0)
   1297     shell_escape ("make", from_tty);
   1298   else
   1299     {
   1300       std::string cmd = std::string ("make ") + arg;
   1301 
   1302       shell_escape (cmd.c_str (), from_tty);
   1303     }
   1304 }
   1305 
   1306 static void
   1307 show_user (const char *args, int from_tty)
   1308 {
   1309   struct cmd_list_element *c;
   1310   extern struct cmd_list_element *cmdlist;
   1311 
   1312   if (args)
   1313     {
   1314       const char *comname = args;
   1315 
   1316       c = lookup_cmd (&comname, cmdlist, "", 0, 1);
   1317       if (!cli_user_command_p (c))
   1318 	error (_("Not a user command."));
   1319       show_user_1 (c, "", args, gdb_stdout);
   1320     }
   1321   else
   1322     {
   1323       for (c = cmdlist; c; c = c->next)
   1324 	{
   1325 	  if (cli_user_command_p (c) || c->prefixlist != NULL)
   1326 	    show_user_1 (c, "", c->name, gdb_stdout);
   1327 	}
   1328     }
   1329 }
   1330 
   1331 /* Search through names of commands and documentations for a certain
   1332    regular expression.  */
   1333 
   1334 static void
   1335 apropos_command (const char *searchstr, int from_tty)
   1336 {
   1337   if (searchstr == NULL)
   1338     error (_("REGEXP string is empty"));
   1339 
   1340   compiled_regex pattern (searchstr, REG_ICASE,
   1341 			  _("Error in regular expression"));
   1342 
   1343   apropos_cmd (gdb_stdout, cmdlist, pattern, "");
   1344 }
   1345 
   1346 /* Subroutine of alias_command to simplify it.
   1347    Return the first N elements of ARGV flattened back to a string
   1348    with a space separating each element.
   1349    ARGV may not be NULL.
   1350    This does not take care of quoting elements in case they contain spaces
   1351    on purpose.  */
   1352 
   1353 static std::string
   1354 argv_to_string (char **argv, int n)
   1355 {
   1356   int i;
   1357   std::string result;
   1358 
   1359   gdb_assert (argv != NULL);
   1360   gdb_assert (n >= 0 && n <= countargv (argv));
   1361 
   1362   for (i = 0; i < n; ++i)
   1363     {
   1364       if (i > 0)
   1365 	result += " ";
   1366       result += argv[i];
   1367     }
   1368 
   1369   return result;
   1370 }
   1371 
   1372 /* Subroutine of alias_command to simplify it.
   1373    Return TRUE if COMMAND exists, unambiguously.  Otherwise FALSE.  */
   1374 
   1375 static int
   1376 valid_command_p (const char *command)
   1377 {
   1378   struct cmd_list_element *c;
   1379 
   1380   c = lookup_cmd_1 (& command, cmdlist, NULL, 1);
   1381 
   1382   if (c == NULL || c == (struct cmd_list_element *) -1)
   1383     return FALSE;
   1384 
   1385   /* This is the slightly tricky part.
   1386      lookup_cmd_1 will return a pointer to the last part of COMMAND
   1387      to match, leaving COMMAND pointing at the remainder.  */
   1388   while (*command == ' ' || *command == '\t')
   1389     ++command;
   1390   return *command == '\0';
   1391 }
   1392 
   1393 /* Called when "alias" was incorrectly used.  */
   1394 
   1395 static void
   1396 alias_usage_error (void)
   1397 {
   1398   error (_("Usage: alias [-a] [--] ALIAS = COMMAND"));
   1399 }
   1400 
   1401 /* Make an alias of an existing command.  */
   1402 
   1403 static void
   1404 alias_command (const char *args, int from_tty)
   1405 {
   1406   int i, alias_argc, command_argc;
   1407   int abbrev_flag = 0;
   1408   const char *equals;
   1409   const char *alias, *command;
   1410 
   1411   if (args == NULL || strchr (args, '=') == NULL)
   1412     alias_usage_error ();
   1413 
   1414   equals = strchr (args, '=');
   1415   std::string args2 (args, equals - args);
   1416 
   1417   gdb_argv built_alias_argv (args2.c_str ());
   1418   gdb_argv command_argv (equals + 1);
   1419 
   1420   char **alias_argv = built_alias_argv.get ();
   1421   while (alias_argv[0] != NULL)
   1422     {
   1423       if (strcmp (alias_argv[0], "-a") == 0)
   1424 	{
   1425 	  ++alias_argv;
   1426 	  abbrev_flag = 1;
   1427 	}
   1428       else if (strcmp (alias_argv[0], "--") == 0)
   1429 	{
   1430 	  ++alias_argv;
   1431 	  break;
   1432 	}
   1433       else
   1434 	break;
   1435     }
   1436 
   1437   if (alias_argv[0] == NULL || command_argv[0] == NULL
   1438       || *alias_argv[0] == '\0' || *command_argv[0] == '\0')
   1439     alias_usage_error ();
   1440 
   1441   for (i = 0; alias_argv[i] != NULL; ++i)
   1442     {
   1443       if (! valid_user_defined_cmd_name_p (alias_argv[i]))
   1444 	{
   1445 	  if (i == 0)
   1446 	    error (_("Invalid command name: %s"), alias_argv[i]);
   1447 	  else
   1448 	    error (_("Invalid command element name: %s"), alias_argv[i]);
   1449 	}
   1450     }
   1451 
   1452   alias_argc = countargv (alias_argv);
   1453   command_argc = command_argv.count ();
   1454 
   1455   /* COMMAND must exist.
   1456      Reconstruct the command to remove any extraneous spaces,
   1457      for better error messages.  */
   1458   std::string command_string (argv_to_string (command_argv.get (),
   1459 					      command_argc));
   1460   command = command_string.c_str ();
   1461   if (! valid_command_p (command))
   1462     error (_("Invalid command to alias to: %s"), command);
   1463 
   1464   /* ALIAS must not exist.  */
   1465   std::string alias_string (argv_to_string (alias_argv, alias_argc));
   1466   alias = alias_string.c_str ();
   1467   if (valid_command_p (alias))
   1468     error (_("Alias already exists: %s"), alias);
   1469 
   1470   /* If ALIAS is one word, it is an alias for the entire COMMAND.
   1471      Example: alias spe = set print elements
   1472 
   1473      Otherwise ALIAS and COMMAND must have the same number of words,
   1474      and every word except the last must match; and the last word of
   1475      ALIAS is made an alias of the last word of COMMAND.
   1476      Example: alias set print elms = set pr elem
   1477      Note that unambiguous abbreviations are allowed.  */
   1478 
   1479   if (alias_argc == 1)
   1480     {
   1481       /* add_cmd requires *we* allocate space for name, hence the xstrdup.  */
   1482       add_com_alias (xstrdup (alias_argv[0]), command, class_alias,
   1483 		     abbrev_flag);
   1484     }
   1485   else
   1486     {
   1487       const char *alias_prefix, *command_prefix;
   1488       struct cmd_list_element *c_alias, *c_command;
   1489 
   1490       if (alias_argc != command_argc)
   1491 	error (_("Mismatched command length between ALIAS and COMMAND."));
   1492 
   1493       /* Create copies of ALIAS and COMMAND without the last word,
   1494 	 and use that to verify the leading elements match.  */
   1495       std::string alias_prefix_string (argv_to_string (alias_argv,
   1496 						       alias_argc - 1));
   1497       std::string command_prefix_string (argv_to_string (alias_argv,
   1498 							 command_argc - 1));
   1499       alias_prefix = alias_prefix_string.c_str ();
   1500       command_prefix = command_prefix_string.c_str ();
   1501 
   1502       c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, 1);
   1503       /* We've already tried to look up COMMAND.  */
   1504       gdb_assert (c_command != NULL
   1505 		  && c_command != (struct cmd_list_element *) -1);
   1506       gdb_assert (c_command->prefixlist != NULL);
   1507       c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, 1);
   1508       if (c_alias != c_command)
   1509 	error (_("ALIAS and COMMAND prefixes do not match."));
   1510 
   1511       /* add_cmd requires *we* allocate space for name, hence the xstrdup.  */
   1512       add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]),
   1513 		     command_argv[command_argc - 1],
   1514 		     class_alias, abbrev_flag, c_command->prefixlist);
   1515     }
   1516 }
   1517 
   1518 /* Print the file / line number / symbol name of the location
   1520    specified by SAL.  */
   1521 
   1522 static void
   1523 print_sal_location (const symtab_and_line &sal)
   1524 {
   1525   scoped_restore_current_program_space restore_pspace;
   1526   set_current_program_space (sal.pspace);
   1527 
   1528   const char *sym_name = NULL;
   1529   if (sal.symbol != NULL)
   1530     sym_name = SYMBOL_PRINT_NAME (sal.symbol);
   1531   printf_filtered (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"),
   1532 		   symtab_to_filename_for_display (sal.symtab),
   1533 		   sal.line, sym_name != NULL ? sym_name : "???");
   1534 }
   1535 
   1536 /* Print a list of files and line numbers which a user may choose from
   1537    in order to list a function which was specified ambiguously (as
   1538    with `list classname::overloadedfuncname', for example).  The SALS
   1539    array provides the filenames and line numbers.  FORMAT is a
   1540    printf-style format string used to tell the user what was
   1541    ambiguous.  */
   1542 
   1543 static void
   1544 ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
   1545 		     const char *format, ...)
   1546 {
   1547   va_list ap;
   1548   va_start (ap, format);
   1549   vprintf_filtered (format, ap);
   1550   va_end (ap);
   1551 
   1552   for (const auto &sal : sals)
   1553     print_sal_location (sal);
   1554 }
   1555 
   1556 /* Comparison function for filter_sals.  Returns a qsort-style
   1557    result.  */
   1558 
   1559 static int
   1560 cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb)
   1561 {
   1562   const char *dira = SYMTAB_DIRNAME (sala.symtab);
   1563   const char *dirb = SYMTAB_DIRNAME (salb.symtab);
   1564   int r;
   1565 
   1566   if (dira == NULL)
   1567     {
   1568       if (dirb != NULL)
   1569 	return -1;
   1570     }
   1571   else if (dirb == NULL)
   1572     {
   1573       if (dira != NULL)
   1574 	return 1;
   1575     }
   1576   else
   1577     {
   1578       r = filename_cmp (dira, dirb);
   1579       if (r)
   1580 	return r;
   1581     }
   1582 
   1583   r = filename_cmp (sala.symtab->filename, salb.symtab->filename);
   1584   if (r)
   1585     return r;
   1586 
   1587   if (sala.line < salb.line)
   1588     return -1;
   1589   return sala.line == salb.line ? 0 : 1;
   1590 }
   1591 
   1592 /* Remove any SALs that do not match the current program space, or
   1593    which appear to be "file:line" duplicates.  */
   1594 
   1595 static void
   1596 filter_sals (std::vector<symtab_and_line> &sals)
   1597 {
   1598   /* Remove SALs that do not match.  */
   1599   auto from = std::remove_if (sals.begin (), sals.end (),
   1600 			      [&] (const symtab_and_line &sal)
   1601     { return (sal.pspace != current_program_space || sal.symtab == NULL); });
   1602 
   1603   /* Remove dups.  */
   1604   std::sort (sals.begin (), from,
   1605 	     [] (const symtab_and_line &sala, const symtab_and_line &salb)
   1606    { return cmp_symtabs (sala, salb) < 0; });
   1607 
   1608   from = std::unique (sals.begin (), from,
   1609 		      [&] (const symtab_and_line &sala,
   1610 			   const symtab_and_line &salb)
   1611     { return cmp_symtabs (sala, salb) == 0; });
   1612 
   1613   sals.erase (from, sals.end ());
   1614 }
   1615 
   1616 static void
   1617 set_debug (const char *arg, int from_tty)
   1618 {
   1619   printf_unfiltered (_("\"set debug\" must be followed by "
   1620 		       "the name of a debug subcommand.\n"));
   1621   help_list (setdebuglist, "set debug ", all_commands, gdb_stdout);
   1622 }
   1623 
   1624 static void
   1625 show_debug (const char *args, int from_tty)
   1626 {
   1627   cmd_show_list (showdebuglist, from_tty, "");
   1628 }
   1629 
   1630 void
   1631 init_cmd_lists (void)
   1632 {
   1633   max_user_call_depth = 1024;
   1634 }
   1635 
   1636 static void
   1637 show_info_verbose (struct ui_file *file, int from_tty,
   1638 		   struct cmd_list_element *c,
   1639 		   const char *value)
   1640 {
   1641   if (info_verbose)
   1642     fprintf_filtered (file,
   1643 		      _("Verbose printing of informational messages is %s.\n"),
   1644 		      value);
   1645   else
   1646     fprintf_filtered (file, _("Verbosity is %s.\n"), value);
   1647 }
   1648 
   1649 static void
   1650 show_history_expansion_p (struct ui_file *file, int from_tty,
   1651 			  struct cmd_list_element *c, const char *value)
   1652 {
   1653   fprintf_filtered (file, _("History expansion on command input is %s.\n"),
   1654 		    value);
   1655 }
   1656 
   1657 static void
   1658 show_remote_debug (struct ui_file *file, int from_tty,
   1659 		   struct cmd_list_element *c, const char *value)
   1660 {
   1661   fprintf_filtered (file, _("Debugging of remote protocol is %s.\n"),
   1662 		    value);
   1663 }
   1664 
   1665 static void
   1666 show_remote_timeout (struct ui_file *file, int from_tty,
   1667 		     struct cmd_list_element *c, const char *value)
   1668 {
   1669   fprintf_filtered (file,
   1670 		    _("Timeout limit to wait for target to respond is %s.\n"),
   1671 		    value);
   1672 }
   1673 
   1674 static void
   1675 show_max_user_call_depth (struct ui_file *file, int from_tty,
   1676 			  struct cmd_list_element *c, const char *value)
   1677 {
   1678   fprintf_filtered (file,
   1679 		    _("The max call depth for user-defined commands is %s.\n"),
   1680 		    value);
   1681 }
   1682 
   1683 void
   1684 _initialize_cli_cmds (void)
   1685 {
   1686   struct cmd_list_element *c;
   1687 
   1688   /* Define the classes of commands.
   1689      They will appear in the help list in alphabetical order.  */
   1690 
   1691   add_cmd ("internals", class_maintenance, _("\
   1692 Maintenance commands.\n\
   1693 Some gdb commands are provided just for use by gdb maintainers.\n\
   1694 These commands are subject to frequent change, and may not be as\n\
   1695 well documented as user commands."),
   1696 	   &cmdlist);
   1697   add_cmd ("obscure", class_obscure, _("Obscure features."), &cmdlist);
   1698   add_cmd ("aliases", class_alias,
   1699 	   _("Aliases of other commands."), &cmdlist);
   1700   add_cmd ("user-defined", class_user, _("\
   1701 User-defined commands.\n\
   1702 The commands in this class are those defined by the user.\n\
   1703 Use the \"define\" command to define a command."), &cmdlist);
   1704   add_cmd ("support", class_support, _("Support facilities."), &cmdlist);
   1705   if (!dbx_commands)
   1706     add_cmd ("status", class_info, _("Status inquiries."), &cmdlist);
   1707   add_cmd ("files", class_files, _("Specifying and examining files."),
   1708 	   &cmdlist);
   1709   add_cmd ("breakpoints", class_breakpoint,
   1710 	   _("Making program stop at certain points."), &cmdlist);
   1711   add_cmd ("data", class_vars, _("Examining data."), &cmdlist);
   1712   add_cmd ("stack", class_stack, _("\
   1713 Examining the stack.\n\
   1714 The stack is made up of stack frames.  Gdb assigns numbers to stack frames\n\
   1715 counting from zero for the innermost (currently executing) frame.\n\n\
   1716 At any time gdb identifies one frame as the \"selected\" frame.\n\
   1717 Variable lookups are done with respect to the selected frame.\n\
   1718 When the program being debugged stops, gdb selects the innermost frame.\n\
   1719 The commands below can be used to select other frames by number or address."),
   1720 	   &cmdlist);
   1721   add_cmd ("running", class_run, _("Running the program."), &cmdlist);
   1722 
   1723   /* Define general commands.  */
   1724 
   1725   add_com ("pwd", class_files, pwd_command, _("\
   1726 Print working directory.  This is used for your program as well."));
   1727 
   1728   c = add_cmd ("cd", class_files, cd_command, _("\
   1729 Set working directory to DIR for debugger.\n\
   1730 The debugger's current working directory specifies where scripts and other\n\
   1731 files that can be loaded by GDB are located.\n\
   1732 In order to change the inferior's current working directory, the recommended\n\
   1733 way is to use the \"set cwd\" command."), &cmdlist);
   1734   set_cmd_completer (c, filename_completer);
   1735 
   1736   add_com ("echo", class_support, echo_command, _("\
   1737 Print a constant string.  Give string as argument.\n\
   1738 C escape sequences may be used in the argument.\n\
   1739 No newline is added at the end of the argument;\n\
   1740 use \"\\n\" if you want a newline to be printed.\n\
   1741 Since leading and trailing whitespace are ignored in command arguments,\n\
   1742 if you want to print some you must use \"\\\" before leading whitespace\n\
   1743 to be printed or after trailing whitespace."));
   1744 
   1745   add_setshow_enum_cmd ("script-extension", class_support,
   1746 			script_ext_enums, &script_ext_mode, _("\
   1747 Set mode for script filename extension recognition."), _("\
   1748 Show mode for script filename extension recognition."), _("\
   1749 off  == no filename extension recognition (all sourced files are GDB scripts)\n\
   1750 soft == evaluate script according to filename extension, fallback to GDB script"
   1751   "\n\
   1752 strict == evaluate script according to filename extension, error if not supported"
   1753   ),
   1754 			NULL,
   1755 			show_script_ext_mode,
   1756 			&setlist, &showlist);
   1757 
   1758   add_com ("quit", class_support, quit_command, _("\
   1759 Exit gdb.\n\
   1760 Usage: quit [EXPR]\n\
   1761 The optional expression EXPR, if present, is evaluated and the result\n\
   1762 used as GDB's exit code.  The default is zero."));
   1763   c = add_com ("help", class_support, help_command,
   1764 	       _("Print list of commands."));
   1765   set_cmd_completer (c, command_completer);
   1766   add_com_alias ("q", "quit", class_support, 1);
   1767   add_com_alias ("h", "help", class_support, 1);
   1768 
   1769   add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\
   1770 Set verbosity."), _("\
   1771 Show verbosity."), NULL,
   1772 			   set_verbose,
   1773 			   show_info_verbose,
   1774 			   &setlist, &showlist);
   1775 
   1776   add_prefix_cmd ("history", class_support, set_history,
   1777 		  _("Generic command for setting command history parameters."),
   1778 		  &sethistlist, "set history ", 0, &setlist);
   1779   add_prefix_cmd ("history", class_support, show_history,
   1780 		  _("Generic command for showing command history parameters."),
   1781 		  &showhistlist, "show history ", 0, &showlist);
   1782 
   1783   add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\
   1784 Set history expansion on command input."), _("\
   1785 Show history expansion on command input."), _("\
   1786 Without an argument, history expansion is enabled."),
   1787 			   NULL,
   1788 			   show_history_expansion_p,
   1789 			   &sethistlist, &showhistlist);
   1790 
   1791   add_prefix_cmd ("info", class_info, info_command, _("\
   1792 Generic command for showing things about the program being debugged."),
   1793 		  &infolist, "info ", 0, &cmdlist);
   1794   add_com_alias ("i", "info", class_info, 1);
   1795   add_com_alias ("inf", "info", class_info, 1);
   1796 
   1797   add_com ("complete", class_obscure, complete_command,
   1798 	   _("List the completions for the rest of the line as a command."));
   1799 
   1800   add_prefix_cmd ("show", class_info, show_command, _("\
   1801 Generic command for showing things about the debugger."),
   1802 		  &showlist, "show ", 0, &cmdlist);
   1803   /* Another way to get at the same thing.  */
   1804   add_info ("set", show_command, _("Show all GDB settings."));
   1805 
   1806   add_cmd ("commands", no_set_class, show_commands, _("\
   1807 Show the history of commands you typed.\n\
   1808 You can supply a command number to start with, or a `+' to start after\n\
   1809 the previous command number shown."),
   1810 	   &showlist);
   1811 
   1812   add_cmd ("version", no_set_class, show_version,
   1813 	   _("Show what version of GDB this is."), &showlist);
   1814 
   1815   add_cmd ("configuration", no_set_class, show_configuration,
   1816 	   _("Show how GDB was configured at build time."), &showlist);
   1817 
   1818   add_setshow_zinteger_cmd ("remote", no_class, &remote_debug, _("\
   1819 Set debugging of remote protocol."), _("\
   1820 Show debugging of remote protocol."), _("\
   1821 When enabled, each packet sent or received with the remote target\n\
   1822 is displayed."),
   1823 			    NULL,
   1824 			    show_remote_debug,
   1825 			    &setdebuglist, &showdebuglist);
   1826 
   1827   add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class,
   1828 				       &remote_timeout, _("\
   1829 Set timeout limit to wait for target to respond."), _("\
   1830 Show timeout limit to wait for target to respond."), _("\
   1831 This value is used to set the time limit for gdb to wait for a response\n\
   1832 from the target."),
   1833 				       NULL,
   1834 				       show_remote_timeout,
   1835 				       &setlist, &showlist);
   1836 
   1837   add_prefix_cmd ("debug", no_class, set_debug,
   1838 		  _("Generic command for setting gdb debugging flags"),
   1839 		  &setdebuglist, "set debug ", 0, &setlist);
   1840 
   1841   add_prefix_cmd ("debug", no_class, show_debug,
   1842 		  _("Generic command for showing gdb debugging flags"),
   1843 		  &showdebuglist, "show debug ", 0, &showlist);
   1844 
   1845   c = add_com ("shell", class_support, shell_command, _("\
   1846 Execute the rest of the line as a shell command.\n\
   1847 With no arguments, run an inferior shell."));
   1848   set_cmd_completer (c, filename_completer);
   1849 
   1850   c = add_com ("edit", class_files, edit_command, _("\
   1851 Edit specified file or function.\n\
   1852 With no argument, edits file containing most recent line listed.\n\
   1853 Editing targets can be specified in these ways:\n\
   1854   FILE:LINENUM, to edit at that line in that file,\n\
   1855   FUNCTION, to edit at the beginning of that function,\n\
   1856   FILE:FUNCTION, to distinguish among like-named static functions.\n\
   1857   *ADDRESS, to edit at the line containing that address.\n\
   1858 Uses EDITOR environment variable contents as editor (or ex as default)."));
   1859 
   1860   c->completer = location_completer;
   1861 
   1862   add_com ("list", class_files, list_command, _("\
   1863 List specified function or line.\n\
   1864 With no argument, lists ten more lines after or around previous listing.\n\
   1865 \"list -\" lists the ten lines before a previous ten-line listing.\n\
   1866 One argument specifies a line, and ten lines are listed around that line.\n\
   1867 Two arguments with comma between specify starting and ending lines to list.\n\
   1868 Lines can be specified in these ways:\n\
   1869   LINENUM, to list around that line in current file,\n\
   1870   FILE:LINENUM, to list around that line in that file,\n\
   1871   FUNCTION, to list around beginning of that function,\n\
   1872   FILE:FUNCTION, to distinguish among like-named static functions.\n\
   1873   *ADDRESS, to list around the line containing that address.\n\
   1874 With two args, if one is empty, it stands for ten lines away from\n\
   1875 the other arg.\n\
   1876 \n\
   1877 By default, when a single location is given, display ten lines.\n\
   1878 This can be changed using \"set listsize\", and the current value\n\
   1879 can be shown using \"show listsize\"."));
   1880 
   1881   add_com_alias ("l", "list", class_files, 1);
   1882 
   1883   if (dbx_commands)
   1884     add_com_alias ("file", "list", class_files, 1);
   1885 
   1886   c = add_com ("disassemble", class_vars, disassemble_command, _("\
   1887 Disassemble a specified section of memory.\n\
   1888 Default is the function surrounding the pc of the selected frame.\n\
   1889 \n\
   1890 With a /m modifier, source lines are included (if available).\n\
   1891 This view is \"source centric\": the output is in source line order,\n\
   1892 regardless of any optimization that is present.  Only the main source file\n\
   1893 is displayed, not those of, e.g., any inlined functions.\n\
   1894 This modifier hasn't proved useful in practice and is deprecated\n\
   1895 in favor of /s.\n\
   1896 \n\
   1897 With a /s modifier, source lines are included (if available).\n\
   1898 This differs from /m in two important respects:\n\
   1899 - the output is still in pc address order, and\n\
   1900 - file names and contents for all relevant source files are displayed.\n\
   1901 \n\
   1902 With a /r modifier, raw instructions in hex are included.\n\
   1903 \n\
   1904 With a single argument, the function surrounding that address is dumped.\n\
   1905 Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
   1906   in the form of \"start,end\", or \"start,+length\".\n\
   1907 \n\
   1908 Note that the address is interpreted as an expression, not as a location\n\
   1909 like in the \"break\" command.\n\
   1910 So, for example, if you want to disassemble function bar in file foo.c\n\
   1911 you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
   1912   set_cmd_completer (c, location_completer);
   1913 
   1914   add_com_alias ("!", "shell", class_support, 0);
   1915 
   1916   c = add_com ("make", class_support, make_command, _("\
   1917 Run the ``make'' program using the rest of the line as arguments."));
   1918   set_cmd_completer (c, filename_completer);
   1919   add_cmd ("user", no_class, show_user, _("\
   1920 Show definitions of non-python/scheme user defined commands.\n\
   1921 Argument is the name of the user defined command.\n\
   1922 With no argument, show definitions of all user defined commands."), &showlist);
   1923   add_com ("apropos", class_support, apropos_command,
   1924 	   _("Search for commands matching a REGEXP"));
   1925 
   1926   add_setshow_uinteger_cmd ("max-user-call-depth", no_class,
   1927 			   &max_user_call_depth, _("\
   1928 Set the max call depth for non-python/scheme user-defined commands."), _("\
   1929 Show the max call depth for non-python/scheme user-defined commands."), NULL,
   1930 			    NULL,
   1931 			    show_max_user_call_depth,
   1932 			    &setlist, &showlist);
   1933 
   1934   add_setshow_boolean_cmd ("trace-commands", no_class, &trace_commands, _("\
   1935 Set tracing of GDB CLI commands."), _("\
   1936 Show state of GDB CLI command tracing."), _("\
   1937 When 'on', each command is displayed as it is executed."),
   1938 			   NULL,
   1939 			   NULL,
   1940 			   &setlist, &showlist);
   1941 
   1942   c = add_com ("alias", class_support, alias_command, _("\
   1943 Define a new command that is an alias of an existing command.\n\
   1944 Usage: alias [-a] [--] ALIAS = COMMAND\n\
   1945 ALIAS is the name of the alias command to create.\n\
   1946 COMMAND is the command being aliased to.\n\
   1947 If \"-a\" is specified, the command is an abbreviation,\n\
   1948 and will not appear in help command list output.\n\
   1949 \n\
   1950 Examples:\n\
   1951 Make \"spe\" an alias of \"set print elements\":\n\
   1952   alias spe = set print elements\n\
   1953 Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
   1954   alias -a set print elms = set print elements"));
   1955 }
   1956 
   1957 void
   1958 init_cli_cmds (void)
   1959 {
   1960   struct cmd_list_element *c;
   1961   char *source_help_text;
   1962 
   1963   source_help_text = xstrprintf (_("\
   1964 Read commands from a file named FILE.\n\
   1965 \n\
   1966 Usage: source [-s] [-v] FILE\n\
   1967 -s: search for the script in the source search path,\n\
   1968     even if FILE contains directories.\n\
   1969 -v: each command in FILE is echoed as it is executed.\n\
   1970 \n\
   1971 Note that the file \"%s\" is read automatically in this way\n\
   1972 when GDB is started."), gdbinit);
   1973   c = add_cmd ("source", class_support, source_command,
   1974 	       source_help_text, &cmdlist);
   1975   set_cmd_completer (c, filename_completer);
   1976 }
   1977