]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/cli/cli-cmds.c
* remote.c (init_remote_state): Eliminate use of
[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
d318976c
FN
53#ifndef GDBINIT_FILENAME
54#define GDBINIT_FILENAME ".gdbinit"
55#endif
56
0378c332 57/* Prototypes for local command functions */
d318976c
FN
58
59static void complete_command (char *, int);
60
61static void echo_command (char *, int);
62
63static void pwd_command (char *, int);
64
65static void show_version (char *, int);
66
d318976c
FN
67static void help_command (char *, int);
68
69static void show_command (char *, int);
70
71static void info_command (char *, int);
72
73static void show_debug (char *, int);
74
75static void set_debug (char *, int);
76
77static void show_user (char *, int);
78
79static void make_command (char *, int);
80
81static void shell_escape (char *, int);
82
0378c332
FN
83static void edit_command (char *, int);
84
85static void list_command (char *, int);
86
d318976c 87void apropos_command (char *, int);
0378c332
FN
88
89/* Prototypes for local utility functions */
90
91static void ambiguous_line_spec (struct symtabs_and_lines *);
d318976c 92\f
20f01a46
DH
93/* Limit the call depth of user-defined commands */
94int max_user_call_depth;
95
d318976c
FN
96/* Define all cmd_list_elements. */
97
98/* Chain containing all defined commands. */
99
100struct cmd_list_element *cmdlist;
101
102/* Chain containing all defined info subcommands. */
103
104struct cmd_list_element *infolist;
105
106/* Chain containing all defined enable subcommands. */
107
108struct cmd_list_element *enablelist;
109
110/* Chain containing all defined disable subcommands. */
111
112struct cmd_list_element *disablelist;
113
114/* Chain containing all defined toggle subcommands. */
115
116struct cmd_list_element *togglelist;
117
118/* Chain containing all defined stop subcommands. */
119
120struct cmd_list_element *stoplist;
121
122/* Chain containing all defined delete subcommands. */
123
124struct cmd_list_element *deletelist;
125
126/* Chain containing all defined "enable breakpoint" subcommands. */
127
128struct cmd_list_element *enablebreaklist;
129
130/* Chain containing all defined set subcommands */
131
132struct cmd_list_element *setlist;
133
134/* Chain containing all defined unset subcommands */
135
136struct cmd_list_element *unsetlist;
137
138/* Chain containing all defined show subcommands. */
139
140struct cmd_list_element *showlist;
141
142/* Chain containing all defined \"set history\". */
143
144struct cmd_list_element *sethistlist;
145
146/* Chain containing all defined \"show history\". */
147
148struct cmd_list_element *showhistlist;
149
150/* Chain containing all defined \"unset history\". */
151
152struct cmd_list_element *unsethistlist;
153
154/* Chain containing all defined maintenance subcommands. */
155
156struct cmd_list_element *maintenancelist;
157
158/* Chain containing all defined "maintenance info" subcommands. */
159
160struct cmd_list_element *maintenanceinfolist;
161
162/* Chain containing all defined "maintenance print" subcommands. */
163
164struct cmd_list_element *maintenanceprintlist;
165
166struct cmd_list_element *setprintlist;
167
168struct cmd_list_element *showprintlist;
169
170struct cmd_list_element *setdebuglist;
171
172struct cmd_list_element *showdebuglist;
173
174struct cmd_list_element *setchecklist;
175
176struct cmd_list_element *showchecklist;
177\f
178/* Utility used everywhere when at least one argument is needed and
179 none is supplied. */
180
181void
182error_no_arg (char *why)
183{
8a3fe4f8 184 error (_("Argument required (%s)."), why);
d318976c
FN
185}
186
187/* The "info" command is defined as a prefix, with allow_unknown = 0.
188 Therefore, its own definition is called only for "info" with no args. */
189
d318976c
FN
190static void
191info_command (char *arg, int from_tty)
192{
a3f17187 193 printf_unfiltered (_("\"info\" must be followed by the name of an info command.\n"));
d318976c
FN
194 help_list (infolist, "info ", -1, gdb_stdout);
195}
196
197/* The "show" command with no arguments shows all the settings. */
198
d318976c
FN
199static void
200show_command (char *arg, int from_tty)
201{
202 cmd_show_list (showlist, from_tty, "");
203}
204\f
205/* Provide documentation on command or list given by COMMAND. FROM_TTY
206 is ignored. */
207
d318976c
FN
208static void
209help_command (char *command, int from_tty)
210{
211 help_cmd (command, gdb_stdout);
212}
213\f
83d31a92
TT
214/* String compare function for qsort. */
215static int
216compare_strings (const void *arg1, const void *arg2)
217{
218 const char **s1 = (const char **) arg1;
219 const char **s2 = (const char **) arg2;
220 return strcmp (*s1, *s2);
221}
222
d318976c
FN
223/* The "complete" command is used by Emacs to implement completion. */
224
d318976c
FN
225static void
226complete_command (char *arg, int from_tty)
227{
228 int i;
229 int argpoint;
d9b52655 230 char **completions, *point, *arg_prefix;
d318976c
FN
231
232 dont_repeat ();
233
234 if (arg == NULL)
235 arg = "";
236 argpoint = strlen (arg);
237
d9b52655
DJ
238 /* complete_line assumes that its first argument is somewhere within,
239 and except for filenames at the beginning of, the word to be completed.
240 The following crude imitation of readline's word-breaking tries to
241 accomodate this. */
242 point = arg + argpoint;
243 while (point > arg)
244 {
245 if (strchr (rl_completer_word_break_characters, point[-1]) != 0)
246 break;
247 point--;
248 }
249
250 arg_prefix = alloca (point - arg + 1);
251 memcpy (arg_prefix, arg, point - arg);
252 arg_prefix[point - arg] = 0;
253
254 completions = complete_line (point, arg, argpoint);
83d31a92
TT
255
256 if (completions)
d318976c 257 {
83d31a92
TT
258 int item, size;
259
260 for (size = 0; completions[size]; ++size)
261 ;
262 qsort (completions, size, sizeof (char *), compare_strings);
263
264 /* We do extra processing here since we only want to print each
265 unique item once. */
266 item = 0;
267 while (item < size)
268 {
269 int next_item;
d9b52655 270 printf_unfiltered ("%s%s\n", arg_prefix, completions[item]);
83d31a92
TT
271 next_item = item + 1;
272 while (next_item < size
273 && ! strcmp (completions[item], completions[next_item]))
274 {
275 xfree (completions[next_item]);
276 ++next_item;
277 }
278
279 xfree (completions[item]);
280 item = next_item;
281 }
282
283 xfree (completions);
d318976c
FN
284 }
285}
286
bbaca940
AC
287int
288is_complete_command (struct cmd_list_element *c)
d318976c 289{
bbaca940 290 return cmd_cfunc_eq (c, complete_command);
d318976c
FN
291}
292
d318976c
FN
293static void
294show_version (char *args, int from_tty)
295{
296 immediate_quit++;
297 print_gdb_version (gdb_stdout);
298 printf_filtered ("\n");
299 immediate_quit--;
300}
301
302/* Handle the quit command. */
303
304void
305quit_command (char *args, int from_tty)
306{
307 if (!quit_confirm ())
8a3fe4f8 308 error (_("Not confirmed."));
d318976c
FN
309 quit_force (args, from_tty);
310}
311
d318976c
FN
312static void
313pwd_command (char *args, int from_tty)
314{
315 if (args)
8a3fe4f8 316 error (_("The \"pwd\" command does not take an argument: %s"), args);
d318976c
FN
317 getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
318
6314a349 319 if (strcmp (gdb_dirbuf, current_directory) != 0)
a3f17187 320 printf_unfiltered (_("Working directory %s\n (canonically %s).\n"),
d318976c
FN
321 current_directory, gdb_dirbuf);
322 else
a3f17187 323 printf_unfiltered (_("Working directory %s.\n"), current_directory);
d318976c
FN
324}
325
326void
327cd_command (char *dir, int from_tty)
328{
329 int len;
330 /* Found something other than leading repetitions of "/..". */
331 int found_real_path;
332 char *p;
333
334 /* If the new directory is absolute, repeat is a no-op; if relative,
335 repeat might be useful but is more likely to be a mistake. */
336 dont_repeat ();
337
338 if (dir == 0)
e2e0b3e5 339 error_no_arg (_("new working directory"));
d318976c
FN
340
341 dir = tilde_expand (dir);
b8c9b27d 342 make_cleanup (xfree, dir);
d318976c
FN
343
344 if (chdir (dir) < 0)
345 perror_with_name (dir);
346
c3690141 347#ifdef HAVE_DOS_BASED_FILE_SYSTEM
d318976c
FN
348 /* There's too much mess with DOSish names like "d:", "d:.",
349 "d:./foo" etc. Instead of having lots of special #ifdef'ed code,
350 simply get the canonicalized name of the current directory. */
351 dir = getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
352#endif
353
354 len = strlen (dir);
fe4e3eb8 355 if (IS_DIR_SEPARATOR (dir[len - 1]))
d318976c
FN
356 {
357 /* Remove the trailing slash unless this is a root directory
358 (including a drive letter on non-Unix systems). */
359 if (!(len == 1) /* "/" */
c3690141 360#ifdef HAVE_DOS_BASED_FILE_SYSTEM
fe4e3eb8 361 && !(len == 3 && dir[1] == ':') /* "d:/" */
d318976c
FN
362#endif
363 )
364 len--;
365 }
366
367 dir = savestring (dir, len);
fe4e3eb8 368 if (IS_ABSOLUTE_PATH (dir))
d318976c
FN
369 current_directory = dir;
370 else
371 {
fe4e3eb8 372 if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]))
d318976c
FN
373 current_directory = concat (current_directory, dir, NULL);
374 else
375 current_directory = concat (current_directory, SLASH_STRING, dir, NULL);
b8c9b27d 376 xfree (dir);
d318976c
FN
377 }
378
379 /* Now simplify any occurrences of `.' and `..' in the pathname. */
380
381 found_real_path = 0;
382 for (p = current_directory; *p;)
383 {
fe4e3eb8
EZ
384 if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.'
385 && (p[2] == 0 || IS_DIR_SEPARATOR (p[2])))
d318976c 386 strcpy (p, p + 2);
fe4e3eb8
EZ
387 else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.'
388 && (p[3] == 0 || IS_DIR_SEPARATOR (p[3])))
d318976c
FN
389 {
390 if (found_real_path)
391 {
392 /* Search backwards for the directory just before the "/.."
393 and obliterate it and the "/..". */
394 char *q = p;
fe4e3eb8 395 while (q != current_directory && !IS_DIR_SEPARATOR (q[-1]))
d318976c
FN
396 --q;
397
398 if (q == current_directory)
399 /* current_directory is
400 a relative pathname ("can't happen"--leave it alone). */
401 ++p;
402 else
403 {
404 strcpy (q - 1, p + 3);
405 p = q - 1;
406 }
407 }
408 else
409 /* We are dealing with leading repetitions of "/..", for example
410 "/../..", which is the Mach super-root. */
411 p += 3;
412 }
413 else
414 {
415 found_real_path = 1;
416 ++p;
417 }
418 }
419
420 forget_cached_source_info ();
421
422 if (from_tty)
423 pwd_command ((char *) 0, 1);
424}
425\f
426void
427source_command (char *args, int from_tty)
428{
429 FILE *stream;
430 struct cleanup *old_cleanups;
431 char *file = args;
432
433 if (file == NULL)
434 {
8a3fe4f8 435 error (_("source command requires pathname of file to source."));
d318976c
FN
436 }
437
438 file = tilde_expand (file);
b8c9b27d 439 old_cleanups = make_cleanup (xfree, file);
d318976c
FN
440
441 stream = fopen (file, FOPEN_RT);
442 if (!stream)
443 {
444 if (from_tty)
445 perror_with_name (file);
446 else
447 return;
448 }
449
450 script_from_file (stream, file);
451
452 do_cleanups (old_cleanups);
453}
454
d318976c
FN
455static void
456echo_command (char *text, int from_tty)
457{
458 char *p = text;
d5b5ac79 459 int c;
d318976c
FN
460
461 if (text)
462 while ((c = *p++) != '\0')
463 {
464 if (c == '\\')
465 {
466 /* \ at end of argument is used after spaces
467 so they won't be lost. */
468 if (*p == 0)
469 return;
470
471 c = parse_escape (&p);
472 if (c >= 0)
473 printf_filtered ("%c", c);
474 }
475 else
476 printf_filtered ("%c", c);
477 }
478
479 /* Force this output to appear now. */
480 wrap_here ("");
481 gdb_flush (gdb_stdout);
482}
483
d318976c
FN
484static void
485shell_escape (char *arg, int from_tty)
486{
9b265ec2
MM
487#if defined(CANT_FORK) || \
488 (!defined(HAVE_WORKING_VFORK) && !defined(HAVE_WORKING_FORK))
d318976c
FN
489 /* If ARG is NULL, they want an inferior shell, but `system' just
490 reports if the shell is available when passed a NULL arg. */
491 int rc = system (arg ? arg : "");
492
493 if (!arg)
494 arg = "inferior shell";
495
496 if (rc == -1)
497 {
498 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
499 safe_strerror (errno));
500 gdb_flush (gdb_stderr);
501 }
502 else if (rc)
503 {
504 fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
505 gdb_flush (gdb_stderr);
506 }
2584159e 507#ifdef GLOBAL_CURDIR
d318976c
FN
508 /* Make sure to return to the directory GDB thinks it is, in case the
509 shell command we just ran changed it. */
510 chdir (current_directory);
511#endif
512#else /* Can fork. */
513 int rc, status, pid;
d318976c 514
325ed089 515 if ((pid = vfork ()) == 0)
d318976c 516 {
30e94205
DJ
517 char *p, *user_shell;
518
519 if ((user_shell = (char *) getenv ("SHELL")) == NULL)
520 user_shell = "/bin/sh";
521
522 /* Get the name of the shell for arg0 */
523 if ((p = strrchr (user_shell, '/')) == NULL)
524 p = user_shell;
525 else
526 p++; /* Get past '/' */
527
d318976c 528 if (!arg)
36662fde 529 execl (user_shell, p, (char *) 0);
d318976c 530 else
36662fde 531 execl (user_shell, p, "-c", arg, (char *) 0);
d318976c
FN
532
533 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
534 safe_strerror (errno));
535 gdb_flush (gdb_stderr);
536 _exit (0177);
537 }
538
539 if (pid != -1)
540 while ((rc = wait (&status)) != pid && rc != -1)
541 ;
542 else
8a3fe4f8 543 error (_("Fork failed"));
d318976c
FN
544#endif /* Can fork. */
545}
546
0378c332
FN
547static void
548edit_command (char *arg, int from_tty)
549{
550 struct symtabs_and_lines sals;
551 struct symtab_and_line sal;
552 struct symbol *sym;
553 char *arg1;
554 int cmdlen, log10;
555 unsigned m;
556 char *editor;
557 char *p;
558
559 /* Pull in the current default source line if necessary */
560 if (arg == 0)
53cb0458
FN
561 {
562 set_default_source_symtab_and_line ();
563 sal = get_current_source_symtab_and_line ();
564 }
0378c332
FN
565
566 /* bare "edit" edits file with present line. */
567
568 if (arg == 0)
569 {
570 if (sal.symtab == 0)
8a3fe4f8 571 error (_("No default source file yet."));
0378c332
FN
572 sal.line += get_lines_to_list () / 2;
573 }
574 else
575 {
576
577 /* Now should only be one argument -- decode it in SAL */
578
579 arg1 = arg;
68219205 580 sals = decode_line_1 (&arg1, 0, 0, 0, 0, 0);
0378c332
FN
581
582 if (! sals.nelts) return; /* C++ */
583 if (sals.nelts > 1) {
584 ambiguous_line_spec (&sals);
585 xfree (sals.sals);
586 return;
587 }
588
589 sal = sals.sals[0];
590 xfree (sals.sals);
591
592 if (*arg1)
8a3fe4f8 593 error (_("Junk at end of line specification."));
0378c332
FN
594
595 /* if line was specified by address,
596 first print exactly which line, and which file.
597 In this case, sal.symtab == 0 means address is outside
598 of all known source files, not that user failed to give a filename. */
599 if (*arg == '*')
600 {
601 if (sal.symtab == 0)
602 /* FIXME-32x64--assumes sal.pc fits in long. */
8a3fe4f8 603 error (_("No source file for address %s."),
bb599908 604 hex_string ((unsigned long) sal.pc));
0378c332
FN
605 sym = find_pc_function (sal.pc);
606 if (sym)
607 {
66bf4b3a 608 deprecated_print_address_numeric (sal.pc, 1, gdb_stdout);
0378c332 609 printf_filtered (" is in ");
de5ad195 610 fputs_filtered (SYMBOL_PRINT_NAME (sym), gdb_stdout);
0378c332
FN
611 printf_filtered (" (%s:%d).\n", sal.symtab->filename, sal.line);
612 }
613 else
614 {
66bf4b3a 615 deprecated_print_address_numeric (sal.pc, 1, gdb_stdout);
0378c332
FN
616 printf_filtered (" is at %s:%d.\n",
617 sal.symtab->filename, sal.line);
618 }
619 }
620
621 /* If what was given does not imply a symtab, it must be an undebuggable
622 symbol which means no source code. */
623
624 if (sal.symtab == 0)
8a3fe4f8 625 error (_("No line number known for %s."), arg);
0378c332
FN
626 }
627
628 if ((editor = (char *) getenv ("EDITOR")) == NULL)
629 editor = "/bin/ex";
630
631 /* Approximate base-10 log of line to 1 unit for digit count */
632 for(log10=32, m=0x80000000; !(sal.line & m) && log10>0; log10--, m=m>>1);
633 log10 = 1 + (int)((log10 + (0 == ((m-1) & sal.line)))/3.32192809);
634
635 cmdlen = strlen(editor) + 1
636 + (NULL == sal.symtab->dirname ? 0 : strlen(sal.symtab->dirname) + 1)
637 + (NULL == sal.symtab->filename? 0 : strlen(sal.symtab->filename)+ 1)
638 + log10 + 2;
639
640 p = xmalloc(cmdlen);
641 sprintf(p,"%s +%d %s%s",editor,sal.line,
642 (NULL == sal.symtab->dirname ? "./" :
643 (NULL != sal.symtab->filename && *(sal.symtab->filename) != '/') ?
644 sal.symtab->dirname : ""),
645 (NULL == sal.symtab->filename ? "unknown" : sal.symtab->filename)
646 );
647 shell_escape(p, from_tty);
648
649 xfree(p);
650}
651
652static void
653list_command (char *arg, int from_tty)
654{
655 struct symtabs_and_lines sals, sals_end;
656 struct symtab_and_line sal, sal_end, cursal;
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;
1102
1103 /* Define the classes of commands.
1104 They will appear in the help list in the reverse of this order. */
1105
1a966eab
AC
1106 add_cmd ("internals", class_maintenance, NULL, _("\
1107Maintenance commands.\n\
d318976c
FN
1108Some gdb commands are provided just for use by gdb maintainers.\n\
1109These commands are subject to frequent change, and may not be as\n\
1a966eab 1110well documented as user commands."),
d318976c 1111 &cmdlist);
1a966eab
AC
1112 add_cmd ("obscure", class_obscure, NULL, _("Obscure features."), &cmdlist);
1113 add_cmd ("aliases", class_alias, NULL, _("Aliases of other commands."), &cmdlist);
1114 add_cmd ("user-defined", class_user, NULL, _("\
1115User-defined commands.\n\
d318976c 1116The commands in this class are those defined by the user.\n\
1a966eab
AC
1117Use the \"define\" command to define a command."), &cmdlist);
1118 add_cmd ("support", class_support, NULL, _("Support facilities."), &cmdlist);
d318976c 1119 if (!dbx_commands)
1a966eab
AC
1120 add_cmd ("status", class_info, NULL, _("Status inquiries."), &cmdlist);
1121 add_cmd ("files", class_files, NULL, _("Specifying and examining files."),
1122 &cmdlist);
1123 add_cmd ("breakpoints", class_breakpoint, NULL,
1124 _("Making program stop at certain points."), &cmdlist);
1125 add_cmd ("data", class_vars, NULL, _("Examining data."), &cmdlist);
1126 add_cmd ("stack", class_stack, NULL, _("\
1127Examining the stack.\n\
d318976c
FN
1128The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
1129counting from zero for the innermost (currently executing) frame.\n\n\
1130At any time gdb identifies one frame as the \"selected\" frame.\n\
1131Variable lookups are done with respect to the selected frame.\n\
1132When the program being debugged stops, gdb selects the innermost frame.\n\
1a966eab 1133The commands below can be used to select other frames by number or address."),
d318976c 1134 &cmdlist);
1a966eab 1135 add_cmd ("running", class_run, NULL, _("Running the program."), &cmdlist);
d318976c
FN
1136
1137 /* Define general commands. */
1138
1bedd215
AC
1139 add_com ("pwd", class_files, pwd_command, _("\
1140Print working directory. This is used for your program as well."));
1a966eab
AC
1141 c = add_cmd ("cd", class_files, cd_command, _("\
1142Set working directory to DIR for debugger and program being debugged.\n\
d318976c 1143The change does not take effect for the program being debugged\n\
1a966eab 1144until the next time it is started."), &cmdlist);
5ba2abeb 1145 set_cmd_completer (c, filename_completer);
d318976c 1146
1bedd215
AC
1147 add_com ("echo", class_support, echo_command, _("\
1148Print a constant string. Give string as argument.\n\
d318976c
FN
1149C escape sequences may be used in the argument.\n\
1150No newline is added at the end of the argument;\n\
1151use \"\\n\" if you want a newline to be printed.\n\
1152Since leading and trailing whitespace are ignored in command arguments,\n\
1153if you want to print some you must use \"\\\" before leading whitespace\n\
1bedd215
AC
1154to be printed or after trailing whitespace."));
1155 add_com ("document", class_support, document_command, _("\
1156Document a user-defined command.\n\
d318976c 1157Give command name as argument. Give documentation on following lines.\n\
1bedd215
AC
1158End with a line of just \"end\"."));
1159 add_com ("define", class_support, define_command, _("\
1160Define a new command name. Command name is argument.\n\
d318976c
FN
1161Definition appears on following lines, one command per line.\n\
1162End with a line of just \"end\".\n\
1163Use the \"document\" command to give documentation for the new command.\n\
1bedd215 1164Commands defined in this way may have up to ten arguments."));
d318976c 1165
1a966eab
AC
1166 c = add_cmd ("source", class_support, source_command, _("\
1167Read commands from a file named FILE.\n\
d318976c 1168Note that the file \"" GDBINIT_FILENAME "\" is read automatically in this way\n\
1a966eab 1169when gdb is started."), &cmdlist);
5ba2abeb 1170 set_cmd_completer (c, filename_completer);
d318976c 1171
1bedd215
AC
1172 add_com ("quit", class_support, quit_command, _("Exit gdb."));
1173 c = add_com ("help", class_support, help_command,
1174 _("Print list of commands."));
5ba2abeb 1175 set_cmd_completer (c, command_completer);
d318976c
FN
1176 add_com_alias ("q", "quit", class_support, 1);
1177 add_com_alias ("h", "help", class_support, 1);
1178
5bf193a2
AC
1179 add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\
1180Set verbosity."), _("\
1181Show verbosity."), NULL,
1182 set_verbose,
920d2a44 1183 show_info_verbose,
5bf193a2 1184 &setlist, &showlist);
d318976c
FN
1185
1186 add_prefix_cmd ("history", class_support, set_history,
1bedd215 1187 _("Generic command for setting command history parameters."),
d318976c
FN
1188 &sethistlist, "set history ", 0, &setlist);
1189 add_prefix_cmd ("history", class_support, show_history,
1bedd215 1190 _("Generic command for showing command history parameters."),
d318976c
FN
1191 &showhistlist, "show history ", 0, &showlist);
1192
5bf193a2
AC
1193 add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\
1194Set history expansion on command input."), _("\
1195Show history expansion on command input."), _("\
1196Without an argument, history expansion is enabled."),
1197 NULL,
920d2a44 1198 show_history_expansion_p,
5bf193a2 1199 &sethistlist, &showhistlist);
d318976c 1200
1bedd215
AC
1201 add_prefix_cmd ("info", class_info, info_command, _("\
1202Generic command for showing things about the program being debugged."),
d318976c
FN
1203 &infolist, "info ", 0, &cmdlist);
1204 add_com_alias ("i", "info", class_info, 1);
1205
1206 add_com ("complete", class_obscure, complete_command,
1bedd215 1207 _("List the completions for the rest of the line as a command."));
d318976c
FN
1208
1209 add_prefix_cmd ("show", class_info, show_command,
1bedd215 1210 _("Generic command for showing things about the debugger."),
d318976c
FN
1211 &showlist, "show ", 0, &cmdlist);
1212 /* Another way to get at the same thing. */
1bedd215 1213 add_info ("set", show_command, _("Show all GDB settings."));
d318976c 1214
1a966eab
AC
1215 add_cmd ("commands", no_class, show_commands, _("\
1216Show the history of commands you typed.\n\
d318976c 1217You can supply a command number to start with, or a `+' to start after\n\
1a966eab 1218the previous command number shown."),
d318976c
FN
1219 &showlist);
1220
1221 add_cmd ("version", no_class, show_version,
1a966eab 1222 _("Show what version of GDB this is."), &showlist);
d318976c 1223
1bedd215
AC
1224 add_com ("while", class_support, while_command, _("\
1225Execute nested commands WHILE the conditional expression is non zero.\n\
d318976c
FN
1226The conditional expression must follow the word `while' and must in turn be\n\
1227followed by a new line. The nested commands must be entered one per line,\n\
1bedd215 1228and should be terminated by the word `end'."));
d318976c 1229
1bedd215
AC
1230 add_com ("if", class_support, if_command, _("\
1231Execute nested commands once IF the conditional expression is non zero.\n\
d318976c
FN
1232The conditional expression must follow the word `if' and must in turn be\n\
1233followed by a new line. The nested commands must be entered one per line,\n\
1234and should be terminated by the word 'else' or `end'. If an else clause\n\
1bedd215 1235is used, the same rules apply to its nested commands as to the first ones."));
d318976c
FN
1236
1237 /* If target is open when baud changes, it doesn't take effect until the
1238 next open (I think, not sure). */
85c07804
AC
1239 add_setshow_zinteger_cmd ("remotebaud", no_class, &baud_rate, _("\
1240Set baud rate for remote serial I/O."), _("\
1241Show baud rate for remote serial I/O."), _("\
d318976c 1242This value is used to set the speed of the serial port when debugging\n\
85c07804
AC
1243using remote targets."),
1244 NULL,
920d2a44 1245 show_baud_rate,
85c07804
AC
1246 &setlist, &showlist);
1247
1248 add_setshow_zinteger_cmd ("remote", no_class, &remote_debug, _("\
1249Set debugging of remote protocol."), _("\
1250Show debugging of remote protocol."), _("\
d318976c 1251When enabled, each packet sent or received with the remote target\n\
85c07804
AC
1252is displayed."),
1253 NULL,
920d2a44 1254 show_remote_debug,
85c07804 1255 &setdebuglist, &showdebuglist);
d318976c 1256
c0d88b1b
AC
1257 add_setshow_integer_cmd ("remotetimeout", no_class, &remote_timeout, _("\
1258Set timeout limit to wait for target to respond."), _("\
1259Show timeout limit to wait for target to respond."), _("\
d318976c 1260This value is used to set the time limit for gdb to wait for a response\n\
c0d88b1b
AC
1261from the target."),
1262 NULL,
920d2a44 1263 show_remote_timeout,
c0d88b1b 1264 &setlist, &showlist);
d318976c
FN
1265
1266 add_prefix_cmd ("debug", no_class, set_debug,
1bedd215 1267 _("Generic command for setting gdb debugging flags"),
d318976c
FN
1268 &setdebuglist, "set debug ", 0, &setlist);
1269
1270 add_prefix_cmd ("debug", no_class, show_debug,
1bedd215 1271 _("Generic command for showing gdb debugging flags"),
d318976c
FN
1272 &showdebuglist, "show debug ", 0, &showlist);
1273
1bedd215
AC
1274 c = add_com ("shell", class_support, shell_escape, _("\
1275Execute the rest of the line as a shell command.\n\
1276With no arguments, run an inferior shell."));
5ba2abeb 1277 set_cmd_completer (c, filename_completer);
d318976c 1278
1bedd215
AC
1279 c = add_com ("edit", class_files, edit_command, _("\
1280Edit specified file or function.\n\
0378c332 1281With no argument, edits file containing most recent line listed.\n\
0378c332
FN
1282Editing targets can be specified in these ways:\n\
1283 FILE:LINENUM, to edit at that line in that file,\n\
1284 FUNCTION, to edit at the beginning of that function,\n\
1285 FILE:FUNCTION, to distinguish among like-named static functions.\n\
1286 *ADDRESS, to edit at the line containing that address.\n\
1bedd215 1287Uses EDITOR environment variable contents as editor (or ex as default)."));
0378c332
FN
1288
1289 c->completer = location_completer;
1290
1bedd215
AC
1291 add_com ("list", class_files, list_command, _("\
1292List specified function or line.\n\
0378c332
FN
1293With no argument, lists ten more lines after or around previous listing.\n\
1294\"list -\" lists the ten lines before a previous ten-line listing.\n\
1295One argument specifies a line, and ten lines are listed around that line.\n\
1296Two arguments with comma between specify starting and ending lines to list.\n\
0378c332
FN
1297Lines can be specified in these ways:\n\
1298 LINENUM, to list around that line in current file,\n\
1299 FILE:LINENUM, to list around that line in that file,\n\
1300 FUNCTION, to list around beginning of that function,\n\
1301 FILE:FUNCTION, to distinguish among like-named static functions.\n\
1302 *ADDRESS, to list around the line containing that address.\n\
1bedd215 1303With two args if one is empty it stands for ten lines away from the other arg."));
0378c332
FN
1304
1305 if (!xdb_commands)
1306 add_com_alias ("l", "list", class_files, 1);
1307 else
1308 add_com_alias ("v", "list", class_files, 1);
1309
1310 if (dbx_commands)
1311 add_com_alias ("file", "list", class_files, 1);
1312
1bedd215
AC
1313 c = add_com ("disassemble", class_vars, disassemble_command, _("\
1314Disassemble a specified section of memory.\n\
83c31e7d
FN
1315Default is the function surrounding the pc of the selected frame.\n\
1316With a single argument, the function surrounding that address is dumped.\n\
1bedd215 1317Two arguments are taken as a range of memory to dump."));
83c31e7d
FN
1318 set_cmd_completer (c, location_completer);
1319 if (xdb_commands)
1320 add_com_alias ("va", "disassemble", class_xdb, 0);
0378c332 1321
d318976c
FN
1322 /* NOTE: cagney/2000-03-20: Being able to enter ``(gdb) !ls'' would
1323 be a really useful feature. Unfortunately, the below wont do
1324 this. Instead it adds support for the form ``(gdb) ! ls''
1325 (i.e. the space is required). If the ``!'' command below is
1326 added the complains about no ``!'' command would be replaced by
1327 complains about how the ``!'' command is broken :-) */
1328 if (xdb_commands)
1329 add_com_alias ("!", "shell", class_support, 0);
1330
1bedd215
AC
1331 c = add_com ("make", class_support, make_command, _("\
1332Run the ``make'' program using the rest of the line as arguments."));
5ba2abeb 1333 set_cmd_completer (c, filename_completer);
1a966eab
AC
1334 add_cmd ("user", no_class, show_user, _("\
1335Show definitions of user defined commands.\n\
d318976c 1336Argument is the name of the user defined command.\n\
1a966eab 1337With no argument, show definitions of all user defined commands."), &showlist);
1bedd215
AC
1338 add_com ("apropos", class_support, apropos_command,
1339 _("Search for commands matching a REGEXP"));
20f01a46 1340
c0d88b1b
AC
1341 add_setshow_integer_cmd ("max-user-call-depth", no_class,
1342 &max_user_call_depth, _("\
1343Set the max call depth for user-defined commands."), _("\
1344Show the max call depth for user-defined commands."), NULL,
1345 NULL,
920d2a44 1346 show_max_user_call_depth,
c0d88b1b 1347 &setlist, &showlist);
d318976c 1348}