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