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