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