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