gdbarch-selftests.c: No longer error out if debugging something
[deliverable/binutils-gdb.git] / gdb / cli / cli-cmds.c
1 /* GDB CLI commands.
2
3 Copyright (C) 2000-2020 Free Software Foundation, Inc.
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
9 the Free Software Foundation; either version 3 of the License, or
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
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "arch-utils.h"
22 #include "readline/tilde.h"
23 #include "completer.h"
24 #include "target.h" /* For baud_rate, remote_debug and remote_timeout. */
25 #include "gdbsupport/gdb_wait.h" /* For shell escape implementation. */
26 #include "gdbcmd.h"
27 #include "gdb_regex.h" /* Used by apropos_command. */
28 #include "gdb_vfork.h"
29 #include "linespec.h"
30 #include "expression.h"
31 #include "frame.h"
32 #include "value.h"
33 #include "language.h"
34 #include "filenames.h" /* For DOSish file names. */
35 #include "objfiles.h"
36 #include "source.h"
37 #include "disasm.h"
38 #include "tracepoint.h"
39 #include "gdbsupport/filestuff.h"
40 #include "location.h"
41 #include "block.h"
42
43 #include "ui-out.h"
44 #include "interps.h"
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"
51 #include "cli/cli-style.h"
52 #include "cli/cli-utils.h"
53
54 #include "extension.h"
55 #include "gdbsupport/pathstuff.h"
56
57 #ifdef TUI
58 #include "tui/tui.h" /* For tui_active et.al. */
59 #endif
60
61 #include <fcntl.h>
62 #include <algorithm>
63 #include <string>
64
65 /* Prototypes for local utility functions */
66
67 static void print_sal_location (const symtab_and_line &sal);
68
69 static void ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
70 const char *format, ...)
71 ATTRIBUTE_PRINTF (2, 3);
72
73 static void filter_sals (std::vector<symtab_and_line> &);
74
75 \f
76 /* See cli-cmds.h. */
77 unsigned int max_user_call_depth;
78
79 /* Define all cmd_list_elements. */
80
81 /* Chain containing all defined commands. */
82
83 struct cmd_list_element *cmdlist;
84
85 /* Chain containing all defined info subcommands. */
86
87 struct cmd_list_element *infolist;
88
89 /* Chain containing all defined enable subcommands. */
90
91 struct cmd_list_element *enablelist;
92
93 /* Chain containing all defined disable subcommands. */
94
95 struct cmd_list_element *disablelist;
96
97 /* Chain containing all defined stop subcommands. */
98
99 struct cmd_list_element *stoplist;
100
101 /* Chain containing all defined delete subcommands. */
102
103 struct cmd_list_element *deletelist;
104
105 /* Chain containing all defined detach subcommands. */
106
107 struct cmd_list_element *detachlist;
108
109 /* Chain containing all defined kill subcommands. */
110
111 struct cmd_list_element *killlist;
112
113 /* Chain containing all defined set subcommands */
114
115 struct cmd_list_element *setlist;
116
117 /* Chain containing all defined unset subcommands */
118
119 struct cmd_list_element *unsetlist;
120
121 /* Chain containing all defined show subcommands. */
122
123 struct cmd_list_element *showlist;
124
125 /* Chain containing all defined \"set history\". */
126
127 struct cmd_list_element *sethistlist;
128
129 /* Chain containing all defined \"show history\". */
130
131 struct cmd_list_element *showhistlist;
132
133 /* Chain containing all defined \"unset history\". */
134
135 struct cmd_list_element *unsethistlist;
136
137 /* Chain containing all defined maintenance subcommands. */
138
139 struct cmd_list_element *maintenancelist;
140
141 /* Chain containing all defined "maintenance info" subcommands. */
142
143 struct cmd_list_element *maintenanceinfolist;
144
145 /* Chain containing all defined "maintenance print" subcommands. */
146
147 struct cmd_list_element *maintenanceprintlist;
148
149 /* Chain containing all defined "maintenance check" subcommands. */
150
151 struct cmd_list_element *maintenancechecklist;
152
153 struct cmd_list_element *setprintlist;
154
155 struct cmd_list_element *showprintlist;
156
157 struct cmd_list_element *setdebuglist;
158
159 struct cmd_list_element *showdebuglist;
160
161 struct cmd_list_element *setchecklist;
162
163 struct cmd_list_element *showchecklist;
164
165 /* Command tracing state. */
166
167 int source_verbose = 0;
168 bool trace_commands = false;
169 \f
170 /* 'script-extension' option support. */
171
172 static const char script_ext_off[] = "off";
173 static const char script_ext_soft[] = "soft";
174 static const char script_ext_strict[] = "strict";
175
176 static const char *const script_ext_enums[] = {
177 script_ext_off,
178 script_ext_soft,
179 script_ext_strict,
180 NULL
181 };
182
183 static const char *script_ext_mode = script_ext_soft;
184 \f
185 /* Utility used everywhere when at least one argument is needed and
186 none is supplied. */
187
188 void
189 error_no_arg (const char *why)
190 {
191 error (_("Argument required (%s)."), why);
192 }
193
194 /* The "info" command is defined as a prefix, with allow_unknown = 0.
195 Therefore, its own definition is called only for "info" with no
196 args. */
197
198 static void
199 info_command (const char *arg, int from_tty)
200 {
201 printf_unfiltered (_("\"info\" must be followed by "
202 "the name of an info command.\n"));
203 help_list (infolist, "info ", all_commands, gdb_stdout);
204 }
205
206 /* The "show" command with no arguments shows all the settings. */
207
208 static void
209 show_command (const char *arg, int from_tty)
210 {
211 cmd_show_list (showlist, from_tty, "");
212 }
213
214 /* See cli/cli-cmds.h. */
215
216 void
217 with_command_1 (const char *set_cmd_prefix,
218 cmd_list_element *setlist, const char *args, int from_tty)
219 {
220 if (args == nullptr)
221 error (_("Missing arguments."));
222
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
281 void
282 with_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
311 static void
312 with_command (const char *args, int from_tty)
313 {
314 with_command_1 ("set ", setlist, args, from_tty);
315 }
316
317 /* "with" command completer. */
318
319 static void
320 with_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
327 \f
328 /* Provide documentation on command or list given by COMMAND. FROM_TTY
329 is ignored. */
330
331 static void
332 help_command (const char *command, int from_tty)
333 {
334 help_cmd (command, gdb_stdout);
335 }
336 \f
337
338 /* Note: The "complete" command is used by Emacs to implement completion.
339 [Is that why this function writes output with *_unfiltered?] */
340
341 static void
342 complete_command (const char *arg, int from_tty)
343 {
344 dont_repeat ();
345
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. */
350 if (!current_uiout->is_mi_like_p ())
351 {
352 printf_unfiltered (_("max-completions is zero,"
353 " completion is disabled.\n"));
354 }
355 return;
356 }
357
358 if (arg == NULL)
359 arg = "";
360
361 int quote_char = '\0';
362 const char *word;
363
364 completion_result result = complete (arg, &word, &quote_char);
365
366 if (result.number_matches != 0)
367 {
368 std::string arg_prefix (arg, word - arg);
369
370 if (result.number_matches == 1)
371 printf_unfiltered ("%s%s\n", arg_prefix.c_str (), result.match_list[0]);
372 else
373 {
374 result.sort_match_list ();
375
376 for (size_t i = 0; i < result.number_matches; i++)
377 {
378 printf_unfiltered ("%s%s",
379 arg_prefix.c_str (),
380 result.match_list[i + 1]);
381 if (quote_char)
382 printf_unfiltered ("%c", quote_char);
383 printf_unfiltered ("\n");
384 }
385 }
386
387 if (result.number_matches == max_completions)
388 {
389 /* ARG_PREFIX and WORD are included in the output so that emacs
390 will include the message in the output. */
391 printf_unfiltered (_("%s%s %s\n"),
392 arg_prefix.c_str (), word,
393 get_max_completions_reached_message ());
394 }
395 }
396 }
397
398 int
399 is_complete_command (struct cmd_list_element *c)
400 {
401 return cmd_cfunc_eq (c, complete_command);
402 }
403
404 static void
405 show_version (const char *args, int from_tty)
406 {
407 print_gdb_version (gdb_stdout, true);
408 printf_filtered ("\n");
409 }
410
411 static void
412 show_configuration (const char *args, int from_tty)
413 {
414 print_gdb_configuration (gdb_stdout);
415 }
416
417 /* Handle the quit command. */
418
419 void
420 quit_command (const char *args, int from_tty)
421 {
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
433 if (!quit_confirm ())
434 error (_("Not confirmed."));
435
436 query_if_trace_running (from_tty);
437
438 quit_force (args ? &exit_code : NULL, from_tty);
439 }
440
441 static void
442 pwd_command (const char *args, int from_tty)
443 {
444 if (args)
445 error (_("The \"pwd\" command does not take an argument: %s"), args);
446
447 gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
448
449 if (cwd == NULL)
450 error (_("Error finding name of working directory: %s"),
451 safe_strerror (errno));
452
453 if (strcmp (cwd.get (), current_directory) != 0)
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 ()));
458 else
459 printf_unfiltered (_("Working directory %ps.\n"),
460 styled_string (file_name_style.style (),
461 current_directory));
462 }
463
464 void
465 cd_command (const char *dir, int from_tty)
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
476 gdb::unique_xmalloc_ptr<char> dir_holder
477 (tilde_expand (dir != NULL ? dir : "~"));
478 dir = dir_holder.get ();
479
480 if (chdir (dir) < 0)
481 perror_with_name (dir);
482
483 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
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. */
487 gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
488 dir = cwd.get ();
489 #endif
490
491 len = strlen (dir);
492 if (IS_DIR_SEPARATOR (dir[len - 1]))
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) /* "/" */
497 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
498 && !(len == 3 && dir[1] == ':') /* "d:/" */
499 #endif
500 )
501 len--;
502 }
503
504 dir_holder.reset (savestring (dir, len));
505 if (IS_ABSOLUTE_PATH (dir_holder.get ()))
506 {
507 xfree (current_directory);
508 current_directory = dir_holder.release ();
509 }
510 else
511 {
512 if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]))
513 current_directory = concat (current_directory, dir_holder.get (),
514 (char *) NULL);
515 else
516 current_directory = concat (current_directory, SLASH_STRING,
517 dir_holder.get (), (char *) NULL);
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 {
525 if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.'
526 && (p[2] == 0 || IS_DIR_SEPARATOR (p[2])))
527 memmove (p, p + 2, strlen (p + 2) + 1);
528 else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.'
529 && (p[3] == 0 || IS_DIR_SEPARATOR (p[3])))
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;
536
537 while (q != current_directory && !IS_DIR_SEPARATOR (q[-1]))
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 {
546 memmove (q - 1, p + 3, strlen (p + 3) + 1);
547 p = q - 1;
548 }
549 }
550 else
551 /* We are dealing with leading repetitions of "/..", for
552 example "/../..", which is the Mach super-root. */
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
568 /* Show the current value of the 'script-extension' option. */
569
570 static void
571 show_script_ext_mode (struct ui_file *file, int from_tty,
572 struct cmd_list_element *c, const char *value)
573 {
574 fprintf_filtered (file,
575 _("Script filename extension recognition is \"%s\".\n"),
576 value);
577 }
578
579 /* Try to open SCRIPT_FILE.
580 If successful, the full path name is stored in *FULL_PATHP,
581 and the stream is returned.
582 If not successful, return NULL; errno is set for the last file
583 we tried to open.
584
585 If SEARCH_PATH is non-zero, and the file isn't found in cwd,
586 search for it in the source search path. */
587
588 gdb::optional<open_script>
589 find_and_open_script (const char *script_file, int search_path)
590 {
591 int fd;
592 openp_flags search_flags = OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH;
593 gdb::optional<open_script> opened;
594
595 gdb::unique_xmalloc_ptr<char> file (tilde_expand (script_file));
596
597 if (search_path)
598 search_flags |= OPF_SEARCH_IN_PATH;
599
600 /* Search for and open 'file' on the search path used for source
601 files. Put the full location in *FULL_PATHP. */
602 gdb::unique_xmalloc_ptr<char> full_path;
603 fd = openp (source_path, search_flags,
604 file.get (), O_RDONLY, &full_path);
605
606 if (fd == -1)
607 return opened;
608
609 FILE *result = fdopen (fd, FOPEN_RT);
610 if (result == NULL)
611 {
612 int save_errno = errno;
613
614 close (fd);
615 errno = save_errno;
616 }
617 else
618 opened.emplace (gdb_file_up (result), std::move (full_path));
619
620 return opened;
621 }
622
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. */
629
630 static void
631 source_script_from_stream (FILE *stream, const char *file,
632 const char *file_to_open)
633 {
634 if (script_ext_mode != script_ext_off)
635 {
636 const struct extension_language_defn *extlang
637 = get_ext_lang_of_file (file);
638
639 if (extlang != NULL)
640 {
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);
647 sourcer (extlang, stream, file_to_open);
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);
657 }
658 }
659
660 script_from_file (stream, file);
661 }
662
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
668 static void
669 source_script_with_search (const char *file, int from_tty, int search_path)
670 {
671
672 if (file == NULL || *file == 0)
673 error (_("source command requires file name of file to source."));
674
675 gdb::optional<open_script> opened = find_and_open_script (file, search_path);
676 if (!opened)
677 {
678 /* The script wasn't found, or was otherwise inaccessible.
679 If the source command was invoked interactively, throw an
680 error. Otherwise (e.g. if it was invoked by a script),
681 just emit a warning, rather than cause an error. */
682 if (from_tty)
683 perror_with_name (file);
684 else
685 {
686 perror_warning_with_name (file);
687 return;
688 }
689 }
690
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. */
696 source_script_from_stream (opened->stream.get (), file,
697 search_path ? opened->full_path.get () : file);
698 }
699
700 /* Wrapper around source_script_with_search to export it to main.c
701 for use in loading .gdbinit scripts. */
702
703 void
704 source_script (const char *file, int from_tty)
705 {
706 source_script_with_search (file, from_tty, 0);
707 }
708
709 static void
710 source_command (const char *args, int from_tty)
711 {
712 const char *file = args;
713 int search_path = 0;
714
715 scoped_restore save_source_verbose = make_scoped_restore (&source_verbose);
716
717 /* -v causes the source command to run in verbose mode.
718 -s causes the file to be searched in the source search path,
719 even if the file name contains a '/'.
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 {
725 while (args[0] != '\0')
726 {
727 /* Make sure leading white space does not break the
728 comparisons. */
729 args = skip_spaces (args);
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;
744
745 /* Skip passed -s. */
746 args = &args[3];
747 }
748 else
749 break;
750 }
751
752 file = skip_spaces (args);
753 }
754
755 source_script_with_search (file, from_tty, search_path);
756 }
757
758
759 static void
760 echo_command (const char *text, int from_tty)
761 {
762 const char *p = text;
763 int c;
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
775 c = parse_escape (get_current_arch (), &p);
776 if (c >= 0)
777 printf_filtered ("%c", c);
778 }
779 else
780 printf_filtered ("%c", c);
781 }
782
783 reset_terminal_style (gdb_stdout);
784
785 /* Force this output to appear now. */
786 wrap_here ("");
787 gdb_flush (gdb_stdout);
788 }
789
790 /* Sets the last launched shell command convenience variables based on
791 EXIT_STATUS. */
792
793 static void
794 exit_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));
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
815 else if (WIFSIGNALED (exit_status))
816 set_internalvar_integer (var_signal, WTERMSIG (exit_status));
817 else
818 warning (_("unexpected shell command exit status %d"), exit_status);
819 }
820
821 static void
822 shell_escape (const char *arg, int from_tty)
823 {
824 #if defined(CANT_FORK) || \
825 (!defined(HAVE_WORKING_VFORK) && !defined(HAVE_WORKING_FORK))
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)
834 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
835 safe_strerror (errno));
836 else if (rc)
837 fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
838 #ifdef GLOBAL_CURDIR
839 /* Make sure to return to the directory GDB thinks it is, in case
840 the shell command we just ran changed it. */
841 chdir (current_directory);
842 exit_status_set_internal_vars (rc);
843 #endif
844 #else /* Can fork. */
845 int status, pid;
846
847 if ((pid = vfork ()) == 0)
848 {
849 const char *p, *user_shell = get_shell ();
850
851 close_most_fds ();
852
853 /* Get the name of the shell for arg0. */
854 p = lbasename (user_shell);
855
856 if (!arg)
857 execl (user_shell, p, (char *) 0);
858 else
859 execl (user_shell, p, "-c", arg, (char *) 0);
860
861 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
862 safe_strerror (errno));
863 _exit (0177);
864 }
865
866 if (pid != -1)
867 waitpid (pid, &status, 0);
868 else
869 error (_("Fork failed"));
870 exit_status_set_internal_vars (status);
871 #endif /* Can fork. */
872 }
873
874 /* Implementation of the "shell" command. */
875
876 static void
877 shell_command (const char *arg, int from_tty)
878 {
879 shell_escape (arg, from_tty);
880 }
881
882 static void
883 edit_command (const char *arg, int from_tty)
884 {
885 struct symtab_and_line sal;
886 struct symbol *sym;
887 const char *editor;
888 char *p;
889 const char *fn;
890
891 /* Pull in the current default source line if necessary. */
892 if (arg == 0)
893 {
894 set_default_source_symtab_and_line ();
895 sal = get_current_source_symtab_and_line ();
896 }
897
898 /* Bare "edit" edits file with present line. */
899
900 if (arg == 0)
901 {
902 if (sal.symtab == 0)
903 error (_("No default source file yet."));
904 sal.line += get_lines_to_list () / 2;
905 }
906 else
907 {
908 const char *arg1;
909
910 /* Now should only be one argument -- decode it in SAL. */
911 arg1 = arg;
912 event_location_up location = string_to_event_location (&arg1,
913 current_language);
914 std::vector<symtab_and_line> sals = decode_line_1 (location.get (),
915 DECODE_LINE_LIST_MODE,
916 NULL, NULL, 0);
917
918 filter_sals (sals);
919 if (sals.empty ())
920 {
921 /* C++ */
922 return;
923 }
924 if (sals.size () > 1)
925 {
926 ambiguous_line_spec (sals,
927 _("Specified line is ambiguous:\n"));
928 return;
929 }
930
931 sal = sals[0];
932
933 if (*arg1)
934 error (_("Junk at end of line specification."));
935
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. */
940 if (*arg == '*')
941 {
942 struct gdbarch *gdbarch;
943
944 if (sal.symtab == 0)
945 error (_("No source file for address %s."),
946 paddress (get_current_arch (), sal.pc));
947
948 gdbarch = get_objfile_arch (SYMTAB_OBJFILE (sal.symtab));
949 sym = find_pc_function (sal.pc);
950 if (sym)
951 printf_filtered ("%s is in %s (%s:%d).\n",
952 paddress (gdbarch, sal.pc),
953 sym->print_name (),
954 symtab_to_filename_for_display (sal.symtab),
955 sal.line);
956 else
957 printf_filtered ("%s is at %s:%d.\n",
958 paddress (gdbarch, sal.pc),
959 symtab_to_filename_for_display (sal.symtab),
960 sal.line);
961 }
962
963 /* If what was given does not imply a symtab, it must be an
964 undebuggable symbol which means no source code. */
965
966 if (sal.symtab == 0)
967 error (_("No line number known for %s."), arg);
968 }
969
970 if ((editor = getenv ("EDITOR")) == NULL)
971 editor = "/bin/ex";
972
973 fn = symtab_to_fullname (sal.symtab);
974
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);
978 shell_escape (p, from_tty);
979 xfree (p);
980 }
981
982 /* The options for the "pipe" command. */
983
984 struct pipe_cmd_opts
985 {
986 /* For "-d". */
987 char *delimiter = nullptr;
988
989 ~pipe_cmd_opts ()
990 {
991 xfree (delimiter);
992 }
993 };
994
995 static 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\
1002 COMMAND from SHELL_COMMAND, in alternative to |. This is useful in\n\
1003 case 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
1011 static inline gdb::option::option_def_group
1012 make_pipe_cmd_options_def_group (pipe_cmd_opts *opts)
1013 {
1014 return {{pipe_cmd_option_defs}, opts};
1015 }
1016
1017 /* Implementation of the "pipe" command. */
1018
1019 static void
1020 pipe_command (const char *arg, int from_tty)
1021 {
1022 pipe_cmd_opts opts;
1023
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;
1031
1032 const char *command = arg;
1033 if (command == nullptr)
1034 error (_("Missing COMMAND"));
1035
1036 arg = strstr (arg, delim);
1037
1038 if (arg == nullptr)
1039 error (_("Missing delimiter before SHELL_COMMAND"));
1040
1041 std::string gdb_cmd (command, arg - command);
1042
1043 arg += strlen (delim); /* Skip the delimiter. */
1044
1045 if (gdb_cmd.empty ())
1046 gdb_cmd = repeat_previous ();
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
1077 /* Completer for the pipe command. */
1078
1079 static void
1080 pipe_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
1114 static void
1115 list_command (const char *arg, int from_tty)
1116 {
1117 struct symbol *sym;
1118 const char *arg1;
1119 int no_end = 1;
1120 int dummy_end = 0;
1121 int dummy_beg = 0;
1122 int linenum_beg = 0;
1123 const char *p;
1124
1125 /* Pull in the current default source line if necessary. */
1126 if (arg == NULL || ((arg[0] == '+' || arg[0] == '-') && arg[1] == '\0'))
1127 {
1128 set_default_source_symtab_and_line ();
1129 symtab_and_line cursal = get_current_source_symtab_and_line ();
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
1137 first = std::max (cursal.line - get_lines_to_list () / 2, 1);
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
1147 print_source_lines (cursal.symtab, source_lines_range (first), 0);
1148 }
1149
1150 /* "l" or "l +" lists next ten lines. */
1151 else if (arg == NULL || arg[0] == '+')
1152 print_source_lines (cursal.symtab,
1153 source_lines_range (cursal.line), 0);
1154
1155 /* "l -" lists previous ten lines, the ones before the ten just
1156 listed. */
1157 else if (arg[0] == '-')
1158 {
1159 if (get_first_line_listed () == 1)
1160 error (_("Already at the start of %s."),
1161 symtab_to_filename_for_display (cursal.symtab));
1162 source_lines_range range (get_first_line_listed (),
1163 source_lines_range::BACKWARD);
1164 print_source_lines (cursal.symtab, range, 0);
1165 }
1166
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 ())
1177 error (_("No symbol table is loaded. Use the \"file\" command."));
1178
1179 std::vector<symtab_and_line> sals;
1180 symtab_and_line sal, sal_end;
1181
1182 arg1 = arg;
1183 if (*arg1 == ',')
1184 dummy_beg = 1;
1185 else
1186 {
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);
1191 filter_sals (sals);
1192 if (sals.empty ())
1193 {
1194 /* C++ */
1195 return;
1196 }
1197
1198 sal = sals[0];
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
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
1211 while (*arg1 == ' ' || *arg1 == '\t')
1212 arg1++;
1213 if (*arg1 == ',')
1214 {
1215 no_end = 0;
1216 if (sals.size () > 1)
1217 {
1218 ambiguous_line_spec (sals,
1219 _("Specified first line '%.*s' is ambiguous:\n"),
1220 (int) beg_len, beg);
1221 return;
1222 }
1223 arg1++;
1224 while (*arg1 == ' ' || *arg1 == '\t')
1225 arg1++;
1226 if (*arg1 == 0)
1227 dummy_end = 1;
1228 else
1229 {
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
1234 event_location_up location
1235 = string_to_event_location (&arg1, current_language);
1236
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)
1248 {
1249 ambiguous_line_spec (sals_end,
1250 _("Specified last line '%s' is ambiguous:\n"),
1251 end_arg);
1252 return;
1253 }
1254 sal_end = sals_end[0];
1255 }
1256 }
1257
1258 if (*arg1)
1259 error (_("Junk at end of line specification."));
1260
1261 if (!no_end && !dummy_beg && !dummy_end
1262 && sal.symtab != sal_end.symtab)
1263 error (_("Specified first and last lines are in different files."));
1264 if (dummy_beg && dummy_end)
1265 error (_("Two empty args do not say what lines to list."));
1266
1267 /* If line was specified by address,
1268 first print exactly which line, and which file.
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. */
1272 if (*arg == '*')
1273 {
1274 struct gdbarch *gdbarch;
1275
1276 if (sal.symtab == 0)
1277 error (_("No source file for address %s."),
1278 paddress (get_current_arch (), sal.pc));
1279
1280 gdbarch = get_objfile_arch (SYMTAB_OBJFILE (sal.symtab));
1281 sym = find_pc_function (sal.pc);
1282 if (sym)
1283 printf_filtered ("%s is in %s (%s:%d).\n",
1284 paddress (gdbarch, sal.pc),
1285 sym->print_name (),
1286 symtab_to_filename_for_display (sal.symtab), sal.line);
1287 else
1288 printf_filtered ("%s is at %s:%d.\n",
1289 paddress (gdbarch, sal.pc),
1290 symtab_to_filename_for_display (sal.symtab), sal.line);
1291 }
1292
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. */
1296
1297 if (!linenum_beg && sal.symtab == 0)
1298 error (_("No line number known for %s."), arg);
1299
1300 /* If this command is repeated with RET,
1301 turn it into the no-arg variant. */
1302
1303 if (from_tty)
1304 set_repeat_arguments ("");
1305
1306 if (dummy_beg && sal_end.symtab == 0)
1307 error (_("No default source file yet. Do \"help list\"."));
1308 if (dummy_beg)
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 }
1314 else if (sal.symtab == 0)
1315 error (_("No default source file yet. Do \"help list\"."));
1316 else if (no_end)
1317 {
1318 for (int i = 0; i < sals.size (); i++)
1319 {
1320 sal = sals[i];
1321 int first_line = sal.line - get_lines_to_list () / 2;
1322 if (first_line < 1)
1323 first_line = 1;
1324 if (sals.size () > 1)
1325 print_sal_location (sal);
1326 print_source_lines (sal.symtab, source_lines_range (first_line), 0);
1327 }
1328 }
1329 else if (dummy_end)
1330 print_source_lines (sal.symtab, source_lines_range (sal.line), 0);
1331 else
1332 print_source_lines (sal.symtab,
1333 source_lines_range (sal.line, (sal_end.line + 1)),
1334 0);
1335 }
1336
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.
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.
1344 MIXED is non-zero to print source with the assembler. */
1345
1346 static void
1347 print_disassembly (struct gdbarch *gdbarch, const char *name,
1348 CORE_ADDR low, CORE_ADDR high,
1349 const struct block *block,
1350 gdb_disassembly_flags flags)
1351 {
1352 #if defined(TUI)
1353 if (tui_is_window_visible (DISASSEM_WIN))
1354 tui_show_assembly (gdbarch, low);
1355 else
1356 #endif
1357 {
1358 printf_filtered ("Dump of assembler code ");
1359 if (name != NULL)
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));
1366
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 {
1374 CORE_ADDR range_low = BLOCK_RANGE_START (block, i);
1375 CORE_ADDR range_high = BLOCK_RANGE_END (block, i);
1376 printf_filtered (_("Address range %s to %s:\n"),
1377 paddress (gdbarch, range_low),
1378 paddress (gdbarch, range_high));
1379 gdb_disassembly (gdbarch, current_uiout, flags, -1,
1380 range_low, range_high);
1381 }
1382 }
1383 printf_filtered ("End of assembler dump.\n");
1384 }
1385 }
1386
1387 /* Subroutine of disassemble_command to simplify it.
1388 Print a disassembly of the current function according to FLAGS. */
1389
1390 static void
1391 disassemble_current_function (gdb_disassembly_flags flags)
1392 {
1393 struct frame_info *frame;
1394 struct gdbarch *gdbarch;
1395 CORE_ADDR low, high, pc;
1396 const char *name;
1397 const struct block *block;
1398
1399 frame = get_selected_frame (_("No frame selected."));
1400 gdbarch = get_frame_arch (frame);
1401 pc = get_frame_address_in_block (frame);
1402 if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
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. */
1409 low = tui_get_low_disassembly_address (gdbarch, low, pc);
1410 #endif
1411 low += gdbarch_deprecated_function_start_offset (gdbarch);
1412
1413 print_disassembly (gdbarch, name, low, high, block, flags);
1414 }
1415
1416 /* Dump a specified section of assembly code.
1417
1418 Usage:
1419 disassemble [/mrs]
1420 - dump the assembly code for the function of the current pc
1421 disassemble [/mrs] addr
1422 - dump the assembly code for the function at ADDR
1423 disassemble [/mrs] low,high
1424 disassemble [/mrs] low,+length
1425 - dump the assembly code in the range [LOW,HIGH), or [LOW,LOW+length)
1426
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. */
1439
1440 static void
1441 disassemble_command (const char *arg, int from_tty)
1442 {
1443 struct gdbarch *gdbarch = get_current_arch ();
1444 CORE_ADDR low, high;
1445 const char *name;
1446 CORE_ADDR pc;
1447 gdb_disassembly_flags flags;
1448 const char *p;
1449 const struct block *block = nullptr;
1450
1451 p = arg;
1452 name = NULL;
1453 flags = 0;
1454
1455 if (p && *p == '/')
1456 {
1457 ++p;
1458
1459 if (*p == '\0')
1460 error (_("Missing modifier."));
1461
1462 while (*p && ! isspace (*p))
1463 {
1464 switch (*p++)
1465 {
1466 case 'm':
1467 flags |= DISASSEMBLY_SOURCE_DEPRECATED;
1468 break;
1469 case 'r':
1470 flags |= DISASSEMBLY_RAW_INSN;
1471 break;
1472 case 's':
1473 flags |= DISASSEMBLY_SOURCE;
1474 break;
1475 default:
1476 error (_("Invalid disassembly modifier."));
1477 }
1478 }
1479
1480 p = skip_spaces (p);
1481 }
1482
1483 if ((flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1484 == (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1485 error (_("Cannot specify both /m and /s."));
1486
1487 if (! p || ! *p)
1488 {
1489 flags |= DISASSEMBLY_OMIT_FNAME;
1490 disassemble_current_function (flags);
1491 return;
1492 }
1493
1494 pc = value_as_address (parse_to_comma_and_eval (&p));
1495 if (p[0] == ',')
1496 ++p;
1497 if (p[0] == '\0')
1498 {
1499 /* One argument. */
1500 if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
1501 error (_("No function contains specified address."));
1502 #if defined(TUI)
1503 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1504 `tui_version'. */
1505 if (tui_active)
1506 /* FIXME: cagney/2004-02-07: This should be an observer. */
1507 low = tui_get_low_disassembly_address (gdbarch, low, pc);
1508 #endif
1509 low += gdbarch_deprecated_function_start_offset (gdbarch);
1510 flags |= DISASSEMBLY_OMIT_FNAME;
1511 }
1512 else
1513 {
1514 /* Two arguments. */
1515 int incl_flag = 0;
1516 low = pc;
1517 p = skip_spaces (p);
1518 if (p[0] == '+')
1519 {
1520 ++p;
1521 incl_flag = 1;
1522 }
1523 high = parse_and_eval_address (p);
1524 if (incl_flag)
1525 high += low;
1526 }
1527
1528 print_disassembly (gdbarch, name, low, high, block, flags);
1529 }
1530
1531 static void
1532 make_command (const char *arg, int from_tty)
1533 {
1534 if (arg == 0)
1535 shell_escape ("make", from_tty);
1536 else
1537 {
1538 std::string cmd = std::string ("make ") + arg;
1539
1540 shell_escape (cmd.c_str (), from_tty);
1541 }
1542 }
1543
1544 static void
1545 show_user (const char *args, int from_tty)
1546 {
1547 struct cmd_list_element *c;
1548
1549 if (args)
1550 {
1551 const char *comname = args;
1552
1553 c = lookup_cmd (&comname, cmdlist, "", 0, 1);
1554 if (!cli_user_command_p (c))
1555 error (_("Not a user command."));
1556 show_user_1 (c, "", args, gdb_stdout);
1557 }
1558 else
1559 {
1560 for (c = cmdlist; c; c = c->next)
1561 {
1562 if (cli_user_command_p (c) || c->prefixlist != NULL)
1563 show_user_1 (c, "", c->name, gdb_stdout);
1564 }
1565 }
1566 }
1567
1568 /* Search through names of commands and documentations for a certain
1569 regular expression. */
1570
1571 static void
1572 apropos_command (const char *arg, int from_tty)
1573 {
1574 bool verbose = arg && check_for_argument (&arg, "-v", 2);
1575
1576 if (arg == NULL || *arg == '\0')
1577 error (_("REGEXP string is empty"));
1578
1579 compiled_regex pattern (arg, REG_ICASE,
1580 _("Error in regular expression"));
1581
1582 apropos_cmd (gdb_stdout, cmdlist, verbose, pattern, "");
1583 }
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
1592 static std::string
1593 argv_to_string (char **argv, int n)
1594 {
1595 int i;
1596 std::string result;
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)
1604 result += " ";
1605 result += argv[i];
1606 }
1607
1608 return result;
1609 }
1610
1611 /* Subroutine of alias_command to simplify it.
1612 Return true if COMMAND exists, unambiguously. Otherwise false. */
1613
1614 static bool
1615 valid_command_p (const char *command)
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)
1622 return false;
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
1632 /* Called when "alias" was incorrectly used. */
1633
1634 static void
1635 alias_usage_error (void)
1636 {
1637 error (_("Usage: alias [-a] [--] ALIAS = COMMAND"));
1638 }
1639
1640 /* Make an alias of an existing command. */
1641
1642 static void
1643 alias_command (const char *args, int from_tty)
1644 {
1645 int i, alias_argc, command_argc;
1646 int abbrev_flag = 0;
1647 const char *equals;
1648 const char *alias, *command;
1649
1650 if (args == NULL || strchr (args, '=') == NULL)
1651 alias_usage_error ();
1652
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);
1658
1659 char **alias_argv = built_alias_argv.get ();
1660 while (alias_argv[0] != NULL)
1661 {
1662 if (strcmp (alias_argv[0], "-a") == 0)
1663 {
1664 ++alias_argv;
1665 abbrev_flag = 1;
1666 }
1667 else if (strcmp (alias_argv[0], "--") == 0)
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')
1678 alias_usage_error ();
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);
1692 command_argc = command_argv.count ();
1693
1694 /* COMMAND must exist.
1695 Reconstruct the command to remove any extraneous spaces,
1696 for better error messages. */
1697 std::string command_string (argv_to_string (command_argv.get (),
1698 command_argc));
1699 command = command_string.c_str ();
1700 if (! valid_command_p (command))
1701 error (_("Invalid command to alias to: %s"), command);
1702
1703 /* ALIAS must not exist. */
1704 std::string alias_string (argv_to_string (alias_argv, alias_argc));
1705 alias = alias_string.c_str ();
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,
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.
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 {
1726 const char *alias_prefix, *command_prefix;
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,
1733 and use that to verify the leading elements give the same
1734 prefix command. */
1735 std::string alias_prefix_string (argv_to_string (alias_argv,
1736 alias_argc - 1));
1737 std::string command_prefix_string (argv_to_string (command_argv.get (),
1738 command_argc - 1));
1739 alias_prefix = alias_prefix_string.c_str ();
1740 command_prefix = command_prefix_string.c_str ();
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 }
1757 \f
1758 /* Print the file / line number / symbol name of the location
1759 specified by SAL. */
1760
1761 static void
1762 print_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)
1769 sym_name = sal.symbol->print_name ();
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
1775 /* Print a list of files and line numbers which a user may choose from
1776 in order to list a function which was specified ambiguously (as
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
1780 ambiguous. */
1781
1782 static void
1783 ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
1784 const char *format, ...)
1785 {
1786 va_list ap;
1787 va_start (ap, format);
1788 vprintf_filtered (format, ap);
1789 va_end (ap);
1790
1791 for (const auto &sal : sals)
1792 print_sal_location (sal);
1793 }
1794
1795 /* Comparison function for filter_sals. Returns a qsort-style
1796 result. */
1797
1798 static int
1799 cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb)
1800 {
1801 const char *dira = SYMTAB_DIRNAME (sala.symtab);
1802 const char *dirb = SYMTAB_DIRNAME (salb.symtab);
1803 int r;
1804
1805 if (dira == NULL)
1806 {
1807 if (dirb != NULL)
1808 return -1;
1809 }
1810 else if (dirb == NULL)
1811 {
1812 if (dira != NULL)
1813 return 1;
1814 }
1815 else
1816 {
1817 r = filename_cmp (dira, dirb);
1818 if (r)
1819 return r;
1820 }
1821
1822 r = filename_cmp (sala.symtab->filename, salb.symtab->filename);
1823 if (r)
1824 return r;
1825
1826 if (sala.line < salb.line)
1827 return -1;
1828 return sala.line == salb.line ? 0 : 1;
1829 }
1830
1831 /* Remove any SALs that do not match the current program space, or
1832 which appear to be "file:line" duplicates. */
1833
1834 static void
1835 filter_sals (std::vector<symtab_and_line> &sals)
1836 {
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 ());
1853 }
1854
1855 static void
1856 set_debug (const char *arg, int from_tty)
1857 {
1858 printf_unfiltered (_("\"set debug\" must be followed by "
1859 "the name of a debug subcommand.\n"));
1860 help_list (setdebuglist, "set debug ", all_commands, gdb_stdout);
1861 }
1862
1863 static void
1864 show_debug (const char *args, int from_tty)
1865 {
1866 cmd_show_list (showdebuglist, from_tty, "");
1867 }
1868
1869 void
1870 init_cmd_lists (void)
1871 {
1872 max_user_call_depth = 1024;
1873 }
1874
1875 static void
1876 show_info_verbose (struct ui_file *file, int from_tty,
1877 struct cmd_list_element *c,
1878 const char *value)
1879 {
1880 if (info_verbose)
1881 fprintf_filtered (file,
1882 _("Verbose printing of informational messages is %s.\n"),
1883 value);
1884 else
1885 fprintf_filtered (file, _("Verbosity is %s.\n"), value);
1886 }
1887
1888 static void
1889 show_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
1896 static void
1897 show_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
1904 static void
1905 show_remote_timeout (struct ui_file *file, int from_tty,
1906 struct cmd_list_element *c, const char *value)
1907 {
1908 fprintf_filtered (file,
1909 _("Timeout limit to wait for target to respond is %s.\n"),
1910 value);
1911 }
1912
1913 static void
1914 show_max_user_call_depth (struct ui_file *file, int from_tty,
1915 struct cmd_list_element *c, const char *value)
1916 {
1917 fprintf_filtered (file,
1918 _("The max call depth for user-defined commands is %s.\n"),
1919 value);
1920 }
1921
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
1927 static cmd_list_element *
1928 setting_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
1954 static struct value *
1955 value_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
2025 static struct value *
2026 gdb_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
2037 static struct value *
2038 gdb_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
2050 static struct value *
2051 str_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
2092 static struct value *
2093 gdb_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
2105 static struct value *
2106 gdb_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
2116 void
2117 _initialize_cli_cmds (void)
2118 {
2119 struct cmd_list_element *c;
2120
2121 /* Define the classes of commands.
2122 They will appear in the help list in alphabetical order. */
2123
2124 add_cmd ("internals", class_maintenance, _("\
2125 Maintenance commands.\n\
2126 Some gdb commands are provided just for use by gdb maintainers.\n\
2127 These commands are subject to frequent change, and may not be as\n\
2128 well documented as user commands."),
2129 &cmdlist);
2130 add_cmd ("obscure", class_obscure, _("Obscure features."), &cmdlist);
2131 add_cmd ("aliases", class_alias,
2132 _("Aliases of other commands."), &cmdlist);
2133 add_cmd ("user-defined", class_user, _("\
2134 User-defined commands.\n\
2135 The commands in this class are those defined by the user.\n\
2136 Use the \"define\" command to define a command."), &cmdlist);
2137 add_cmd ("support", class_support, _("Support facilities."), &cmdlist);
2138 if (!dbx_commands)
2139 add_cmd ("status", class_info, _("Status inquiries."), &cmdlist);
2140 add_cmd ("files", class_files, _("Specifying and examining files."),
2141 &cmdlist);
2142 add_cmd ("breakpoints", class_breakpoint,
2143 _("Making program stop at certain points."), &cmdlist);
2144 add_cmd ("data", class_vars, _("Examining data."), &cmdlist);
2145 add_cmd ("stack", class_stack, _("\
2146 Examining the stack.\n\
2147 The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
2148 counting from zero for the innermost (currently executing) frame.\n\n\
2149 At any time gdb identifies one frame as the \"selected\" frame.\n\
2150 Variable lookups are done with respect to the selected frame.\n\
2151 When the program being debugged stops, gdb selects the innermost frame.\n\
2152 The commands below can be used to select other frames by number or address."),
2153 &cmdlist);
2154 add_cmd ("running", class_run, _("Running the program."), &cmdlist);
2155
2156 /* Define general commands. */
2157
2158 add_com ("pwd", class_files, pwd_command, _("\
2159 Print working directory.\n\
2160 This is used for your program as well."));
2161
2162 c = add_cmd ("cd", class_files, cd_command, _("\
2163 Set working directory to DIR for debugger.\n\
2164 The debugger's current working directory specifies where scripts and other\n\
2165 files that can be loaded by GDB are located.\n\
2166 In order to change the inferior's current working directory, the recommended\n\
2167 way is to use the \"set cwd\" command."), &cmdlist);
2168 set_cmd_completer (c, filename_completer);
2169
2170 add_com ("echo", class_support, echo_command, _("\
2171 Print a constant string. Give string as argument.\n\
2172 C escape sequences may be used in the argument.\n\
2173 No newline is added at the end of the argument;\n\
2174 use \"\\n\" if you want a newline to be printed.\n\
2175 Since leading and trailing whitespace are ignored in command arguments,\n\
2176 if you want to print some you must use \"\\\" before leading whitespace\n\
2177 to be printed or after trailing whitespace."));
2178
2179 add_setshow_enum_cmd ("script-extension", class_support,
2180 script_ext_enums, &script_ext_mode, _("\
2181 Set mode for script filename extension recognition."), _("\
2182 Show mode for script filename extension recognition."), _("\
2183 off == no filename extension recognition (all sourced files are GDB scripts)\n\
2184 soft == evaluate script according to filename extension, fallback to GDB script"
2185 "\n\
2186 strict == evaluate script according to filename extension, error if not supported"
2187 ),
2188 NULL,
2189 show_script_ext_mode,
2190 &setlist, &showlist);
2191
2192 add_com ("quit", class_support, quit_command, _("\
2193 Exit gdb.\n\
2194 Usage: quit [EXPR]\n\
2195 The optional expression EXPR, if present, is evaluated and the result\n\
2196 used as GDB's exit code. The default is zero."));
2197 c = add_com ("help", class_support, help_command,
2198 _("Print list of commands."));
2199 set_cmd_completer (c, command_completer);
2200 add_com_alias ("q", "quit", class_support, 1);
2201 add_com_alias ("h", "help", class_support, 1);
2202
2203 add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\
2204 Set verbosity."), _("\
2205 Show verbosity."), NULL,
2206 set_verbose,
2207 show_info_verbose,
2208 &setlist, &showlist);
2209
2210 add_prefix_cmd ("history", class_support, set_history,
2211 _("Generic command for setting command history parameters."),
2212 &sethistlist, "set history ", 0, &setlist);
2213 add_prefix_cmd ("history", class_support, show_history,
2214 _("Generic command for showing command history parameters."),
2215 &showhistlist, "show history ", 0, &showlist);
2216
2217 add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\
2218 Set history expansion on command input."), _("\
2219 Show history expansion on command input."), _("\
2220 Without an argument, history expansion is enabled."),
2221 NULL,
2222 show_history_expansion_p,
2223 &sethistlist, &showhistlist);
2224
2225 add_prefix_cmd ("info", class_info, info_command, _("\
2226 Generic command for showing things about the program being debugged."),
2227 &infolist, "info ", 0, &cmdlist);
2228 add_com_alias ("i", "info", class_info, 1);
2229 add_com_alias ("inf", "info", class_info, 1);
2230
2231 add_com ("complete", class_obscure, complete_command,
2232 _("List the completions for the rest of the line as a command."));
2233
2234 add_prefix_cmd ("show", class_info, show_command, _("\
2235 Generic command for showing things about the debugger."),
2236 &showlist, "show ", 0, &cmdlist);
2237 /* Another way to get at the same thing. */
2238 add_info ("set", show_command, _("Show all GDB settings."));
2239
2240 c = add_com ("with", class_vars, with_command, _("\
2241 Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING.\n\
2242 Usage: with SETTING [VALUE] [-- COMMAND]\n\
2243 Usage: w SETTING [VALUE] [-- COMMAND]\n\
2244 With no COMMAND, repeats the last executed command.\n\
2245 \n\
2246 SETTING is any setting you can change with the \"set\" subcommands.\n\
2247 E.g.:\n\
2248 with language pascal -- print obj\n\
2249 with print elements unlimited -- print obj\n\
2250 \n\
2251 You can change multiple settings using nested with, and use\n\
2252 abbreviations for commands and/or values. E.g.:\n\
2253 w la p -- w p el u -- p obj"));
2254 set_cmd_completer_handle_brkchars (c, with_command_completer);
2255 add_com_alias ("w", "with", class_vars, 1);
2256
2257 add_internal_function ("_gdb_setting_str", _("\
2258 $_gdb_setting_str - returns the value of a GDB setting as a string.\n\
2259 Usage: $_gdb_setting_str (setting)\n\
2260 \n\
2261 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2262 boolean values are \"off\", \"on\".\n\
2263 Some integer settings accept an unlimited value, returned\n\
2264 as \"unlimited\"."),
2265 gdb_setting_str_internal_fn, NULL);
2266
2267 add_internal_function ("_gdb_setting", _("\
2268 $_gdb_setting - returns the value of a GDB setting.\n\
2269 Usage: $_gdb_setting (setting)\n\
2270 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2271 boolean values are \"off\", \"on\".\n\
2272 Some integer settings accept an unlimited value, returned\n\
2273 as 0 or -1 depending on the setting."),
2274 gdb_setting_internal_fn, NULL);
2275
2276 add_internal_function ("_gdb_maint_setting_str", _("\
2277 $_gdb_maint_setting_str - returns the value of a GDB maintenance setting as a string.\n\
2278 Usage: $_gdb_maint_setting_str (setting)\n\
2279 \n\
2280 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2281 boolean values are \"off\", \"on\".\n\
2282 Some integer settings accept an unlimited value, returned\n\
2283 as \"unlimited\"."),
2284 gdb_maint_setting_str_internal_fn, NULL);
2285
2286 add_internal_function ("_gdb_maint_setting", _("\
2287 $_gdb_maint_setting - returns the value of a GDB maintenance setting.\n\
2288 Usage: $_gdb_maint_setting (setting)\n\
2289 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2290 boolean values are \"off\", \"on\".\n\
2291 Some integer settings accept an unlimited value, returned\n\
2292 as 0 or -1 depending on the setting."),
2293 gdb_maint_setting_internal_fn, NULL);
2294
2295 add_cmd ("commands", no_set_class, show_commands, _("\
2296 Show the history of commands you typed.\n\
2297 You can supply a command number to start with, or a `+' to start after\n\
2298 the previous command number shown."),
2299 &showlist);
2300
2301 add_cmd ("version", no_set_class, show_version,
2302 _("Show what version of GDB this is."), &showlist);
2303
2304 add_cmd ("configuration", no_set_class, show_configuration,
2305 _("Show how GDB was configured at build time."), &showlist);
2306
2307 add_setshow_zinteger_cmd ("remote", no_class, &remote_debug, _("\
2308 Set debugging of remote protocol."), _("\
2309 Show debugging of remote protocol."), _("\
2310 When enabled, each packet sent or received with the remote target\n\
2311 is displayed."),
2312 NULL,
2313 show_remote_debug,
2314 &setdebuglist, &showdebuglist);
2315
2316 add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class,
2317 &remote_timeout, _("\
2318 Set timeout limit to wait for target to respond."), _("\
2319 Show timeout limit to wait for target to respond."), _("\
2320 This value is used to set the time limit for gdb to wait for a response\n\
2321 from the target."),
2322 NULL,
2323 show_remote_timeout,
2324 &setlist, &showlist);
2325
2326 add_prefix_cmd ("debug", no_class, set_debug,
2327 _("Generic command for setting gdb debugging flags."),
2328 &setdebuglist, "set debug ", 0, &setlist);
2329
2330 add_prefix_cmd ("debug", no_class, show_debug,
2331 _("Generic command for showing gdb debugging flags."),
2332 &showdebuglist, "show debug ", 0, &showlist);
2333
2334 c = add_com ("shell", class_support, shell_command, _("\
2335 Execute the rest of the line as a shell command.\n\
2336 With no arguments, run an inferior shell."));
2337 set_cmd_completer (c, filename_completer);
2338
2339 add_com_alias ("!", "shell", class_support, 0);
2340
2341 c = add_com ("edit", class_files, edit_command, _("\
2342 Edit specified file or function.\n\
2343 With no argument, edits file containing most recent line listed.\n\
2344 Editing targets can be specified in these ways:\n\
2345 FILE:LINENUM, to edit at that line in that file,\n\
2346 FUNCTION, to edit at the beginning of that function,\n\
2347 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2348 *ADDRESS, to edit at the line containing that address.\n\
2349 Uses EDITOR environment variable contents as editor (or ex as default)."));
2350
2351 c->completer = location_completer;
2352
2353 c = add_com ("pipe", class_support, pipe_command, _("\
2354 Send the output of a gdb command to a shell command.\n\
2355 Usage: | [COMMAND] | SHELL_COMMAND\n\
2356 Usage: | -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2357 Usage: pipe [COMMAND] | SHELL_COMMAND\n\
2358 Usage: pipe -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2359 \n\
2360 Executes COMMAND and sends its output to SHELL_COMMAND.\n\
2361 \n\
2362 The -d option indicates to use the string DELIM to separate COMMAND\n\
2363 from SHELL_COMMAND, in alternative to |. This is useful in\n\
2364 case COMMAND contains a | character.\n\
2365 \n\
2366 With no COMMAND, repeat the last executed command\n\
2367 and send its output to SHELL_COMMAND."));
2368 set_cmd_completer_handle_brkchars (c, pipe_command_completer);
2369 add_com_alias ("|", "pipe", class_support, 0);
2370
2371 add_com ("list", class_files, list_command, _("\
2372 List specified function or line.\n\
2373 With no argument, lists ten more lines after or around previous listing.\n\
2374 \"list -\" lists the ten lines before a previous ten-line listing.\n\
2375 One argument specifies a line, and ten lines are listed around that line.\n\
2376 Two arguments with comma between specify starting and ending lines to list.\n\
2377 Lines can be specified in these ways:\n\
2378 LINENUM, to list around that line in current file,\n\
2379 FILE:LINENUM, to list around that line in that file,\n\
2380 FUNCTION, to list around beginning of that function,\n\
2381 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2382 *ADDRESS, to list around the line containing that address.\n\
2383 With two args, if one is empty, it stands for ten lines away from\n\
2384 the other arg.\n\
2385 \n\
2386 By default, when a single location is given, display ten lines.\n\
2387 This can be changed using \"set listsize\", and the current value\n\
2388 can be shown using \"show listsize\"."));
2389
2390 add_com_alias ("l", "list", class_files, 1);
2391
2392 if (dbx_commands)
2393 add_com_alias ("file", "list", class_files, 1);
2394
2395 c = add_com ("disassemble", class_vars, disassemble_command, _("\
2396 Disassemble a specified section of memory.\n\
2397 Default is the function surrounding the pc of the selected frame.\n\
2398 \n\
2399 With a /m modifier, source lines are included (if available).\n\
2400 This view is \"source centric\": the output is in source line order,\n\
2401 regardless of any optimization that is present. Only the main source file\n\
2402 is displayed, not those of, e.g., any inlined functions.\n\
2403 This modifier hasn't proved useful in practice and is deprecated\n\
2404 in favor of /s.\n\
2405 \n\
2406 With a /s modifier, source lines are included (if available).\n\
2407 This differs from /m in two important respects:\n\
2408 - the output is still in pc address order, and\n\
2409 - file names and contents for all relevant source files are displayed.\n\
2410 \n\
2411 With a /r modifier, raw instructions in hex are included.\n\
2412 \n\
2413 With a single argument, the function surrounding that address is dumped.\n\
2414 Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
2415 in the form of \"start,end\", or \"start,+length\".\n\
2416 \n\
2417 Note that the address is interpreted as an expression, not as a location\n\
2418 like in the \"break\" command.\n\
2419 So, for example, if you want to disassemble function bar in file foo.c\n\
2420 you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
2421 set_cmd_completer (c, location_completer);
2422
2423 c = add_com ("make", class_support, make_command, _("\
2424 Run the ``make'' program using the rest of the line as arguments."));
2425 set_cmd_completer (c, filename_completer);
2426 add_cmd ("user", no_class, show_user, _("\
2427 Show definitions of non-python/scheme user defined commands.\n\
2428 Argument is the name of the user defined command.\n\
2429 With no argument, show definitions of all user defined commands."), &showlist);
2430 add_com ("apropos", class_support, apropos_command, _("\
2431 Search for commands matching a REGEXP.\n\
2432 Usage: apropos [-v] REGEXP\n\
2433 Flag -v indicates to produce a verbose output, showing full documentation\n\
2434 of the matching commands."));
2435
2436 add_setshow_uinteger_cmd ("max-user-call-depth", no_class,
2437 &max_user_call_depth, _("\
2438 Set the max call depth for non-python/scheme user-defined commands."), _("\
2439 Show the max call depth for non-python/scheme user-defined commands."), NULL,
2440 NULL,
2441 show_max_user_call_depth,
2442 &setlist, &showlist);
2443
2444 add_setshow_boolean_cmd ("trace-commands", no_class, &trace_commands, _("\
2445 Set tracing of GDB CLI commands."), _("\
2446 Show state of GDB CLI command tracing."), _("\
2447 When 'on', each command is displayed as it is executed."),
2448 NULL,
2449 NULL,
2450 &setlist, &showlist);
2451
2452 c = add_com ("alias", class_support, alias_command, _("\
2453 Define a new command that is an alias of an existing command.\n\
2454 Usage: alias [-a] [--] ALIAS = COMMAND\n\
2455 ALIAS is the name of the alias command to create.\n\
2456 COMMAND is the command being aliased to.\n\
2457 If \"-a\" is specified, the command is an abbreviation,\n\
2458 and will not appear in help command list output.\n\
2459 \n\
2460 Examples:\n\
2461 Make \"spe\" an alias of \"set print elements\":\n\
2462 alias spe = set print elements\n\
2463 Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
2464 alias -a set print elms = set print elements"));
2465
2466 const char *source_help_text = xstrprintf (_("\
2467 Read commands from a file named FILE.\n\
2468 \n\
2469 Usage: source [-s] [-v] FILE\n\
2470 -s: search for the script in the source search path,\n\
2471 even if FILE contains directories.\n\
2472 -v: each command in FILE is echoed as it is executed.\n\
2473 \n\
2474 Note that the file \"%s\" is read automatically in this way\n\
2475 when GDB is started."), GDBINIT);
2476 c = add_cmd ("source", class_support, source_command,
2477 source_help_text, &cmdlist);
2478 set_cmd_completer (c, filename_completer);
2479 }
This page took 0.172712 seconds and 4 git commands to generate.