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