]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/cli/cli-cmds.c
x86: Do not dump DS/CS segment overrides for branch hints
[thirdparty/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 490 error (_("Error finding name of working directory: %s"),
dda83cd7 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
dda83cd7 535 (including a drive letter on non-Unix systems). */
d318976c 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 "/.."
dda83cd7 574 and obliterate it and the "/..". */
d318976c 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.
dda83cd7 719 If the source command was invoked interactively, throw an
ebcd3b23 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)
dda83cd7 974 error (_("Junk at end of line specification."));
0378c332 975
ebcd3b23 976 /* If line was specified by address, first print exactly which
dda83cd7
SM
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 980 if (*arg == '*')
dda83cd7 981 {
5af949e3 982 struct gdbarch *gdbarch;
cdb27c12 983
dda83cd7 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 ();
dda83cd7
SM
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);
dda83cd7 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);
dda83cd7 1001 }
0378c332 1002
ebcd3b23 1003 /* If what was given does not imply a symtab, it must be an
dda83cd7 1004 undebuggable symbol which means no source code. */
0378c332
FN
1005
1006 if (sal.symtab == 0)
dda83cd7 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,
dda83cd7 1113 safe_strerror (errno));
947d3946
PW
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 {
b2701685 1398 printf_filtered (_("Dump of assembler code "));
d14508fe 1399 if (name != NULL)
b2701685
TT
1400 printf_filtered (_("for function %ps:\n"),
1401 styled_string (function_name_style.style (), name));
e9480230 1402 if (block == nullptr || BLOCK_CONTIGUOUS_P (block))
dda83cd7 1403 {
e9480230 1404 if (name == NULL)
b2701685
TT
1405 printf_filtered (_("from %ps to %ps:\n"),
1406 styled_string (address_style.style (),
1407 paddress (gdbarch, low)),
1408 styled_string (address_style.style (),
1409 paddress (gdbarch, high)));
d14508fe 1410
e9480230
KB
1411 /* Dump the specified range. */
1412 gdb_disassembly (gdbarch, current_uiout, flags, -1, low, high);
1413 }
1414 else
dda83cd7 1415 {
e9480230
KB
1416 for (int i = 0; i < BLOCK_NRANGES (block); i++)
1417 {
b926417a
TT
1418 CORE_ADDR range_low = BLOCK_RANGE_START (block, i);
1419 CORE_ADDR range_high = BLOCK_RANGE_END (block, i);
b2701685
TT
1420 printf_filtered (_("Address range %ps to %ps:\n"),
1421 styled_string (address_style.style (),
1422 paddress (gdbarch, range_low)),
1423 styled_string (address_style.style (),
1424 paddress (gdbarch, range_high)));
b926417a
TT
1425 gdb_disassembly (gdbarch, current_uiout, flags, -1,
1426 range_low, range_high);
e9480230
KB
1427 }
1428 }
b2701685 1429 printf_filtered (_("End of assembler dump.\n"));
d14508fe 1430 }
d14508fe
DE
1431}
1432
1433/* Subroutine of disassemble_command to simplify it.
9c419145 1434 Print a disassembly of the current function according to FLAGS. */
d14508fe
DE
1435
1436static void
9a24775b 1437disassemble_current_function (gdb_disassembly_flags flags)
d14508fe 1438{
13274fc3
UW
1439 struct frame_info *frame;
1440 struct gdbarch *gdbarch;
d14508fe 1441 CORE_ADDR low, high, pc;
2c02bd72 1442 const char *name;
e9480230 1443 const struct block *block;
d14508fe 1444
13274fc3
UW
1445 frame = get_selected_frame (_("No frame selected."));
1446 gdbarch = get_frame_arch (frame);
9bf4bce9 1447 pc = get_frame_address_in_block (frame);
e9480230 1448 if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
d14508fe
DE
1449 error (_("No function contains program counter for selected frame."));
1450#if defined(TUI)
1451 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1452 `tui_version'. */
1453 if (tui_active)
1454 /* FIXME: cagney/2004-02-07: This should be an observer. */
13274fc3 1455 low = tui_get_low_disassembly_address (gdbarch, low, pc);
d14508fe 1456#endif
13274fc3 1457 low += gdbarch_deprecated_function_start_offset (gdbarch);
d14508fe 1458
e9480230 1459 print_disassembly (gdbarch, name, low, high, block, flags);
d14508fe
DE
1460}
1461
1462/* Dump a specified section of assembly code.
1463
1464 Usage:
6ff0ba5f 1465 disassemble [/mrs]
d14508fe 1466 - dump the assembly code for the function of the current pc
6ff0ba5f 1467 disassemble [/mrs] addr
d14508fe 1468 - dump the assembly code for the function at ADDR
6ff0ba5f
DE
1469 disassemble [/mrs] low,high
1470 disassemble [/mrs] low,+length
53a71c06 1471 - dump the assembly code in the range [LOW,HIGH), or [LOW,LOW+length)
d14508fe 1472
6ff0ba5f
DE
1473 A /m modifier will include source code with the assembly in a
1474 "source centric" view. This view lists only the file of the first insn,
1475 even if other source files are involved (e.g., inlined functions), and
1476 the output is in source order, even with optimized code. This view is
1477 considered deprecated as it hasn't been useful in practice.
1478
1479 A /r modifier will include raw instructions in hex with the assembly.
1480
1481 A /s modifier will include source code with the assembly, like /m, with
1482 two important differences:
1483 1) The output is still in pc address order.
1484 2) File names and contents for all relevant source files are displayed. */
83c31e7d 1485
83c31e7d 1486static void
0b39b52e 1487disassemble_command (const char *arg, int from_tty)
83c31e7d 1488{
13274fc3 1489 struct gdbarch *gdbarch = get_current_arch ();
83c31e7d 1490 CORE_ADDR low, high;
f75a0693 1491 const general_symbol_info *symbol = nullptr;
2c02bd72 1492 const char *name;
d36fc00b 1493 CORE_ADDR pc;
9a24775b 1494 gdb_disassembly_flags flags;
bbc13ae3 1495 const char *p;
e9480230 1496 const struct block *block = nullptr;
83c31e7d 1497
bbc13ae3 1498 p = arg;
83c31e7d 1499 name = NULL;
e6158f16 1500 flags = 0;
d14508fe 1501
bbc13ae3 1502 if (p && *p == '/')
83c31e7d 1503 {
bbc13ae3 1504 ++p;
d14508fe 1505
bbc13ae3 1506 if (*p == '\0')
d14508fe
DE
1507 error (_("Missing modifier."));
1508
bbc13ae3 1509 while (*p && ! isspace (*p))
d14508fe 1510 {
bbc13ae3 1511 switch (*p++)
d14508fe
DE
1512 {
1513 case 'm':
6ff0ba5f 1514 flags |= DISASSEMBLY_SOURCE_DEPRECATED;
e6158f16
HZ
1515 break;
1516 case 'r':
1517 flags |= DISASSEMBLY_RAW_INSN;
d14508fe 1518 break;
6ff0ba5f
DE
1519 case 's':
1520 flags |= DISASSEMBLY_SOURCE;
1521 break;
d14508fe
DE
1522 default:
1523 error (_("Invalid disassembly modifier."));
1524 }
1525 }
1526
f1735a53 1527 p = skip_spaces (p);
d14508fe
DE
1528 }
1529
6ff0ba5f
DE
1530 if ((flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1531 == (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1532 error (_("Cannot specify both /m and /s."));
1533
bbc13ae3 1534 if (! p || ! *p)
d14508fe 1535 {
9c419145 1536 flags |= DISASSEMBLY_OMIT_FNAME;
e6158f16 1537 disassemble_current_function (flags);
d14508fe 1538 return;
83c31e7d 1539 }
d14508fe 1540
bbc13ae3
KS
1541 pc = value_as_address (parse_to_comma_and_eval (&p));
1542 if (p[0] == ',')
1543 ++p;
1544 if (p[0] == '\0')
83c31e7d
FN
1545 {
1546 /* One argument. */
f75a0693 1547 if (!find_pc_partial_function_sym (pc, &symbol, &low, &high, &block))
8a3fe4f8 1548 error (_("No function contains specified address."));
f75a0693
AB
1549
1550 if (asm_demangle)
1551 name = symbol->print_name ();
1552 else
1553 name = symbol->linkage_name ();
1554
83c31e7d 1555#if defined(TUI)
021e7609
AC
1556 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1557 `tui_version'. */
22940a24
AC
1558 if (tui_active)
1559 /* FIXME: cagney/2004-02-07: This should be an observer. */
13274fc3 1560 low = tui_get_low_disassembly_address (gdbarch, low, pc);
83c31e7d 1561#endif
13274fc3 1562 low += gdbarch_deprecated_function_start_offset (gdbarch);
9c419145 1563 flags |= DISASSEMBLY_OMIT_FNAME;
83c31e7d
FN
1564 }
1565 else
1566 {
1567 /* Two arguments. */
53a71c06 1568 int incl_flag = 0;
21a0512e 1569 low = pc;
f1735a53 1570 p = skip_spaces (p);
bbc13ae3 1571 if (p[0] == '+')
53a71c06 1572 {
bbc13ae3 1573 ++p;
53a71c06
CR
1574 incl_flag = 1;
1575 }
bbc13ae3 1576 high = parse_and_eval_address (p);
53a71c06
CR
1577 if (incl_flag)
1578 high += low;
83c31e7d
FN
1579 }
1580
e9480230 1581 print_disassembly (gdbarch, name, low, high, block, flags);
83c31e7d
FN
1582}
1583
d318976c 1584static void
0b39b52e 1585make_command (const char *arg, int from_tty)
d318976c 1586{
d318976c 1587 if (arg == 0)
be47f9e8 1588 shell_escape ("make", from_tty);
d318976c
FN
1589 else
1590 {
be47f9e8 1591 std::string cmd = std::string ("make ") + arg;
d318976c 1592
be47f9e8
PA
1593 shell_escape (cmd.c_str (), from_tty);
1594 }
d318976c
FN
1595}
1596
d318976c 1597static void
dede02ce 1598show_user (const char *args, int from_tty)
d318976c
FN
1599{
1600 struct cmd_list_element *c;
d318976c
FN
1601
1602 if (args)
1603 {
6f937416 1604 const char *comname = args;
cdb27c12 1605
cf00cd6f 1606 c = lookup_cmd (&comname, cmdlist, "", NULL, 0, 1);
a9f116cb 1607 if (!cli_user_command_p (c))
8a3fe4f8 1608 error (_("Not a user command."));
adb483fe 1609 show_user_1 (c, "", args, gdb_stdout);
d318976c
FN
1610 }
1611 else
1612 {
1613 for (c = cmdlist; c; c = c->next)
1614 {
a9f116cb 1615 if (cli_user_command_p (c) || c->prefixlist != NULL)
adb483fe 1616 show_user_1 (c, "", c->name, gdb_stdout);
d318976c
FN
1617 }
1618 }
1619}
1620
1621/* Search through names of commands and documentations for a certain
ebcd3b23
MS
1622 regular expression. */
1623
66d8c862
PW
1624static void
1625apropos_command (const char *arg, int from_tty)
d318976c 1626{
66d8c862
PW
1627 bool verbose = arg && check_for_argument (&arg, "-v", 2);
1628
66d8c862 1629 if (arg == NULL || *arg == '\0')
f55af66d 1630 error (_("REGEXP string is empty"));
d318976c 1631
66d8c862 1632 compiled_regex pattern (arg, REG_ICASE,
2d7cc5c7 1633 _("Error in regular expression"));
dc92e161 1634
66d8c862 1635 apropos_cmd (gdb_stdout, cmdlist, verbose, pattern, "");
d318976c 1636}
5a56e9c5 1637
cf00cd6f
PW
1638/* The options for the "alias" command. */
1639
1640struct alias_opts
1641{
1642 /* For "-a". */
1643 bool abbrev_flag = false;
1644};
1645
1646static const gdb::option::option_def alias_option_defs[] = {
1647
1648 gdb::option::flag_option_def<alias_opts> {
1649 "a",
1650 [] (alias_opts *opts) { return &opts->abbrev_flag; },
1651 N_("Specify that ALIAS is an abbreviation of COMMAND.\n\
1652Abbreviations are not used in command completion."),
1653 },
1654
1655};
1656
1657/* Create an option_def_group for the "alias" options, with
1658 A_OPTS as context. */
1659
1660static gdb::option::option_def_group
1661make_alias_options_def_group (alias_opts *a_opts)
1662{
1663 return {{alias_option_defs}, a_opts};
1664}
1665
1666/* Completer for the "alias_command". */
1667
1668static void
1669alias_command_completer (struct cmd_list_element *ignore,
1670 completion_tracker &tracker,
1671 const char *text, const char *word)
1672{
1673 const auto grp = make_alias_options_def_group (nullptr);
1674
1675 tracker.set_use_custom_word_point (true);
1676
1677 if (gdb::option::complete_options
1678 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp))
1679 return;
1680
1681 const char *delim = strchr (text, '=');
1682
1683 /* If we're past the "=" delimiter, complete the
1684 "alias ALIAS = COMMAND [DEFAULT-ARGS...]" as if the user is
1685 typing COMMAND DEFAULT-ARGS... */
1686 if (delim != text
1687 && delim != nullptr
1688 && isspace (delim[-1])
1689 && (isspace (delim[1]) || delim[1] == '\0'))
1690 {
1691 std::string new_text = std::string (delim + 1);
1692
1693 tracker.advance_custom_word_point_by (delim + 1 - text);
1694 complete_nested_command_line (tracker, new_text.c_str ());
1695 return;
1696 }
1697
1698 /* We're not yet past the "=" delimiter. Complete a command, as
1699 the user might type an alias following a prefix command. */
1700 complete_nested_command_line (tracker, text);
1701}
1702
5a56e9c5
DE
1703/* Subroutine of alias_command to simplify it.
1704 Return the first N elements of ARGV flattened back to a string
1705 with a space separating each element.
1706 ARGV may not be NULL.
1707 This does not take care of quoting elements in case they contain spaces
1708 on purpose. */
1709
a97e29d2
TT
1710static std::string
1711argv_to_string (char **argv, int n)
5a56e9c5
DE
1712{
1713 int i;
a97e29d2 1714 std::string result;
5a56e9c5
DE
1715
1716 gdb_assert (argv != NULL);
1717 gdb_assert (n >= 0 && n <= countargv (argv));
1718
1719 for (i = 0; i < n; ++i)
1720 {
1721 if (i > 0)
a97e29d2
TT
1722 result += " ";
1723 result += argv[i];
5a56e9c5
DE
1724 }
1725
1726 return result;
1727}
1728
1729/* Subroutine of alias_command to simplify it.
cf00cd6f
PW
1730 Verifies that COMMAND can have an alias:
1731 COMMAND must exist.
1732 COMMAND must not have default args.
1733 This last condition is to avoid the following:
1734 alias aaa = backtrace -full
1735 alias bbb = aaa -past-main
1736 as (at least currently), alias default args are not cumulative
1737 and the user would expect bbb to execute 'backtrace -full -past-main'
1738 while it will execute 'backtrace -past-main'. */
5a56e9c5 1739
cf00cd6f
PW
1740static void
1741validate_aliased_command (const char *command)
5a56e9c5
DE
1742{
1743 struct cmd_list_element *c;
cf00cd6f 1744 std::string default_args;
5a56e9c5 1745
cf00cd6f 1746 c = lookup_cmd_1 (& command, cmdlist, NULL, &default_args, 1);
5a56e9c5
DE
1747
1748 if (c == NULL || c == (struct cmd_list_element *) -1)
cf00cd6f
PW
1749 error (_("Invalid command to alias to: %s"), command);
1750
1751 if (!default_args.empty ())
1752 error (_("Cannot define an alias of an alias that has default args"));
5a56e9c5
DE
1753}
1754
7f31862a
PA
1755/* Called when "alias" was incorrectly used. */
1756
1757static void
1758alias_usage_error (void)
1759{
cf00cd6f 1760 error (_("Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]"));
7f31862a
PA
1761}
1762
5a56e9c5
DE
1763/* Make an alias of an existing command. */
1764
1765static void
0b39b52e 1766alias_command (const char *args, int from_tty)
5a56e9c5 1767{
cf00cd6f
PW
1768 alias_opts a_opts;
1769
1770 auto grp = make_alias_options_def_group (&a_opts);
1771 gdb::option::process_options
1772 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp);
1773
5a56e9c5 1774 int i, alias_argc, command_argc;
0b39b52e 1775 const char *equals;
a97e29d2 1776 const char *alias, *command;
5a56e9c5
DE
1777
1778 if (args == NULL || strchr (args, '=') == NULL)
7f31862a 1779 alias_usage_error ();
5a56e9c5 1780
773a1edc
TT
1781 equals = strchr (args, '=');
1782 std::string args2 (args, equals - args);
1783
1784 gdb_argv built_alias_argv (args2.c_str ());
cf00cd6f
PW
1785
1786 const char *default_args = equals + 1;
1787 struct cmd_list_element *c_command_prefix;
1788
1789 lookup_cmd_for_default_args (&default_args, &c_command_prefix);
1790 std::string command_argv_str (equals + 1,
1791 default_args == nullptr
1792 ? strlen (equals + 1)
1793 : default_args - equals - 1);
1794 gdb_argv command_argv (command_argv_str.c_str ());
5a56e9c5 1795
773a1edc 1796 char **alias_argv = built_alias_argv.get ();
5a56e9c5
DE
1797
1798 if (alias_argv[0] == NULL || command_argv[0] == NULL
1799 || *alias_argv[0] == '\0' || *command_argv[0] == '\0')
7f31862a 1800 alias_usage_error ();
5a56e9c5
DE
1801
1802 for (i = 0; alias_argv[i] != NULL; ++i)
1803 {
1804 if (! valid_user_defined_cmd_name_p (alias_argv[i]))
1805 {
1806 if (i == 0)
1807 error (_("Invalid command name: %s"), alias_argv[i]);
1808 else
1809 error (_("Invalid command element name: %s"), alias_argv[i]);
1810 }
1811 }
1812
1813 alias_argc = countargv (alias_argv);
773a1edc 1814 command_argc = command_argv.count ();
5a56e9c5 1815
cf00cd6f 1816 /* COMMAND must exist, and cannot have default args.
5a56e9c5
DE
1817 Reconstruct the command to remove any extraneous spaces,
1818 for better error messages. */
773a1edc
TT
1819 std::string command_string (argv_to_string (command_argv.get (),
1820 command_argc));
a97e29d2 1821 command = command_string.c_str ();
cf00cd6f 1822 validate_aliased_command (command);
5a56e9c5
DE
1823
1824 /* ALIAS must not exist. */
a97e29d2
TT
1825 std::string alias_string (argv_to_string (alias_argv, alias_argc));
1826 alias = alias_string.c_str ();
0605465f
PW
1827 {
1828 cmd_list_element *alias_cmd, *prefix_cmd, *cmd;
1829
1830 if (lookup_cmd_composition (alias, &alias_cmd, &prefix_cmd, &cmd))
1831 {
1832 const char *alias_name = alias_argv[alias_argc-1];
1833
1834 /* If we found an existing ALIAS_CMD, check that the prefix differ or
1835 the name differ. */
1836
1837 if (alias_cmd != nullptr
1838 && alias_cmd->prefix == prefix_cmd
1839 && strcmp (alias_name, alias_cmd->name) == 0)
1840 error (_("Alias already exists: %s"), alias);
1841
1842 /* Check ALIAS differs from the found CMD. */
1843
1844 if (cmd->prefix == prefix_cmd
1845 && strcmp (alias_name, cmd->name) == 0)
1846 error (_("Alias %s is the name of an existing command"), alias);
1847 }
1848 }
1849
5a56e9c5 1850
cf00cd6f
PW
1851 struct cmd_list_element *alias_cmd;
1852
5a56e9c5
DE
1853 /* If ALIAS is one word, it is an alias for the entire COMMAND.
1854 Example: alias spe = set print elements
1855
1856 Otherwise ALIAS and COMMAND must have the same number of words,
b65b566c
PW
1857 and every word except the last must identify the same prefix command;
1858 and the last word of ALIAS is made an alias of the last word of COMMAND.
5a56e9c5
DE
1859 Example: alias set print elms = set pr elem
1860 Note that unambiguous abbreviations are allowed. */
1861
1862 if (alias_argc == 1)
1863 {
1864 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
cf00cd6f
PW
1865 alias_cmd = add_com_alias (xstrdup (alias_argv[0]), command, class_alias,
1866 a_opts.abbrev_flag);
5a56e9c5
DE
1867 }
1868 else
1869 {
6f937416 1870 const char *alias_prefix, *command_prefix;
5a56e9c5
DE
1871 struct cmd_list_element *c_alias, *c_command;
1872
1873 if (alias_argc != command_argc)
1874 error (_("Mismatched command length between ALIAS and COMMAND."));
1875
1876 /* Create copies of ALIAS and COMMAND without the last word,
b65b566c
PW
1877 and use that to verify the leading elements give the same
1878 prefix command. */
a97e29d2
TT
1879 std::string alias_prefix_string (argv_to_string (alias_argv,
1880 alias_argc - 1));
b65b566c 1881 std::string command_prefix_string (argv_to_string (command_argv.get (),
a97e29d2
TT
1882 command_argc - 1));
1883 alias_prefix = alias_prefix_string.c_str ();
1884 command_prefix = command_prefix_string.c_str ();
5a56e9c5 1885
cf00cd6f 1886 c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, NULL, 1);
5a56e9c5
DE
1887 /* We've already tried to look up COMMAND. */
1888 gdb_assert (c_command != NULL
1889 && c_command != (struct cmd_list_element *) -1);
1890 gdb_assert (c_command->prefixlist != NULL);
cf00cd6f 1891 c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, NULL, 1);
5a56e9c5
DE
1892 if (c_alias != c_command)
1893 error (_("ALIAS and COMMAND prefixes do not match."));
1894
1895 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
cf00cd6f
PW
1896 alias_cmd = add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]),
1897 command_argv[command_argc - 1],
1898 class_alias, a_opts.abbrev_flag,
1899 c_command->prefixlist);
1900 }
1901
1902 gdb_assert (alias_cmd != nullptr);
1903 gdb_assert (alias_cmd->default_args.empty ());
1904 if (default_args != nullptr)
1905 {
1906 default_args = skip_spaces (default_args);
1907
1908 alias_cmd->default_args = default_args;
5a56e9c5
DE
1909 }
1910}
d318976c 1911\f
06871ae8
PA
1912/* Print the file / line number / symbol name of the location
1913 specified by SAL. */
1914
1915static void
1916print_sal_location (const symtab_and_line &sal)
1917{
1918 scoped_restore_current_program_space restore_pspace;
1919 set_current_program_space (sal.pspace);
1920
1921 const char *sym_name = NULL;
1922 if (sal.symbol != NULL)
987012b8 1923 sym_name = sal.symbol->print_name ();
06871ae8
PA
1924 printf_filtered (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"),
1925 symtab_to_filename_for_display (sal.symtab),
1926 sal.line, sym_name != NULL ? sym_name : "???");
1927}
1928
0378c332 1929/* Print a list of files and line numbers which a user may choose from
ebcd3b23 1930 in order to list a function which was specified ambiguously (as
6c5b2ebe
PA
1931 with `list classname::overloadedfuncname', for example). The SALS
1932 array provides the filenames and line numbers. FORMAT is a
1933 printf-style format string used to tell the user what was
e439fa14 1934 ambiguous. */
0378c332
FN
1935
1936static void
6c5b2ebe
PA
1937ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
1938 const char *format, ...)
0378c332 1939{
e439fa14
PA
1940 va_list ap;
1941 va_start (ap, format);
1942 vprintf_filtered (format, ap);
1943 va_end (ap);
1944
6c5b2ebe 1945 for (const auto &sal : sals)
06871ae8 1946 print_sal_location (sal);
0378c332
FN
1947}
1948
6c5b2ebe
PA
1949/* Comparison function for filter_sals. Returns a qsort-style
1950 result. */
f8eba3c6
TT
1951
1952static int
6c5b2ebe 1953cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb)
f8eba3c6 1954{
6c5b2ebe
PA
1955 const char *dira = SYMTAB_DIRNAME (sala.symtab);
1956 const char *dirb = SYMTAB_DIRNAME (salb.symtab);
f8eba3c6
TT
1957 int r;
1958
ee6f8984 1959 if (dira == NULL)
f8eba3c6 1960 {
ee6f8984 1961 if (dirb != NULL)
f8eba3c6
TT
1962 return -1;
1963 }
ee6f8984 1964 else if (dirb == NULL)
f8eba3c6 1965 {
ee6f8984 1966 if (dira != NULL)
f8eba3c6
TT
1967 return 1;
1968 }
1969 else
1970 {
ee6f8984 1971 r = filename_cmp (dira, dirb);
f8eba3c6
TT
1972 if (r)
1973 return r;
1974 }
1975
6c5b2ebe 1976 r = filename_cmp (sala.symtab->filename, salb.symtab->filename);
f8eba3c6
TT
1977 if (r)
1978 return r;
1979
6c5b2ebe 1980 if (sala.line < salb.line)
f8eba3c6 1981 return -1;
6c5b2ebe 1982 return sala.line == salb.line ? 0 : 1;
f8eba3c6
TT
1983}
1984
1985/* Remove any SALs that do not match the current program space, or
1986 which appear to be "file:line" duplicates. */
1987
1988static void
6c5b2ebe 1989filter_sals (std::vector<symtab_and_line> &sals)
f8eba3c6 1990{
6c5b2ebe
PA
1991 /* Remove SALs that do not match. */
1992 auto from = std::remove_if (sals.begin (), sals.end (),
1993 [&] (const symtab_and_line &sal)
1994 { return (sal.pspace != current_program_space || sal.symtab == NULL); });
1995
1996 /* Remove dups. */
1997 std::sort (sals.begin (), from,
1998 [] (const symtab_and_line &sala, const symtab_and_line &salb)
1999 { return cmp_symtabs (sala, salb) < 0; });
2000
2001 from = std::unique (sals.begin (), from,
2002 [&] (const symtab_and_line &sala,
2003 const symtab_and_line &salb)
2004 { return cmp_symtabs (sala, salb) == 0; });
2005
2006 sals.erase (from, sals.end ());
f8eba3c6
TT
2007}
2008
d318976c
FN
2009void
2010init_cmd_lists (void)
2011{
20f01a46 2012 max_user_call_depth = 1024;
d318976c
FN
2013}
2014
920d2a44
AC
2015static void
2016show_info_verbose (struct ui_file *file, int from_tty,
2017 struct cmd_list_element *c,
2018 const char *value)
2019{
2020 if (info_verbose)
9a2b4c1b
MS
2021 fprintf_filtered (file,
2022 _("Verbose printing of informational messages is %s.\n"),
2023 value);
920d2a44
AC
2024 else
2025 fprintf_filtered (file, _("Verbosity is %s.\n"), value);
2026}
2027
2028static void
2029show_history_expansion_p (struct ui_file *file, int from_tty,
2030 struct cmd_list_element *c, const char *value)
2031{
2032 fprintf_filtered (file, _("History expansion on command input is %s.\n"),
2033 value);
2034}
2035
920d2a44
AC
2036static void
2037show_remote_debug (struct ui_file *file, int from_tty,
2038 struct cmd_list_element *c, const char *value)
2039{
2040 fprintf_filtered (file, _("Debugging of remote protocol is %s.\n"),
2041 value);
2042}
2043
2044static void
2045show_remote_timeout (struct ui_file *file, int from_tty,
2046 struct cmd_list_element *c, const char *value)
2047{
9a2b4c1b
MS
2048 fprintf_filtered (file,
2049 _("Timeout limit to wait for target to respond is %s.\n"),
920d2a44
AC
2050 value);
2051}
2052
2053static void
2054show_max_user_call_depth (struct ui_file *file, int from_tty,
2055 struct cmd_list_element *c, const char *value)
2056{
9a2b4c1b
MS
2057 fprintf_filtered (file,
2058 _("The max call depth for user-defined commands is %s.\n"),
920d2a44
AC
2059 value);
2060}
2061
9ad9b77d
PW
2062/* Returns the cmd_list_element in SHOWLIST corresponding to the first
2063 argument of ARGV, which must contain one single value.
2064 Throws an error if no value provided, or value not correct.
2065 FNNAME is used in the error message. */
2066
2067static cmd_list_element *
2068setting_cmd (const char *fnname, struct cmd_list_element *showlist,
2069 int argc, struct value **argv)
2070{
2071 if (argc == 0)
2072 error (_("You must provide an argument to %s"), fnname);
2073 if (argc != 1)
2074 error (_("You can only provide one argument to %s"), fnname);
2075
2076 struct type *type0 = check_typedef (value_type (argv[0]));
2077
78134374
SM
2078 if (type0->code () != TYPE_CODE_ARRAY
2079 && type0->code () != TYPE_CODE_STRING)
9ad9b77d
PW
2080 error (_("First argument of %s must be a string."), fnname);
2081
2082 const char *a0 = (const char *) value_contents (argv[0]);
cf00cd6f 2083 cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", NULL, -1, 0);
9ad9b77d 2084
cd4c4c07 2085 if (cmd == nullptr || cmd->type != show_cmd)
9ad9b77d
PW
2086 error (_("First argument of %s must be a "
2087 "valid setting of the 'show' command."), fnname);
2088
2089 return cmd;
2090}
2091
2092/* Builds a value from the show CMD. */
2093
2094static struct value *
2095value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch)
2096{
2097 switch (cmd->var_type)
2098 {
2099 case var_integer:
2100 if (*(int *) cmd->var == INT_MAX)
2101 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2102 0);
2103 else
2104 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2105 *(int *) cmd->var);
2106 case var_zinteger:
2107 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2108 *(int *) cmd->var);
2109 case var_boolean:
2110 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2111 *(bool *) cmd->var ? 1 : 0);
2112 case var_zuinteger_unlimited:
2113 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2114 *(int *) cmd->var);
2115 case var_auto_boolean:
2116 {
2117 int val;
2118
2119 switch (*(enum auto_boolean*) cmd->var)
2120 {
2121 case AUTO_BOOLEAN_TRUE:
2122 val = 1;
2123 break;
2124 case AUTO_BOOLEAN_FALSE:
2125 val = 0;
2126 break;
2127 case AUTO_BOOLEAN_AUTO:
2128 val = -1;
2129 break;
2130 default:
2131 gdb_assert_not_reached ("invalid var_auto_boolean");
2132 }
2133 return value_from_longest (builtin_type (gdbarch)->builtin_int,
2134 val);
2135 }
2136 case var_uinteger:
2137 if (*(unsigned int *) cmd->var == UINT_MAX)
2138 return value_from_ulongest
2139 (builtin_type (gdbarch)->builtin_unsigned_int, 0);
2140 else
2141 return value_from_ulongest
2142 (builtin_type (gdbarch)->builtin_unsigned_int,
2143 *(unsigned int *) cmd->var);
2144 case var_zuinteger:
2145 return value_from_ulongest (builtin_type (gdbarch)->builtin_unsigned_int,
2146 *(unsigned int *) cmd->var);
2147 case var_string:
2148 case var_string_noescape:
2149 case var_optional_filename:
2150 case var_filename:
2151 case var_enum:
2152 if (*(char **) cmd->var)
2153 return value_cstring (*(char **) cmd->var, strlen (*(char **) cmd->var),
2154 builtin_type (gdbarch)->builtin_char);
2155 else
2156 return value_cstring ("", 1,
2157 builtin_type (gdbarch)->builtin_char);
2158 default:
2159 gdb_assert_not_reached ("bad var_type");
2160 }
2161}
2162
2163/* Implementation of the convenience function $_gdb_setting. */
2164
2165static struct value *
2166gdb_setting_internal_fn (struct gdbarch *gdbarch,
2167 const struct language_defn *language,
2168 void *cookie, int argc, struct value **argv)
2169{
2170 return value_from_setting (setting_cmd ("$_gdb_setting", showlist,
2171 argc, argv),
2172 gdbarch);
2173}
2174
2175/* Implementation of the convenience function $_gdb_maint_setting. */
2176
2177static struct value *
2178gdb_maint_setting_internal_fn (struct gdbarch *gdbarch,
2179 const struct language_defn *language,
2180 void *cookie, int argc, struct value **argv)
2181{
2182 return value_from_setting (setting_cmd ("$_gdb_maint_setting",
2183 maintenance_show_cmdlist,
2184 argc, argv),
2185 gdbarch);
2186}
2187
2188/* Builds a string value from the show CMD. */
2189
2190static struct value *
2191str_value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch)
2192{
2193 switch (cmd->var_type)
2194 {
2195 case var_integer:
2196 case var_zinteger:
2197 case var_boolean:
2198 case var_zuinteger_unlimited:
2199 case var_auto_boolean:
2200 case var_uinteger:
2201 case var_zuinteger:
2202 {
2203 std::string cmd_val = get_setshow_command_value_string (cmd);
2204
2205 return value_cstring (cmd_val.c_str (), cmd_val.size (),
2206 builtin_type (gdbarch)->builtin_char);
2207 }
2208
2209 case var_string:
2210 case var_string_noescape:
2211 case var_optional_filename:
2212 case var_filename:
2213 case var_enum:
2214 /* For these cases, we do not use get_setshow_command_value_string,
2215 as this function handle some characters specially, e.g. by
2216 escaping quotes. So, we directly use the cmd->var string value,
2217 similarly to the value_from_setting code for these cases. */
2218 if (*(char **) cmd->var)
2219 return value_cstring (*(char **) cmd->var, strlen (*(char **) cmd->var),
2220 builtin_type (gdbarch)->builtin_char);
2221 else
2222 return value_cstring ("", 1,
2223 builtin_type (gdbarch)->builtin_char);
2224
2225 default:
2226 gdb_assert_not_reached ("bad var_type");
2227 }
2228}
2229
2230/* Implementation of the convenience function $_gdb_setting_str. */
2231
2232static struct value *
2233gdb_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_setting_str",
2238 showlist, argc, argv),
2239 gdbarch);
2240}
2241
2242
2243/* Implementation of the convenience function $_gdb_maint_setting_str. */
2244
2245static struct value *
2246gdb_maint_setting_str_internal_fn (struct gdbarch *gdbarch,
2247 const struct language_defn *language,
2248 void *cookie, int argc, struct value **argv)
2249{
2250 return str_value_from_setting (setting_cmd ("$_gdb_maint_setting_str",
2251 maintenance_show_cmdlist,
2252 argc, argv),
2253 gdbarch);
2254}
2255
6c265988 2256void _initialize_cli_cmds ();
d318976c 2257void
6c265988 2258_initialize_cli_cmds ()
d318976c
FN
2259{
2260 struct cmd_list_element *c;
2261
2262 /* Define the classes of commands.
1bfeeb0f 2263 They will appear in the help list in alphabetical order. */
d318976c 2264
0450cc4c 2265 add_cmd ("internals", class_maintenance, _("\
1a966eab 2266Maintenance commands.\n\
d318976c
FN
2267Some gdb commands are provided just for use by gdb maintainers.\n\
2268These commands are subject to frequent change, and may not be as\n\
1a966eab 2269well documented as user commands."),
d318976c 2270 &cmdlist);
0450cc4c
TT
2271 add_cmd ("obscure", class_obscure, _("Obscure features."), &cmdlist);
2272 add_cmd ("aliases", class_alias,
cf00cd6f 2273 _("User-defined aliases of other commands."), &cmdlist);
0450cc4c 2274 add_cmd ("user-defined", class_user, _("\
1a966eab 2275User-defined commands.\n\
d318976c 2276The commands in this class are those defined by the user.\n\
1a966eab 2277Use the \"define\" command to define a command."), &cmdlist);
0450cc4c 2278 add_cmd ("support", class_support, _("Support facilities."), &cmdlist);
d318976c 2279 if (!dbx_commands)
0450cc4c
TT
2280 add_cmd ("status", class_info, _("Status inquiries."), &cmdlist);
2281 add_cmd ("files", class_files, _("Specifying and examining files."),
1a966eab 2282 &cmdlist);
0450cc4c 2283 add_cmd ("breakpoints", class_breakpoint,
1a966eab 2284 _("Making program stop at certain points."), &cmdlist);
0450cc4c
TT
2285 add_cmd ("data", class_vars, _("Examining data."), &cmdlist);
2286 add_cmd ("stack", class_stack, _("\
1a966eab 2287Examining the stack.\n\
d318976c
FN
2288The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
2289counting from zero for the innermost (currently executing) frame.\n\n\
2290At any time gdb identifies one frame as the \"selected\" frame.\n\
2291Variable lookups are done with respect to the selected frame.\n\
2292When the program being debugged stops, gdb selects the innermost frame.\n\
1a966eab 2293The commands below can be used to select other frames by number or address."),
d318976c 2294 &cmdlist);
e98d2e6d
PW
2295#ifdef TUI
2296 add_cmd ("text-user-interface", class_tui,
2297 _("TUI is the GDB text based interface.\n\
2298In TUI mode, GDB can display several text windows showing\n\
2299the source file, the processor registers, the program disassembly, ..."), &cmdlist);
2300#endif
0450cc4c 2301 add_cmd ("running", class_run, _("Running the program."), &cmdlist);
d318976c 2302
ebcd3b23 2303 /* Define general commands. */
d318976c 2304
d729566a 2305 add_com ("pwd", class_files, pwd_command, _("\
590042fc
PW
2306Print working directory.\n\
2307This is used for your program as well."));
4f8d22e3 2308
1a966eab 2309 c = add_cmd ("cd", class_files, cd_command, _("\
d092c5a2
SDJ
2310Set working directory to DIR for debugger.\n\
2311The debugger's current working directory specifies where scripts and other\n\
2312files that can be loaded by GDB are located.\n\
2313In order to change the inferior's current working directory, the recommended\n\
2314way is to use the \"set cwd\" command."), &cmdlist);
5ba2abeb 2315 set_cmd_completer (c, filename_completer);
d318976c 2316
1bedd215
AC
2317 add_com ("echo", class_support, echo_command, _("\
2318Print a constant string. Give string as argument.\n\
d318976c
FN
2319C escape sequences may be used in the argument.\n\
2320No newline is added at the end of the argument;\n\
2321use \"\\n\" if you want a newline to be printed.\n\
2322Since leading and trailing whitespace are ignored in command arguments,\n\
2323if you want to print some you must use \"\\\" before leading whitespace\n\
1bedd215 2324to be printed or after trailing whitespace."));
d318976c 2325
973817a3
JB
2326 add_setshow_enum_cmd ("script-extension", class_support,
2327 script_ext_enums, &script_ext_mode, _("\
2328Set mode for script filename extension recognition."), _("\
2329Show mode for script filename extension recognition."), _("\
2330off == no filename extension recognition (all sourced files are GDB scripts)\n\
2331soft == evaluate script according to filename extension, fallback to GDB script"
2332 "\n\
2333strict == evaluate script according to filename extension, error if not supported"
2334 ),
2335 NULL,
2336 show_script_ext_mode,
2337 &setlist, &showlist);
2338
bdb52a22
TT
2339 add_com ("quit", class_support, quit_command, _("\
2340Exit gdb.\n\
2341Usage: quit [EXPR]\n\
2342The optional expression EXPR, if present, is evaluated and the result\n\
2343used as GDB's exit code. The default is zero."));
1bedd215
AC
2344 c = add_com ("help", class_support, help_command,
2345 _("Print list of commands."));
5ba2abeb 2346 set_cmd_completer (c, command_completer);
d318976c
FN
2347 add_com_alias ("q", "quit", class_support, 1);
2348 add_com_alias ("h", "help", class_support, 1);
2349
5bf193a2
AC
2350 add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\
2351Set verbosity."), _("\
2352Show verbosity."), NULL,
2353 set_verbose,
920d2a44 2354 show_info_verbose,
5bf193a2 2355 &setlist, &showlist);
d318976c 2356
0743fc83
TT
2357 add_basic_prefix_cmd ("history", class_support, _("\
2358Generic command for setting command history parameters."),
2359 &sethistlist, "set history ", 0, &setlist);
2360 add_show_prefix_cmd ("history", class_support, _("\
2361Generic command for showing command history parameters."),
2362 &showhistlist, "show history ", 0, &showlist);
d318976c 2363
5bf193a2
AC
2364 add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\
2365Set history expansion on command input."), _("\
2366Show history expansion on command input."), _("\
2367Without an argument, history expansion is enabled."),
2368 NULL,
920d2a44 2369 show_history_expansion_p,
5bf193a2 2370 &sethistlist, &showhistlist);
d318976c 2371
4fd6c7e8 2372 add_prefix_cmd ("info", class_info, info_command, _("\
1bedd215 2373Generic command for showing things about the program being debugged."),
4fd6c7e8 2374 &infolist, "info ", 0, &cmdlist);
d318976c 2375 add_com_alias ("i", "info", class_info, 1);
a177aad3 2376 add_com_alias ("inf", "info", class_info, 1);
d318976c
FN
2377
2378 add_com ("complete", class_obscure, complete_command,
1bedd215 2379 _("List the completions for the rest of the line as a command."));
d318976c 2380
a7b9ceb8 2381 c = add_show_prefix_cmd ("show", class_info, _("\
700b53b1 2382Generic command for showing things about the debugger."),
a7b9ceb8 2383 &showlist, "show ", 0, &cmdlist);
d318976c 2384 /* Another way to get at the same thing. */
a7b9ceb8 2385 add_alias_cmd ("set", c, class_info, 0, &infolist);
d318976c 2386
fdbc9870
PA
2387 c = add_com ("with", class_vars, with_command, _("\
2388Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING.\n\
2389Usage: with SETTING [VALUE] [-- COMMAND]\n\
2390Usage: w SETTING [VALUE] [-- COMMAND]\n\
2391With no COMMAND, repeats the last executed command.\n\
2392\n\
2393SETTING is any setting you can change with the \"set\" subcommands.\n\
2394E.g.:\n\
2395 with language pascal -- print obj\n\
2396 with print elements unlimited -- print obj\n\
2397\n\
2398You can change multiple settings using nested with, and use\n\
2399abbreviations for commands and/or values. E.g.:\n\
2400 w la p -- w p el u -- p obj"));
2401 set_cmd_completer_handle_brkchars (c, with_command_completer);
2402 add_com_alias ("w", "with", class_vars, 1);
2403
9ad9b77d
PW
2404 add_internal_function ("_gdb_setting_str", _("\
2405$_gdb_setting_str - returns the value of a GDB setting as a string.\n\
2406Usage: $_gdb_setting_str (setting)\n\
2407\n\
2408auto-boolean values are \"off\", \"on\", \"auto\".\n\
2409boolean values are \"off\", \"on\".\n\
2410Some integer settings accept an unlimited value, returned\n\
2411as \"unlimited\"."),
2412 gdb_setting_str_internal_fn, NULL);
2413
2414 add_internal_function ("_gdb_setting", _("\
2415$_gdb_setting - returns the value of a GDB setting.\n\
2416Usage: $_gdb_setting (setting)\n\
2417auto-boolean values are \"off\", \"on\", \"auto\".\n\
2418boolean values are \"off\", \"on\".\n\
2419Some integer settings accept an unlimited value, returned\n\
2420as 0 or -1 depending on the setting."),
2421 gdb_setting_internal_fn, NULL);
2422
2423 add_internal_function ("_gdb_maint_setting_str", _("\
2424$_gdb_maint_setting_str - returns the value of a GDB maintenance setting as a string.\n\
2425Usage: $_gdb_maint_setting_str (setting)\n\
2426\n\
2427auto-boolean values are \"off\", \"on\", \"auto\".\n\
2428boolean values are \"off\", \"on\".\n\
2429Some integer settings accept an unlimited value, returned\n\
2430as \"unlimited\"."),
2431 gdb_maint_setting_str_internal_fn, NULL);
2432
2433 add_internal_function ("_gdb_maint_setting", _("\
2434$_gdb_maint_setting - returns the value of a GDB maintenance setting.\n\
2435Usage: $_gdb_maint_setting (setting)\n\
2436auto-boolean values are \"off\", \"on\", \"auto\".\n\
2437boolean values are \"off\", \"on\".\n\
2438Some integer settings accept an unlimited value, returned\n\
2439as 0 or -1 depending on the setting."),
2440 gdb_maint_setting_internal_fn, NULL);
2441
db5f229b 2442 add_cmd ("commands", no_set_class, show_commands, _("\
1a966eab 2443Show the history of commands you typed.\n\
d318976c 2444You can supply a command number to start with, or a `+' to start after\n\
1a966eab 2445the previous command number shown."),
d318976c
FN
2446 &showlist);
2447
db5f229b 2448 add_cmd ("version", no_set_class, show_version,
1a966eab 2449 _("Show what version of GDB this is."), &showlist);
d318976c 2450
6eaaf48b
EZ
2451 add_cmd ("configuration", no_set_class, show_configuration,
2452 _("Show how GDB was configured at build time."), &showlist);
2453
85c07804
AC
2454 add_setshow_zinteger_cmd ("remote", no_class, &remote_debug, _("\
2455Set debugging of remote protocol."), _("\
2456Show debugging of remote protocol."), _("\
d318976c 2457When enabled, each packet sent or received with the remote target\n\
85c07804
AC
2458is displayed."),
2459 NULL,
920d2a44 2460 show_remote_debug,
85c07804 2461 &setdebuglist, &showdebuglist);
d318976c 2462
6fc1c773
YQ
2463 add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class,
2464 &remote_timeout, _("\
c0d88b1b
AC
2465Set timeout limit to wait for target to respond."), _("\
2466Show timeout limit to wait for target to respond."), _("\
d318976c 2467This value is used to set the time limit for gdb to wait for a response\n\
c0d88b1b 2468from the target."),
6fc1c773
YQ
2469 NULL,
2470 show_remote_timeout,
2471 &setlist, &showlist);
d318976c 2472
0743fc83
TT
2473 add_basic_prefix_cmd ("debug", no_class,
2474 _("Generic command for setting gdb debugging flags."),
2475 &setdebuglist, "set debug ", 0, &setlist);
d318976c 2476
0743fc83
TT
2477 add_show_prefix_cmd ("debug", no_class,
2478 _("Generic command for showing gdb debugging flags."),
2479 &showdebuglist, "show debug ", 0, &showlist);
d318976c 2480
be47f9e8 2481 c = add_com ("shell", class_support, shell_command, _("\
1bedd215
AC
2482Execute the rest of the line as a shell command.\n\
2483With no arguments, run an inferior shell."));
5ba2abeb 2484 set_cmd_completer (c, filename_completer);
d318976c 2485
d563b953
PW
2486 add_com_alias ("!", "shell", class_support, 0);
2487
1bedd215
AC
2488 c = add_com ("edit", class_files, edit_command, _("\
2489Edit specified file or function.\n\
0378c332 2490With no argument, edits file containing most recent line listed.\n\
0378c332
FN
2491Editing targets can be specified in these ways:\n\
2492 FILE:LINENUM, to edit at that line in that file,\n\
2493 FUNCTION, to edit at the beginning of that function,\n\
2494 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2495 *ADDRESS, to edit at the line containing that address.\n\
1bedd215 2496Uses EDITOR environment variable contents as editor (or ex as default)."));
0378c332
FN
2497
2498 c->completer = location_completer;
2499
947d3946
PW
2500 c = add_com ("pipe", class_support, pipe_command, _("\
2501Send the output of a gdb command to a shell command.\n\
2502Usage: | [COMMAND] | SHELL_COMMAND\n\
2503Usage: | -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2504Usage: pipe [COMMAND] | SHELL_COMMAND\n\
2505Usage: pipe -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2506\n\
2507Executes COMMAND and sends its output to SHELL_COMMAND.\n\
2508\n\
2509The -d option indicates to use the string DELIM to separate COMMAND\n\
2510from SHELL_COMMAND, in alternative to |. This is useful in\n\
2511case COMMAND contains a | character.\n\
2512\n\
2513With no COMMAND, repeat the last executed command\n\
2514and send its output to SHELL_COMMAND."));
5f4ba3e7 2515 set_cmd_completer_handle_brkchars (c, pipe_command_completer);
947d3946
PW
2516 add_com_alias ("|", "pipe", class_support, 0);
2517
1bedd215
AC
2518 add_com ("list", class_files, list_command, _("\
2519List specified function or line.\n\
0378c332
FN
2520With no argument, lists ten more lines after or around previous listing.\n\
2521\"list -\" lists the ten lines before a previous ten-line listing.\n\
2522One argument specifies a line, and ten lines are listed around that line.\n\
2523Two arguments with comma between specify starting and ending lines to list.\n\
0378c332
FN
2524Lines can be specified in these ways:\n\
2525 LINENUM, to list around that line in current file,\n\
2526 FILE:LINENUM, to list around that line in that file,\n\
2527 FUNCTION, to list around beginning of that function,\n\
2528 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2529 *ADDRESS, to list around the line containing that address.\n\
4fdd372d
AB
2530With two args, if one is empty, it stands for ten lines away from\n\
2531the other arg.\n\
2532\n\
2533By default, when a single location is given, display ten lines.\n\
2534This can be changed using \"set listsize\", and the current value\n\
2535can be shown using \"show listsize\"."));
0378c332 2536
4f45d445 2537 add_com_alias ("l", "list", class_files, 1);
0378c332
FN
2538
2539 if (dbx_commands)
2540 add_com_alias ("file", "list", class_files, 1);
2541
1bedd215
AC
2542 c = add_com ("disassemble", class_vars, disassemble_command, _("\
2543Disassemble a specified section of memory.\n\
16f3242c 2544Usage: disassemble[/m|/r|/s] START [, END]\n\
83c31e7d 2545Default is the function surrounding the pc of the selected frame.\n\
6ff0ba5f 2546\n\
16f3242c
TT
2547With a /s modifier, source lines are included (if available).\n\
2548In this mode, the output is displayed in PC address order, and\n\
2549file names and contents for all relevant source files are displayed.\n\
2550\n\
d14508fe 2551With a /m modifier, source lines are included (if available).\n\
6ff0ba5f
DE
2552This view is \"source centric\": the output is in source line order,\n\
2553regardless of any optimization that is present. Only the main source file\n\
2554is displayed, not those of, e.g., any inlined functions.\n\
2555This modifier hasn't proved useful in practice and is deprecated\n\
2556in favor of /s.\n\
2557\n\
e6158f16 2558With a /r modifier, raw instructions in hex are included.\n\
6ff0ba5f 2559\n\
83c31e7d 2560With a single argument, the function surrounding that address is dumped.\n\
53a71c06 2561Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
7e1e0340
DE
2562 in the form of \"start,end\", or \"start,+length\".\n\
2563\n\
2564Note that the address is interpreted as an expression, not as a location\n\
2565like in the \"break\" command.\n\
2566So, for example, if you want to disassemble function bar in file foo.c\n\
2567you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
83c31e7d 2568 set_cmd_completer (c, location_completer);
0378c332 2569
1bedd215
AC
2570 c = add_com ("make", class_support, make_command, _("\
2571Run the ``make'' program using the rest of the line as arguments."));
5ba2abeb 2572 set_cmd_completer (c, filename_completer);
1a966eab 2573 add_cmd ("user", no_class, show_user, _("\
ed3ef339 2574Show definitions of non-python/scheme user defined commands.\n\
d318976c 2575Argument is the name of the user defined command.\n\
1a966eab 2576With no argument, show definitions of all user defined commands."), &showlist);
66d8c862 2577 add_com ("apropos", class_support, apropos_command, _("\
590042fc 2578Search for commands matching a REGEXP.\n\
66d8c862
PW
2579Usage: apropos [-v] REGEXP\n\
2580Flag -v indicates to produce a verbose output, showing full documentation\n\
2581of the matching commands."));
20f01a46 2582
883b9c6c 2583 add_setshow_uinteger_cmd ("max-user-call-depth", no_class,
c0d88b1b 2584 &max_user_call_depth, _("\
ed3ef339
DE
2585Set the max call depth for non-python/scheme user-defined commands."), _("\
2586Show the max call depth for non-python/scheme user-defined commands."), NULL,
883b9c6c
YQ
2587 NULL,
2588 show_max_user_call_depth,
2589 &setlist, &showlist);
16026cd7
AS
2590
2591 add_setshow_boolean_cmd ("trace-commands", no_class, &trace_commands, _("\
2592Set tracing of GDB CLI commands."), _("\
2593Show state of GDB CLI command tracing."), _("\
2594When 'on', each command is displayed as it is executed."),
2595 NULL,
2596 NULL,
2597 &setlist, &showlist);
5a56e9c5 2598
cf00cd6f
PW
2599 const auto alias_opts = make_alias_options_def_group (nullptr);
2600
2601 static std::string alias_help
2602 = gdb::option::build_help (_("\
5a56e9c5 2603Define a new command that is an alias of an existing command.\n\
cf00cd6f 2604Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]\n\
5a56e9c5
DE
2605ALIAS is the name of the alias command to create.\n\
2606COMMAND is the command being aliased to.\n\
cf00cd6f
PW
2607\n\
2608Options:\n\
2609%OPTIONS%\n\
2610\n\
2611GDB will automatically prepend the provided DEFAULT-ARGS to the list\n\
2612of arguments explicitly provided when using ALIAS.\n\
2613Use \"help aliases\" to list all user defined aliases and their default args.\n\
5a56e9c5
DE
2614\n\
2615Examples:\n\
2616Make \"spe\" an alias of \"set print elements\":\n\
e0c45ded 2617 alias spe = set print elements\n\
5a56e9c5 2618Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
e0c45ded 2619 alias -a set print elms = set print elements\n\
cf00cd6f
PW
2620Make \"btf\" an alias of \"backtrace -full -past-entry -past-main\" :\n\
2621 alias btf = backtrace -full -past-entry -past-main\n\
2622Make \"wLapPeu\" an alias of 2 nested \"with\":\n\
2623 alias wLapPeu = with language pascal -- with print elements unlimited --"),
2624 alias_opts);
2625
2626 c = add_com ("alias", class_support, alias_command,
2627 alias_help.c_str ());
2628
2629 set_cmd_completer_handle_brkchars (c, alias_command_completer);
43e4916f 2630
b777eb6d 2631 const char *source_help_text = xstrprintf (_("\
43e4916f
TT
2632Read commands from a file named FILE.\n\
2633\n\
2634Usage: source [-s] [-v] FILE\n\
2635-s: search for the script in the source search path,\n\
2636 even if FILE contains directories.\n\
2637-v: each command in FILE is echoed as it is executed.\n\
2638\n\
2639Note that the file \"%s\" is read automatically in this way\n\
b777eb6d 2640when GDB is started."), GDBINIT);
43e4916f
TT
2641 c = add_cmd ("source", class_support, source_command,
2642 source_help_text, &cmdlist);
2643 set_cmd_completer (c, filename_completer);
2644}