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