Clean up "completer_handle_brkchars" callback handling
[external/binutils.git] / gdb / cli / cli-cmds.c
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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   if (searchstr == NULL)
1340     error (_("REGEXP string is empty"));
1341
1342   compiled_regex pattern (searchstr, REG_ICASE,
1343                           _("Error in regular expression"));
1344
1345   apropos_cmd (gdb_stdout, cmdlist, pattern, "");
1346 }
1347
1348 /* Subroutine of alias_command to simplify it.
1349    Return the first N elements of ARGV flattened back to a string
1350    with a space separating each element.
1351    ARGV may not be NULL.
1352    This does not take care of quoting elements in case they contain spaces
1353    on purpose.  */
1354
1355 static std::string
1356 argv_to_string (char **argv, int n)
1357 {
1358   int i;
1359   std::string result;
1360
1361   gdb_assert (argv != NULL);
1362   gdb_assert (n >= 0 && n <= countargv (argv));
1363
1364   for (i = 0; i < n; ++i)
1365     {
1366       if (i > 0)
1367         result += " ";
1368       result += argv[i];
1369     }
1370
1371   return result;
1372 }
1373
1374 /* Subroutine of alias_command to simplify it.
1375    Return TRUE if COMMAND exists, unambiguously.  Otherwise FALSE.  */
1376
1377 static int
1378 valid_command_p (const char *command)
1379 {
1380   struct cmd_list_element *c;
1381
1382   c = lookup_cmd_1 (& command, cmdlist, NULL, 1);
1383
1384   if (c == NULL || c == (struct cmd_list_element *) -1)
1385     return FALSE;
1386
1387   /* This is the slightly tricky part.
1388      lookup_cmd_1 will return a pointer to the last part of COMMAND
1389      to match, leaving COMMAND pointing at the remainder.  */
1390   while (*command == ' ' || *command == '\t')
1391     ++command;
1392   return *command == '\0';
1393 }
1394
1395 /* Called when "alias" was incorrectly used.  */
1396
1397 static void
1398 alias_usage_error (void)
1399 {
1400   error (_("Usage: alias [-a] [--] ALIAS = COMMAND"));
1401 }
1402
1403 /* Make an alias of an existing command.  */
1404
1405 static void
1406 alias_command (char *args, int from_tty)
1407 {
1408   int i, alias_argc, command_argc;
1409   int abbrev_flag = 0;
1410   char *args2, *equals;
1411   const char *alias, *command;
1412   char **alias_argv, **command_argv;
1413   struct cleanup *cleanup;
1414
1415   if (args == NULL || strchr (args, '=') == NULL)
1416     alias_usage_error ();
1417
1418   args2 = xstrdup (args);
1419   cleanup = make_cleanup (xfree, args2);
1420   equals = strchr (args2, '=');
1421   *equals = '\0';
1422   alias_argv = gdb_buildargv (args2);
1423   make_cleanup_freeargv (alias_argv);
1424   command_argv = gdb_buildargv (equals + 1);
1425   make_cleanup_freeargv (command_argv);
1426
1427   for (i = 0; alias_argv[i] != NULL; )
1428     {
1429       if (strcmp (alias_argv[i], "-a") == 0)
1430         {
1431           ++alias_argv;
1432           abbrev_flag = 1;
1433         }
1434       else if (strcmp (alias_argv[i], "--") == 0)
1435         {
1436           ++alias_argv;
1437           break;
1438         }
1439       else
1440         break;
1441     }
1442
1443   if (alias_argv[0] == NULL || command_argv[0] == NULL
1444       || *alias_argv[0] == '\0' || *command_argv[0] == '\0')
1445     alias_usage_error ();
1446
1447   for (i = 0; alias_argv[i] != NULL; ++i)
1448     {
1449       if (! valid_user_defined_cmd_name_p (alias_argv[i]))
1450         {
1451           if (i == 0)
1452             error (_("Invalid command name: %s"), alias_argv[i]);
1453           else
1454             error (_("Invalid command element name: %s"), alias_argv[i]);
1455         }
1456     }
1457
1458   alias_argc = countargv (alias_argv);
1459   command_argc = countargv (command_argv);
1460
1461   /* COMMAND must exist.
1462      Reconstruct the command to remove any extraneous spaces,
1463      for better error messages.  */
1464   std::string command_string (argv_to_string (command_argv, command_argc));
1465   command = command_string.c_str ();
1466   if (! valid_command_p (command))
1467     error (_("Invalid command to alias to: %s"), command);
1468
1469   /* ALIAS must not exist.  */
1470   std::string alias_string (argv_to_string (alias_argv, alias_argc));
1471   alias = alias_string.c_str ();
1472   if (valid_command_p (alias))
1473     error (_("Alias already exists: %s"), alias);
1474
1475   /* If ALIAS is one word, it is an alias for the entire COMMAND.
1476      Example: alias spe = set print elements
1477
1478      Otherwise ALIAS and COMMAND must have the same number of words,
1479      and every word except the last must match; and the last word of
1480      ALIAS is made an alias of the last word of COMMAND.
1481      Example: alias set print elms = set pr elem
1482      Note that unambiguous abbreviations are allowed.  */
1483
1484   if (alias_argc == 1)
1485     {
1486       /* add_cmd requires *we* allocate space for name, hence the xstrdup.  */
1487       add_com_alias (xstrdup (alias_argv[0]), command, class_alias,
1488                      abbrev_flag);
1489     }
1490   else
1491     {
1492       const char *alias_prefix, *command_prefix;
1493       struct cmd_list_element *c_alias, *c_command;
1494
1495       if (alias_argc != command_argc)
1496         error (_("Mismatched command length between ALIAS and COMMAND."));
1497
1498       /* Create copies of ALIAS and COMMAND without the last word,
1499          and use that to verify the leading elements match.  */
1500       std::string alias_prefix_string (argv_to_string (alias_argv,
1501                                                        alias_argc - 1));
1502       std::string command_prefix_string (argv_to_string (alias_argv,
1503                                                          command_argc - 1));
1504       alias_prefix = alias_prefix_string.c_str ();
1505       command_prefix = command_prefix_string.c_str ();
1506
1507       c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, 1);
1508       /* We've already tried to look up COMMAND.  */
1509       gdb_assert (c_command != NULL
1510                   && c_command != (struct cmd_list_element *) -1);
1511       gdb_assert (c_command->prefixlist != NULL);
1512       c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, 1);
1513       if (c_alias != c_command)
1514         error (_("ALIAS and COMMAND prefixes do not match."));
1515
1516       /* add_cmd requires *we* allocate space for name, hence the xstrdup.  */
1517       add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]),
1518                      command_argv[command_argc - 1],
1519                      class_alias, abbrev_flag, c_command->prefixlist);
1520     }
1521
1522   do_cleanups (cleanup);
1523 }
1524 \f
1525 /* Print a list of files and line numbers which a user may choose from
1526    in order to list a function which was specified ambiguously (as
1527    with `list classname::overloadedfuncname', for example).  The
1528    vector in SALS provides the filenames and line numbers.  */
1529
1530 static void
1531 ambiguous_line_spec (struct symtabs_and_lines *sals)
1532 {
1533   int i;
1534
1535   for (i = 0; i < sals->nelts; ++i)
1536     printf_filtered (_("file: \"%s\", line number: %d\n"),
1537                      symtab_to_filename_for_display (sals->sals[i].symtab),
1538                      sals->sals[i].line);
1539 }
1540
1541 /* Sort function for filter_sals.  */
1542
1543 static int
1544 compare_symtabs (const void *a, const void *b)
1545 {
1546   const struct symtab_and_line *sala = (const struct symtab_and_line *) a;
1547   const struct symtab_and_line *salb = (const struct symtab_and_line *) b;
1548   const char *dira = SYMTAB_DIRNAME (sala->symtab);
1549   const char *dirb = SYMTAB_DIRNAME (salb->symtab);
1550   int r;
1551
1552   if (dira == NULL)
1553     {
1554       if (dirb != NULL)
1555         return -1;
1556     }
1557   else if (dirb == NULL)
1558     {
1559       if (dira != NULL)
1560         return 1;
1561     }
1562   else
1563     {
1564       r = filename_cmp (dira, dirb);
1565       if (r)
1566         return r;
1567     }
1568
1569   r = filename_cmp (sala->symtab->filename, salb->symtab->filename);
1570   if (r)
1571     return r;
1572
1573   if (sala->line < salb->line)
1574     return -1;
1575   return sala->line == salb->line ? 0 : 1;
1576 }
1577
1578 /* Remove any SALs that do not match the current program space, or
1579    which appear to be "file:line" duplicates.  */
1580
1581 static void
1582 filter_sals (struct symtabs_and_lines *sals)
1583 {
1584   int i, out, prev;
1585
1586   out = 0;
1587   for (i = 0; i < sals->nelts; ++i)
1588     {
1589       if (sals->sals[i].pspace == current_program_space
1590           && sals->sals[i].symtab != NULL)
1591         {
1592           sals->sals[out] = sals->sals[i];
1593           ++out;
1594         }
1595     }
1596   sals->nelts = out;
1597
1598   qsort (sals->sals, sals->nelts, sizeof (struct symtab_and_line),
1599          compare_symtabs);
1600
1601   out = 1;
1602   prev = 0;
1603   for (i = 1; i < sals->nelts; ++i)
1604     {
1605       if (compare_symtabs (&sals->sals[prev], &sals->sals[i]))
1606         {
1607           /* Symtabs differ.  */
1608           sals->sals[out] = sals->sals[i];
1609           prev = out;
1610           ++out;
1611         }
1612     }
1613
1614   if (sals->nelts == 0)
1615     {
1616       xfree (sals->sals);
1617       sals->sals = NULL;
1618     }
1619   else
1620     sals->nelts = out;
1621 }
1622
1623 static void
1624 set_debug (char *arg, int from_tty)
1625 {
1626   printf_unfiltered (_("\"set debug\" must be followed by "
1627                        "the name of a debug subcommand.\n"));
1628   help_list (setdebuglist, "set debug ", all_commands, gdb_stdout);
1629 }
1630
1631 static void
1632 show_debug (char *args, int from_tty)
1633 {
1634   cmd_show_list (showdebuglist, from_tty, "");
1635 }
1636
1637 void
1638 init_cmd_lists (void)
1639 {
1640   max_user_call_depth = 1024;
1641 }
1642
1643 static void
1644 show_info_verbose (struct ui_file *file, int from_tty,
1645                    struct cmd_list_element *c,
1646                    const char *value)
1647 {
1648   if (info_verbose)
1649     fprintf_filtered (file,
1650                       _("Verbose printing of informational messages is %s.\n"),
1651                       value);
1652   else
1653     fprintf_filtered (file, _("Verbosity is %s.\n"), value);
1654 }
1655
1656 static void
1657 show_history_expansion_p (struct ui_file *file, int from_tty,
1658                           struct cmd_list_element *c, const char *value)
1659 {
1660   fprintf_filtered (file, _("History expansion on command input is %s.\n"),
1661                     value);
1662 }
1663
1664 static void
1665 show_remote_debug (struct ui_file *file, int from_tty,
1666                    struct cmd_list_element *c, const char *value)
1667 {
1668   fprintf_filtered (file, _("Debugging of remote protocol is %s.\n"),
1669                     value);
1670 }
1671
1672 static void
1673 show_remote_timeout (struct ui_file *file, int from_tty,
1674                      struct cmd_list_element *c, const char *value)
1675 {
1676   fprintf_filtered (file,
1677                     _("Timeout limit to wait for target to respond is %s.\n"),
1678                     value);
1679 }
1680
1681 static void
1682 show_max_user_call_depth (struct ui_file *file, int from_tty,
1683                           struct cmd_list_element *c, const char *value)
1684 {
1685   fprintf_filtered (file,
1686                     _("The max call depth for user-defined commands is %s.\n"),
1687                     value);
1688 }
1689
1690 \f
1691
1692 initialize_file_ftype _initialize_cli_cmds;
1693
1694 void
1695 _initialize_cli_cmds (void)
1696 {
1697   struct cmd_list_element *c;
1698
1699   /* Define the classes of commands.
1700      They will appear in the help list in alphabetical order.  */
1701
1702   add_cmd ("internals", class_maintenance, NULL, _("\
1703 Maintenance commands.\n\
1704 Some gdb commands are provided just for use by gdb maintainers.\n\
1705 These commands are subject to frequent change, and may not be as\n\
1706 well documented as user commands."),
1707            &cmdlist);
1708   add_cmd ("obscure", class_obscure, NULL, _("Obscure features."), &cmdlist);
1709   add_cmd ("aliases", class_alias, NULL,
1710            _("Aliases of other commands."), &cmdlist);
1711   add_cmd ("user-defined", class_user, NULL, _("\
1712 User-defined commands.\n\
1713 The commands in this class are those defined by the user.\n\
1714 Use the \"define\" command to define a command."), &cmdlist);
1715   add_cmd ("support", class_support, NULL, _("Support facilities."), &cmdlist);
1716   if (!dbx_commands)
1717     add_cmd ("status", class_info, NULL, _("Status inquiries."), &cmdlist);
1718   add_cmd ("files", class_files, NULL, _("Specifying and examining files."),
1719            &cmdlist);
1720   add_cmd ("breakpoints", class_breakpoint, NULL,
1721            _("Making program stop at certain points."), &cmdlist);
1722   add_cmd ("data", class_vars, NULL, _("Examining data."), &cmdlist);
1723   add_cmd ("stack", class_stack, NULL, _("\
1724 Examining the stack.\n\
1725 The stack is made up of stack frames.  Gdb assigns numbers to stack frames\n\
1726 counting from zero for the innermost (currently executing) frame.\n\n\
1727 At any time gdb identifies one frame as the \"selected\" frame.\n\
1728 Variable lookups are done with respect to the selected frame.\n\
1729 When the program being debugged stops, gdb selects the innermost frame.\n\
1730 The commands below can be used to select other frames by number or address."),
1731            &cmdlist);
1732   add_cmd ("running", class_run, NULL, _("Running the program."), &cmdlist);
1733
1734   /* Define general commands.  */
1735
1736   add_com ("pwd", class_files, pwd_command, _("\
1737 Print working directory.  This is used for your program as well."));
1738
1739   c = add_cmd ("cd", class_files, cd_command, _("\
1740 Set working directory to DIR for debugger and program being debugged.\n\
1741 The change does not take effect for the program being debugged\n\
1742 until the next time it is started."), &cmdlist);
1743   set_cmd_completer (c, filename_completer);
1744
1745   add_com ("echo", class_support, echo_command, _("\
1746 Print a constant string.  Give string as argument.\n\
1747 C escape sequences may be used in the argument.\n\
1748 No newline is added at the end of the argument;\n\
1749 use \"\\n\" if you want a newline to be printed.\n\
1750 Since leading and trailing whitespace are ignored in command arguments,\n\
1751 if you want to print some you must use \"\\\" before leading whitespace\n\
1752 to be printed or after trailing whitespace."));
1753
1754   add_setshow_enum_cmd ("script-extension", class_support,
1755                         script_ext_enums, &script_ext_mode, _("\
1756 Set mode for script filename extension recognition."), _("\
1757 Show mode for script filename extension recognition."), _("\
1758 off  == no filename extension recognition (all sourced files are GDB scripts)\n\
1759 soft == evaluate script according to filename extension, fallback to GDB script"
1760   "\n\
1761 strict == evaluate script according to filename extension, error if not supported"
1762   ),
1763                         NULL,
1764                         show_script_ext_mode,
1765                         &setlist, &showlist);
1766
1767   add_com ("quit", class_support, quit_command, _("\
1768 Exit gdb.\n\
1769 Usage: quit [EXPR]\n\
1770 The optional expression EXPR, if present, is evaluated and the result\n\
1771 used as GDB's exit code.  The default is zero."));
1772   c = add_com ("help", class_support, help_command,
1773                _("Print list of commands."));
1774   set_cmd_completer (c, command_completer);
1775   add_com_alias ("q", "quit", class_support, 1);
1776   add_com_alias ("h", "help", class_support, 1);
1777
1778   add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\
1779 Set verbosity."), _("\
1780 Show verbosity."), NULL,
1781                            set_verbose,
1782                            show_info_verbose,
1783                            &setlist, &showlist);
1784
1785   add_prefix_cmd ("history", class_support, set_history,
1786                   _("Generic command for setting command history parameters."),
1787                   &sethistlist, "set history ", 0, &setlist);
1788   add_prefix_cmd ("history", class_support, show_history,
1789                   _("Generic command for showing command history parameters."),
1790                   &showhistlist, "show history ", 0, &showlist);
1791
1792   add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\
1793 Set history expansion on command input."), _("\
1794 Show history expansion on command input."), _("\
1795 Without an argument, history expansion is enabled."),
1796                            NULL,
1797                            show_history_expansion_p,
1798                            &sethistlist, &showhistlist);
1799
1800   add_prefix_cmd ("info", class_info, info_command, _("\
1801 Generic command for showing things about the program being debugged."),
1802                   &infolist, "info ", 0, &cmdlist);
1803   add_com_alias ("i", "info", class_info, 1);
1804   add_com_alias ("inf", "info", class_info, 1);
1805
1806   add_com ("complete", class_obscure, complete_command,
1807            _("List the completions for the rest of the line as a command."));
1808
1809   add_prefix_cmd ("show", class_info, show_command, _("\
1810 Generic command for showing things about the debugger."),
1811                   &showlist, "show ", 0, &cmdlist);
1812   /* Another way to get at the same thing.  */
1813   add_info ("set", show_command, _("Show all GDB settings."));
1814
1815   add_cmd ("commands", no_set_class, show_commands, _("\
1816 Show the history of commands you typed.\n\
1817 You can supply a command number to start with, or a `+' to start after\n\
1818 the previous command number shown."),
1819            &showlist);
1820
1821   add_cmd ("version", no_set_class, show_version,
1822            _("Show what version of GDB this is."), &showlist);
1823
1824   add_cmd ("configuration", no_set_class, show_configuration,
1825            _("Show how GDB was configured at build time."), &showlist);
1826
1827   add_setshow_zinteger_cmd ("remote", no_class, &remote_debug, _("\
1828 Set debugging of remote protocol."), _("\
1829 Show debugging of remote protocol."), _("\
1830 When enabled, each packet sent or received with the remote target\n\
1831 is displayed."),
1832                             NULL,
1833                             show_remote_debug,
1834                             &setdebuglist, &showdebuglist);
1835
1836   add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class,
1837                                        &remote_timeout, _("\
1838 Set timeout limit to wait for target to respond."), _("\
1839 Show timeout limit to wait for target to respond."), _("\
1840 This value is used to set the time limit for gdb to wait for a response\n\
1841 from the target."),
1842                                        NULL,
1843                                        show_remote_timeout,
1844                                        &setlist, &showlist);
1845
1846   add_prefix_cmd ("debug", no_class, set_debug,
1847                   _("Generic command for setting gdb debugging flags"),
1848                   &setdebuglist, "set debug ", 0, &setlist);
1849
1850   add_prefix_cmd ("debug", no_class, show_debug,
1851                   _("Generic command for showing gdb debugging flags"),
1852                   &showdebuglist, "show debug ", 0, &showlist);
1853
1854   c = add_com ("shell", class_support, shell_command, _("\
1855 Execute the rest of the line as a shell command.\n\
1856 With no arguments, run an inferior shell."));
1857   set_cmd_completer (c, filename_completer);
1858
1859   c = add_com ("edit", class_files, edit_command, _("\
1860 Edit specified file or function.\n\
1861 With no argument, edits file containing most recent line listed.\n\
1862 Editing targets can be specified in these ways:\n\
1863   FILE:LINENUM, to edit at that line in that file,\n\
1864   FUNCTION, to edit at the beginning of that function,\n\
1865   FILE:FUNCTION, to distinguish among like-named static functions.\n\
1866   *ADDRESS, to edit at the line containing that address.\n\
1867 Uses EDITOR environment variable contents as editor (or ex as default)."));
1868
1869   c->completer = location_completer;
1870
1871   add_com ("list", class_files, list_command, _("\
1872 List specified function or line.\n\
1873 With no argument, lists ten more lines after or around previous listing.\n\
1874 \"list -\" lists the ten lines before a previous ten-line listing.\n\
1875 One argument specifies a line, and ten lines are listed around that line.\n\
1876 Two arguments with comma between specify starting and ending lines to list.\n\
1877 Lines can be specified in these ways:\n\
1878   LINENUM, to list around that line in current file,\n\
1879   FILE:LINENUM, to list around that line in that file,\n\
1880   FUNCTION, to list around beginning of that function,\n\
1881   FILE:FUNCTION, to distinguish among like-named static functions.\n\
1882   *ADDRESS, to list around the line containing that address.\n\
1883 With two args, if one is empty, it stands for ten lines away from\n\
1884 the other arg.\n\
1885 \n\
1886 By default, when a single location is given, display ten lines.\n\
1887 This can be changed using \"set listsize\", and the current value\n\
1888 can be shown using \"show listsize\"."));
1889
1890   add_com_alias ("l", "list", class_files, 1);
1891
1892   if (dbx_commands)
1893     add_com_alias ("file", "list", class_files, 1);
1894
1895   c = add_com ("disassemble", class_vars, disassemble_command, _("\
1896 Disassemble a specified section of memory.\n\
1897 Default is the function surrounding the pc of the selected frame.\n\
1898 \n\
1899 With a /m modifier, source lines are included (if available).\n\
1900 This view is \"source centric\": the output is in source line order,\n\
1901 regardless of any optimization that is present.  Only the main source file\n\
1902 is displayed, not those of, e.g., any inlined functions.\n\
1903 This modifier hasn't proved useful in practice and is deprecated\n\
1904 in favor of /s.\n\
1905 \n\
1906 With a /s modifier, source lines are included (if available).\n\
1907 This differs from /m in two important respects:\n\
1908 - the output is still in pc address order, and\n\
1909 - file names and contents for all relevant source files are displayed.\n\
1910 \n\
1911 With a /r modifier, raw instructions in hex are included.\n\
1912 \n\
1913 With a single argument, the function surrounding that address is dumped.\n\
1914 Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
1915   in the form of \"start,end\", or \"start,+length\".\n\
1916 \n\
1917 Note that the address is interpreted as an expression, not as a location\n\
1918 like in the \"break\" command.\n\
1919 So, for example, if you want to disassemble function bar in file foo.c\n\
1920 you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
1921   set_cmd_completer (c, location_completer);
1922
1923   add_com_alias ("!", "shell", class_support, 0);
1924
1925   c = add_com ("make", class_support, make_command, _("\
1926 Run the ``make'' program using the rest of the line as arguments."));
1927   set_cmd_completer (c, filename_completer);
1928   add_cmd ("user", no_class, show_user, _("\
1929 Show definitions of non-python/scheme user defined commands.\n\
1930 Argument is the name of the user defined command.\n\
1931 With no argument, show definitions of all user defined commands."), &showlist);
1932   add_com ("apropos", class_support, apropos_command,
1933            _("Search for commands matching a REGEXP"));
1934
1935   add_setshow_uinteger_cmd ("max-user-call-depth", no_class,
1936                            &max_user_call_depth, _("\
1937 Set the max call depth for non-python/scheme user-defined commands."), _("\
1938 Show the max call depth for non-python/scheme user-defined commands."), NULL,
1939                             NULL,
1940                             show_max_user_call_depth,
1941                             &setlist, &showlist);
1942
1943   add_setshow_boolean_cmd ("trace-commands", no_class, &trace_commands, _("\
1944 Set tracing of GDB CLI commands."), _("\
1945 Show state of GDB CLI command tracing."), _("\
1946 When 'on', each command is displayed as it is executed."),
1947                            NULL,
1948                            NULL,
1949                            &setlist, &showlist);
1950
1951   c = add_com ("alias", class_support, alias_command, _("\
1952 Define a new command that is an alias of an existing command.\n\
1953 Usage: alias [-a] [--] ALIAS = COMMAND\n\
1954 ALIAS is the name of the alias command to create.\n\
1955 COMMAND is the command being aliased to.\n\
1956 If \"-a\" is specified, the command is an abbreviation,\n\
1957 and will not appear in help command list output.\n\
1958 \n\
1959 Examples:\n\
1960 Make \"spe\" an alias of \"set print elements\":\n\
1961   alias spe = set print elements\n\
1962 Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
1963   alias -a set print elms = set print elements"));
1964 }
1965
1966 void
1967 init_cli_cmds (void)
1968 {
1969   struct cmd_list_element *c;
1970   char *source_help_text;
1971
1972   source_help_text = xstrprintf (_("\
1973 Read commands from a file named FILE.\n\
1974 \n\
1975 Usage: source [-s] [-v] FILE\n\
1976 -s: search for the script in the source search path,\n\
1977     even if FILE contains directories.\n\
1978 -v: each command in FILE is echoed as it is executed.\n\
1979 \n\
1980 Note that the file \"%s\" is read automatically in this way\n\
1981 when GDB is started."), gdbinit);
1982   c = add_cmd ("source", class_support, source_command,
1983                source_help_text, &cmdlist);
1984   set_cmd_completer (c, filename_completer);
1985 }