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