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