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