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