Fix crash when exiting TUI with gdb -tui
[deliverable/binutils-gdb.git] / gdb / cli / cli-cmds.c
CommitLineData
d318976c 1/* GDB CLI commands.
8926118c 2
b811d2c2 3 Copyright (C) 2000-2020 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 22#include "readline/tilde.h"
d318976c 23#include "completer.h"
ebcd3b23 24#include "target.h" /* For baud_rate, remote_debug and remote_timeout. */
268a13a5 25#include "gdbsupport/gdb_wait.h" /* For shell escape implementation. */
947d3946 26#include "gdbcmd.h"
ebcd3b23 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"
268a13a5 39#include "gdbsupport/filestuff.h"
f00aae0f 40#include "location.h"
e9480230 41#include "block.h"
d318976c 42
d318976c 43#include "ui-out.h"
947d3946 44#include "interps.h"
d318976c
FN
45
46#include "top.h"
47#include "cli/cli-decode.h"
48#include "cli/cli-script.h"
49#include "cli/cli-setshow.h"
50#include "cli/cli-cmds.h"
14309bb6 51#include "cli/cli-style.h"
529480d0 52#include "cli/cli-utils.h"
d318976c 53
6dddc817 54#include "extension.h"
268a13a5 55#include "gdbsupport/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
cc8dee1f 76/* See cli-cmds.h. */
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;
491144b5 168bool trace_commands = false;
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
4fd6c7e8
TT
194/* This implements the "info" prefix command. Normally such commands
195 are automatically handled by add_basic_prefix_cmd, but in this case
196 a separate command is used so that it can be hooked into by
197 gdb-gdb.gdb. */
198
199static void
200info_command (const char *arg, int from_tty)
201{
202 help_list (infolist, "info ", all_commands, gdb_stdout);
203}
204
fdbc9870
PA
205/* See cli/cli-cmds.h. */
206
207void
208with_command_1 (const char *set_cmd_prefix,
209 cmd_list_element *setlist, const char *args, int from_tty)
210{
26c957f1
PA
211 if (args == nullptr)
212 error (_("Missing arguments."));
213
fdbc9870
PA
214 const char *delim = strstr (args, "--");
215 const char *nested_cmd = nullptr;
216
217 if (delim == args)
218 error (_("Missing setting before '--' delimiter"));
219
220 if (delim == nullptr || *skip_spaces (&delim[2]) == '\0')
221 nested_cmd = repeat_previous ();
222
223 cmd_list_element *set_cmd = lookup_cmd (&args, setlist, set_cmd_prefix,
224 /*allow_unknown=*/ 0,
225 /*ignore_help_classes=*/ 1);
226 gdb_assert (set_cmd != nullptr);
227
228 if (set_cmd->var == nullptr)
229 error (_("Cannot use this setting with the \"with\" command"));
230
231 std::string temp_value
232 = (delim == nullptr ? args : std::string (args, delim - args));
233
234 if (nested_cmd == nullptr)
235 nested_cmd = skip_spaces (delim + 2);
236
237 std::string org_value = get_setshow_command_value_string (set_cmd);
238
239 /* Tweak the setting to the new temporary value. */
240 do_set_command (temp_value.c_str (), from_tty, set_cmd);
241
242 try
243 {
244 scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
245
246 /* Execute the nested command. */
247 execute_command (nested_cmd, from_tty);
248 }
249 catch (const gdb_exception &ex)
250 {
251 /* Restore the setting and rethrow. If restoring the setting
252 throws, swallow the new exception and warn. There's nothing
253 else we can reasonably do. */
254 try
255 {
256 do_set_command (org_value.c_str (), from_tty, set_cmd);
257 }
258 catch (const gdb_exception &ex2)
259 {
260 warning (_("Couldn't restore setting: %s"), ex2.what ());
261 }
262
263 throw;
264 }
265
266 /* Restore the setting. */
267 do_set_command (org_value.c_str (), from_tty, set_cmd);
268}
269
270/* See cli/cli-cmds.h. */
271
272void
273with_command_completer_1 (const char *set_cmd_prefix,
274 completion_tracker &tracker,
275 const char *text)
276{
277 tracker.set_use_custom_word_point (true);
278
279 const char *delim = strstr (text, "--");
280
281 /* If we're still not past the "--" delimiter, complete the "with"
282 command as if it was a "set" command. */
283 if (delim == text
284 || delim == nullptr
285 || !isspace (delim[-1])
286 || !(isspace (delim[2]) || delim[2] == '\0'))
287 {
288 std::string new_text = std::string (set_cmd_prefix) + text;
289 tracker.advance_custom_word_point_by (-(int) strlen (set_cmd_prefix));
290 complete_nested_command_line (tracker, new_text.c_str ());
291 return;
292 }
293
294 /* We're past the "--" delimiter. Complete on the sub command. */
295 const char *nested_cmd = skip_spaces (delim + 2);
296 tracker.advance_custom_word_point_by (nested_cmd - text);
297 complete_nested_command_line (tracker, nested_cmd);
298}
299
300/* The "with" command. */
301
302static void
303with_command (const char *args, int from_tty)
304{
305 with_command_1 ("set ", setlist, args, from_tty);
306}
307
308/* "with" command completer. */
309
310static void
311with_command_completer (struct cmd_list_element *ignore,
312 completion_tracker &tracker,
313 const char *text, const char * /*word*/)
314{
315 with_command_completer_1 ("set ", tracker, text);
316}
317
d318976c
FN
318\f
319/* Provide documentation on command or list given by COMMAND. FROM_TTY
320 is ignored. */
321
d318976c 322static void
0b39b52e 323help_command (const char *command, int from_tty)
d318976c
FN
324{
325 help_cmd (command, gdb_stdout);
326}
327\f
eb3ff9a5 328
ef0b411a
GB
329/* Note: The "complete" command is used by Emacs to implement completion.
330 [Is that why this function writes output with *_unfiltered?] */
d318976c 331
d318976c 332static void
0b39b52e 333complete_command (const char *arg, int from_tty)
d318976c 334{
d318976c
FN
335 dont_repeat ();
336
ef0b411a
GB
337 if (max_completions == 0)
338 {
339 /* Only print this for non-mi frontends. An MI frontend may not
340 be able to handle this. */
112e8700 341 if (!current_uiout->is_mi_like_p ())
ef0b411a
GB
342 {
343 printf_unfiltered (_("max-completions is zero,"
344 " completion is disabled.\n"));
345 }
346 return;
347 }
348
d318976c
FN
349 if (arg == NULL)
350 arg = "";
d9b52655 351
6a2c1b87
PA
352 int quote_char = '\0';
353 const char *word;
354
6e035501 355 completion_result result = complete (arg, &word, &quote_char);
eb3ff9a5 356
eb3ff9a5
PA
357 if (result.number_matches != 0)
358 {
fb7806c7
TV
359 std::string arg_prefix (arg, word - arg);
360
eb3ff9a5
PA
361 if (result.number_matches == 1)
362 printf_unfiltered ("%s%s\n", arg_prefix.c_str (), result.match_list[0]);
363 else
83d31a92 364 {
eb3ff9a5
PA
365 result.sort_match_list ();
366
367 for (size_t i = 0; i < result.number_matches; i++)
83d31a92 368 {
eb3ff9a5
PA
369 printf_unfiltered ("%s%s",
370 arg_prefix.c_str (),
371 result.match_list[i + 1]);
6a2c1b87
PA
372 if (quote_char)
373 printf_unfiltered ("%c", quote_char);
eb3ff9a5 374 printf_unfiltered ("\n");
83d31a92 375 }
83d31a92
TT
376 }
377
eb3ff9a5 378 if (result.number_matches == max_completions)
ef0b411a 379 {
6a2c1b87 380 /* ARG_PREFIX and WORD are included in the output so that emacs
ef0b411a
GB
381 will include the message in the output. */
382 printf_unfiltered (_("%s%s %s\n"),
6a2c1b87 383 arg_prefix.c_str (), word,
ef0b411a
GB
384 get_max_completions_reached_message ());
385 }
d318976c
FN
386 }
387}
388
bbaca940
AC
389int
390is_complete_command (struct cmd_list_element *c)
d318976c 391{
bbaca940 392 return cmd_cfunc_eq (c, complete_command);
d318976c
FN
393}
394
d318976c 395static void
dede02ce 396show_version (const char *args, int from_tty)
d318976c 397{
c61b06a1 398 print_gdb_version (gdb_stdout, true);
d318976c 399 printf_filtered ("\n");
d318976c
FN
400}
401
6eaaf48b 402static void
dede02ce 403show_configuration (const char *args, int from_tty)
6eaaf48b
EZ
404{
405 print_gdb_configuration (gdb_stdout);
406}
407
d318976c
FN
408/* Handle the quit command. */
409
410void
0b39b52e 411quit_command (const char *args, int from_tty)
d318976c 412{
36cf1806
TT
413 int exit_code = 0;
414
415 /* An optional expression may be used to cause gdb to terminate with
416 the value of that expression. */
417 if (args)
418 {
419 struct value *val = parse_and_eval (args);
420
421 exit_code = (int) value_as_long (val);
422 }
423
d318976c 424 if (!quit_confirm ())
8a3fe4f8 425 error (_("Not confirmed."));
d5551862 426
2f9d54cf 427 query_if_trace_running (from_tty);
d5551862 428
36cf1806 429 quit_force (args ? &exit_code : NULL, from_tty);
d318976c
FN
430}
431
d318976c 432static void
0b39b52e 433pwd_command (const char *args, int from_tty)
d318976c
FN
434{
435 if (args)
8a3fe4f8 436 error (_("The \"pwd\" command does not take an argument: %s"), args);
43573013
SDJ
437
438 gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
439
440 if (cwd == NULL)
bf1d7d9c
JB
441 error (_("Error finding name of working directory: %s"),
442 safe_strerror (errno));
d318976c 443
43573013 444 if (strcmp (cwd.get (), current_directory) != 0)
14309bb6
TT
445 printf_unfiltered (_("Working directory %ps\n (canonically %ps).\n"),
446 styled_string (file_name_style.style (),
447 current_directory),
448 styled_string (file_name_style.style (), cwd.get ()));
d318976c 449 else
14309bb6
TT
450 printf_unfiltered (_("Working directory %ps.\n"),
451 styled_string (file_name_style.style (),
452 current_directory));
d318976c
FN
453}
454
455void
5e93d4c6 456cd_command (const char *dir, int from_tty)
d318976c
FN
457{
458 int len;
459 /* Found something other than leading repetitions of "/..". */
460 int found_real_path;
461 char *p;
462
463 /* If the new directory is absolute, repeat is a no-op; if relative,
464 repeat might be useful but is more likely to be a mistake. */
465 dont_repeat ();
466
6eecf35f
TT
467 gdb::unique_xmalloc_ptr<char> dir_holder
468 (tilde_expand (dir != NULL ? dir : "~"));
469 dir = dir_holder.get ();
d318976c
FN
470
471 if (chdir (dir) < 0)
472 perror_with_name (dir);
473
c3690141 474#ifdef HAVE_DOS_BASED_FILE_SYSTEM
d318976c
FN
475 /* There's too much mess with DOSish names like "d:", "d:.",
476 "d:./foo" etc. Instead of having lots of special #ifdef'ed code,
477 simply get the canonicalized name of the current directory. */
43573013
SDJ
478 gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
479 dir = cwd.get ();
d318976c
FN
480#endif
481
482 len = strlen (dir);
fe4e3eb8 483 if (IS_DIR_SEPARATOR (dir[len - 1]))
d318976c
FN
484 {
485 /* Remove the trailing slash unless this is a root directory
486 (including a drive letter on non-Unix systems). */
487 if (!(len == 1) /* "/" */
c3690141 488#ifdef HAVE_DOS_BASED_FILE_SYSTEM
fe4e3eb8 489 && !(len == 3 && dir[1] == ':') /* "d:/" */
d318976c
FN
490#endif
491 )
492 len--;
493 }
494
6eecf35f
TT
495 dir_holder.reset (savestring (dir, len));
496 if (IS_ABSOLUTE_PATH (dir_holder.get ()))
43573013
SDJ
497 {
498 xfree (current_directory);
499 current_directory = dir_holder.release ();
500 }
d318976c
FN
501 else
502 {
fe4e3eb8 503 if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]))
6eecf35f
TT
504 current_directory = concat (current_directory, dir_holder.get (),
505 (char *) NULL);
d318976c 506 else
1754f103 507 current_directory = concat (current_directory, SLASH_STRING,
6eecf35f 508 dir_holder.get (), (char *) NULL);
d318976c
FN
509 }
510
511 /* Now simplify any occurrences of `.' and `..' in the pathname. */
512
513 found_real_path = 0;
514 for (p = current_directory; *p;)
515 {
fe4e3eb8
EZ
516 if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.'
517 && (p[2] == 0 || IS_DIR_SEPARATOR (p[2])))
b2a3b509 518 memmove (p, p + 2, strlen (p + 2) + 1);
fe4e3eb8
EZ
519 else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.'
520 && (p[3] == 0 || IS_DIR_SEPARATOR (p[3])))
d318976c
FN
521 {
522 if (found_real_path)
523 {
524 /* Search backwards for the directory just before the "/.."
525 and obliterate it and the "/..". */
526 char *q = p;
cdb27c12 527
fe4e3eb8 528 while (q != current_directory && !IS_DIR_SEPARATOR (q[-1]))
d318976c
FN
529 --q;
530
531 if (q == current_directory)
532 /* current_directory is
533 a relative pathname ("can't happen"--leave it alone). */
534 ++p;
535 else
536 {
b2a3b509 537 memmove (q - 1, p + 3, strlen (p + 3) + 1);
d318976c
FN
538 p = q - 1;
539 }
540 }
541 else
ebcd3b23
MS
542 /* We are dealing with leading repetitions of "/..", for
543 example "/../..", which is the Mach super-root. */
d318976c
FN
544 p += 3;
545 }
546 else
547 {
548 found_real_path = 1;
549 ++p;
550 }
551 }
552
553 forget_cached_source_info ();
554
555 if (from_tty)
556 pwd_command ((char *) 0, 1);
557}
558\f
973817a3
JB
559/* Show the current value of the 'script-extension' option. */
560
561static void
562show_script_ext_mode (struct ui_file *file, int from_tty,
563 struct cmd_list_element *c, const char *value)
d318976c 564{
9a2b4c1b
MS
565 fprintf_filtered (file,
566 _("Script filename extension recognition is \"%s\".\n"),
973817a3
JB
567 value);
568}
569
3f7b2faa
DE
570/* Try to open SCRIPT_FILE.
571 If successful, the full path name is stored in *FULL_PATHP,
ed166945
TT
572 and the stream is returned.
573 If not successful, return NULL; errno is set for the last file
3f7b2faa
DE
574 we tried to open.
575
576 If SEARCH_PATH is non-zero, and the file isn't found in cwd,
f5b95b50 577 search for it in the source search path. */
3f7b2faa 578
ed166945
TT
579gdb::optional<open_script>
580find_and_open_script (const char *script_file, int search_path)
973817a3 581{
4b505b12 582 int fd;
24b9144d 583 openp_flags search_flags = OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH;
ed166945 584 gdb::optional<open_script> opened;
d318976c 585
ee0c3293 586 gdb::unique_xmalloc_ptr<char> file (tilde_expand (script_file));
d318976c 587
3f7b2faa
DE
588 if (search_path)
589 search_flags |= OPF_SEARCH_IN_PATH;
4b505b12 590
3f7b2faa
DE
591 /* Search for and open 'file' on the search path used for source
592 files. Put the full location in *FULL_PATHP. */
e0cc99a6 593 gdb::unique_xmalloc_ptr<char> full_path;
3f7b2faa 594 fd = openp (source_path, search_flags,
e0cc99a6 595 file.get (), O_RDONLY, &full_path);
4b505b12
AS
596
597 if (fd == -1)
ee0c3293 598 return opened;
973817a3 599
ed166945
TT
600 FILE *result = fdopen (fd, FOPEN_RT);
601 if (result == NULL)
77a35dd8
JK
602 {
603 int save_errno = errno;
604
605 close (fd);
77a35dd8 606 errno = save_errno;
77a35dd8 607 }
ed166945
TT
608 else
609 opened.emplace (gdb_file_up (result), std::move (full_path));
77a35dd8 610
ed166945 611 return opened;
973817a3
JB
612}
613
1a70ae97
DE
614/* Load script FILE, which has already been opened as STREAM.
615 FILE_TO_OPEN is the form of FILE to use if one needs to open the file.
616 This is provided as FILE may have been found via the source search path.
617 An important thing to note here is that FILE may be a symlink to a file
618 with a different or non-existing suffix, and thus one cannot infer the
619 extension language from FILE_TO_OPEN. */
973817a3 620
3f7b2faa 621static void
1a70ae97
DE
622source_script_from_stream (FILE *stream, const char *file,
623 const char *file_to_open)
3f7b2faa 624{
6dddc817 625 if (script_ext_mode != script_ext_off)
973817a3 626 {
6dddc817
DE
627 const struct extension_language_defn *extlang
628 = get_ext_lang_of_file (file);
629
630 if (extlang != NULL)
973817a3 631 {
6dddc817
DE
632 if (ext_lang_present_p (extlang))
633 {
634 script_sourcer_func *sourcer
635 = ext_lang_script_sourcer (extlang);
636
637 gdb_assert (sourcer != NULL);
1a70ae97 638 sourcer (extlang, stream, file_to_open);
6dddc817
DE
639 return;
640 }
641 else if (script_ext_mode == script_ext_soft)
642 {
643 /* Assume the file is a gdb script.
644 This is handled below. */
645 }
646 else
647 throw_ext_lang_unsupported (extlang);
973817a3
JB
648 }
649 }
6dddc817
DE
650
651 script_from_file (stream, file);
3f7b2faa 652}
d318976c 653
3f7b2faa
DE
654/* Worker to perform the "source" command.
655 Load script FILE.
656 If SEARCH_PATH is non-zero, and the file isn't found in cwd,
657 search for it in the source search path. */
658
659static void
660source_script_with_search (const char *file, int from_tty, int search_path)
661{
3f7b2faa
DE
662
663 if (file == NULL || *file == 0)
664 error (_("source command requires file name of file to source."));
665
ed166945
TT
666 gdb::optional<open_script> opened = find_and_open_script (file, search_path);
667 if (!opened)
3f7b2faa 668 {
d234ef5c 669 /* The script wasn't found, or was otherwise inaccessible.
ebcd3b23
MS
670 If the source command was invoked interactively, throw an
671 error. Otherwise (e.g. if it was invoked by a script),
7c647d61 672 just emit a warning, rather than cause an error. */
3f7b2faa
DE
673 if (from_tty)
674 perror_with_name (file);
675 else
7c647d61
JB
676 {
677 perror_warning_with_name (file);
678 return;
679 }
3f7b2faa
DE
680 }
681
d234ef5c
DE
682 /* The python support reopens the file, so we need to pass full_path here
683 in case the file was found on the search path. It's useful to do this
684 anyway so that error messages show the actual file used. But only do
685 this if we (may have) used search_path, as printing the full path in
686 errors for the non-search case can be more noise than signal. */
ed166945
TT
687 source_script_from_stream (opened->stream.get (), file,
688 search_path ? opened->full_path.get () : file);
d318976c
FN
689}
690
3f7b2faa
DE
691/* Wrapper around source_script_with_search to export it to main.c
692 for use in loading .gdbinit scripts. */
693
694void
50dd9793 695source_script (const char *file, int from_tty)
3f7b2faa
DE
696{
697 source_script_with_search (file, from_tty, 0);
698}
699
16026cd7 700static void
dede02ce 701source_command (const char *args, int from_tty)
16026cd7 702{
dede02ce 703 const char *file = args;
3f7b2faa 704 int search_path = 0;
16026cd7 705
2ec845e7 706 scoped_restore save_source_verbose = make_scoped_restore (&source_verbose);
16026cd7
AS
707
708 /* -v causes the source command to run in verbose mode.
3f7b2faa
DE
709 -s causes the file to be searched in the source search path,
710 even if the file name contains a '/'.
16026cd7
AS
711 We still have to be able to handle filenames with spaces in a
712 backward compatible way, so buildargv is not appropriate. */
713
714 if (args)
715 {
3f7b2faa 716 while (args[0] != '\0')
16026cd7 717 {
ebcd3b23
MS
718 /* Make sure leading white space does not break the
719 comparisons. */
529480d0 720 args = skip_spaces (args);
3f7b2faa
DE
721
722 if (args[0] != '-')
723 break;
724
725 if (args[1] == 'v' && isspace (args[2]))
726 {
727 source_verbose = 1;
728
729 /* Skip passed -v. */
730 args = &args[3];
731 }
732 else if (args[1] == 's' && isspace (args[2]))
733 {
734 search_path = 1;
16026cd7 735
3f7b2faa
DE
736 /* Skip passed -s. */
737 args = &args[3];
738 }
739 else
740 break;
16026cd7 741 }
3f7b2faa 742
529480d0 743 file = skip_spaces (args);
16026cd7
AS
744 }
745
3f7b2faa 746 source_script_with_search (file, from_tty, search_path);
16026cd7
AS
747}
748
749
d318976c 750static void
0b39b52e 751echo_command (const char *text, int from_tty)
d318976c 752{
d7561cbb 753 const char *p = text;
d5b5ac79 754 int c;
d318976c
FN
755
756 if (text)
757 while ((c = *p++) != '\0')
758 {
759 if (c == '\\')
760 {
761 /* \ at end of argument is used after spaces
762 so they won't be lost. */
763 if (*p == 0)
764 return;
765
f870a310 766 c = parse_escape (get_current_arch (), &p);
d318976c
FN
767 if (c >= 0)
768 printf_filtered ("%c", c);
769 }
770 else
771 printf_filtered ("%c", c);
772 }
773
ef1dfa36
TT
774 reset_terminal_style (gdb_stdout);
775
d318976c
FN
776 /* Force this output to appear now. */
777 wrap_here ("");
778 gdb_flush (gdb_stdout);
779}
780
947d3946
PW
781/* Sets the last launched shell command convenience variables based on
782 EXIT_STATUS. */
783
784static void
785exit_status_set_internal_vars (int exit_status)
786{
787 struct internalvar *var_code = lookup_internalvar ("_shell_exitcode");
788 struct internalvar *var_signal = lookup_internalvar ("_shell_exitsignal");
789
790 clear_internalvar (var_code);
791 clear_internalvar (var_signal);
792 if (WIFEXITED (exit_status))
793 set_internalvar_integer (var_code, WEXITSTATUS (exit_status));
559e7e50
EZ
794#ifdef __MINGW32__
795 else if (WIFSIGNALED (exit_status) && WTERMSIG (exit_status) == -1)
796 {
797 /* The -1 condition can happen on MinGW, if we don't recognize
798 the fatal exception code encoded in the exit status; see
799 gdbsupport/gdb_wait.c. We don't want to lose information in
800 the exit status in that case. Record it as a normal exit
801 with the full exit status, including the higher 0xC0000000
802 bits. */
803 set_internalvar_integer (var_code, exit_status);
804 }
805#endif
947d3946
PW
806 else if (WIFSIGNALED (exit_status))
807 set_internalvar_integer (var_signal, WTERMSIG (exit_status));
808 else
422186a9 809 warning (_("unexpected shell command exit status %d"), exit_status);
947d3946
PW
810}
811
d318976c 812static void
be47f9e8 813shell_escape (const char *arg, int from_tty)
d318976c 814{
9b265ec2
MM
815#if defined(CANT_FORK) || \
816 (!defined(HAVE_WORKING_VFORK) && !defined(HAVE_WORKING_FORK))
d318976c
FN
817 /* If ARG is NULL, they want an inferior shell, but `system' just
818 reports if the shell is available when passed a NULL arg. */
819 int rc = system (arg ? arg : "");
820
821 if (!arg)
822 arg = "inferior shell";
823
824 if (rc == -1)
c119e040
TT
825 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
826 safe_strerror (errno));
d318976c 827 else if (rc)
c119e040 828 fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
2584159e 829#ifdef GLOBAL_CURDIR
ebcd3b23
MS
830 /* Make sure to return to the directory GDB thinks it is, in case
831 the shell command we just ran changed it. */
d318976c
FN
832 chdir (current_directory);
833#endif
c17ace43 834 exit_status_set_internal_vars (rc);
d318976c 835#else /* Can fork. */
5be4dfca 836 int status, pid;
d318976c 837
325ed089 838 if ((pid = vfork ()) == 0)
d318976c 839 {
974e6844 840 const char *p, *user_shell = get_shell ();
30e94205 841
614c279d
TT
842 close_most_fds ();
843
ebcd3b23 844 /* Get the name of the shell for arg0. */
9f37bbcc 845 p = lbasename (user_shell);
30e94205 846
d318976c 847 if (!arg)
36662fde 848 execl (user_shell, p, (char *) 0);
d318976c 849 else
36662fde 850 execl (user_shell, p, "-c", arg, (char *) 0);
d318976c
FN
851
852 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
853 safe_strerror (errno));
d318976c
FN
854 _exit (0177);
855 }
856
857 if (pid != -1)
5be4dfca 858 waitpid (pid, &status, 0);
d318976c 859 else
8a3fe4f8 860 error (_("Fork failed"));
947d3946 861 exit_status_set_internal_vars (status);
d318976c
FN
862#endif /* Can fork. */
863}
864
be47f9e8
PA
865/* Implementation of the "shell" command. */
866
867static void
0b39b52e 868shell_command (const char *arg, int from_tty)
be47f9e8
PA
869{
870 shell_escape (arg, from_tty);
871}
872
0378c332 873static void
0b39b52e 874edit_command (const char *arg, int from_tty)
0378c332 875{
0378c332
FN
876 struct symtab_and_line sal;
877 struct symbol *sym;
a121b7c1 878 const char *editor;
0b0865da
TT
879 char *p;
880 const char *fn;
0378c332 881
d5529a84 882 /* Pull in the current default source line if necessary. */
0378c332 883 if (arg == 0)
53cb0458
FN
884 {
885 set_default_source_symtab_and_line ();
886 sal = get_current_source_symtab_and_line ();
887 }
0378c332 888
ebcd3b23 889 /* Bare "edit" edits file with present line. */
0378c332
FN
890
891 if (arg == 0)
892 {
893 if (sal.symtab == 0)
8a3fe4f8 894 error (_("No default source file yet."));
0378c332
FN
895 sal.line += get_lines_to_list () / 2;
896 }
897 else
898 {
f2fc3015 899 const char *arg1;
0378c332 900
f00aae0f 901 /* Now should only be one argument -- decode it in SAL. */
0378c332 902 arg1 = arg;
ffc2605c
TT
903 event_location_up location = string_to_event_location (&arg1,
904 current_language);
6c5b2ebe
PA
905 std::vector<symtab_and_line> sals = decode_line_1 (location.get (),
906 DECODE_LINE_LIST_MODE,
907 NULL, NULL, 0);
0378c332 908
6c5b2ebe
PA
909 filter_sals (sals);
910 if (sals.empty ())
d5529a84
TT
911 {
912 /* C++ */
913 return;
914 }
6c5b2ebe 915 if (sals.size () > 1)
d5529a84 916 {
6c5b2ebe 917 ambiguous_line_spec (sals,
e439fa14 918 _("Specified line is ambiguous:\n"));
d5529a84
TT
919 return;
920 }
0378c332 921
6c5b2ebe 922 sal = sals[0];
0378c332
FN
923
924 if (*arg1)
8a3fe4f8 925 error (_("Junk at end of line specification."));
0378c332 926
ebcd3b23
MS
927 /* If line was specified by address, first print exactly which
928 line, and which file. In this case, sal.symtab == 0 means
929 address is outside of all known source files, not that user
930 failed to give a filename. */
0378c332
FN
931 if (*arg == '*')
932 {
5af949e3 933 struct gdbarch *gdbarch;
cdb27c12 934
0378c332 935 if (sal.symtab == 0)
8a3fe4f8 936 error (_("No source file for address %s."),
2b69941d 937 paddress (get_current_arch (), sal.pc));
5af949e3 938
08feed99 939 gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch ();
0378c332
FN
940 sym = find_pc_function (sal.pc);
941 if (sym)
5af949e3
UW
942 printf_filtered ("%s is in %s (%s:%d).\n",
943 paddress (gdbarch, sal.pc),
987012b8 944 sym->print_name (),
05cba821
JK
945 symtab_to_filename_for_display (sal.symtab),
946 sal.line);
0378c332 947 else
5af949e3
UW
948 printf_filtered ("%s is at %s:%d.\n",
949 paddress (gdbarch, sal.pc),
05cba821
JK
950 symtab_to_filename_for_display (sal.symtab),
951 sal.line);
0378c332
FN
952 }
953
ebcd3b23
MS
954 /* If what was given does not imply a symtab, it must be an
955 undebuggable symbol which means no source code. */
0378c332
FN
956
957 if (sal.symtab == 0)
8a3fe4f8 958 error (_("No line number known for %s."), arg);
0378c332
FN
959 }
960
081bca4d
TT
961 if ((editor = getenv ("EDITOR")) == NULL)
962 editor = "/bin/ex";
a955ca71 963
f35a17b5 964 fn = symtab_to_fullname (sal.symtab);
0378c332 965
a955ca71
EZ
966 /* Quote the file name, in case it has whitespace or other special
967 characters. */
968 p = xstrprintf ("%s +%d \"%s\"", editor, sal.line, fn);
d5529a84
TT
969 shell_escape (p, from_tty);
970 xfree (p);
0378c332
FN
971}
972
5f4ba3e7
PA
973/* The options for the "pipe" command. */
974
975struct pipe_cmd_opts
976{
977 /* For "-d". */
978 char *delimiter = nullptr;
979
980 ~pipe_cmd_opts ()
981 {
982 xfree (delimiter);
983 }
984};
985
986static const gdb::option::option_def pipe_cmd_option_defs[] = {
987
988 gdb::option::string_option_def<pipe_cmd_opts> {
989 "d",
990 [] (pipe_cmd_opts *opts) { return &opts->delimiter; },
991 nullptr,
992 N_("Indicates to use the specified delimiter string to separate\n\
993COMMAND from SHELL_COMMAND, in alternative to |. This is useful in\n\
994case COMMAND contains a | character."),
995 },
996
997};
998
999/* Create an option_def_group for the "pipe" command's options, with
1000 OPTS as context. */
1001
1002static inline gdb::option::option_def_group
1003make_pipe_cmd_options_def_group (pipe_cmd_opts *opts)
1004{
1005 return {{pipe_cmd_option_defs}, opts};
1006}
1007
947d3946
PW
1008/* Implementation of the "pipe" command. */
1009
1010static void
1011pipe_command (const char *arg, int from_tty)
1012{
5f4ba3e7 1013 pipe_cmd_opts opts;
947d3946 1014
5f4ba3e7
PA
1015 auto grp = make_pipe_cmd_options_def_group (&opts);
1016 gdb::option::process_options
1017 (&arg, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
1018
1019 const char *delim = "|";
1020 if (opts.delimiter != nullptr)
1021 delim = opts.delimiter;
947d3946
PW
1022
1023 const char *command = arg;
1024 if (command == nullptr)
1025 error (_("Missing COMMAND"));
1026
5f4ba3e7 1027 arg = strstr (arg, delim);
947d3946
PW
1028
1029 if (arg == nullptr)
1030 error (_("Missing delimiter before SHELL_COMMAND"));
1031
1032 std::string gdb_cmd (command, arg - command);
1033
5f4ba3e7 1034 arg += strlen (delim); /* Skip the delimiter. */
947d3946
PW
1035
1036 if (gdb_cmd.empty ())
fdbc9870 1037 gdb_cmd = repeat_previous ();
947d3946
PW
1038
1039 const char *shell_command = skip_spaces (arg);
1040 if (*shell_command == '\0')
1041 error (_("Missing SHELL_COMMAND"));
1042
1043 FILE *to_shell_command = popen (shell_command, "w");
1044
1045 if (to_shell_command == nullptr)
1046 error (_("Error launching \"%s\""), shell_command);
1047
1048 try
1049 {
1050 stdio_file pipe_file (to_shell_command);
1051
1052 execute_command_to_ui_file (&pipe_file, gdb_cmd.c_str (), from_tty);
1053 }
1054 catch (...)
1055 {
1056 pclose (to_shell_command);
1057 throw;
1058 }
1059
1060 int exit_status = pclose (to_shell_command);
1061
1062 if (exit_status < 0)
1063 error (_("shell command \"%s\" failed: %s"), shell_command,
1064 safe_strerror (errno));
1065 exit_status_set_internal_vars (exit_status);
1066}
1067
5f4ba3e7
PA
1068/* Completer for the pipe command. */
1069
1070static void
1071pipe_command_completer (struct cmd_list_element *ignore,
1072 completion_tracker &tracker,
1073 const char *text, const char *word_ignored)
1074{
1075 pipe_cmd_opts opts;
1076
1077 const char *org_text = text;
1078 auto grp = make_pipe_cmd_options_def_group (&opts);
1079 if (gdb::option::complete_options
1080 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp))
1081 return;
1082
1083 const char *delimiter = "|";
1084 if (opts.delimiter != nullptr)
1085 delimiter = opts.delimiter;
1086
1087 /* Check if we're past option values already. */
1088 if (text > org_text && !isspace (text[-1]))
1089 return;
1090
1091 const char *delim = strstr (text, delimiter);
1092
1093 /* If we're still not past the delimiter, complete the gdb
1094 command. */
1095 if (delim == nullptr || delim == text)
1096 {
1097 complete_nested_command_line (tracker, text);
1098 return;
1099 }
1100
1101 /* We're past the delimiter. What follows is a shell command, which
1102 we don't know how to complete. */
1103}
1104
0378c332 1105static void
0b39b52e 1106list_command (const char *arg, int from_tty)
0378c332 1107{
0378c332 1108 struct symbol *sym;
f2fc3015 1109 const char *arg1;
0378c332
FN
1110 int no_end = 1;
1111 int dummy_end = 0;
1112 int dummy_beg = 0;
1113 int linenum_beg = 0;
0b39b52e 1114 const char *p;
0378c332 1115
ebcd3b23 1116 /* Pull in the current default source line if necessary. */
a0def019 1117 if (arg == NULL || ((arg[0] == '+' || arg[0] == '-') && arg[1] == '\0'))
53cb0458
FN
1118 {
1119 set_default_source_symtab_and_line ();
51abb421 1120 symtab_and_line cursal = get_current_source_symtab_and_line ();
5166082f
PA
1121
1122 /* If this is the first "list" since we've set the current
1123 source line, center the listing around that line. */
1124 if (get_first_line_listed () == 0)
1125 {
1126 int first;
1127
325fac50 1128 first = std::max (cursal.line - get_lines_to_list () / 2, 1);
5166082f
PA
1129
1130 /* A small special case --- if listing backwards, and we
1131 should list only one line, list the preceding line,
1132 instead of the exact line we've just shown after e.g.,
1133 stopping for a breakpoint. */
1134 if (arg != NULL && arg[0] == '-'
1135 && get_lines_to_list () == 1 && first > 1)
1136 first -= 1;
1137
0e2a2133 1138 print_source_lines (cursal.symtab, source_lines_range (first), 0);
5166082f 1139 }
0378c332 1140
1a48ce76 1141 /* "l" or "l +" lists next ten lines. */
a0def019 1142 else if (arg == NULL || arg[0] == '+')
0e2a2133
AB
1143 print_source_lines (cursal.symtab,
1144 source_lines_range (cursal.line), 0);
0378c332 1145
1a48ce76
AB
1146 /* "l -" lists previous ten lines, the ones before the ten just
1147 listed. */
a0def019 1148 else if (arg[0] == '-')
3b2464a8
AB
1149 {
1150 if (get_first_line_listed () == 1)
1151 error (_("Already at the start of %s."),
1152 symtab_to_filename_for_display (cursal.symtab));
0e2a2133
AB
1153 source_lines_range range (get_first_line_listed (),
1154 source_lines_range::BACKWARD);
1155 print_source_lines (cursal.symtab, range, 0);
3b2464a8 1156 }
0378c332 1157
0378c332
FN
1158 return;
1159 }
1160
1161 /* Now if there is only one argument, decode it in SAL
1162 and set NO_END.
1163 If there are two arguments, decode them in SAL and SAL_END
1164 and clear NO_END; however, if one of the arguments is blank,
1165 set DUMMY_BEG or DUMMY_END to record that fact. */
1166
1167 if (!have_full_symbols () && !have_partial_symbols ())
8a3fe4f8 1168 error (_("No symbol table is loaded. Use the \"file\" command."));
0378c332 1169
6c5b2ebe 1170 std::vector<symtab_and_line> sals;
51abb421 1171 symtab_and_line sal, sal_end;
6c5b2ebe 1172
0378c332
FN
1173 arg1 = arg;
1174 if (*arg1 == ',')
1175 dummy_beg = 1;
1176 else
1177 {
ffc2605c
TT
1178 event_location_up location = string_to_event_location (&arg1,
1179 current_language);
1180 sals = decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
1181 NULL, NULL, 0);
6c5b2ebe
PA
1182 filter_sals (sals);
1183 if (sals.empty ())
f00aae0f
KS
1184 {
1185 /* C++ */
f00aae0f
KS
1186 return;
1187 }
0378c332 1188
6c5b2ebe 1189 sal = sals[0];
0378c332
FN
1190 }
1191
1192 /* Record whether the BEG arg is all digits. */
1193
1194 for (p = arg; p != arg1 && *p >= '0' && *p <= '9'; p++);
1195 linenum_beg = (p == arg1);
1196
e439fa14
PA
1197 /* Save the range of the first argument, in case we need to let the
1198 user know it was ambiguous. */
1199 const char *beg = arg;
1200 size_t beg_len = arg1 - beg;
1201
0378c332
FN
1202 while (*arg1 == ' ' || *arg1 == '\t')
1203 arg1++;
1204 if (*arg1 == ',')
1205 {
1206 no_end = 0;
6c5b2ebe 1207 if (sals.size () > 1)
0d999a6e 1208 {
6c5b2ebe 1209 ambiguous_line_spec (sals,
e439fa14
PA
1210 _("Specified first line '%.*s' is ambiguous:\n"),
1211 (int) beg_len, beg);
0d999a6e
ZZ
1212 return;
1213 }
0378c332
FN
1214 arg1++;
1215 while (*arg1 == ' ' || *arg1 == '\t')
1216 arg1++;
1217 if (*arg1 == 0)
1218 dummy_end = 1;
1219 else
1220 {
e439fa14
PA
1221 /* Save the last argument, in case we need to let the user
1222 know it was ambiguous. */
1223 const char *end_arg = arg1;
1224
ffc2605c
TT
1225 event_location_up location
1226 = string_to_event_location (&arg1, current_language);
f00aae0f 1227
6c5b2ebe
PA
1228 std::vector<symtab_and_line> sals_end
1229 = (dummy_beg
1230 ? decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
1231 NULL, NULL, 0)
1232 : decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
1233 NULL, sal.symtab, sal.line));
1234
1235 filter_sals (sals_end);
1236 if (sals_end.empty ())
1237 return;
1238 if (sals_end.size () > 1)
0d999a6e 1239 {
6c5b2ebe 1240 ambiguous_line_spec (sals_end,
e439fa14
PA
1241 _("Specified last line '%s' is ambiguous:\n"),
1242 end_arg);
0378c332
FN
1243 return;
1244 }
6c5b2ebe 1245 sal_end = sals_end[0];
0378c332
FN
1246 }
1247 }
1248
1249 if (*arg1)
8a3fe4f8 1250 error (_("Junk at end of line specification."));
0378c332
FN
1251
1252 if (!no_end && !dummy_beg && !dummy_end
1253 && sal.symtab != sal_end.symtab)
e439fa14 1254 error (_("Specified first and last lines are in different files."));
0378c332 1255 if (dummy_beg && dummy_end)
8a3fe4f8 1256 error (_("Two empty args do not say what lines to list."));
0378c332 1257
ebcd3b23 1258 /* If line was specified by address,
0378c332 1259 first print exactly which line, and which file.
ebcd3b23
MS
1260
1261 In this case, sal.symtab == 0 means address is outside of all
1262 known source files, not that user failed to give a filename. */
0378c332
FN
1263 if (*arg == '*')
1264 {
5af949e3 1265 struct gdbarch *gdbarch;
cdb27c12 1266
0378c332 1267 if (sal.symtab == 0)
8a3fe4f8 1268 error (_("No source file for address %s."),
2b69941d 1269 paddress (get_current_arch (), sal.pc));
5af949e3 1270
08feed99 1271 gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch ();
0378c332
FN
1272 sym = find_pc_function (sal.pc);
1273 if (sym)
50ee7535 1274 printf_filtered ("%s is in %s (%s:%d).\n",
5af949e3 1275 paddress (gdbarch, sal.pc),
987012b8 1276 sym->print_name (),
05cba821 1277 symtab_to_filename_for_display (sal.symtab), sal.line);
0378c332 1278 else
5af949e3
UW
1279 printf_filtered ("%s is at %s:%d.\n",
1280 paddress (gdbarch, sal.pc),
05cba821 1281 symtab_to_filename_for_display (sal.symtab), sal.line);
0378c332
FN
1282 }
1283
ebcd3b23
MS
1284 /* If line was not specified by just a line number, and it does not
1285 imply a symtab, it must be an undebuggable symbol which means no
1286 source code. */
0378c332
FN
1287
1288 if (!linenum_beg && sal.symtab == 0)
8a3fe4f8 1289 error (_("No line number known for %s."), arg);
0378c332
FN
1290
1291 /* If this command is repeated with RET,
1292 turn it into the no-arg variant. */
1293
1294 if (from_tty)
85c4be7c 1295 set_repeat_arguments ("");
0378c332
FN
1296
1297 if (dummy_beg && sal_end.symtab == 0)
8a3fe4f8 1298 error (_("No default source file yet. Do \"help list\"."));
0378c332 1299 if (dummy_beg)
0e2a2133
AB
1300 {
1301 source_lines_range range (sal_end.line + 1,
1302 source_lines_range::BACKWARD);
1303 print_source_lines (sal_end.symtab, range, 0);
1304 }
0378c332 1305 else if (sal.symtab == 0)
8a3fe4f8 1306 error (_("No default source file yet. Do \"help list\"."));
0378c332
FN
1307 else if (no_end)
1308 {
6c5b2ebe 1309 for (int i = 0; i < sals.size (); i++)
0d999a6e 1310 {
6c5b2ebe 1311 sal = sals[i];
0d999a6e
ZZ
1312 int first_line = sal.line - get_lines_to_list () / 2;
1313 if (first_line < 1)
1314 first_line = 1;
6c5b2ebe 1315 if (sals.size () > 1)
06871ae8 1316 print_sal_location (sal);
0e2a2133 1317 print_source_lines (sal.symtab, source_lines_range (first_line), 0);
0d999a6e 1318 }
0378c332 1319 }
0e2a2133
AB
1320 else if (dummy_end)
1321 print_source_lines (sal.symtab, source_lines_range (sal.line), 0);
0378c332 1322 else
0e2a2133
AB
1323 print_source_lines (sal.symtab,
1324 source_lines_range (sal.line, (sal_end.line + 1)),
0378c332
FN
1325 0);
1326}
1327
d14508fe
DE
1328/* Subroutine of disassemble_command to simplify it.
1329 Perform the disassembly.
1330 NAME is the name of the function if known, or NULL.
1331 [LOW,HIGH) are the range of addresses to disassemble.
e9480230
KB
1332 BLOCK is the block to disassemble; it needs to be provided
1333 when non-contiguous blocks are disassembled; otherwise
1334 it can be NULL.
d14508fe
DE
1335 MIXED is non-zero to print source with the assembler. */
1336
1337static void
13274fc3 1338print_disassembly (struct gdbarch *gdbarch, const char *name,
9a24775b 1339 CORE_ADDR low, CORE_ADDR high,
e9480230 1340 const struct block *block,
9a24775b 1341 gdb_disassembly_flags flags)
d14508fe
DE
1342{
1343#if defined(TUI)
f9ba974d
TT
1344 if (tui_is_window_visible (DISASSEM_WIN))
1345 tui_show_assembly (gdbarch, low);
1346 else
d14508fe
DE
1347#endif
1348 {
1349 printf_filtered ("Dump of assembler code ");
1350 if (name != NULL)
e9480230
KB
1351 printf_filtered ("for function %s:\n", name);
1352 if (block == nullptr || BLOCK_CONTIGUOUS_P (block))
1353 {
1354 if (name == NULL)
1355 printf_filtered ("from %s to %s:\n",
1356 paddress (gdbarch, low), paddress (gdbarch, high));
d14508fe 1357
e9480230
KB
1358 /* Dump the specified range. */
1359 gdb_disassembly (gdbarch, current_uiout, flags, -1, low, high);
1360 }
1361 else
1362 {
1363 for (int i = 0; i < BLOCK_NRANGES (block); i++)
1364 {
b926417a
TT
1365 CORE_ADDR range_low = BLOCK_RANGE_START (block, i);
1366 CORE_ADDR range_high = BLOCK_RANGE_END (block, i);
e9480230 1367 printf_filtered (_("Address range %s to %s:\n"),
b926417a
TT
1368 paddress (gdbarch, range_low),
1369 paddress (gdbarch, range_high));
1370 gdb_disassembly (gdbarch, current_uiout, flags, -1,
1371 range_low, range_high);
e9480230
KB
1372 }
1373 }
d14508fe 1374 printf_filtered ("End of assembler dump.\n");
d14508fe 1375 }
d14508fe
DE
1376}
1377
1378/* Subroutine of disassemble_command to simplify it.
9c419145 1379 Print a disassembly of the current function according to FLAGS. */
d14508fe
DE
1380
1381static void
9a24775b 1382disassemble_current_function (gdb_disassembly_flags flags)
d14508fe 1383{
13274fc3
UW
1384 struct frame_info *frame;
1385 struct gdbarch *gdbarch;
d14508fe 1386 CORE_ADDR low, high, pc;
2c02bd72 1387 const char *name;
e9480230 1388 const struct block *block;
d14508fe 1389
13274fc3
UW
1390 frame = get_selected_frame (_("No frame selected."));
1391 gdbarch = get_frame_arch (frame);
9bf4bce9 1392 pc = get_frame_address_in_block (frame);
e9480230 1393 if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
d14508fe
DE
1394 error (_("No function contains program counter for selected frame."));
1395#if defined(TUI)
1396 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1397 `tui_version'. */
1398 if (tui_active)
1399 /* FIXME: cagney/2004-02-07: This should be an observer. */
13274fc3 1400 low = tui_get_low_disassembly_address (gdbarch, low, pc);
d14508fe 1401#endif
13274fc3 1402 low += gdbarch_deprecated_function_start_offset (gdbarch);
d14508fe 1403
e9480230 1404 print_disassembly (gdbarch, name, low, high, block, flags);
d14508fe
DE
1405}
1406
1407/* Dump a specified section of assembly code.
1408
1409 Usage:
6ff0ba5f 1410 disassemble [/mrs]
d14508fe 1411 - dump the assembly code for the function of the current pc
6ff0ba5f 1412 disassemble [/mrs] addr
d14508fe 1413 - dump the assembly code for the function at ADDR
6ff0ba5f
DE
1414 disassemble [/mrs] low,high
1415 disassemble [/mrs] low,+length
53a71c06 1416 - dump the assembly code in the range [LOW,HIGH), or [LOW,LOW+length)
d14508fe 1417
6ff0ba5f
DE
1418 A /m modifier will include source code with the assembly in a
1419 "source centric" view. This view lists only the file of the first insn,
1420 even if other source files are involved (e.g., inlined functions), and
1421 the output is in source order, even with optimized code. This view is
1422 considered deprecated as it hasn't been useful in practice.
1423
1424 A /r modifier will include raw instructions in hex with the assembly.
1425
1426 A /s modifier will include source code with the assembly, like /m, with
1427 two important differences:
1428 1) The output is still in pc address order.
1429 2) File names and contents for all relevant source files are displayed. */
83c31e7d 1430
83c31e7d 1431static void
0b39b52e 1432disassemble_command (const char *arg, int from_tty)
83c31e7d 1433{
13274fc3 1434 struct gdbarch *gdbarch = get_current_arch ();
83c31e7d 1435 CORE_ADDR low, high;
2c02bd72 1436 const char *name;
d36fc00b 1437 CORE_ADDR pc;
9a24775b 1438 gdb_disassembly_flags flags;
bbc13ae3 1439 const char *p;
e9480230 1440 const struct block *block = nullptr;
83c31e7d 1441
bbc13ae3 1442 p = arg;
83c31e7d 1443 name = NULL;
e6158f16 1444 flags = 0;
d14508fe 1445
bbc13ae3 1446 if (p && *p == '/')
83c31e7d 1447 {
bbc13ae3 1448 ++p;
d14508fe 1449
bbc13ae3 1450 if (*p == '\0')
d14508fe
DE
1451 error (_("Missing modifier."));
1452
bbc13ae3 1453 while (*p && ! isspace (*p))
d14508fe 1454 {
bbc13ae3 1455 switch (*p++)
d14508fe
DE
1456 {
1457 case 'm':
6ff0ba5f 1458 flags |= DISASSEMBLY_SOURCE_DEPRECATED;
e6158f16
HZ
1459 break;
1460 case 'r':
1461 flags |= DISASSEMBLY_RAW_INSN;
d14508fe 1462 break;
6ff0ba5f
DE
1463 case 's':
1464 flags |= DISASSEMBLY_SOURCE;
1465 break;
d14508fe
DE
1466 default:
1467 error (_("Invalid disassembly modifier."));
1468 }
1469 }
1470
f1735a53 1471 p = skip_spaces (p);
d14508fe
DE
1472 }
1473
6ff0ba5f
DE
1474 if ((flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1475 == (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1476 error (_("Cannot specify both /m and /s."));
1477
bbc13ae3 1478 if (! p || ! *p)
d14508fe 1479 {
9c419145 1480 flags |= DISASSEMBLY_OMIT_FNAME;
e6158f16 1481 disassemble_current_function (flags);
d14508fe 1482 return;
83c31e7d 1483 }
d14508fe 1484
bbc13ae3
KS
1485 pc = value_as_address (parse_to_comma_and_eval (&p));
1486 if (p[0] == ',')
1487 ++p;
1488 if (p[0] == '\0')
83c31e7d
FN
1489 {
1490 /* One argument. */
e9480230 1491 if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
8a3fe4f8 1492 error (_("No function contains specified address."));
83c31e7d 1493#if defined(TUI)
021e7609
AC
1494 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1495 `tui_version'. */
22940a24
AC
1496 if (tui_active)
1497 /* FIXME: cagney/2004-02-07: This should be an observer. */
13274fc3 1498 low = tui_get_low_disassembly_address (gdbarch, low, pc);
83c31e7d 1499#endif
13274fc3 1500 low += gdbarch_deprecated_function_start_offset (gdbarch);
9c419145 1501 flags |= DISASSEMBLY_OMIT_FNAME;
83c31e7d
FN
1502 }
1503 else
1504 {
1505 /* Two arguments. */
53a71c06 1506 int incl_flag = 0;
21a0512e 1507 low = pc;
f1735a53 1508 p = skip_spaces (p);
bbc13ae3 1509 if (p[0] == '+')
53a71c06 1510 {
bbc13ae3 1511 ++p;
53a71c06
CR
1512 incl_flag = 1;
1513 }
bbc13ae3 1514 high = parse_and_eval_address (p);
53a71c06
CR
1515 if (incl_flag)
1516 high += low;
83c31e7d
FN
1517 }
1518
e9480230 1519 print_disassembly (gdbarch, name, low, high, block, flags);
83c31e7d
FN
1520}
1521
d318976c 1522static void
0b39b52e 1523make_command (const char *arg, int from_tty)
d318976c 1524{
d318976c 1525 if (arg == 0)
be47f9e8 1526 shell_escape ("make", from_tty);
d318976c
FN
1527 else
1528 {
be47f9e8 1529 std::string cmd = std::string ("make ") + arg;
d318976c 1530
be47f9e8
PA
1531 shell_escape (cmd.c_str (), from_tty);
1532 }
d318976c
FN
1533}
1534
d318976c 1535static void
dede02ce 1536show_user (const char *args, int from_tty)
d318976c
FN
1537{
1538 struct cmd_list_element *c;
d318976c
FN
1539
1540 if (args)
1541 {
6f937416 1542 const char *comname = args;
cdb27c12 1543
adb483fe 1544 c = lookup_cmd (&comname, cmdlist, "", 0, 1);
a9f116cb 1545 if (!cli_user_command_p (c))
8a3fe4f8 1546 error (_("Not a user command."));
adb483fe 1547 show_user_1 (c, "", args, gdb_stdout);
d318976c
FN
1548 }
1549 else
1550 {
1551 for (c = cmdlist; c; c = c->next)
1552 {
a9f116cb 1553 if (cli_user_command_p (c) || c->prefixlist != NULL)
adb483fe 1554 show_user_1 (c, "", c->name, gdb_stdout);
d318976c
FN
1555 }
1556 }
1557}
1558
1559/* Search through names of commands and documentations for a certain
ebcd3b23
MS
1560 regular expression. */
1561
66d8c862
PW
1562static void
1563apropos_command (const char *arg, int from_tty)
d318976c 1564{
66d8c862
PW
1565 bool verbose = arg && check_for_argument (&arg, "-v", 2);
1566
66d8c862 1567 if (arg == NULL || *arg == '\0')
f55af66d 1568 error (_("REGEXP string is empty"));
d318976c 1569
66d8c862 1570 compiled_regex pattern (arg, REG_ICASE,
2d7cc5c7 1571 _("Error in regular expression"));
dc92e161 1572
66d8c862 1573 apropos_cmd (gdb_stdout, cmdlist, verbose, pattern, "");
d318976c 1574}
5a56e9c5
DE
1575
1576/* Subroutine of alias_command to simplify it.
1577 Return the first N elements of ARGV flattened back to a string
1578 with a space separating each element.
1579 ARGV may not be NULL.
1580 This does not take care of quoting elements in case they contain spaces
1581 on purpose. */
1582
a97e29d2
TT
1583static std::string
1584argv_to_string (char **argv, int n)
5a56e9c5
DE
1585{
1586 int i;
a97e29d2 1587 std::string result;
5a56e9c5
DE
1588
1589 gdb_assert (argv != NULL);
1590 gdb_assert (n >= 0 && n <= countargv (argv));
1591
1592 for (i = 0; i < n; ++i)
1593 {
1594 if (i > 0)
a97e29d2
TT
1595 result += " ";
1596 result += argv[i];
5a56e9c5
DE
1597 }
1598
1599 return result;
1600}
1601
1602/* Subroutine of alias_command to simplify it.
6fe87677 1603 Return true if COMMAND exists, unambiguously. Otherwise false. */
5a56e9c5 1604
6fe87677 1605static bool
6f937416 1606valid_command_p (const char *command)
5a56e9c5
DE
1607{
1608 struct cmd_list_element *c;
1609
1610 c = lookup_cmd_1 (& command, cmdlist, NULL, 1);
1611
1612 if (c == NULL || c == (struct cmd_list_element *) -1)
6fe87677 1613 return false;
5a56e9c5
DE
1614
1615 /* This is the slightly tricky part.
1616 lookup_cmd_1 will return a pointer to the last part of COMMAND
1617 to match, leaving COMMAND pointing at the remainder. */
1618 while (*command == ' ' || *command == '\t')
1619 ++command;
1620 return *command == '\0';
1621}
1622
7f31862a
PA
1623/* Called when "alias" was incorrectly used. */
1624
1625static void
1626alias_usage_error (void)
1627{
1628 error (_("Usage: alias [-a] [--] ALIAS = COMMAND"));
1629}
1630
5a56e9c5
DE
1631/* Make an alias of an existing command. */
1632
1633static void
0b39b52e 1634alias_command (const char *args, int from_tty)
5a56e9c5
DE
1635{
1636 int i, alias_argc, command_argc;
1637 int abbrev_flag = 0;
0b39b52e 1638 const char *equals;
a97e29d2 1639 const char *alias, *command;
5a56e9c5
DE
1640
1641 if (args == NULL || strchr (args, '=') == NULL)
7f31862a 1642 alias_usage_error ();
5a56e9c5 1643
773a1edc
TT
1644 equals = strchr (args, '=');
1645 std::string args2 (args, equals - args);
1646
1647 gdb_argv built_alias_argv (args2.c_str ());
1648 gdb_argv command_argv (equals + 1);
5a56e9c5 1649
773a1edc
TT
1650 char **alias_argv = built_alias_argv.get ();
1651 while (alias_argv[0] != NULL)
5a56e9c5 1652 {
773a1edc 1653 if (strcmp (alias_argv[0], "-a") == 0)
5a56e9c5
DE
1654 {
1655 ++alias_argv;
1656 abbrev_flag = 1;
1657 }
773a1edc 1658 else if (strcmp (alias_argv[0], "--") == 0)
5a56e9c5
DE
1659 {
1660 ++alias_argv;
1661 break;
1662 }
1663 else
1664 break;
1665 }
1666
1667 if (alias_argv[0] == NULL || command_argv[0] == NULL
1668 || *alias_argv[0] == '\0' || *command_argv[0] == '\0')
7f31862a 1669 alias_usage_error ();
5a56e9c5
DE
1670
1671 for (i = 0; alias_argv[i] != NULL; ++i)
1672 {
1673 if (! valid_user_defined_cmd_name_p (alias_argv[i]))
1674 {
1675 if (i == 0)
1676 error (_("Invalid command name: %s"), alias_argv[i]);
1677 else
1678 error (_("Invalid command element name: %s"), alias_argv[i]);
1679 }
1680 }
1681
1682 alias_argc = countargv (alias_argv);
773a1edc 1683 command_argc = command_argv.count ();
5a56e9c5
DE
1684
1685 /* COMMAND must exist.
1686 Reconstruct the command to remove any extraneous spaces,
1687 for better error messages. */
773a1edc
TT
1688 std::string command_string (argv_to_string (command_argv.get (),
1689 command_argc));
a97e29d2 1690 command = command_string.c_str ();
5a56e9c5
DE
1691 if (! valid_command_p (command))
1692 error (_("Invalid command to alias to: %s"), command);
1693
1694 /* ALIAS must not exist. */
a97e29d2
TT
1695 std::string alias_string (argv_to_string (alias_argv, alias_argc));
1696 alias = alias_string.c_str ();
0605465f
PW
1697 {
1698 cmd_list_element *alias_cmd, *prefix_cmd, *cmd;
1699
1700 if (lookup_cmd_composition (alias, &alias_cmd, &prefix_cmd, &cmd))
1701 {
1702 const char *alias_name = alias_argv[alias_argc-1];
1703
1704 /* If we found an existing ALIAS_CMD, check that the prefix differ or
1705 the name differ. */
1706
1707 if (alias_cmd != nullptr
1708 && alias_cmd->prefix == prefix_cmd
1709 && strcmp (alias_name, alias_cmd->name) == 0)
1710 error (_("Alias already exists: %s"), alias);
1711
1712 /* Check ALIAS differs from the found CMD. */
1713
1714 if (cmd->prefix == prefix_cmd
1715 && strcmp (alias_name, cmd->name) == 0)
1716 error (_("Alias %s is the name of an existing command"), alias);
1717 }
1718 }
1719
5a56e9c5
DE
1720
1721 /* If ALIAS is one word, it is an alias for the entire COMMAND.
1722 Example: alias spe = set print elements
1723
1724 Otherwise ALIAS and COMMAND must have the same number of words,
b65b566c
PW
1725 and every word except the last must identify the same prefix command;
1726 and the last word of ALIAS is made an alias of the last word of COMMAND.
5a56e9c5
DE
1727 Example: alias set print elms = set pr elem
1728 Note that unambiguous abbreviations are allowed. */
1729
1730 if (alias_argc == 1)
1731 {
1732 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
1733 add_com_alias (xstrdup (alias_argv[0]), command, class_alias,
1734 abbrev_flag);
1735 }
1736 else
1737 {
6f937416 1738 const char *alias_prefix, *command_prefix;
5a56e9c5
DE
1739 struct cmd_list_element *c_alias, *c_command;
1740
1741 if (alias_argc != command_argc)
1742 error (_("Mismatched command length between ALIAS and COMMAND."));
1743
1744 /* Create copies of ALIAS and COMMAND without the last word,
b65b566c
PW
1745 and use that to verify the leading elements give the same
1746 prefix command. */
a97e29d2
TT
1747 std::string alias_prefix_string (argv_to_string (alias_argv,
1748 alias_argc - 1));
b65b566c 1749 std::string command_prefix_string (argv_to_string (command_argv.get (),
a97e29d2
TT
1750 command_argc - 1));
1751 alias_prefix = alias_prefix_string.c_str ();
1752 command_prefix = command_prefix_string.c_str ();
5a56e9c5
DE
1753
1754 c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, 1);
1755 /* We've already tried to look up COMMAND. */
1756 gdb_assert (c_command != NULL
1757 && c_command != (struct cmd_list_element *) -1);
1758 gdb_assert (c_command->prefixlist != NULL);
1759 c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, 1);
1760 if (c_alias != c_command)
1761 error (_("ALIAS and COMMAND prefixes do not match."));
1762
1763 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
1764 add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]),
1765 command_argv[command_argc - 1],
1766 class_alias, abbrev_flag, c_command->prefixlist);
1767 }
1768}
d318976c 1769\f
06871ae8
PA
1770/* Print the file / line number / symbol name of the location
1771 specified by SAL. */
1772
1773static void
1774print_sal_location (const symtab_and_line &sal)
1775{
1776 scoped_restore_current_program_space restore_pspace;
1777 set_current_program_space (sal.pspace);
1778
1779 const char *sym_name = NULL;
1780 if (sal.symbol != NULL)
987012b8 1781 sym_name = sal.symbol->print_name ();
06871ae8
PA
1782 printf_filtered (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"),
1783 symtab_to_filename_for_display (sal.symtab),
1784 sal.line, sym_name != NULL ? sym_name : "???");
1785}
1786
0378c332 1787/* Print a list of files and line numbers which a user may choose from
ebcd3b23 1788 in order to list a function which was specified ambiguously (as
6c5b2ebe
PA
1789 with `list classname::overloadedfuncname', for example). The SALS
1790 array provides the filenames and line numbers. FORMAT is a
1791 printf-style format string used to tell the user what was
e439fa14 1792 ambiguous. */
0378c332
FN
1793
1794static void
6c5b2ebe
PA
1795ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
1796 const char *format, ...)
0378c332 1797{
e439fa14
PA
1798 va_list ap;
1799 va_start (ap, format);
1800 vprintf_filtered (format, ap);
1801 va_end (ap);
1802
6c5b2ebe 1803 for (const auto &sal : sals)
06871ae8 1804 print_sal_location (sal);
0378c332
FN
1805}
1806
6c5b2ebe
PA
1807/* Comparison function for filter_sals. Returns a qsort-style
1808 result. */
f8eba3c6
TT
1809
1810static int
6c5b2ebe 1811cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb)
f8eba3c6 1812{
6c5b2ebe
PA
1813 const char *dira = SYMTAB_DIRNAME (sala.symtab);
1814 const char *dirb = SYMTAB_DIRNAME (salb.symtab);
f8eba3c6
TT
1815 int r;
1816
ee6f8984 1817 if (dira == NULL)
f8eba3c6 1818 {
ee6f8984 1819 if (dirb != NULL)
f8eba3c6
TT
1820 return -1;
1821 }
ee6f8984 1822 else if (dirb == NULL)
f8eba3c6 1823 {
ee6f8984 1824 if (dira != NULL)
f8eba3c6
TT
1825 return 1;
1826 }
1827 else
1828 {
ee6f8984 1829 r = filename_cmp (dira, dirb);
f8eba3c6
TT
1830 if (r)
1831 return r;
1832 }
1833
6c5b2ebe 1834 r = filename_cmp (sala.symtab->filename, salb.symtab->filename);
f8eba3c6
TT
1835 if (r)
1836 return r;
1837
6c5b2ebe 1838 if (sala.line < salb.line)
f8eba3c6 1839 return -1;
6c5b2ebe 1840 return sala.line == salb.line ? 0 : 1;
f8eba3c6
TT
1841}
1842
1843/* Remove any SALs that do not match the current program space, or
1844 which appear to be "file:line" duplicates. */
1845
1846static void
6c5b2ebe 1847filter_sals (std::vector<symtab_and_line> &sals)
f8eba3c6 1848{
6c5b2ebe
PA
1849 /* Remove SALs that do not match. */
1850 auto from = std::remove_if (sals.begin (), sals.end (),
1851 [&] (const symtab_and_line &sal)
1852 { return (sal.pspace != current_program_space || sal.symtab == NULL); });
1853
1854 /* Remove dups. */
1855 std::sort (sals.begin (), from,
1856 [] (const symtab_and_line &sala, const symtab_and_line &salb)
1857 { return cmp_symtabs (sala, salb) < 0; });
1858
1859 from = std::unique (sals.begin (), from,
1860 [&] (const symtab_and_line &sala,
1861 const symtab_and_line &salb)
1862 { return cmp_symtabs (sala, salb) == 0; });
1863
1864 sals.erase (from, sals.end ());
f8eba3c6
TT
1865}
1866
d318976c
FN
1867void
1868init_cmd_lists (void)
1869{
20f01a46 1870 max_user_call_depth = 1024;
d318976c
FN
1871}
1872
920d2a44
AC
1873static void
1874show_info_verbose (struct ui_file *file, int from_tty,
1875 struct cmd_list_element *c,
1876 const char *value)
1877{
1878 if (info_verbose)
9a2b4c1b
MS
1879 fprintf_filtered (file,
1880 _("Verbose printing of informational messages is %s.\n"),
1881 value);
920d2a44
AC
1882 else
1883 fprintf_filtered (file, _("Verbosity is %s.\n"), value);
1884}
1885
1886static void
1887show_history_expansion_p (struct ui_file *file, int from_tty,
1888 struct cmd_list_element *c, const char *value)
1889{
1890 fprintf_filtered (file, _("History expansion on command input is %s.\n"),
1891 value);
1892}
1893
920d2a44
AC
1894static void
1895show_remote_debug (struct ui_file *file, int from_tty,
1896 struct cmd_list_element *c, const char *value)
1897{
1898 fprintf_filtered (file, _("Debugging of remote protocol is %s.\n"),
1899 value);
1900}
1901
1902static void
1903show_remote_timeout (struct ui_file *file, int from_tty,
1904 struct cmd_list_element *c, const char *value)
1905{
9a2b4c1b
MS
1906 fprintf_filtered (file,
1907 _("Timeout limit to wait for target to respond is %s.\n"),
920d2a44
AC
1908 value);
1909}
1910
1911static void
1912show_max_user_call_depth (struct ui_file *file, int from_tty,
1913 struct cmd_list_element *c, const char *value)
1914{
9a2b4c1b
MS
1915 fprintf_filtered (file,
1916 _("The max call depth for user-defined commands is %s.\n"),
920d2a44
AC
1917 value);
1918}
1919
9ad9b77d
PW
1920/* Returns the cmd_list_element in SHOWLIST corresponding to the first
1921 argument of ARGV, which must contain one single value.
1922 Throws an error if no value provided, or value not correct.
1923 FNNAME is used in the error message. */
1924
1925static cmd_list_element *
1926setting_cmd (const char *fnname, struct cmd_list_element *showlist,
1927 int argc, struct value **argv)
1928{
1929 if (argc == 0)
1930 error (_("You must provide an argument to %s"), fnname);
1931 if (argc != 1)
1932 error (_("You can only provide one argument to %s"), fnname);
1933
1934 struct type *type0 = check_typedef (value_type (argv[0]));
1935
78134374
SM
1936 if (type0->code () != TYPE_CODE_ARRAY
1937 && type0->code () != TYPE_CODE_STRING)
9ad9b77d
PW
1938 error (_("First argument of %s must be a string."), fnname);
1939
1940 const char *a0 = (const char *) value_contents (argv[0]);
1941 cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", -1, 0);
1942
1943 if (cmd == nullptr || cmd_type (cmd) != show_cmd)
1944 error (_("First argument of %s must be a "
1945 "valid setting of the 'show' command."), fnname);
1946
1947 return cmd;
1948}
1949
1950/* Builds a value from the show CMD. */
1951
1952static struct value *
1953value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch)
1954{
1955 switch (cmd->var_type)
1956 {
1957 case var_integer:
1958 if (*(int *) cmd->var == INT_MAX)
1959 return value_from_longest (builtin_type (gdbarch)->builtin_int,
1960 0);
1961 else
1962 return value_from_longest (builtin_type (gdbarch)->builtin_int,
1963 *(int *) cmd->var);
1964 case var_zinteger:
1965 return value_from_longest (builtin_type (gdbarch)->builtin_int,
1966 *(int *) cmd->var);
1967 case var_boolean:
1968 return value_from_longest (builtin_type (gdbarch)->builtin_int,
1969 *(bool *) cmd->var ? 1 : 0);
1970 case var_zuinteger_unlimited:
1971 return value_from_longest (builtin_type (gdbarch)->builtin_int,
1972 *(int *) cmd->var);
1973 case var_auto_boolean:
1974 {
1975 int val;
1976
1977 switch (*(enum auto_boolean*) cmd->var)
1978 {
1979 case AUTO_BOOLEAN_TRUE:
1980 val = 1;
1981 break;
1982 case AUTO_BOOLEAN_FALSE:
1983 val = 0;
1984 break;
1985 case AUTO_BOOLEAN_AUTO:
1986 val = -1;
1987 break;
1988 default:
1989 gdb_assert_not_reached ("invalid var_auto_boolean");
1990 }
1991 return value_from_longest (builtin_type (gdbarch)->builtin_int,
1992 val);
1993 }
1994 case var_uinteger:
1995 if (*(unsigned int *) cmd->var == UINT_MAX)
1996 return value_from_ulongest
1997 (builtin_type (gdbarch)->builtin_unsigned_int, 0);
1998 else
1999 return value_from_ulongest
2000 (builtin_type (gdbarch)->builtin_unsigned_int,
2001 *(unsigned int *) cmd->var);
2002 case var_zuinteger:
2003 return value_from_ulongest (builtin_type (gdbarch)->builtin_unsigned_int,
2004 *(unsigned int *) cmd->var);
2005 case var_string:
2006 case var_string_noescape:
2007 case var_optional_filename:
2008 case var_filename:
2009 case var_enum:
2010 if (*(char **) cmd->var)
2011 return value_cstring (*(char **) cmd->var, strlen (*(char **) cmd->var),
2012 builtin_type (gdbarch)->builtin_char);
2013 else
2014 return value_cstring ("", 1,
2015 builtin_type (gdbarch)->builtin_char);
2016 default:
2017 gdb_assert_not_reached ("bad var_type");
2018 }
2019}
2020
2021/* Implementation of the convenience function $_gdb_setting. */
2022
2023static struct value *
2024gdb_setting_internal_fn (struct gdbarch *gdbarch,
2025 const struct language_defn *language,
2026 void *cookie, int argc, struct value **argv)
2027{
2028 return value_from_setting (setting_cmd ("$_gdb_setting", showlist,
2029 argc, argv),
2030 gdbarch);
2031}
2032
2033/* Implementation of the convenience function $_gdb_maint_setting. */
2034
2035static struct value *
2036gdb_maint_setting_internal_fn (struct gdbarch *gdbarch,
2037 const struct language_defn *language,
2038 void *cookie, int argc, struct value **argv)
2039{
2040 return value_from_setting (setting_cmd ("$_gdb_maint_setting",
2041 maintenance_show_cmdlist,
2042 argc, argv),
2043 gdbarch);
2044}
2045
2046/* Builds a string value from the show CMD. */
2047
2048static struct value *
2049str_value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch)
2050{
2051 switch (cmd->var_type)
2052 {
2053 case var_integer:
2054 case var_zinteger:
2055 case var_boolean:
2056 case var_zuinteger_unlimited:
2057 case var_auto_boolean:
2058 case var_uinteger:
2059 case var_zuinteger:
2060 {
2061 std::string cmd_val = get_setshow_command_value_string (cmd);
2062
2063 return value_cstring (cmd_val.c_str (), cmd_val.size (),
2064 builtin_type (gdbarch)->builtin_char);
2065 }
2066
2067 case var_string:
2068 case var_string_noescape:
2069 case var_optional_filename:
2070 case var_filename:
2071 case var_enum:
2072 /* For these cases, we do not use get_setshow_command_value_string,
2073 as this function handle some characters specially, e.g. by
2074 escaping quotes. So, we directly use the cmd->var string value,
2075 similarly to the value_from_setting code for these cases. */
2076 if (*(char **) cmd->var)
2077 return value_cstring (*(char **) cmd->var, strlen (*(char **) cmd->var),
2078 builtin_type (gdbarch)->builtin_char);
2079 else
2080 return value_cstring ("", 1,
2081 builtin_type (gdbarch)->builtin_char);
2082
2083 default:
2084 gdb_assert_not_reached ("bad var_type");
2085 }
2086}
2087
2088/* Implementation of the convenience function $_gdb_setting_str. */
2089
2090static struct value *
2091gdb_setting_str_internal_fn (struct gdbarch *gdbarch,
2092 const struct language_defn *language,
2093 void *cookie, int argc, struct value **argv)
2094{
2095 return str_value_from_setting (setting_cmd ("$_gdb_setting_str",
2096 showlist, argc, argv),
2097 gdbarch);
2098}
2099
2100
2101/* Implementation of the convenience function $_gdb_maint_setting_str. */
2102
2103static struct value *
2104gdb_maint_setting_str_internal_fn (struct gdbarch *gdbarch,
2105 const struct language_defn *language,
2106 void *cookie, int argc, struct value **argv)
2107{
2108 return str_value_from_setting (setting_cmd ("$_gdb_maint_setting_str",
2109 maintenance_show_cmdlist,
2110 argc, argv),
2111 gdbarch);
2112}
2113
6c265988 2114void _initialize_cli_cmds ();
d318976c 2115void
6c265988 2116_initialize_cli_cmds ()
d318976c
FN
2117{
2118 struct cmd_list_element *c;
2119
2120 /* Define the classes of commands.
1bfeeb0f 2121 They will appear in the help list in alphabetical order. */
d318976c 2122
0450cc4c 2123 add_cmd ("internals", class_maintenance, _("\
1a966eab 2124Maintenance commands.\n\
d318976c
FN
2125Some gdb commands are provided just for use by gdb maintainers.\n\
2126These commands are subject to frequent change, and may not be as\n\
1a966eab 2127well documented as user commands."),
d318976c 2128 &cmdlist);
0450cc4c
TT
2129 add_cmd ("obscure", class_obscure, _("Obscure features."), &cmdlist);
2130 add_cmd ("aliases", class_alias,
9a2b4c1b 2131 _("Aliases of other commands."), &cmdlist);
0450cc4c 2132 add_cmd ("user-defined", class_user, _("\
1a966eab 2133User-defined commands.\n\
d318976c 2134The commands in this class are those defined by the user.\n\
1a966eab 2135Use the \"define\" command to define a command."), &cmdlist);
0450cc4c 2136 add_cmd ("support", class_support, _("Support facilities."), &cmdlist);
d318976c 2137 if (!dbx_commands)
0450cc4c
TT
2138 add_cmd ("status", class_info, _("Status inquiries."), &cmdlist);
2139 add_cmd ("files", class_files, _("Specifying and examining files."),
1a966eab 2140 &cmdlist);
0450cc4c 2141 add_cmd ("breakpoints", class_breakpoint,
1a966eab 2142 _("Making program stop at certain points."), &cmdlist);
0450cc4c
TT
2143 add_cmd ("data", class_vars, _("Examining data."), &cmdlist);
2144 add_cmd ("stack", class_stack, _("\
1a966eab 2145Examining the stack.\n\
d318976c
FN
2146The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
2147counting from zero for the innermost (currently executing) frame.\n\n\
2148At any time gdb identifies one frame as the \"selected\" frame.\n\
2149Variable lookups are done with respect to the selected frame.\n\
2150When the program being debugged stops, gdb selects the innermost frame.\n\
1a966eab 2151The commands below can be used to select other frames by number or address."),
d318976c 2152 &cmdlist);
e98d2e6d
PW
2153#ifdef TUI
2154 add_cmd ("text-user-interface", class_tui,
2155 _("TUI is the GDB text based interface.\n\
2156In TUI mode, GDB can display several text windows showing\n\
2157the source file, the processor registers, the program disassembly, ..."), &cmdlist);
2158#endif
0450cc4c 2159 add_cmd ("running", class_run, _("Running the program."), &cmdlist);
d318976c 2160
ebcd3b23 2161 /* Define general commands. */
d318976c 2162
d729566a 2163 add_com ("pwd", class_files, pwd_command, _("\
590042fc
PW
2164Print working directory.\n\
2165This is used for your program as well."));
4f8d22e3 2166
1a966eab 2167 c = add_cmd ("cd", class_files, cd_command, _("\
d092c5a2
SDJ
2168Set working directory to DIR for debugger.\n\
2169The debugger's current working directory specifies where scripts and other\n\
2170files that can be loaded by GDB are located.\n\
2171In order to change the inferior's current working directory, the recommended\n\
2172way is to use the \"set cwd\" command."), &cmdlist);
5ba2abeb 2173 set_cmd_completer (c, filename_completer);
d318976c 2174
1bedd215
AC
2175 add_com ("echo", class_support, echo_command, _("\
2176Print a constant string. Give string as argument.\n\
d318976c
FN
2177C escape sequences may be used in the argument.\n\
2178No newline is added at the end of the argument;\n\
2179use \"\\n\" if you want a newline to be printed.\n\
2180Since leading and trailing whitespace are ignored in command arguments,\n\
2181if you want to print some you must use \"\\\" before leading whitespace\n\
1bedd215 2182to be printed or after trailing whitespace."));
d318976c 2183
973817a3
JB
2184 add_setshow_enum_cmd ("script-extension", class_support,
2185 script_ext_enums, &script_ext_mode, _("\
2186Set mode for script filename extension recognition."), _("\
2187Show mode for script filename extension recognition."), _("\
2188off == no filename extension recognition (all sourced files are GDB scripts)\n\
2189soft == evaluate script according to filename extension, fallback to GDB script"
2190 "\n\
2191strict == evaluate script according to filename extension, error if not supported"
2192 ),
2193 NULL,
2194 show_script_ext_mode,
2195 &setlist, &showlist);
2196
bdb52a22
TT
2197 add_com ("quit", class_support, quit_command, _("\
2198Exit gdb.\n\
2199Usage: quit [EXPR]\n\
2200The optional expression EXPR, if present, is evaluated and the result\n\
2201used as GDB's exit code. The default is zero."));
1bedd215
AC
2202 c = add_com ("help", class_support, help_command,
2203 _("Print list of commands."));
5ba2abeb 2204 set_cmd_completer (c, command_completer);
d318976c
FN
2205 add_com_alias ("q", "quit", class_support, 1);
2206 add_com_alias ("h", "help", class_support, 1);
2207
5bf193a2
AC
2208 add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\
2209Set verbosity."), _("\
2210Show verbosity."), NULL,
2211 set_verbose,
920d2a44 2212 show_info_verbose,
5bf193a2 2213 &setlist, &showlist);
d318976c 2214
0743fc83
TT
2215 add_basic_prefix_cmd ("history", class_support, _("\
2216Generic command for setting command history parameters."),
2217 &sethistlist, "set history ", 0, &setlist);
2218 add_show_prefix_cmd ("history", class_support, _("\
2219Generic command for showing command history parameters."),
2220 &showhistlist, "show history ", 0, &showlist);
d318976c 2221
5bf193a2
AC
2222 add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\
2223Set history expansion on command input."), _("\
2224Show history expansion on command input."), _("\
2225Without an argument, history expansion is enabled."),
2226 NULL,
920d2a44 2227 show_history_expansion_p,
5bf193a2 2228 &sethistlist, &showhistlist);
d318976c 2229
4fd6c7e8 2230 add_prefix_cmd ("info", class_info, info_command, _("\
1bedd215 2231Generic command for showing things about the program being debugged."),
4fd6c7e8 2232 &infolist, "info ", 0, &cmdlist);
d318976c 2233 add_com_alias ("i", "info", class_info, 1);
a177aad3 2234 add_com_alias ("inf", "info", class_info, 1);
d318976c
FN
2235
2236 add_com ("complete", class_obscure, complete_command,
1bedd215 2237 _("List the completions for the rest of the line as a command."));
d318976c 2238
a7b9ceb8 2239 c = add_show_prefix_cmd ("show", class_info, _("\
700b53b1 2240Generic command for showing things about the debugger."),
a7b9ceb8 2241 &showlist, "show ", 0, &cmdlist);
d318976c 2242 /* Another way to get at the same thing. */
a7b9ceb8 2243 add_alias_cmd ("set", c, class_info, 0, &infolist);
d318976c 2244
fdbc9870
PA
2245 c = add_com ("with", class_vars, with_command, _("\
2246Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING.\n\
2247Usage: with SETTING [VALUE] [-- COMMAND]\n\
2248Usage: w SETTING [VALUE] [-- COMMAND]\n\
2249With no COMMAND, repeats the last executed command.\n\
2250\n\
2251SETTING is any setting you can change with the \"set\" subcommands.\n\
2252E.g.:\n\
2253 with language pascal -- print obj\n\
2254 with print elements unlimited -- print obj\n\
2255\n\
2256You can change multiple settings using nested with, and use\n\
2257abbreviations for commands and/or values. E.g.:\n\
2258 w la p -- w p el u -- p obj"));
2259 set_cmd_completer_handle_brkchars (c, with_command_completer);
2260 add_com_alias ("w", "with", class_vars, 1);
2261
9ad9b77d
PW
2262 add_internal_function ("_gdb_setting_str", _("\
2263$_gdb_setting_str - returns the value of a GDB setting as a string.\n\
2264Usage: $_gdb_setting_str (setting)\n\
2265\n\
2266auto-boolean values are \"off\", \"on\", \"auto\".\n\
2267boolean values are \"off\", \"on\".\n\
2268Some integer settings accept an unlimited value, returned\n\
2269as \"unlimited\"."),
2270 gdb_setting_str_internal_fn, NULL);
2271
2272 add_internal_function ("_gdb_setting", _("\
2273$_gdb_setting - returns the value of a GDB setting.\n\
2274Usage: $_gdb_setting (setting)\n\
2275auto-boolean values are \"off\", \"on\", \"auto\".\n\
2276boolean values are \"off\", \"on\".\n\
2277Some integer settings accept an unlimited value, returned\n\
2278as 0 or -1 depending on the setting."),
2279 gdb_setting_internal_fn, NULL);
2280
2281 add_internal_function ("_gdb_maint_setting_str", _("\
2282$_gdb_maint_setting_str - returns the value of a GDB maintenance setting as a string.\n\
2283Usage: $_gdb_maint_setting_str (setting)\n\
2284\n\
2285auto-boolean values are \"off\", \"on\", \"auto\".\n\
2286boolean values are \"off\", \"on\".\n\
2287Some integer settings accept an unlimited value, returned\n\
2288as \"unlimited\"."),
2289 gdb_maint_setting_str_internal_fn, NULL);
2290
2291 add_internal_function ("_gdb_maint_setting", _("\
2292$_gdb_maint_setting - returns the value of a GDB maintenance setting.\n\
2293Usage: $_gdb_maint_setting (setting)\n\
2294auto-boolean values are \"off\", \"on\", \"auto\".\n\
2295boolean values are \"off\", \"on\".\n\
2296Some integer settings accept an unlimited value, returned\n\
2297as 0 or -1 depending on the setting."),
2298 gdb_maint_setting_internal_fn, NULL);
2299
db5f229b 2300 add_cmd ("commands", no_set_class, show_commands, _("\
1a966eab 2301Show the history of commands you typed.\n\
d318976c 2302You can supply a command number to start with, or a `+' to start after\n\
1a966eab 2303the previous command number shown."),
d318976c
FN
2304 &showlist);
2305
db5f229b 2306 add_cmd ("version", no_set_class, show_version,
1a966eab 2307 _("Show what version of GDB this is."), &showlist);
d318976c 2308
6eaaf48b
EZ
2309 add_cmd ("configuration", no_set_class, show_configuration,
2310 _("Show how GDB was configured at build time."), &showlist);
2311
85c07804
AC
2312 add_setshow_zinteger_cmd ("remote", no_class, &remote_debug, _("\
2313Set debugging of remote protocol."), _("\
2314Show debugging of remote protocol."), _("\
d318976c 2315When enabled, each packet sent or received with the remote target\n\
85c07804
AC
2316is displayed."),
2317 NULL,
920d2a44 2318 show_remote_debug,
85c07804 2319 &setdebuglist, &showdebuglist);
d318976c 2320
6fc1c773
YQ
2321 add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class,
2322 &remote_timeout, _("\
c0d88b1b
AC
2323Set timeout limit to wait for target to respond."), _("\
2324Show timeout limit to wait for target to respond."), _("\
d318976c 2325This value is used to set the time limit for gdb to wait for a response\n\
c0d88b1b 2326from the target."),
6fc1c773
YQ
2327 NULL,
2328 show_remote_timeout,
2329 &setlist, &showlist);
d318976c 2330
0743fc83
TT
2331 add_basic_prefix_cmd ("debug", no_class,
2332 _("Generic command for setting gdb debugging flags."),
2333 &setdebuglist, "set debug ", 0, &setlist);
d318976c 2334
0743fc83
TT
2335 add_show_prefix_cmd ("debug", no_class,
2336 _("Generic command for showing gdb debugging flags."),
2337 &showdebuglist, "show debug ", 0, &showlist);
d318976c 2338
be47f9e8 2339 c = add_com ("shell", class_support, shell_command, _("\
1bedd215
AC
2340Execute the rest of the line as a shell command.\n\
2341With no arguments, run an inferior shell."));
5ba2abeb 2342 set_cmd_completer (c, filename_completer);
d318976c 2343
d563b953
PW
2344 add_com_alias ("!", "shell", class_support, 0);
2345
1bedd215
AC
2346 c = add_com ("edit", class_files, edit_command, _("\
2347Edit specified file or function.\n\
0378c332 2348With no argument, edits file containing most recent line listed.\n\
0378c332
FN
2349Editing targets can be specified in these ways:\n\
2350 FILE:LINENUM, to edit at that line in that file,\n\
2351 FUNCTION, to edit at the beginning of that function,\n\
2352 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2353 *ADDRESS, to edit at the line containing that address.\n\
1bedd215 2354Uses EDITOR environment variable contents as editor (or ex as default)."));
0378c332
FN
2355
2356 c->completer = location_completer;
2357
947d3946
PW
2358 c = add_com ("pipe", class_support, pipe_command, _("\
2359Send the output of a gdb command to a shell command.\n\
2360Usage: | [COMMAND] | SHELL_COMMAND\n\
2361Usage: | -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2362Usage: pipe [COMMAND] | SHELL_COMMAND\n\
2363Usage: pipe -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2364\n\
2365Executes COMMAND and sends its output to SHELL_COMMAND.\n\
2366\n\
2367The -d option indicates to use the string DELIM to separate COMMAND\n\
2368from SHELL_COMMAND, in alternative to |. This is useful in\n\
2369case COMMAND contains a | character.\n\
2370\n\
2371With no COMMAND, repeat the last executed command\n\
2372and send its output to SHELL_COMMAND."));
5f4ba3e7 2373 set_cmd_completer_handle_brkchars (c, pipe_command_completer);
947d3946
PW
2374 add_com_alias ("|", "pipe", class_support, 0);
2375
1bedd215
AC
2376 add_com ("list", class_files, list_command, _("\
2377List specified function or line.\n\
0378c332
FN
2378With no argument, lists ten more lines after or around previous listing.\n\
2379\"list -\" lists the ten lines before a previous ten-line listing.\n\
2380One argument specifies a line, and ten lines are listed around that line.\n\
2381Two arguments with comma between specify starting and ending lines to list.\n\
0378c332
FN
2382Lines can be specified in these ways:\n\
2383 LINENUM, to list around that line in current file,\n\
2384 FILE:LINENUM, to list around that line in that file,\n\
2385 FUNCTION, to list around beginning of that function,\n\
2386 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2387 *ADDRESS, to list around the line containing that address.\n\
4fdd372d
AB
2388With two args, if one is empty, it stands for ten lines away from\n\
2389the other arg.\n\
2390\n\
2391By default, when a single location is given, display ten lines.\n\
2392This can be changed using \"set listsize\", and the current value\n\
2393can be shown using \"show listsize\"."));
0378c332 2394
4f45d445 2395 add_com_alias ("l", "list", class_files, 1);
0378c332
FN
2396
2397 if (dbx_commands)
2398 add_com_alias ("file", "list", class_files, 1);
2399
1bedd215
AC
2400 c = add_com ("disassemble", class_vars, disassemble_command, _("\
2401Disassemble a specified section of memory.\n\
83c31e7d 2402Default is the function surrounding the pc of the selected frame.\n\
6ff0ba5f 2403\n\
d14508fe 2404With a /m modifier, source lines are included (if available).\n\
6ff0ba5f
DE
2405This view is \"source centric\": the output is in source line order,\n\
2406regardless of any optimization that is present. Only the main source file\n\
2407is displayed, not those of, e.g., any inlined functions.\n\
2408This modifier hasn't proved useful in practice and is deprecated\n\
2409in favor of /s.\n\
2410\n\
2411With a /s modifier, source lines are included (if available).\n\
2412This differs from /m in two important respects:\n\
2413- the output is still in pc address order, and\n\
2414- file names and contents for all relevant source files are displayed.\n\
2415\n\
e6158f16 2416With a /r modifier, raw instructions in hex are included.\n\
6ff0ba5f 2417\n\
83c31e7d 2418With a single argument, the function surrounding that address is dumped.\n\
53a71c06 2419Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
7e1e0340
DE
2420 in the form of \"start,end\", or \"start,+length\".\n\
2421\n\
2422Note that the address is interpreted as an expression, not as a location\n\
2423like in the \"break\" command.\n\
2424So, for example, if you want to disassemble function bar in file foo.c\n\
2425you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
83c31e7d 2426 set_cmd_completer (c, location_completer);
0378c332 2427
1bedd215
AC
2428 c = add_com ("make", class_support, make_command, _("\
2429Run the ``make'' program using the rest of the line as arguments."));
5ba2abeb 2430 set_cmd_completer (c, filename_completer);
1a966eab 2431 add_cmd ("user", no_class, show_user, _("\
ed3ef339 2432Show definitions of non-python/scheme user defined commands.\n\
d318976c 2433Argument is the name of the user defined command.\n\
1a966eab 2434With no argument, show definitions of all user defined commands."), &showlist);
66d8c862 2435 add_com ("apropos", class_support, apropos_command, _("\
590042fc 2436Search for commands matching a REGEXP.\n\
66d8c862
PW
2437Usage: apropos [-v] REGEXP\n\
2438Flag -v indicates to produce a verbose output, showing full documentation\n\
2439of the matching commands."));
20f01a46 2440
883b9c6c 2441 add_setshow_uinteger_cmd ("max-user-call-depth", no_class,
c0d88b1b 2442 &max_user_call_depth, _("\
ed3ef339
DE
2443Set the max call depth for non-python/scheme user-defined commands."), _("\
2444Show the max call depth for non-python/scheme user-defined commands."), NULL,
883b9c6c
YQ
2445 NULL,
2446 show_max_user_call_depth,
2447 &setlist, &showlist);
16026cd7
AS
2448
2449 add_setshow_boolean_cmd ("trace-commands", no_class, &trace_commands, _("\
2450Set tracing of GDB CLI commands."), _("\
2451Show state of GDB CLI command tracing."), _("\
2452When 'on', each command is displayed as it is executed."),
2453 NULL,
2454 NULL,
2455 &setlist, &showlist);
5a56e9c5
DE
2456
2457 c = add_com ("alias", class_support, alias_command, _("\
2458Define a new command that is an alias of an existing command.\n\
2459Usage: alias [-a] [--] ALIAS = COMMAND\n\
2460ALIAS is the name of the alias command to create.\n\
2461COMMAND is the command being aliased to.\n\
2462If \"-a\" is specified, the command is an abbreviation,\n\
3b3aaacb 2463and will not be used in command completion.\n\
5a56e9c5
DE
2464\n\
2465Examples:\n\
2466Make \"spe\" an alias of \"set print elements\":\n\
2467 alias spe = set print elements\n\
2468Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
2469 alias -a set print elms = set print elements"));
43e4916f 2470
b777eb6d 2471 const char *source_help_text = xstrprintf (_("\
43e4916f
TT
2472Read commands from a file named FILE.\n\
2473\n\
2474Usage: source [-s] [-v] FILE\n\
2475-s: search for the script in the source search path,\n\
2476 even if FILE contains directories.\n\
2477-v: each command in FILE is echoed as it is executed.\n\
2478\n\
2479Note that the file \"%s\" is read automatically in this way\n\
b777eb6d 2480when GDB is started."), GDBINIT);
43e4916f
TT
2481 c = add_cmd ("source", class_support, source_command,
2482 source_help_text, &cmdlist);
2483 set_cmd_completer (c, filename_completer);
2484}
This page took 1.432367 seconds and 4 git commands to generate.