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