2003-12-17 Jeff Johnston <jjohnstn@redhat.com>
[external/binutils.git] / gdb / cli / cli-cmds.c
1 /* GDB CLI commands.
2
3    Copyright 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330,
20    Boston, MA 02111-1307, USA.  */
21
22 #include "defs.h"
23 #include <readline/tilde.h>
24 #include "completer.h"
25 #include "target.h"      /* For baud_rate, remote_debug and remote_timeout */
26 #include "gdb_wait.h"           /* For shell escape implementation */
27 #include "gdb_regex.h"          /* Used by apropos_command */
28 #include "gdb_string.h"
29 #include "gdb_vfork.h"
30 #include "linespec.h"
31 #include "expression.h"
32 #include "frame.h"
33 #include "value.h"
34 #include "language.h"
35 #include "filenames.h"          /* for DOSish file names */
36 #include "objfiles.h"
37 #include "source.h"
38 #include "disasm.h"
39
40 #include "ui-out.h"
41
42 #include "top.h"
43 #include "cli/cli-decode.h"
44 #include "cli/cli-script.h"
45 #include "cli/cli-setshow.h"
46 #include "cli/cli-cmds.h"
47
48 #ifndef GDBINIT_FILENAME
49 #define GDBINIT_FILENAME        ".gdbinit"
50 #endif
51
52 /* Prototypes for local command functions */
53
54 static void complete_command (char *, int);
55
56 static void echo_command (char *, int);
57
58 static void pwd_command (char *, int);
59
60 static void show_version (char *, int);
61
62 static void validate_comname (char *);
63
64 static void help_command (char *, int);
65
66 static void show_command (char *, int);
67
68 static void info_command (char *, int);
69
70 static void show_debug (char *, int);
71
72 static void set_debug (char *, int);
73
74 static void show_user (char *, int);
75
76 static void make_command (char *, int);
77
78 static void shell_escape (char *, int);
79
80 static void edit_command (char *, int);
81
82 static void list_command (char *, int);
83
84 void apropos_command (char *, int);
85
86 /* Prototypes for local utility functions */
87
88 static void ambiguous_line_spec (struct symtabs_and_lines *);
89 \f
90 /* Limit the call depth of user-defined commands */
91 int max_user_call_depth;
92
93 /* Define all cmd_list_elements.  */
94
95 /* Chain containing all defined commands.  */
96
97 struct cmd_list_element *cmdlist;
98
99 /* Chain containing all defined info subcommands.  */
100
101 struct cmd_list_element *infolist;
102
103 /* Chain containing all defined enable subcommands. */
104
105 struct cmd_list_element *enablelist;
106
107 /* Chain containing all defined disable subcommands. */
108
109 struct cmd_list_element *disablelist;
110
111 /* Chain containing all defined toggle subcommands. */
112
113 struct cmd_list_element *togglelist;
114
115 /* Chain containing all defined stop subcommands. */
116
117 struct cmd_list_element *stoplist;
118
119 /* Chain containing all defined delete subcommands. */
120
121 struct cmd_list_element *deletelist;
122
123 /* Chain containing all defined "enable breakpoint" subcommands. */
124
125 struct cmd_list_element *enablebreaklist;
126
127 /* Chain containing all defined set subcommands */
128
129 struct cmd_list_element *setlist;
130
131 /* Chain containing all defined unset subcommands */
132
133 struct cmd_list_element *unsetlist;
134
135 /* Chain containing all defined show subcommands.  */
136
137 struct cmd_list_element *showlist;
138
139 /* Chain containing all defined \"set history\".  */
140
141 struct cmd_list_element *sethistlist;
142
143 /* Chain containing all defined \"show history\".  */
144
145 struct cmd_list_element *showhistlist;
146
147 /* Chain containing all defined \"unset history\".  */
148
149 struct cmd_list_element *unsethistlist;
150
151 /* Chain containing all defined maintenance subcommands. */
152
153 struct cmd_list_element *maintenancelist;
154
155 /* Chain containing all defined "maintenance info" subcommands. */
156
157 struct cmd_list_element *maintenanceinfolist;
158
159 /* Chain containing all defined "maintenance print" subcommands. */
160
161 struct cmd_list_element *maintenanceprintlist;
162
163 struct cmd_list_element *setprintlist;
164
165 struct cmd_list_element *showprintlist;
166
167 struct cmd_list_element *setdebuglist;
168
169 struct cmd_list_element *showdebuglist;
170
171 struct cmd_list_element *setchecklist;
172
173 struct cmd_list_element *showchecklist;
174 \f
175 /* Utility used everywhere when at least one argument is needed and
176    none is supplied. */
177
178 void
179 error_no_arg (char *why)
180 {
181   error ("Argument required (%s).", why);
182 }
183
184 /* The "info" command is defined as a prefix, with allow_unknown = 0.
185    Therefore, its own definition is called only for "info" with no args.  */
186
187 static void
188 info_command (char *arg, int from_tty)
189 {
190   printf_unfiltered ("\"info\" must be followed by the name of an info command.\n");
191   help_list (infolist, "info ", -1, gdb_stdout);
192 }
193
194 /* The "show" command with no arguments shows all the settings.  */
195
196 static void
197 show_command (char *arg, int from_tty)
198 {
199   cmd_show_list (showlist, from_tty, "");
200 }
201 \f
202 /* Provide documentation on command or list given by COMMAND.  FROM_TTY
203    is ignored.  */
204
205 static void
206 help_command (char *command, int from_tty)
207 {
208   help_cmd (command, gdb_stdout);
209 }
210 \f
211 /* String compare function for qsort.  */
212 static int
213 compare_strings (const void *arg1, const void *arg2)
214 {
215   const char **s1 = (const char **) arg1;
216   const char **s2 = (const char **) arg2;
217   return strcmp (*s1, *s2);
218 }
219
220 /* The "complete" command is used by Emacs to implement completion.  */
221
222 static void
223 complete_command (char *arg, int from_tty)
224 {
225   int i;
226   int argpoint;
227   char **completions;
228
229   dont_repeat ();
230
231   if (arg == NULL)
232     arg = "";
233   argpoint = strlen (arg);
234
235   completions = complete_line (arg, arg, argpoint);
236
237   if (completions)
238     {
239       int item, size;
240
241       for (size = 0; completions[size]; ++size)
242         ;
243       qsort (completions, size, sizeof (char *), compare_strings);
244
245       /* We do extra processing here since we only want to print each
246          unique item once.  */
247       item = 0;
248       while (item < size)
249         {
250           int next_item;
251           printf_unfiltered ("%s\n", completions[item]);
252           next_item = item + 1;
253           while (next_item < size
254                  && ! strcmp (completions[item], completions[next_item]))
255             {
256               xfree (completions[next_item]);
257               ++next_item;
258             }
259
260           xfree (completions[item]);
261           item = next_item;
262         }
263
264       xfree (completions);
265     }
266 }
267
268 int
269 is_complete_command (struct cmd_list_element *c)
270 {
271   return cmd_cfunc_eq (c, complete_command);
272 }
273
274 static void
275 show_version (char *args, int from_tty)
276 {
277   immediate_quit++;
278   print_gdb_version (gdb_stdout);
279   printf_filtered ("\n");
280   immediate_quit--;
281 }
282
283 /* Handle the quit command.  */
284
285 void
286 quit_command (char *args, int from_tty)
287 {
288   if (!quit_confirm ())
289     error ("Not confirmed.");
290   quit_force (args, from_tty);
291 }
292
293 static void
294 pwd_command (char *args, int from_tty)
295 {
296   if (args)
297     error ("The \"pwd\" command does not take an argument: %s", args);
298   getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
299
300   if (strcmp (gdb_dirbuf, current_directory) != 0)
301     printf_unfiltered ("Working directory %s\n (canonically %s).\n",
302                        current_directory, gdb_dirbuf);
303   else
304     printf_unfiltered ("Working directory %s.\n", current_directory);
305 }
306
307 void
308 cd_command (char *dir, int from_tty)
309 {
310   int len;
311   /* Found something other than leading repetitions of "/..".  */
312   int found_real_path;
313   char *p;
314
315   /* If the new directory is absolute, repeat is a no-op; if relative,
316      repeat might be useful but is more likely to be a mistake.  */
317   dont_repeat ();
318
319   if (dir == 0)
320     error_no_arg ("new working directory");
321
322   dir = tilde_expand (dir);
323   make_cleanup (xfree, dir);
324
325   if (chdir (dir) < 0)
326     perror_with_name (dir);
327
328 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
329   /* There's too much mess with DOSish names like "d:", "d:.",
330      "d:./foo" etc.  Instead of having lots of special #ifdef'ed code,
331      simply get the canonicalized name of the current directory.  */
332   dir = getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
333 #endif
334
335   len = strlen (dir);
336   if (IS_DIR_SEPARATOR (dir[len - 1]))
337     {
338       /* Remove the trailing slash unless this is a root directory
339          (including a drive letter on non-Unix systems).  */
340       if (!(len == 1)           /* "/" */
341 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
342           && !(len == 3 && dir[1] == ':') /* "d:/" */
343 #endif
344           )
345         len--;
346     }
347
348   dir = savestring (dir, len);
349   if (IS_ABSOLUTE_PATH (dir))
350     current_directory = dir;
351   else
352     {
353       if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]))
354         current_directory = concat (current_directory, dir, NULL);
355       else
356         current_directory = concat (current_directory, SLASH_STRING, dir, NULL);
357       xfree (dir);
358     }
359
360   /* Now simplify any occurrences of `.' and `..' in the pathname.  */
361
362   found_real_path = 0;
363   for (p = current_directory; *p;)
364     {
365       if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.'
366           && (p[2] == 0 || IS_DIR_SEPARATOR (p[2])))
367         strcpy (p, p + 2);
368       else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.'
369                && (p[3] == 0 || IS_DIR_SEPARATOR (p[3])))
370         {
371           if (found_real_path)
372             {
373               /* Search backwards for the directory just before the "/.."
374                  and obliterate it and the "/..".  */
375               char *q = p;
376               while (q != current_directory && !IS_DIR_SEPARATOR (q[-1]))
377                 --q;
378
379               if (q == current_directory)
380                 /* current_directory is
381                    a relative pathname ("can't happen"--leave it alone).  */
382                 ++p;
383               else
384                 {
385                   strcpy (q - 1, p + 3);
386                   p = q - 1;
387                 }
388             }
389           else
390             /* We are dealing with leading repetitions of "/..", for example
391                "/../..", which is the Mach super-root.  */
392             p += 3;
393         }
394       else
395         {
396           found_real_path = 1;
397           ++p;
398         }
399     }
400
401   forget_cached_source_info ();
402
403   if (from_tty)
404     pwd_command ((char *) 0, 1);
405 }
406 \f
407 void
408 source_command (char *args, int from_tty)
409 {
410   FILE *stream;
411   struct cleanup *old_cleanups;
412   char *file = args;
413
414   if (file == NULL)
415     {
416       error ("source command requires pathname of file to source.");
417     }
418
419   file = tilde_expand (file);
420   old_cleanups = make_cleanup (xfree, file);
421
422   stream = fopen (file, FOPEN_RT);
423   if (!stream)
424     {
425       if (from_tty)
426         perror_with_name (file);
427       else
428         return;
429     }
430
431   script_from_file (stream, file);
432
433   do_cleanups (old_cleanups);
434 }
435
436 static void
437 echo_command (char *text, int from_tty)
438 {
439   char *p = text;
440   int c;
441
442   if (text)
443     while ((c = *p++) != '\0')
444       {
445         if (c == '\\')
446           {
447             /* \ at end of argument is used after spaces
448                so they won't be lost.  */
449             if (*p == 0)
450               return;
451
452             c = parse_escape (&p);
453             if (c >= 0)
454               printf_filtered ("%c", c);
455           }
456         else
457           printf_filtered ("%c", c);
458       }
459
460   /* Force this output to appear now.  */
461   wrap_here ("");
462   gdb_flush (gdb_stdout);
463 }
464
465 static void
466 shell_escape (char *arg, int from_tty)
467 {
468 #ifdef CANT_FORK
469   /* If ARG is NULL, they want an inferior shell, but `system' just
470      reports if the shell is available when passed a NULL arg.  */
471   int rc = system (arg ? arg : "");
472
473   if (!arg)
474     arg = "inferior shell";
475
476   if (rc == -1)
477     {
478       fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
479                           safe_strerror (errno));
480       gdb_flush (gdb_stderr);
481     }
482   else if (rc)
483     {
484       fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
485       gdb_flush (gdb_stderr);
486     }
487 #ifdef GLOBAL_CURDIR
488   /* Make sure to return to the directory GDB thinks it is, in case the
489      shell command we just ran changed it.  */
490   chdir (current_directory);
491 #endif
492 #else /* Can fork.  */
493   int rc, status, pid;
494
495   if ((pid = vfork ()) == 0)
496     {
497       char *p, *user_shell;
498
499       if ((user_shell = (char *) getenv ("SHELL")) == NULL)
500         user_shell = "/bin/sh";
501
502       /* Get the name of the shell for arg0 */
503       if ((p = strrchr (user_shell, '/')) == NULL)
504         p = user_shell;
505       else
506         p++;                    /* Get past '/' */
507
508       if (!arg)
509         execl (user_shell, p, 0);
510       else
511         execl (user_shell, p, "-c", arg, 0);
512
513       fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
514                           safe_strerror (errno));
515       gdb_flush (gdb_stderr);
516       _exit (0177);
517     }
518
519   if (pid != -1)
520     while ((rc = wait (&status)) != pid && rc != -1)
521       ;
522   else
523     error ("Fork failed");
524 #endif /* Can fork.  */
525 }
526
527 static void
528 edit_command (char *arg, int from_tty)
529 {
530   struct symtabs_and_lines sals;
531   struct symtab_and_line sal;
532   struct symbol *sym;
533   char *arg1;
534   int cmdlen, log10;
535   unsigned m;
536   char *editor;
537   char *p;
538
539   /* Pull in the current default source line if necessary */
540   if (arg == 0)
541     {
542       set_default_source_symtab_and_line ();
543       sal = get_current_source_symtab_and_line ();
544     }
545
546   /* bare "edit" edits file with present line.  */
547
548   if (arg == 0)
549     {
550       if (sal.symtab == 0)
551         error ("No default source file yet.");
552       sal.line += get_lines_to_list () / 2;
553     }
554   else
555     {
556
557       /* Now should only be one argument -- decode it in SAL */
558
559       arg1 = arg;
560       sals = decode_line_1 (&arg1, 0, 0, 0, 0, 0);
561
562       if (! sals.nelts) return;  /*  C++  */
563       if (sals.nelts > 1) {
564         ambiguous_line_spec (&sals);
565         xfree (sals.sals);
566         return;
567       }
568
569       sal = sals.sals[0];
570       xfree (sals.sals);
571
572       if (*arg1)
573         error ("Junk at end of line specification.");
574
575       /* if line was specified by address,
576          first print exactly which line, and which file.
577          In this case, sal.symtab == 0 means address is outside
578          of all known source files, not that user failed to give a filename.  */
579       if (*arg == '*')
580         {
581           if (sal.symtab == 0)
582             /* FIXME-32x64--assumes sal.pc fits in long.  */
583             error ("No source file for address %s.",
584                    local_hex_string((unsigned long) sal.pc));
585           sym = find_pc_function (sal.pc);
586           if (sym)
587             {
588               print_address_numeric (sal.pc, 1, gdb_stdout);
589               printf_filtered (" is in ");
590               fputs_filtered (SYMBOL_PRINT_NAME (sym), gdb_stdout);
591               printf_filtered (" (%s:%d).\n", sal.symtab->filename, sal.line);
592             }
593           else
594             {
595               print_address_numeric (sal.pc, 1, gdb_stdout);
596               printf_filtered (" is at %s:%d.\n",
597                                sal.symtab->filename, sal.line);
598             }
599         }
600
601       /* If what was given does not imply a symtab, it must be an undebuggable
602          symbol which means no source code.  */
603
604       if (sal.symtab == 0)
605         error ("No line number known for %s.", arg);
606     }
607
608   if ((editor = (char *) getenv ("EDITOR")) == NULL)
609       editor = "/bin/ex";
610   
611   /* Approximate base-10 log of line to 1 unit for digit count */
612   for(log10=32, m=0x80000000; !(sal.line & m) && log10>0; log10--, m=m>>1);
613   log10 = 1 + (int)((log10 + (0 == ((m-1) & sal.line)))/3.32192809);
614
615   cmdlen = strlen(editor) + 1
616          + (NULL == sal.symtab->dirname ? 0 : strlen(sal.symtab->dirname) + 1)
617          + (NULL == sal.symtab->filename? 0 : strlen(sal.symtab->filename)+ 1)
618          + log10 + 2;
619   
620   p = xmalloc(cmdlen);
621   sprintf(p,"%s +%d %s%s",editor,sal.line,
622      (NULL == sal.symtab->dirname ? "./" :
623         (NULL != sal.symtab->filename && *(sal.symtab->filename) != '/') ?
624            sal.symtab->dirname : ""),
625      (NULL == sal.symtab->filename ? "unknown" : sal.symtab->filename)
626   );
627   shell_escape(p, from_tty);
628
629   xfree(p);
630 }
631
632 static void
633 list_command (char *arg, int from_tty)
634 {
635   struct symtabs_and_lines sals, sals_end;
636   struct symtab_and_line sal, sal_end, cursal;
637   struct symbol *sym;
638   char *arg1;
639   int no_end = 1;
640   int dummy_end = 0;
641   int dummy_beg = 0;
642   int linenum_beg = 0;
643   char *p;
644
645   /* Pull in the current default source line if necessary */
646   if (arg == 0 || arg[0] == '+' || arg[0] == '-')
647     {
648       set_default_source_symtab_and_line ();
649       cursal = get_current_source_symtab_and_line ();
650     }
651
652   /* "l" or "l +" lists next ten lines.  */
653
654   if (arg == 0 || strcmp (arg, "+") == 0)
655     {
656       print_source_lines (cursal.symtab, cursal.line,
657                           cursal.line + get_lines_to_list (), 0);
658       return;
659     }
660
661   /* "l -" lists previous ten lines, the ones before the ten just listed.  */
662   if (strcmp (arg, "-") == 0)
663     {
664       print_source_lines (cursal.symtab,
665                           max (get_first_line_listed () - get_lines_to_list (), 1),
666                           get_first_line_listed (), 0);
667       return;
668     }
669
670   /* Now if there is only one argument, decode it in SAL
671      and set NO_END.
672      If there are two arguments, decode them in SAL and SAL_END
673      and clear NO_END; however, if one of the arguments is blank,
674      set DUMMY_BEG or DUMMY_END to record that fact.  */
675
676   if (!have_full_symbols () && !have_partial_symbols ())
677     error ("No symbol table is loaded.  Use the \"file\" command.");
678
679   arg1 = arg;
680   if (*arg1 == ',')
681     dummy_beg = 1;
682   else
683     {
684       sals = decode_line_1 (&arg1, 0, 0, 0, 0, 0);
685
686       if (!sals.nelts)
687         return;                 /*  C++  */
688       if (sals.nelts > 1)
689         {
690           ambiguous_line_spec (&sals);
691           xfree (sals.sals);
692           return;
693         }
694
695       sal = sals.sals[0];
696       xfree (sals.sals);
697     }
698
699   /* Record whether the BEG arg is all digits.  */
700
701   for (p = arg; p != arg1 && *p >= '0' && *p <= '9'; p++);
702   linenum_beg = (p == arg1);
703
704   while (*arg1 == ' ' || *arg1 == '\t')
705     arg1++;
706   if (*arg1 == ',')
707     {
708       no_end = 0;
709       arg1++;
710       while (*arg1 == ' ' || *arg1 == '\t')
711         arg1++;
712       if (*arg1 == 0)
713         dummy_end = 1;
714       else
715         {
716           if (dummy_beg)
717             sals_end = decode_line_1 (&arg1, 0, 0, 0, 0, 0);
718           else
719             sals_end = decode_line_1 (&arg1, 0, sal.symtab, sal.line, 0, 0);
720           if (sals_end.nelts == 0)
721             return;
722           if (sals_end.nelts > 1)
723             {
724               ambiguous_line_spec (&sals_end);
725               xfree (sals_end.sals);
726               return;
727             }
728           sal_end = sals_end.sals[0];
729           xfree (sals_end.sals);
730         }
731     }
732
733   if (*arg1)
734     error ("Junk at end of line specification.");
735
736   if (!no_end && !dummy_beg && !dummy_end
737       && sal.symtab != sal_end.symtab)
738     error ("Specified start and end are in different files.");
739   if (dummy_beg && dummy_end)
740     error ("Two empty args do not say what lines to list.");
741
742   /* if line was specified by address,
743      first print exactly which line, and which file.
744      In this case, sal.symtab == 0 means address is outside
745      of all known source files, not that user failed to give a filename.  */
746   if (*arg == '*')
747     {
748       if (sal.symtab == 0)
749         /* FIXME-32x64--assumes sal.pc fits in long.  */
750         error ("No source file for address %s.",
751                local_hex_string ((unsigned long) sal.pc));
752       sym = find_pc_function (sal.pc);
753       if (sym)
754         {
755           print_address_numeric (sal.pc, 1, gdb_stdout);
756           printf_filtered (" is in ");
757           fputs_filtered (SYMBOL_PRINT_NAME (sym), gdb_stdout);
758           printf_filtered (" (%s:%d).\n", sal.symtab->filename, sal.line);
759         }
760       else
761         {
762           print_address_numeric (sal.pc, 1, gdb_stdout);
763           printf_filtered (" is at %s:%d.\n",
764                            sal.symtab->filename, sal.line);
765         }
766     }
767
768   /* If line was not specified by just a line number,
769      and it does not imply a symtab, it must be an undebuggable symbol
770      which means no source code.  */
771
772   if (!linenum_beg && sal.symtab == 0)
773     error ("No line number known for %s.", arg);
774
775   /* If this command is repeated with RET,
776      turn it into the no-arg variant.  */
777
778   if (from_tty)
779     *arg = 0;
780
781   if (dummy_beg && sal_end.symtab == 0)
782     error ("No default source file yet.  Do \"help list\".");
783   if (dummy_beg)
784     print_source_lines (sal_end.symtab,
785                         max (sal_end.line - (get_lines_to_list () - 1), 1),
786                         sal_end.line + 1, 0);
787   else if (sal.symtab == 0)
788     error ("No default source file yet.  Do \"help list\".");
789   else if (no_end)
790     {
791       int first_line = sal.line - get_lines_to_list () / 2;
792
793       if (first_line < 1) first_line = 1;
794
795       print_source_lines (sal.symtab,
796                           first_line,
797                           first_line + get_lines_to_list (),
798                           0);
799     }
800   else
801     print_source_lines (sal.symtab, sal.line,
802                         (dummy_end
803                          ? sal.line + get_lines_to_list ()
804                          : sal_end.line + 1),
805                         0);
806 }
807
808 /* Dump a specified section of assembly code.  With no command line
809    arguments, this command will dump the assembly code for the
810    function surrounding the pc value in the selected frame.  With one
811    argument, it will dump the assembly code surrounding that pc value.
812    Two arguments are interpeted as bounds within which to dump
813    assembly.  */
814
815 static void
816 disassemble_command (char *arg, int from_tty)
817 {
818   CORE_ADDR low, high;
819   char *name;
820   CORE_ADDR pc, pc_masked;
821   char *space_index;
822 #if 0
823   asection *section;
824 #endif
825
826   name = NULL;
827   if (!arg)
828     {
829       if (!deprecated_selected_frame)
830         error ("No frame selected.\n");
831
832       pc = get_frame_pc (deprecated_selected_frame);
833       if (find_pc_partial_function (pc, &name, &low, &high) == 0)
834         error ("No function contains program counter for selected frame.\n");
835 #if defined(TUI)
836       /* NOTE: cagney/2003-02-13 The `tui_active' was previously
837          `tui_version'.  */
838       else if (tui_active)
839         low = tuiGetLowDisassemblyAddress (low, pc);
840 #endif
841       low += FUNCTION_START_OFFSET;
842     }
843   else if (!(space_index = (char *) strchr (arg, ' ')))
844     {
845       /* One argument.  */
846       pc = parse_and_eval_address (arg);
847       if (find_pc_partial_function (pc, &name, &low, &high) == 0)
848         error ("No function contains specified address.\n");
849 #if defined(TUI)
850       /* NOTE: cagney/2003-02-13 The `tui_active' was previously
851          `tui_version'.  */
852       else if (tui_active)
853         low = tuiGetLowDisassemblyAddress (low, pc);
854 #endif
855       low += FUNCTION_START_OFFSET;
856     }
857   else
858     {
859       /* Two arguments.  */
860       *space_index = '\0';
861       low = parse_and_eval_address (arg);
862       high = parse_and_eval_address (space_index + 1);
863     }
864
865 #if defined(TUI)
866   if (!tui_is_window_visible (DISASSEM_WIN))
867 #endif
868     {
869       printf_filtered ("Dump of assembler code ");
870       if (name != NULL)
871         {
872           printf_filtered ("for function %s:\n", name);
873         }
874       else
875         {
876           printf_filtered ("from ");
877           print_address_numeric (low, 1, gdb_stdout);
878           printf_filtered (" to ");
879           print_address_numeric (high, 1, gdb_stdout);
880           printf_filtered (":\n");
881         }
882
883       /* Dump the specified range.  */
884       gdb_disassembly (uiout, 0, 0, 0, -1, low, high);
885
886       printf_filtered ("End of assembler dump.\n");
887       gdb_flush (gdb_stdout);
888     }
889 #if defined(TUI)
890   else
891     {
892       tui_show_assembly (low);
893     }
894 #endif
895 }
896
897 static void
898 make_command (char *arg, int from_tty)
899 {
900   char *p;
901
902   if (arg == 0)
903     p = "make";
904   else
905     {
906       p = xmalloc (sizeof ("make ") + strlen (arg));
907       strcpy (p, "make ");
908       strcpy (p + sizeof ("make ") - 1, arg);
909     }
910
911   shell_escape (p, from_tty);
912 }
913
914 static void
915 show_user (char *args, int from_tty)
916 {
917   struct cmd_list_element *c;
918   extern struct cmd_list_element *cmdlist;
919
920   if (args)
921     {
922       c = lookup_cmd (&args, cmdlist, "", 0, 1);
923       if (c->class != class_user)
924         error ("Not a user command.");
925       show_user_1 (c, gdb_stdout);
926     }
927   else
928     {
929       for (c = cmdlist; c; c = c->next)
930         {
931           if (c->class == class_user)
932             show_user_1 (c, gdb_stdout);
933         }
934     }
935 }
936
937 /* Search through names of commands and documentations for a certain
938    regular expression.
939 */
940 void 
941 apropos_command (char *searchstr, int from_tty)
942 {
943   extern struct cmd_list_element *cmdlist; /*This is the main command list*/
944   regex_t pattern;
945   char *pattern_fastmap;
946   char errorbuffer[512];
947   pattern_fastmap = xcalloc (256, sizeof (char));
948   if (searchstr == NULL)
949       error("REGEXP string is empty");
950
951   if (regcomp(&pattern,searchstr,REG_ICASE) == 0)
952     {
953       pattern.fastmap=pattern_fastmap;
954       re_compile_fastmap(&pattern);
955       apropos_cmd (gdb_stdout,cmdlist,&pattern,"");
956     }
957   else
958     {
959       regerror(regcomp(&pattern,searchstr,REG_ICASE),NULL,errorbuffer,512);
960       error("Error in regular expression:%s",errorbuffer);
961     }
962   xfree (pattern_fastmap);
963 }
964 \f
965 /* Print a list of files and line numbers which a user may choose from
966    in order to list a function which was specified ambiguously (as with
967    `list classname::overloadedfuncname', for example).  The vector in
968    SALS provides the filenames and line numbers.  */
969
970 static void
971 ambiguous_line_spec (struct symtabs_and_lines *sals)
972 {
973   int i;
974
975   for (i = 0; i < sals->nelts; ++i)
976     printf_filtered ("file: \"%s\", line number: %d\n",
977                      sals->sals[i].symtab->filename, sals->sals[i].line);
978 }
979
980 static void
981 set_debug (char *arg, int from_tty)
982 {
983   printf_unfiltered ("\"set debug\" must be followed by the name of a print subcommand.\n");
984   help_list (setdebuglist, "set debug ", -1, gdb_stdout);
985 }
986
987 static void
988 show_debug (char *args, int from_tty)
989 {
990   cmd_show_list (showdebuglist, from_tty, "");
991 }
992
993 void
994 init_cmd_lists (void)
995 {
996   max_user_call_depth = 1024;
997
998   cmdlist = NULL;
999   infolist = NULL;
1000   enablelist = NULL;
1001   disablelist = NULL;
1002   togglelist = NULL;
1003   stoplist = NULL;
1004   deletelist = NULL;
1005   enablebreaklist = NULL;
1006   setlist = NULL;
1007   unsetlist = NULL;
1008   showlist = NULL;
1009   sethistlist = NULL;
1010   showhistlist = NULL;
1011   unsethistlist = NULL;
1012   maintenancelist = NULL;
1013   maintenanceinfolist = NULL;
1014   maintenanceprintlist = NULL;
1015   setprintlist = NULL;
1016   showprintlist = NULL;
1017   setchecklist = NULL;
1018   showchecklist = NULL;
1019 }
1020
1021 \f
1022 void
1023 init_cli_cmds (void)
1024 {
1025   struct cmd_list_element *c;
1026
1027   /* Define the classes of commands.
1028      They will appear in the help list in the reverse of this order.  */
1029
1030   add_cmd ("internals", class_maintenance, NULL,
1031            "Maintenance commands.\n\
1032 Some gdb commands are provided just for use by gdb maintainers.\n\
1033 These commands are subject to frequent change, and may not be as\n\
1034 well documented as user commands.",
1035            &cmdlist);
1036   add_cmd ("obscure", class_obscure, NULL, "Obscure features.", &cmdlist);
1037   add_cmd ("aliases", class_alias, NULL, "Aliases of other commands.", &cmdlist);
1038   add_cmd ("user-defined", class_user, NULL, "User-defined commands.\n\
1039 The commands in this class are those defined by the user.\n\
1040 Use the \"define\" command to define a command.", &cmdlist);
1041   add_cmd ("support", class_support, NULL, "Support facilities.", &cmdlist);
1042   if (!dbx_commands)
1043     add_cmd ("status", class_info, NULL, "Status inquiries.", &cmdlist);
1044   add_cmd ("files", class_files, NULL, "Specifying and examining files.", &cmdlist);
1045   add_cmd ("breakpoints", class_breakpoint, NULL, "Making program stop at certain points.", &cmdlist);
1046   add_cmd ("data", class_vars, NULL, "Examining data.", &cmdlist);
1047   add_cmd ("stack", class_stack, NULL, "Examining the stack.\n\
1048 The stack is made up of stack frames.  Gdb assigns numbers to stack frames\n\
1049 counting from zero for the innermost (currently executing) frame.\n\n\
1050 At any time gdb identifies one frame as the \"selected\" frame.\n\
1051 Variable lookups are done with respect to the selected frame.\n\
1052 When the program being debugged stops, gdb selects the innermost frame.\n\
1053 The commands below can be used to select other frames by number or address.",
1054            &cmdlist);
1055   add_cmd ("running", class_run, NULL, "Running the program.", &cmdlist);
1056
1057   /* Define general commands. */
1058
1059   add_com ("pwd", class_files, pwd_command,
1060         "Print working directory.  This is used for your program as well.");
1061   c = add_cmd ("cd", class_files, cd_command,
1062                "Set working directory to DIR for debugger and program being debugged.\n\
1063 The change does not take effect for the program being debugged\n\
1064 until the next time it is started.", &cmdlist);
1065   set_cmd_completer (c, filename_completer);
1066
1067   add_com ("echo", class_support, echo_command,
1068            "Print a constant string.  Give string as argument.\n\
1069 C escape sequences may be used in the argument.\n\
1070 No newline is added at the end of the argument;\n\
1071 use \"\\n\" if you want a newline to be printed.\n\
1072 Since leading and trailing whitespace are ignored in command arguments,\n\
1073 if you want to print some you must use \"\\\" before leading whitespace\n\
1074 to be printed or after trailing whitespace.");
1075   add_com ("document", class_support, document_command,
1076            "Document a user-defined command.\n\
1077 Give command name as argument.  Give documentation on following lines.\n\
1078 End with a line of just \"end\".");
1079   add_com ("define", class_support, define_command,
1080            "Define a new command name.  Command name is argument.\n\
1081 Definition appears on following lines, one command per line.\n\
1082 End with a line of just \"end\".\n\
1083 Use the \"document\" command to give documentation for the new command.\n\
1084 Commands defined in this way may have up to ten arguments.");
1085
1086   c = add_cmd ("source", class_support, source_command,
1087                "Read commands from a file named FILE.\n\
1088 Note that the file \"" GDBINIT_FILENAME "\" is read automatically in this way\n\
1089 when gdb is started.", &cmdlist);
1090   set_cmd_completer (c, filename_completer);
1091
1092   add_com ("quit", class_support, quit_command, "Exit gdb.");
1093   c = add_com ("help", class_support, help_command, "Print list of commands.");
1094   set_cmd_completer (c, command_completer);
1095   add_com_alias ("q", "quit", class_support, 1);
1096   add_com_alias ("h", "help", class_support, 1);
1097
1098   c = add_set_cmd ("verbose", class_support, var_boolean, (char *) &info_verbose,
1099                    "Set ",
1100                    &setlist),
1101     add_show_from_set (c, &showlist);
1102   set_cmd_sfunc (c, set_verbose);
1103   set_verbose (NULL, 0, c);
1104
1105   add_prefix_cmd ("history", class_support, set_history,
1106                   "Generic command for setting command history parameters.",
1107                   &sethistlist, "set history ", 0, &setlist);
1108   add_prefix_cmd ("history", class_support, show_history,
1109                   "Generic command for showing command history parameters.",
1110                   &showhistlist, "show history ", 0, &showlist);
1111
1112   add_show_from_set
1113     (add_set_cmd ("expansion", no_class, var_boolean, (char *) &history_expansion_p,
1114                   "Set history expansion on command input.\n\
1115 Without an argument, history expansion is enabled.", &sethistlist),
1116      &showhistlist);
1117
1118   add_prefix_cmd ("info", class_info, info_command,
1119      "Generic command for showing things about the program being debugged.",
1120                   &infolist, "info ", 0, &cmdlist);
1121   add_com_alias ("i", "info", class_info, 1);
1122
1123   add_com ("complete", class_obscure, complete_command,
1124            "List the completions for the rest of the line as a command.");
1125
1126   add_prefix_cmd ("show", class_info, show_command,
1127                   "Generic command for showing things about the debugger.",
1128                   &showlist, "show ", 0, &cmdlist);
1129   /* Another way to get at the same thing.  */
1130   add_info ("set", show_command, "Show all GDB settings.");
1131
1132   add_cmd ("commands", no_class, show_commands,
1133            "Show the history of commands you typed.\n\
1134 You can supply a command number to start with, or a `+' to start after\n\
1135 the previous command number shown.",
1136            &showlist);
1137
1138   add_cmd ("version", no_class, show_version,
1139            "Show what version of GDB this is.", &showlist);
1140
1141   add_com ("while", class_support, while_command,
1142            "Execute nested commands WHILE the conditional expression is non zero.\n\
1143 The conditional expression must follow the word `while' and must in turn be\n\
1144 followed by a new line.  The nested commands must be entered one per line,\n\
1145 and should be terminated by the word `end'.");
1146
1147   add_com ("if", class_support, if_command,
1148            "Execute nested commands once IF the conditional expression is non zero.\n\
1149 The conditional expression must follow the word `if' and must in turn be\n\
1150 followed by a new line.  The nested commands must be entered one per line,\n\
1151 and should be terminated by the word 'else' or `end'.  If an else clause\n\
1152 is used, the same rules apply to its nested commands as to the first ones.");
1153
1154   /* If target is open when baud changes, it doesn't take effect until the
1155      next open (I think, not sure).  */
1156   add_show_from_set (add_set_cmd ("remotebaud", no_class,
1157                                   var_zinteger, (char *) &baud_rate,
1158                                   "Set baud rate for remote serial I/O.\n\
1159 This value is used to set the speed of the serial port when debugging\n\
1160 using remote targets.", &setlist),
1161                      &showlist);
1162
1163   c = add_set_cmd ("remotedebug", no_class, var_zinteger,
1164                    (char *) &remote_debug,
1165                    "Set debugging of remote protocol.\n\
1166 When enabled, each packet sent or received with the remote target\n\
1167 is displayed.", &setlist);
1168   deprecate_cmd (c, "set debug remote");
1169   deprecate_cmd (add_show_from_set (c, &showlist), "show debug remote");
1170
1171   add_show_from_set (add_set_cmd ("remote", no_class, var_zinteger,
1172                                   (char *) &remote_debug,
1173                                   "Set debugging of remote protocol.\n\
1174 When enabled, each packet sent or received with the remote target\n\
1175 is displayed.", &setdebuglist),
1176                      &showdebuglist);
1177
1178   add_show_from_set (
1179                       add_set_cmd ("remotetimeout", no_class, var_integer, (char *) &remote_timeout,
1180                                    "Set timeout limit to wait for target to respond.\n\
1181 This value is used to set the time limit for gdb to wait for a response\n\
1182 from the target.", &setlist),
1183                       &showlist);
1184
1185   add_prefix_cmd ("debug", no_class, set_debug,
1186                   "Generic command for setting gdb debugging flags",
1187                   &setdebuglist, "set debug ", 0, &setlist);
1188
1189   add_prefix_cmd ("debug", no_class, show_debug,
1190                   "Generic command for showing gdb debugging flags",
1191                   &showdebuglist, "show debug ", 0, &showlist);
1192
1193   c = add_com ("shell", class_support, shell_escape,
1194                "Execute the rest of the line as a shell command.\n\
1195 With no arguments, run an inferior shell.");
1196   set_cmd_completer (c, filename_completer);
1197
1198   c = add_com ("edit", class_files, edit_command,
1199            concat ("Edit specified file or function.\n\
1200 With no argument, edits file containing most recent line listed.\n\
1201 ", "\
1202 Editing targets can be specified in these ways:\n\
1203   FILE:LINENUM, to edit at that line in that file,\n\
1204   FUNCTION, to edit at the beginning of that function,\n\
1205   FILE:FUNCTION, to distinguish among like-named static functions.\n\
1206   *ADDRESS, to edit at the line containing that address.\n\
1207 Uses EDITOR environment variable contents as editor (or ex as default).",NULL));
1208
1209   c->completer = location_completer;
1210
1211   add_com ("list", class_files, list_command,
1212            concat ("List specified function or line.\n\
1213 With no argument, lists ten more lines after or around previous listing.\n\
1214 \"list -\" lists the ten lines before a previous ten-line listing.\n\
1215 One argument specifies a line, and ten lines are listed around that line.\n\
1216 Two arguments with comma between specify starting and ending lines to list.\n\
1217 ", "\
1218 Lines can be specified in these ways:\n\
1219   LINENUM, to list around that line in current file,\n\
1220   FILE:LINENUM, to list around that line in that file,\n\
1221   FUNCTION, to list around beginning of that function,\n\
1222   FILE:FUNCTION, to distinguish among like-named static functions.\n\
1223   *ADDRESS, to list around the line containing that address.\n\
1224 With two args if one is empty it stands for ten lines away from the other arg.", NULL));
1225
1226   if (!xdb_commands)
1227     add_com_alias ("l", "list", class_files, 1);
1228   else
1229     add_com_alias ("v", "list", class_files, 1);
1230
1231   if (dbx_commands)
1232     add_com_alias ("file", "list", class_files, 1);
1233
1234   c = add_com ("disassemble", class_vars, disassemble_command,
1235                "Disassemble a specified section of memory.\n\
1236 Default is the function surrounding the pc of the selected frame.\n\
1237 With a single argument, the function surrounding that address is dumped.\n\
1238 Two arguments are taken as a range of memory to dump.");
1239   set_cmd_completer (c, location_completer);
1240   if (xdb_commands)
1241     add_com_alias ("va", "disassemble", class_xdb, 0);
1242
1243   /* NOTE: cagney/2000-03-20: Being able to enter ``(gdb) !ls'' would
1244      be a really useful feature.  Unfortunately, the below wont do
1245      this.  Instead it adds support for the form ``(gdb) ! ls''
1246      (i.e. the space is required).  If the ``!'' command below is
1247      added the complains about no ``!'' command would be replaced by
1248      complains about how the ``!'' command is broken :-) */
1249   if (xdb_commands)
1250     add_com_alias ("!", "shell", class_support, 0);
1251
1252   c = add_com ("make", class_support, make_command,
1253           "Run the ``make'' program using the rest of the line as arguments.");
1254   set_cmd_completer (c, filename_completer);
1255   add_cmd ("user", no_class, show_user,
1256            "Show definitions of user defined commands.\n\
1257 Argument is the name of the user defined command.\n\
1258 With no argument, show definitions of all user defined commands.", &showlist);
1259   add_com ("apropos", class_support, apropos_command, "Search for commands matching a REGEXP");
1260
1261   add_show_from_set (
1262                       add_set_cmd ("max-user-call-depth", no_class, var_integer, 
1263                                    (char *) &max_user_call_depth,
1264                                    "Set the max call depth for user-defined commands.\n", 
1265                                    &setlist),
1266                       &showlist);
1267 }