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