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