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