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