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