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