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