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