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