Make check_for_argument skip whitespace after arg itself
[deliverable/binutils-gdb.git] / gdb / cli / cli-cmds.c
1 /* GDB CLI commands.
2
3 Copyright (C) 2000-2019 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/readline.h"
23 #include "readline/tilde.h"
24 #include "completer.h"
25 #include "target.h" /* For baud_rate, remote_debug and remote_timeout. */
26 #include "common/gdb_wait.h" /* For shell escape implementation. */
27 #include "gdbcmd.h"
28 #include "gdb_regex.h" /* Used by apropos_command. */
29 #include "gdb_vfork.h"
30 #include "linespec.h"
31 #include "expression.h"
32 #include "frame.h"
33 #include "value.h"
34 #include "language.h"
35 #include "filenames.h" /* For DOSish file names. */
36 #include "objfiles.h"
37 #include "source.h"
38 #include "disasm.h"
39 #include "tracepoint.h"
40 #include "common/filestuff.h"
41 #include "location.h"
42 #include "block.h"
43
44 #include "ui-out.h"
45 #include "interps.h"
46
47 #include "top.h"
48 #include "cli/cli-decode.h"
49 #include "cli/cli-script.h"
50 #include "cli/cli-setshow.h"
51 #include "cli/cli-cmds.h"
52 #include "cli/cli-utils.h"
53
54 #include "extension.h"
55 #include "common/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 /* Limit the call depth of user-defined commands */
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 int trace_commands = 0;
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 \f
215 /* Provide documentation on command or list given by COMMAND. FROM_TTY
216 is ignored. */
217
218 static void
219 help_command (const char *command, int from_tty)
220 {
221 help_cmd (command, gdb_stdout);
222 }
223 \f
224
225 /* Note: The "complete" command is used by Emacs to implement completion.
226 [Is that why this function writes output with *_unfiltered?] */
227
228 static void
229 complete_command (const char *arg, int from_tty)
230 {
231 dont_repeat ();
232
233 if (max_completions == 0)
234 {
235 /* Only print this for non-mi frontends. An MI frontend may not
236 be able to handle this. */
237 if (!current_uiout->is_mi_like_p ())
238 {
239 printf_unfiltered (_("max-completions is zero,"
240 " completion is disabled.\n"));
241 }
242 return;
243 }
244
245 if (arg == NULL)
246 arg = "";
247
248 int quote_char = '\0';
249 const char *word;
250
251 completion_result result = complete (arg, &word, &quote_char);
252
253 if (result.number_matches != 0)
254 {
255 std::string arg_prefix (arg, word - arg);
256
257 if (result.number_matches == 1)
258 printf_unfiltered ("%s%s\n", arg_prefix.c_str (), result.match_list[0]);
259 else
260 {
261 result.sort_match_list ();
262
263 for (size_t i = 0; i < result.number_matches; i++)
264 {
265 printf_unfiltered ("%s%s",
266 arg_prefix.c_str (),
267 result.match_list[i + 1]);
268 if (quote_char)
269 printf_unfiltered ("%c", quote_char);
270 printf_unfiltered ("\n");
271 }
272 }
273
274 if (result.number_matches == max_completions)
275 {
276 /* ARG_PREFIX and WORD are included in the output so that emacs
277 will include the message in the output. */
278 printf_unfiltered (_("%s%s %s\n"),
279 arg_prefix.c_str (), word,
280 get_max_completions_reached_message ());
281 }
282 }
283 }
284
285 int
286 is_complete_command (struct cmd_list_element *c)
287 {
288 return cmd_cfunc_eq (c, complete_command);
289 }
290
291 static void
292 show_version (const char *args, int from_tty)
293 {
294 print_gdb_version (gdb_stdout, true);
295 printf_filtered ("\n");
296 }
297
298 static void
299 show_configuration (const char *args, int from_tty)
300 {
301 print_gdb_configuration (gdb_stdout);
302 }
303
304 /* Handle the quit command. */
305
306 void
307 quit_command (const char *args, int from_tty)
308 {
309 int exit_code = 0;
310
311 /* An optional expression may be used to cause gdb to terminate with
312 the value of that expression. */
313 if (args)
314 {
315 struct value *val = parse_and_eval (args);
316
317 exit_code = (int) value_as_long (val);
318 }
319
320 if (!quit_confirm ())
321 error (_("Not confirmed."));
322
323 query_if_trace_running (from_tty);
324
325 quit_force (args ? &exit_code : NULL, from_tty);
326 }
327
328 static void
329 pwd_command (const char *args, int from_tty)
330 {
331 if (args)
332 error (_("The \"pwd\" command does not take an argument: %s"), args);
333
334 gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
335
336 if (cwd == NULL)
337 error (_("Error finding name of working directory: %s"),
338 safe_strerror (errno));
339
340 if (strcmp (cwd.get (), current_directory) != 0)
341 printf_unfiltered (_("Working directory %s\n (canonically %s).\n"),
342 current_directory, cwd.get ());
343 else
344 printf_unfiltered (_("Working directory %s.\n"), current_directory);
345 }
346
347 void
348 cd_command (const char *dir, int from_tty)
349 {
350 int len;
351 /* Found something other than leading repetitions of "/..". */
352 int found_real_path;
353 char *p;
354
355 /* If the new directory is absolute, repeat is a no-op; if relative,
356 repeat might be useful but is more likely to be a mistake. */
357 dont_repeat ();
358
359 gdb::unique_xmalloc_ptr<char> dir_holder
360 (tilde_expand (dir != NULL ? dir : "~"));
361 dir = dir_holder.get ();
362
363 if (chdir (dir) < 0)
364 perror_with_name (dir);
365
366 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
367 /* There's too much mess with DOSish names like "d:", "d:.",
368 "d:./foo" etc. Instead of having lots of special #ifdef'ed code,
369 simply get the canonicalized name of the current directory. */
370 gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
371 dir = cwd.get ();
372 #endif
373
374 len = strlen (dir);
375 if (IS_DIR_SEPARATOR (dir[len - 1]))
376 {
377 /* Remove the trailing slash unless this is a root directory
378 (including a drive letter on non-Unix systems). */
379 if (!(len == 1) /* "/" */
380 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
381 && !(len == 3 && dir[1] == ':') /* "d:/" */
382 #endif
383 )
384 len--;
385 }
386
387 dir_holder.reset (savestring (dir, len));
388 if (IS_ABSOLUTE_PATH (dir_holder.get ()))
389 {
390 xfree (current_directory);
391 current_directory = dir_holder.release ();
392 }
393 else
394 {
395 if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]))
396 current_directory = concat (current_directory, dir_holder.get (),
397 (char *) NULL);
398 else
399 current_directory = concat (current_directory, SLASH_STRING,
400 dir_holder.get (), (char *) NULL);
401 }
402
403 /* Now simplify any occurrences of `.' and `..' in the pathname. */
404
405 found_real_path = 0;
406 for (p = current_directory; *p;)
407 {
408 if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.'
409 && (p[2] == 0 || IS_DIR_SEPARATOR (p[2])))
410 memmove (p, p + 2, strlen (p + 2) + 1);
411 else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.'
412 && (p[3] == 0 || IS_DIR_SEPARATOR (p[3])))
413 {
414 if (found_real_path)
415 {
416 /* Search backwards for the directory just before the "/.."
417 and obliterate it and the "/..". */
418 char *q = p;
419
420 while (q != current_directory && !IS_DIR_SEPARATOR (q[-1]))
421 --q;
422
423 if (q == current_directory)
424 /* current_directory is
425 a relative pathname ("can't happen"--leave it alone). */
426 ++p;
427 else
428 {
429 memmove (q - 1, p + 3, strlen (p + 3) + 1);
430 p = q - 1;
431 }
432 }
433 else
434 /* We are dealing with leading repetitions of "/..", for
435 example "/../..", which is the Mach super-root. */
436 p += 3;
437 }
438 else
439 {
440 found_real_path = 1;
441 ++p;
442 }
443 }
444
445 forget_cached_source_info ();
446
447 if (from_tty)
448 pwd_command ((char *) 0, 1);
449 }
450 \f
451 /* Show the current value of the 'script-extension' option. */
452
453 static void
454 show_script_ext_mode (struct ui_file *file, int from_tty,
455 struct cmd_list_element *c, const char *value)
456 {
457 fprintf_filtered (file,
458 _("Script filename extension recognition is \"%s\".\n"),
459 value);
460 }
461
462 /* Try to open SCRIPT_FILE.
463 If successful, the full path name is stored in *FULL_PATHP,
464 and the stream is returned.
465 If not successful, return NULL; errno is set for the last file
466 we tried to open.
467
468 If SEARCH_PATH is non-zero, and the file isn't found in cwd,
469 search for it in the source search path. */
470
471 gdb::optional<open_script>
472 find_and_open_script (const char *script_file, int search_path)
473 {
474 int fd;
475 openp_flags search_flags = OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH;
476 gdb::optional<open_script> opened;
477
478 gdb::unique_xmalloc_ptr<char> file (tilde_expand (script_file));
479
480 if (search_path)
481 search_flags |= OPF_SEARCH_IN_PATH;
482
483 /* Search for and open 'file' on the search path used for source
484 files. Put the full location in *FULL_PATHP. */
485 gdb::unique_xmalloc_ptr<char> full_path;
486 fd = openp (source_path, search_flags,
487 file.get (), O_RDONLY, &full_path);
488
489 if (fd == -1)
490 return opened;
491
492 FILE *result = fdopen (fd, FOPEN_RT);
493 if (result == NULL)
494 {
495 int save_errno = errno;
496
497 close (fd);
498 errno = save_errno;
499 }
500 else
501 opened.emplace (gdb_file_up (result), std::move (full_path));
502
503 return opened;
504 }
505
506 /* Load script FILE, which has already been opened as STREAM.
507 FILE_TO_OPEN is the form of FILE to use if one needs to open the file.
508 This is provided as FILE may have been found via the source search path.
509 An important thing to note here is that FILE may be a symlink to a file
510 with a different or non-existing suffix, and thus one cannot infer the
511 extension language from FILE_TO_OPEN. */
512
513 static void
514 source_script_from_stream (FILE *stream, const char *file,
515 const char *file_to_open)
516 {
517 if (script_ext_mode != script_ext_off)
518 {
519 const struct extension_language_defn *extlang
520 = get_ext_lang_of_file (file);
521
522 if (extlang != NULL)
523 {
524 if (ext_lang_present_p (extlang))
525 {
526 script_sourcer_func *sourcer
527 = ext_lang_script_sourcer (extlang);
528
529 gdb_assert (sourcer != NULL);
530 sourcer (extlang, stream, file_to_open);
531 return;
532 }
533 else if (script_ext_mode == script_ext_soft)
534 {
535 /* Assume the file is a gdb script.
536 This is handled below. */
537 }
538 else
539 throw_ext_lang_unsupported (extlang);
540 }
541 }
542
543 script_from_file (stream, file);
544 }
545
546 /* Worker to perform the "source" command.
547 Load script FILE.
548 If SEARCH_PATH is non-zero, and the file isn't found in cwd,
549 search for it in the source search path. */
550
551 static void
552 source_script_with_search (const char *file, int from_tty, int search_path)
553 {
554
555 if (file == NULL || *file == 0)
556 error (_("source command requires file name of file to source."));
557
558 gdb::optional<open_script> opened = find_and_open_script (file, search_path);
559 if (!opened)
560 {
561 /* The script wasn't found, or was otherwise inaccessible.
562 If the source command was invoked interactively, throw an
563 error. Otherwise (e.g. if it was invoked by a script),
564 just emit a warning, rather than cause an error. */
565 if (from_tty)
566 perror_with_name (file);
567 else
568 {
569 perror_warning_with_name (file);
570 return;
571 }
572 }
573
574 /* The python support reopens the file, so we need to pass full_path here
575 in case the file was found on the search path. It's useful to do this
576 anyway so that error messages show the actual file used. But only do
577 this if we (may have) used search_path, as printing the full path in
578 errors for the non-search case can be more noise than signal. */
579 source_script_from_stream (opened->stream.get (), file,
580 search_path ? opened->full_path.get () : file);
581 }
582
583 /* Wrapper around source_script_with_search to export it to main.c
584 for use in loading .gdbinit scripts. */
585
586 void
587 source_script (const char *file, int from_tty)
588 {
589 source_script_with_search (file, from_tty, 0);
590 }
591
592 static void
593 source_command (const char *args, int from_tty)
594 {
595 const char *file = args;
596 int search_path = 0;
597
598 scoped_restore save_source_verbose = make_scoped_restore (&source_verbose);
599
600 /* -v causes the source command to run in verbose mode.
601 -s causes the file to be searched in the source search path,
602 even if the file name contains a '/'.
603 We still have to be able to handle filenames with spaces in a
604 backward compatible way, so buildargv is not appropriate. */
605
606 if (args)
607 {
608 while (args[0] != '\0')
609 {
610 /* Make sure leading white space does not break the
611 comparisons. */
612 args = skip_spaces (args);
613
614 if (args[0] != '-')
615 break;
616
617 if (args[1] == 'v' && isspace (args[2]))
618 {
619 source_verbose = 1;
620
621 /* Skip passed -v. */
622 args = &args[3];
623 }
624 else if (args[1] == 's' && isspace (args[2]))
625 {
626 search_path = 1;
627
628 /* Skip passed -s. */
629 args = &args[3];
630 }
631 else
632 break;
633 }
634
635 file = skip_spaces (args);
636 }
637
638 source_script_with_search (file, from_tty, search_path);
639 }
640
641
642 static void
643 echo_command (const char *text, int from_tty)
644 {
645 const char *p = text;
646 int c;
647
648 if (text)
649 while ((c = *p++) != '\0')
650 {
651 if (c == '\\')
652 {
653 /* \ at end of argument is used after spaces
654 so they won't be lost. */
655 if (*p == 0)
656 return;
657
658 c = parse_escape (get_current_arch (), &p);
659 if (c >= 0)
660 printf_filtered ("%c", c);
661 }
662 else
663 printf_filtered ("%c", c);
664 }
665
666 reset_terminal_style (gdb_stdout);
667
668 /* Force this output to appear now. */
669 wrap_here ("");
670 gdb_flush (gdb_stdout);
671 }
672
673 /* Sets the last launched shell command convenience variables based on
674 EXIT_STATUS. */
675
676 static void
677 exit_status_set_internal_vars (int exit_status)
678 {
679 struct internalvar *var_code = lookup_internalvar ("_shell_exitcode");
680 struct internalvar *var_signal = lookup_internalvar ("_shell_exitsignal");
681
682 clear_internalvar (var_code);
683 clear_internalvar (var_signal);
684 if (WIFEXITED (exit_status))
685 set_internalvar_integer (var_code, WEXITSTATUS (exit_status));
686 else if (WIFSIGNALED (exit_status))
687 set_internalvar_integer (var_signal, WTERMSIG (exit_status));
688 else
689 warning (_("unexpected shell command exit status %d"), exit_status);
690 }
691
692 static void
693 shell_escape (const char *arg, int from_tty)
694 {
695 #if defined(CANT_FORK) || \
696 (!defined(HAVE_WORKING_VFORK) && !defined(HAVE_WORKING_FORK))
697 /* If ARG is NULL, they want an inferior shell, but `system' just
698 reports if the shell is available when passed a NULL arg. */
699 int rc = system (arg ? arg : "");
700
701 if (!arg)
702 arg = "inferior shell";
703
704 if (rc == -1)
705 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
706 safe_strerror (errno));
707 else if (rc)
708 fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
709 #ifdef GLOBAL_CURDIR
710 /* Make sure to return to the directory GDB thinks it is, in case
711 the shell command we just ran changed it. */
712 chdir (current_directory);
713 exit_status_set_internal_vars (rc);
714 #endif
715 #else /* Can fork. */
716 int status, pid;
717
718 if ((pid = vfork ()) == 0)
719 {
720 const char *p, *user_shell = get_shell ();
721
722 close_most_fds ();
723
724 /* Get the name of the shell for arg0. */
725 p = lbasename (user_shell);
726
727 if (!arg)
728 execl (user_shell, p, (char *) 0);
729 else
730 execl (user_shell, p, "-c", arg, (char *) 0);
731
732 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
733 safe_strerror (errno));
734 _exit (0177);
735 }
736
737 if (pid != -1)
738 waitpid (pid, &status, 0);
739 else
740 error (_("Fork failed"));
741 exit_status_set_internal_vars (status);
742 #endif /* Can fork. */
743 }
744
745 /* Implementation of the "shell" command. */
746
747 static void
748 shell_command (const char *arg, int from_tty)
749 {
750 shell_escape (arg, from_tty);
751 }
752
753 static void
754 edit_command (const char *arg, int from_tty)
755 {
756 struct symtab_and_line sal;
757 struct symbol *sym;
758 const char *editor;
759 char *p;
760 const char *fn;
761
762 /* Pull in the current default source line if necessary. */
763 if (arg == 0)
764 {
765 set_default_source_symtab_and_line ();
766 sal = get_current_source_symtab_and_line ();
767 }
768
769 /* Bare "edit" edits file with present line. */
770
771 if (arg == 0)
772 {
773 if (sal.symtab == 0)
774 error (_("No default source file yet."));
775 sal.line += get_lines_to_list () / 2;
776 }
777 else
778 {
779 const char *arg1;
780
781 /* Now should only be one argument -- decode it in SAL. */
782 arg1 = arg;
783 event_location_up location = string_to_event_location (&arg1,
784 current_language);
785 std::vector<symtab_and_line> sals = decode_line_1 (location.get (),
786 DECODE_LINE_LIST_MODE,
787 NULL, NULL, 0);
788
789 filter_sals (sals);
790 if (sals.empty ())
791 {
792 /* C++ */
793 return;
794 }
795 if (sals.size () > 1)
796 {
797 ambiguous_line_spec (sals,
798 _("Specified line is ambiguous:\n"));
799 return;
800 }
801
802 sal = sals[0];
803
804 if (*arg1)
805 error (_("Junk at end of line specification."));
806
807 /* If line was specified by address, first print exactly which
808 line, and which file. In this case, sal.symtab == 0 means
809 address is outside of all known source files, not that user
810 failed to give a filename. */
811 if (*arg == '*')
812 {
813 struct gdbarch *gdbarch;
814
815 if (sal.symtab == 0)
816 error (_("No source file for address %s."),
817 paddress (get_current_arch (), sal.pc));
818
819 gdbarch = get_objfile_arch (SYMTAB_OBJFILE (sal.symtab));
820 sym = find_pc_function (sal.pc);
821 if (sym)
822 printf_filtered ("%s is in %s (%s:%d).\n",
823 paddress (gdbarch, sal.pc),
824 SYMBOL_PRINT_NAME (sym),
825 symtab_to_filename_for_display (sal.symtab),
826 sal.line);
827 else
828 printf_filtered ("%s is at %s:%d.\n",
829 paddress (gdbarch, sal.pc),
830 symtab_to_filename_for_display (sal.symtab),
831 sal.line);
832 }
833
834 /* If what was given does not imply a symtab, it must be an
835 undebuggable symbol which means no source code. */
836
837 if (sal.symtab == 0)
838 error (_("No line number known for %s."), arg);
839 }
840
841 if ((editor = getenv ("EDITOR")) == NULL)
842 editor = "/bin/ex";
843
844 fn = symtab_to_fullname (sal.symtab);
845
846 /* Quote the file name, in case it has whitespace or other special
847 characters. */
848 p = xstrprintf ("%s +%d \"%s\"", editor, sal.line, fn);
849 shell_escape (p, from_tty);
850 xfree (p);
851 }
852
853 /* Implementation of the "pipe" command. */
854
855 static void
856 pipe_command (const char *arg, int from_tty)
857 {
858 std::string delim ("|");
859
860 if (arg != nullptr && check_for_argument (&arg, "-d", 2))
861 {
862 delim = extract_arg (&arg);
863 if (delim.empty ())
864 error (_("Missing delimiter DELIM after -d"));
865 }
866
867 const char *command = arg;
868 if (command == nullptr)
869 error (_("Missing COMMAND"));
870
871 arg = strstr (arg, delim.c_str ());
872
873 if (arg == nullptr)
874 error (_("Missing delimiter before SHELL_COMMAND"));
875
876 std::string gdb_cmd (command, arg - command);
877
878 arg += delim.length (); /* Skip the delimiter. */
879
880 if (gdb_cmd.empty ())
881 {
882 repeat_previous ();
883 gdb_cmd = skip_spaces (get_saved_command_line ());
884 if (gdb_cmd.empty ())
885 error (_("No previous command to relaunch"));
886 }
887
888 const char *shell_command = skip_spaces (arg);
889 if (*shell_command == '\0')
890 error (_("Missing SHELL_COMMAND"));
891
892 FILE *to_shell_command = popen (shell_command, "w");
893
894 if (to_shell_command == nullptr)
895 error (_("Error launching \"%s\""), shell_command);
896
897 try
898 {
899 stdio_file pipe_file (to_shell_command);
900
901 execute_command_to_ui_file (&pipe_file, gdb_cmd.c_str (), from_tty);
902 }
903 catch (...)
904 {
905 pclose (to_shell_command);
906 throw;
907 }
908
909 int exit_status = pclose (to_shell_command);
910
911 if (exit_status < 0)
912 error (_("shell command \"%s\" failed: %s"), shell_command,
913 safe_strerror (errno));
914 exit_status_set_internal_vars (exit_status);
915 }
916
917 static void
918 list_command (const char *arg, int from_tty)
919 {
920 struct symbol *sym;
921 const char *arg1;
922 int no_end = 1;
923 int dummy_end = 0;
924 int dummy_beg = 0;
925 int linenum_beg = 0;
926 const char *p;
927
928 /* Pull in the current default source line if necessary. */
929 if (arg == NULL || ((arg[0] == '+' || arg[0] == '-') && arg[1] == '\0'))
930 {
931 set_default_source_symtab_and_line ();
932 symtab_and_line cursal = get_current_source_symtab_and_line ();
933
934 /* If this is the first "list" since we've set the current
935 source line, center the listing around that line. */
936 if (get_first_line_listed () == 0)
937 {
938 int first;
939
940 first = std::max (cursal.line - get_lines_to_list () / 2, 1);
941
942 /* A small special case --- if listing backwards, and we
943 should list only one line, list the preceding line,
944 instead of the exact line we've just shown after e.g.,
945 stopping for a breakpoint. */
946 if (arg != NULL && arg[0] == '-'
947 && get_lines_to_list () == 1 && first > 1)
948 first -= 1;
949
950 print_source_lines (cursal.symtab, source_lines_range (first), 0);
951 }
952
953 /* "l" or "l +" lists next ten lines. */
954 else if (arg == NULL || arg[0] == '+')
955 print_source_lines (cursal.symtab,
956 source_lines_range (cursal.line), 0);
957
958 /* "l -" lists previous ten lines, the ones before the ten just
959 listed. */
960 else if (arg[0] == '-')
961 {
962 if (get_first_line_listed () == 1)
963 error (_("Already at the start of %s."),
964 symtab_to_filename_for_display (cursal.symtab));
965 source_lines_range range (get_first_line_listed (),
966 source_lines_range::BACKWARD);
967 print_source_lines (cursal.symtab, range, 0);
968 }
969
970 return;
971 }
972
973 /* Now if there is only one argument, decode it in SAL
974 and set NO_END.
975 If there are two arguments, decode them in SAL and SAL_END
976 and clear NO_END; however, if one of the arguments is blank,
977 set DUMMY_BEG or DUMMY_END to record that fact. */
978
979 if (!have_full_symbols () && !have_partial_symbols ())
980 error (_("No symbol table is loaded. Use the \"file\" command."));
981
982 std::vector<symtab_and_line> sals;
983 symtab_and_line sal, sal_end;
984
985 arg1 = arg;
986 if (*arg1 == ',')
987 dummy_beg = 1;
988 else
989 {
990 event_location_up location = string_to_event_location (&arg1,
991 current_language);
992 sals = decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
993 NULL, NULL, 0);
994 filter_sals (sals);
995 if (sals.empty ())
996 {
997 /* C++ */
998 return;
999 }
1000
1001 sal = sals[0];
1002 }
1003
1004 /* Record whether the BEG arg is all digits. */
1005
1006 for (p = arg; p != arg1 && *p >= '0' && *p <= '9'; p++);
1007 linenum_beg = (p == arg1);
1008
1009 /* Save the range of the first argument, in case we need to let the
1010 user know it was ambiguous. */
1011 const char *beg = arg;
1012 size_t beg_len = arg1 - beg;
1013
1014 while (*arg1 == ' ' || *arg1 == '\t')
1015 arg1++;
1016 if (*arg1 == ',')
1017 {
1018 no_end = 0;
1019 if (sals.size () > 1)
1020 {
1021 ambiguous_line_spec (sals,
1022 _("Specified first line '%.*s' is ambiguous:\n"),
1023 (int) beg_len, beg);
1024 return;
1025 }
1026 arg1++;
1027 while (*arg1 == ' ' || *arg1 == '\t')
1028 arg1++;
1029 if (*arg1 == 0)
1030 dummy_end = 1;
1031 else
1032 {
1033 /* Save the last argument, in case we need to let the user
1034 know it was ambiguous. */
1035 const char *end_arg = arg1;
1036
1037 event_location_up location
1038 = string_to_event_location (&arg1, current_language);
1039
1040 std::vector<symtab_and_line> sals_end
1041 = (dummy_beg
1042 ? decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
1043 NULL, NULL, 0)
1044 : decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
1045 NULL, sal.symtab, sal.line));
1046
1047 filter_sals (sals_end);
1048 if (sals_end.empty ())
1049 return;
1050 if (sals_end.size () > 1)
1051 {
1052 ambiguous_line_spec (sals_end,
1053 _("Specified last line '%s' is ambiguous:\n"),
1054 end_arg);
1055 return;
1056 }
1057 sal_end = sals_end[0];
1058 }
1059 }
1060
1061 if (*arg1)
1062 error (_("Junk at end of line specification."));
1063
1064 if (!no_end && !dummy_beg && !dummy_end
1065 && sal.symtab != sal_end.symtab)
1066 error (_("Specified first and last lines are in different files."));
1067 if (dummy_beg && dummy_end)
1068 error (_("Two empty args do not say what lines to list."));
1069
1070 /* If line was specified by address,
1071 first print exactly which line, and which file.
1072
1073 In this case, sal.symtab == 0 means address is outside of all
1074 known source files, not that user failed to give a filename. */
1075 if (*arg == '*')
1076 {
1077 struct gdbarch *gdbarch;
1078
1079 if (sal.symtab == 0)
1080 error (_("No source file for address %s."),
1081 paddress (get_current_arch (), sal.pc));
1082
1083 gdbarch = get_objfile_arch (SYMTAB_OBJFILE (sal.symtab));
1084 sym = find_pc_function (sal.pc);
1085 if (sym)
1086 printf_filtered ("%s is in %s (%s:%d).\n",
1087 paddress (gdbarch, sal.pc),
1088 SYMBOL_PRINT_NAME (sym),
1089 symtab_to_filename_for_display (sal.symtab), sal.line);
1090 else
1091 printf_filtered ("%s is at %s:%d.\n",
1092 paddress (gdbarch, sal.pc),
1093 symtab_to_filename_for_display (sal.symtab), sal.line);
1094 }
1095
1096 /* If line was not specified by just a line number, and it does not
1097 imply a symtab, it must be an undebuggable symbol which means no
1098 source code. */
1099
1100 if (!linenum_beg && sal.symtab == 0)
1101 error (_("No line number known for %s."), arg);
1102
1103 /* If this command is repeated with RET,
1104 turn it into the no-arg variant. */
1105
1106 if (from_tty)
1107 set_repeat_arguments ("");
1108
1109 if (dummy_beg && sal_end.symtab == 0)
1110 error (_("No default source file yet. Do \"help list\"."));
1111 if (dummy_beg)
1112 {
1113 source_lines_range range (sal_end.line + 1,
1114 source_lines_range::BACKWARD);
1115 print_source_lines (sal_end.symtab, range, 0);
1116 }
1117 else if (sal.symtab == 0)
1118 error (_("No default source file yet. Do \"help list\"."));
1119 else if (no_end)
1120 {
1121 for (int i = 0; i < sals.size (); i++)
1122 {
1123 sal = sals[i];
1124 int first_line = sal.line - get_lines_to_list () / 2;
1125 if (first_line < 1)
1126 first_line = 1;
1127 if (sals.size () > 1)
1128 print_sal_location (sal);
1129 print_source_lines (sal.symtab, source_lines_range (first_line), 0);
1130 }
1131 }
1132 else if (dummy_end)
1133 print_source_lines (sal.symtab, source_lines_range (sal.line), 0);
1134 else
1135 print_source_lines (sal.symtab,
1136 source_lines_range (sal.line, (sal_end.line + 1)),
1137 0);
1138 }
1139
1140 /* Subroutine of disassemble_command to simplify it.
1141 Perform the disassembly.
1142 NAME is the name of the function if known, or NULL.
1143 [LOW,HIGH) are the range of addresses to disassemble.
1144 BLOCK is the block to disassemble; it needs to be provided
1145 when non-contiguous blocks are disassembled; otherwise
1146 it can be NULL.
1147 MIXED is non-zero to print source with the assembler. */
1148
1149 static void
1150 print_disassembly (struct gdbarch *gdbarch, const char *name,
1151 CORE_ADDR low, CORE_ADDR high,
1152 const struct block *block,
1153 gdb_disassembly_flags flags)
1154 {
1155 #if defined(TUI)
1156 if (!tui_is_window_visible (DISASSEM_WIN))
1157 #endif
1158 {
1159 printf_filtered ("Dump of assembler code ");
1160 if (name != NULL)
1161 printf_filtered ("for function %s:\n", name);
1162 if (block == nullptr || BLOCK_CONTIGUOUS_P (block))
1163 {
1164 if (name == NULL)
1165 printf_filtered ("from %s to %s:\n",
1166 paddress (gdbarch, low), paddress (gdbarch, high));
1167
1168 /* Dump the specified range. */
1169 gdb_disassembly (gdbarch, current_uiout, flags, -1, low, high);
1170 }
1171 else
1172 {
1173 for (int i = 0; i < BLOCK_NRANGES (block); i++)
1174 {
1175 CORE_ADDR range_low = BLOCK_RANGE_START (block, i);
1176 CORE_ADDR range_high = BLOCK_RANGE_END (block, i);
1177 printf_filtered (_("Address range %s to %s:\n"),
1178 paddress (gdbarch, range_low),
1179 paddress (gdbarch, range_high));
1180 gdb_disassembly (gdbarch, current_uiout, flags, -1,
1181 range_low, range_high);
1182 }
1183 }
1184 printf_filtered ("End of assembler dump.\n");
1185 }
1186 #if defined(TUI)
1187 else
1188 {
1189 tui_show_assembly (gdbarch, low);
1190 }
1191 #endif
1192 }
1193
1194 /* Subroutine of disassemble_command to simplify it.
1195 Print a disassembly of the current function according to FLAGS. */
1196
1197 static void
1198 disassemble_current_function (gdb_disassembly_flags flags)
1199 {
1200 struct frame_info *frame;
1201 struct gdbarch *gdbarch;
1202 CORE_ADDR low, high, pc;
1203 const char *name;
1204 const struct block *block;
1205
1206 frame = get_selected_frame (_("No frame selected."));
1207 gdbarch = get_frame_arch (frame);
1208 pc = get_frame_address_in_block (frame);
1209 if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
1210 error (_("No function contains program counter for selected frame."));
1211 #if defined(TUI)
1212 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1213 `tui_version'. */
1214 if (tui_active)
1215 /* FIXME: cagney/2004-02-07: This should be an observer. */
1216 low = tui_get_low_disassembly_address (gdbarch, low, pc);
1217 #endif
1218 low += gdbarch_deprecated_function_start_offset (gdbarch);
1219
1220 print_disassembly (gdbarch, name, low, high, block, flags);
1221 }
1222
1223 /* Dump a specified section of assembly code.
1224
1225 Usage:
1226 disassemble [/mrs]
1227 - dump the assembly code for the function of the current pc
1228 disassemble [/mrs] addr
1229 - dump the assembly code for the function at ADDR
1230 disassemble [/mrs] low,high
1231 disassemble [/mrs] low,+length
1232 - dump the assembly code in the range [LOW,HIGH), or [LOW,LOW+length)
1233
1234 A /m modifier will include source code with the assembly in a
1235 "source centric" view. This view lists only the file of the first insn,
1236 even if other source files are involved (e.g., inlined functions), and
1237 the output is in source order, even with optimized code. This view is
1238 considered deprecated as it hasn't been useful in practice.
1239
1240 A /r modifier will include raw instructions in hex with the assembly.
1241
1242 A /s modifier will include source code with the assembly, like /m, with
1243 two important differences:
1244 1) The output is still in pc address order.
1245 2) File names and contents for all relevant source files are displayed. */
1246
1247 static void
1248 disassemble_command (const char *arg, int from_tty)
1249 {
1250 struct gdbarch *gdbarch = get_current_arch ();
1251 CORE_ADDR low, high;
1252 const char *name;
1253 CORE_ADDR pc;
1254 gdb_disassembly_flags flags;
1255 const char *p;
1256 const struct block *block = nullptr;
1257
1258 p = arg;
1259 name = NULL;
1260 flags = 0;
1261
1262 if (p && *p == '/')
1263 {
1264 ++p;
1265
1266 if (*p == '\0')
1267 error (_("Missing modifier."));
1268
1269 while (*p && ! isspace (*p))
1270 {
1271 switch (*p++)
1272 {
1273 case 'm':
1274 flags |= DISASSEMBLY_SOURCE_DEPRECATED;
1275 break;
1276 case 'r':
1277 flags |= DISASSEMBLY_RAW_INSN;
1278 break;
1279 case 's':
1280 flags |= DISASSEMBLY_SOURCE;
1281 break;
1282 default:
1283 error (_("Invalid disassembly modifier."));
1284 }
1285 }
1286
1287 p = skip_spaces (p);
1288 }
1289
1290 if ((flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1291 == (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
1292 error (_("Cannot specify both /m and /s."));
1293
1294 if (! p || ! *p)
1295 {
1296 flags |= DISASSEMBLY_OMIT_FNAME;
1297 disassemble_current_function (flags);
1298 return;
1299 }
1300
1301 pc = value_as_address (parse_to_comma_and_eval (&p));
1302 if (p[0] == ',')
1303 ++p;
1304 if (p[0] == '\0')
1305 {
1306 /* One argument. */
1307 if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
1308 error (_("No function contains specified address."));
1309 #if defined(TUI)
1310 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1311 `tui_version'. */
1312 if (tui_active)
1313 /* FIXME: cagney/2004-02-07: This should be an observer. */
1314 low = tui_get_low_disassembly_address (gdbarch, low, pc);
1315 #endif
1316 low += gdbarch_deprecated_function_start_offset (gdbarch);
1317 flags |= DISASSEMBLY_OMIT_FNAME;
1318 }
1319 else
1320 {
1321 /* Two arguments. */
1322 int incl_flag = 0;
1323 low = pc;
1324 p = skip_spaces (p);
1325 if (p[0] == '+')
1326 {
1327 ++p;
1328 incl_flag = 1;
1329 }
1330 high = parse_and_eval_address (p);
1331 if (incl_flag)
1332 high += low;
1333 }
1334
1335 print_disassembly (gdbarch, name, low, high, block, flags);
1336 }
1337
1338 static void
1339 make_command (const char *arg, int from_tty)
1340 {
1341 if (arg == 0)
1342 shell_escape ("make", from_tty);
1343 else
1344 {
1345 std::string cmd = std::string ("make ") + arg;
1346
1347 shell_escape (cmd.c_str (), from_tty);
1348 }
1349 }
1350
1351 static void
1352 show_user (const char *args, int from_tty)
1353 {
1354 struct cmd_list_element *c;
1355 extern struct cmd_list_element *cmdlist;
1356
1357 if (args)
1358 {
1359 const char *comname = args;
1360
1361 c = lookup_cmd (&comname, cmdlist, "", 0, 1);
1362 if (!cli_user_command_p (c))
1363 error (_("Not a user command."));
1364 show_user_1 (c, "", args, gdb_stdout);
1365 }
1366 else
1367 {
1368 for (c = cmdlist; c; c = c->next)
1369 {
1370 if (cli_user_command_p (c) || c->prefixlist != NULL)
1371 show_user_1 (c, "", c->name, gdb_stdout);
1372 }
1373 }
1374 }
1375
1376 /* Search through names of commands and documentations for a certain
1377 regular expression. */
1378
1379 static void
1380 apropos_command (const char *arg, int from_tty)
1381 {
1382 bool verbose = arg && check_for_argument (&arg, "-v", 2);
1383
1384 if (arg == NULL || *arg == '\0')
1385 error (_("REGEXP string is empty"));
1386
1387 compiled_regex pattern (arg, REG_ICASE,
1388 _("Error in regular expression"));
1389
1390 apropos_cmd (gdb_stdout, cmdlist, verbose, pattern, "");
1391 }
1392
1393 /* Subroutine of alias_command to simplify it.
1394 Return the first N elements of ARGV flattened back to a string
1395 with a space separating each element.
1396 ARGV may not be NULL.
1397 This does not take care of quoting elements in case they contain spaces
1398 on purpose. */
1399
1400 static std::string
1401 argv_to_string (char **argv, int n)
1402 {
1403 int i;
1404 std::string result;
1405
1406 gdb_assert (argv != NULL);
1407 gdb_assert (n >= 0 && n <= countargv (argv));
1408
1409 for (i = 0; i < n; ++i)
1410 {
1411 if (i > 0)
1412 result += " ";
1413 result += argv[i];
1414 }
1415
1416 return result;
1417 }
1418
1419 /* Subroutine of alias_command to simplify it.
1420 Return true if COMMAND exists, unambiguously. Otherwise false. */
1421
1422 static bool
1423 valid_command_p (const char *command)
1424 {
1425 struct cmd_list_element *c;
1426
1427 c = lookup_cmd_1 (& command, cmdlist, NULL, 1);
1428
1429 if (c == NULL || c == (struct cmd_list_element *) -1)
1430 return false;
1431
1432 /* This is the slightly tricky part.
1433 lookup_cmd_1 will return a pointer to the last part of COMMAND
1434 to match, leaving COMMAND pointing at the remainder. */
1435 while (*command == ' ' || *command == '\t')
1436 ++command;
1437 return *command == '\0';
1438 }
1439
1440 /* Called when "alias" was incorrectly used. */
1441
1442 static void
1443 alias_usage_error (void)
1444 {
1445 error (_("Usage: alias [-a] [--] ALIAS = COMMAND"));
1446 }
1447
1448 /* Make an alias of an existing command. */
1449
1450 static void
1451 alias_command (const char *args, int from_tty)
1452 {
1453 int i, alias_argc, command_argc;
1454 int abbrev_flag = 0;
1455 const char *equals;
1456 const char *alias, *command;
1457
1458 if (args == NULL || strchr (args, '=') == NULL)
1459 alias_usage_error ();
1460
1461 equals = strchr (args, '=');
1462 std::string args2 (args, equals - args);
1463
1464 gdb_argv built_alias_argv (args2.c_str ());
1465 gdb_argv command_argv (equals + 1);
1466
1467 char **alias_argv = built_alias_argv.get ();
1468 while (alias_argv[0] != NULL)
1469 {
1470 if (strcmp (alias_argv[0], "-a") == 0)
1471 {
1472 ++alias_argv;
1473 abbrev_flag = 1;
1474 }
1475 else if (strcmp (alias_argv[0], "--") == 0)
1476 {
1477 ++alias_argv;
1478 break;
1479 }
1480 else
1481 break;
1482 }
1483
1484 if (alias_argv[0] == NULL || command_argv[0] == NULL
1485 || *alias_argv[0] == '\0' || *command_argv[0] == '\0')
1486 alias_usage_error ();
1487
1488 for (i = 0; alias_argv[i] != NULL; ++i)
1489 {
1490 if (! valid_user_defined_cmd_name_p (alias_argv[i]))
1491 {
1492 if (i == 0)
1493 error (_("Invalid command name: %s"), alias_argv[i]);
1494 else
1495 error (_("Invalid command element name: %s"), alias_argv[i]);
1496 }
1497 }
1498
1499 alias_argc = countargv (alias_argv);
1500 command_argc = command_argv.count ();
1501
1502 /* COMMAND must exist.
1503 Reconstruct the command to remove any extraneous spaces,
1504 for better error messages. */
1505 std::string command_string (argv_to_string (command_argv.get (),
1506 command_argc));
1507 command = command_string.c_str ();
1508 if (! valid_command_p (command))
1509 error (_("Invalid command to alias to: %s"), command);
1510
1511 /* ALIAS must not exist. */
1512 std::string alias_string (argv_to_string (alias_argv, alias_argc));
1513 alias = alias_string.c_str ();
1514 if (valid_command_p (alias))
1515 error (_("Alias already exists: %s"), alias);
1516
1517 /* If ALIAS is one word, it is an alias for the entire COMMAND.
1518 Example: alias spe = set print elements
1519
1520 Otherwise ALIAS and COMMAND must have the same number of words,
1521 and every word except the last must match; and the last word of
1522 ALIAS is made an alias of the last word of COMMAND.
1523 Example: alias set print elms = set pr elem
1524 Note that unambiguous abbreviations are allowed. */
1525
1526 if (alias_argc == 1)
1527 {
1528 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
1529 add_com_alias (xstrdup (alias_argv[0]), command, class_alias,
1530 abbrev_flag);
1531 }
1532 else
1533 {
1534 const char *alias_prefix, *command_prefix;
1535 struct cmd_list_element *c_alias, *c_command;
1536
1537 if (alias_argc != command_argc)
1538 error (_("Mismatched command length between ALIAS and COMMAND."));
1539
1540 /* Create copies of ALIAS and COMMAND without the last word,
1541 and use that to verify the leading elements match. */
1542 std::string alias_prefix_string (argv_to_string (alias_argv,
1543 alias_argc - 1));
1544 std::string command_prefix_string (argv_to_string (alias_argv,
1545 command_argc - 1));
1546 alias_prefix = alias_prefix_string.c_str ();
1547 command_prefix = command_prefix_string.c_str ();
1548
1549 c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, 1);
1550 /* We've already tried to look up COMMAND. */
1551 gdb_assert (c_command != NULL
1552 && c_command != (struct cmd_list_element *) -1);
1553 gdb_assert (c_command->prefixlist != NULL);
1554 c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, 1);
1555 if (c_alias != c_command)
1556 error (_("ALIAS and COMMAND prefixes do not match."));
1557
1558 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
1559 add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]),
1560 command_argv[command_argc - 1],
1561 class_alias, abbrev_flag, c_command->prefixlist);
1562 }
1563 }
1564 \f
1565 /* Print the file / line number / symbol name of the location
1566 specified by SAL. */
1567
1568 static void
1569 print_sal_location (const symtab_and_line &sal)
1570 {
1571 scoped_restore_current_program_space restore_pspace;
1572 set_current_program_space (sal.pspace);
1573
1574 const char *sym_name = NULL;
1575 if (sal.symbol != NULL)
1576 sym_name = SYMBOL_PRINT_NAME (sal.symbol);
1577 printf_filtered (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"),
1578 symtab_to_filename_for_display (sal.symtab),
1579 sal.line, sym_name != NULL ? sym_name : "???");
1580 }
1581
1582 /* Print a list of files and line numbers which a user may choose from
1583 in order to list a function which was specified ambiguously (as
1584 with `list classname::overloadedfuncname', for example). The SALS
1585 array provides the filenames and line numbers. FORMAT is a
1586 printf-style format string used to tell the user what was
1587 ambiguous. */
1588
1589 static void
1590 ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
1591 const char *format, ...)
1592 {
1593 va_list ap;
1594 va_start (ap, format);
1595 vprintf_filtered (format, ap);
1596 va_end (ap);
1597
1598 for (const auto &sal : sals)
1599 print_sal_location (sal);
1600 }
1601
1602 /* Comparison function for filter_sals. Returns a qsort-style
1603 result. */
1604
1605 static int
1606 cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb)
1607 {
1608 const char *dira = SYMTAB_DIRNAME (sala.symtab);
1609 const char *dirb = SYMTAB_DIRNAME (salb.symtab);
1610 int r;
1611
1612 if (dira == NULL)
1613 {
1614 if (dirb != NULL)
1615 return -1;
1616 }
1617 else if (dirb == NULL)
1618 {
1619 if (dira != NULL)
1620 return 1;
1621 }
1622 else
1623 {
1624 r = filename_cmp (dira, dirb);
1625 if (r)
1626 return r;
1627 }
1628
1629 r = filename_cmp (sala.symtab->filename, salb.symtab->filename);
1630 if (r)
1631 return r;
1632
1633 if (sala.line < salb.line)
1634 return -1;
1635 return sala.line == salb.line ? 0 : 1;
1636 }
1637
1638 /* Remove any SALs that do not match the current program space, or
1639 which appear to be "file:line" duplicates. */
1640
1641 static void
1642 filter_sals (std::vector<symtab_and_line> &sals)
1643 {
1644 /* Remove SALs that do not match. */
1645 auto from = std::remove_if (sals.begin (), sals.end (),
1646 [&] (const symtab_and_line &sal)
1647 { return (sal.pspace != current_program_space || sal.symtab == NULL); });
1648
1649 /* Remove dups. */
1650 std::sort (sals.begin (), from,
1651 [] (const symtab_and_line &sala, const symtab_and_line &salb)
1652 { return cmp_symtabs (sala, salb) < 0; });
1653
1654 from = std::unique (sals.begin (), from,
1655 [&] (const symtab_and_line &sala,
1656 const symtab_and_line &salb)
1657 { return cmp_symtabs (sala, salb) == 0; });
1658
1659 sals.erase (from, sals.end ());
1660 }
1661
1662 static void
1663 set_debug (const char *arg, int from_tty)
1664 {
1665 printf_unfiltered (_("\"set debug\" must be followed by "
1666 "the name of a debug subcommand.\n"));
1667 help_list (setdebuglist, "set debug ", all_commands, gdb_stdout);
1668 }
1669
1670 static void
1671 show_debug (const char *args, int from_tty)
1672 {
1673 cmd_show_list (showdebuglist, from_tty, "");
1674 }
1675
1676 void
1677 init_cmd_lists (void)
1678 {
1679 max_user_call_depth = 1024;
1680 }
1681
1682 static void
1683 show_info_verbose (struct ui_file *file, int from_tty,
1684 struct cmd_list_element *c,
1685 const char *value)
1686 {
1687 if (info_verbose)
1688 fprintf_filtered (file,
1689 _("Verbose printing of informational messages is %s.\n"),
1690 value);
1691 else
1692 fprintf_filtered (file, _("Verbosity is %s.\n"), value);
1693 }
1694
1695 static void
1696 show_history_expansion_p (struct ui_file *file, int from_tty,
1697 struct cmd_list_element *c, const char *value)
1698 {
1699 fprintf_filtered (file, _("History expansion on command input is %s.\n"),
1700 value);
1701 }
1702
1703 static void
1704 show_remote_debug (struct ui_file *file, int from_tty,
1705 struct cmd_list_element *c, const char *value)
1706 {
1707 fprintf_filtered (file, _("Debugging of remote protocol is %s.\n"),
1708 value);
1709 }
1710
1711 static void
1712 show_remote_timeout (struct ui_file *file, int from_tty,
1713 struct cmd_list_element *c, const char *value)
1714 {
1715 fprintf_filtered (file,
1716 _("Timeout limit to wait for target to respond is %s.\n"),
1717 value);
1718 }
1719
1720 static void
1721 show_max_user_call_depth (struct ui_file *file, int from_tty,
1722 struct cmd_list_element *c, const char *value)
1723 {
1724 fprintf_filtered (file,
1725 _("The max call depth for user-defined commands is %s.\n"),
1726 value);
1727 }
1728
1729 void
1730 _initialize_cli_cmds (void)
1731 {
1732 struct cmd_list_element *c;
1733
1734 /* Define the classes of commands.
1735 They will appear in the help list in alphabetical order. */
1736
1737 add_cmd ("internals", class_maintenance, _("\
1738 Maintenance commands.\n\
1739 Some gdb commands are provided just for use by gdb maintainers.\n\
1740 These commands are subject to frequent change, and may not be as\n\
1741 well documented as user commands."),
1742 &cmdlist);
1743 add_cmd ("obscure", class_obscure, _("Obscure features."), &cmdlist);
1744 add_cmd ("aliases", class_alias,
1745 _("Aliases of other commands."), &cmdlist);
1746 add_cmd ("user-defined", class_user, _("\
1747 User-defined commands.\n\
1748 The commands in this class are those defined by the user.\n\
1749 Use the \"define\" command to define a command."), &cmdlist);
1750 add_cmd ("support", class_support, _("Support facilities."), &cmdlist);
1751 if (!dbx_commands)
1752 add_cmd ("status", class_info, _("Status inquiries."), &cmdlist);
1753 add_cmd ("files", class_files, _("Specifying and examining files."),
1754 &cmdlist);
1755 add_cmd ("breakpoints", class_breakpoint,
1756 _("Making program stop at certain points."), &cmdlist);
1757 add_cmd ("data", class_vars, _("Examining data."), &cmdlist);
1758 add_cmd ("stack", class_stack, _("\
1759 Examining the stack.\n\
1760 The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
1761 counting from zero for the innermost (currently executing) frame.\n\n\
1762 At any time gdb identifies one frame as the \"selected\" frame.\n\
1763 Variable lookups are done with respect to the selected frame.\n\
1764 When the program being debugged stops, gdb selects the innermost frame.\n\
1765 The commands below can be used to select other frames by number or address."),
1766 &cmdlist);
1767 add_cmd ("running", class_run, _("Running the program."), &cmdlist);
1768
1769 /* Define general commands. */
1770
1771 add_com ("pwd", class_files, pwd_command, _("\
1772 Print working directory. This is used for your program as well."));
1773
1774 c = add_cmd ("cd", class_files, cd_command, _("\
1775 Set working directory to DIR for debugger.\n\
1776 The debugger's current working directory specifies where scripts and other\n\
1777 files that can be loaded by GDB are located.\n\
1778 In order to change the inferior's current working directory, the recommended\n\
1779 way is to use the \"set cwd\" command."), &cmdlist);
1780 set_cmd_completer (c, filename_completer);
1781
1782 add_com ("echo", class_support, echo_command, _("\
1783 Print a constant string. Give string as argument.\n\
1784 C escape sequences may be used in the argument.\n\
1785 No newline is added at the end of the argument;\n\
1786 use \"\\n\" if you want a newline to be printed.\n\
1787 Since leading and trailing whitespace are ignored in command arguments,\n\
1788 if you want to print some you must use \"\\\" before leading whitespace\n\
1789 to be printed or after trailing whitespace."));
1790
1791 add_setshow_enum_cmd ("script-extension", class_support,
1792 script_ext_enums, &script_ext_mode, _("\
1793 Set mode for script filename extension recognition."), _("\
1794 Show mode for script filename extension recognition."), _("\
1795 off == no filename extension recognition (all sourced files are GDB scripts)\n\
1796 soft == evaluate script according to filename extension, fallback to GDB script"
1797 "\n\
1798 strict == evaluate script according to filename extension, error if not supported"
1799 ),
1800 NULL,
1801 show_script_ext_mode,
1802 &setlist, &showlist);
1803
1804 add_com ("quit", class_support, quit_command, _("\
1805 Exit gdb.\n\
1806 Usage: quit [EXPR]\n\
1807 The optional expression EXPR, if present, is evaluated and the result\n\
1808 used as GDB's exit code. The default is zero."));
1809 c = add_com ("help", class_support, help_command,
1810 _("Print list of commands."));
1811 set_cmd_completer (c, command_completer);
1812 add_com_alias ("q", "quit", class_support, 1);
1813 add_com_alias ("h", "help", class_support, 1);
1814
1815 add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\
1816 Set verbosity."), _("\
1817 Show verbosity."), NULL,
1818 set_verbose,
1819 show_info_verbose,
1820 &setlist, &showlist);
1821
1822 add_prefix_cmd ("history", class_support, set_history,
1823 _("Generic command for setting command history parameters."),
1824 &sethistlist, "set history ", 0, &setlist);
1825 add_prefix_cmd ("history", class_support, show_history,
1826 _("Generic command for showing command history parameters."),
1827 &showhistlist, "show history ", 0, &showlist);
1828
1829 add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\
1830 Set history expansion on command input."), _("\
1831 Show history expansion on command input."), _("\
1832 Without an argument, history expansion is enabled."),
1833 NULL,
1834 show_history_expansion_p,
1835 &sethistlist, &showhistlist);
1836
1837 add_prefix_cmd ("info", class_info, info_command, _("\
1838 Generic command for showing things about the program being debugged."),
1839 &infolist, "info ", 0, &cmdlist);
1840 add_com_alias ("i", "info", class_info, 1);
1841 add_com_alias ("inf", "info", class_info, 1);
1842
1843 add_com ("complete", class_obscure, complete_command,
1844 _("List the completions for the rest of the line as a command."));
1845
1846 add_prefix_cmd ("show", class_info, show_command, _("\
1847 Generic command for showing things about the debugger."),
1848 &showlist, "show ", 0, &cmdlist);
1849 /* Another way to get at the same thing. */
1850 add_info ("set", show_command, _("Show all GDB settings."));
1851
1852 add_cmd ("commands", no_set_class, show_commands, _("\
1853 Show the history of commands you typed.\n\
1854 You can supply a command number to start with, or a `+' to start after\n\
1855 the previous command number shown."),
1856 &showlist);
1857
1858 add_cmd ("version", no_set_class, show_version,
1859 _("Show what version of GDB this is."), &showlist);
1860
1861 add_cmd ("configuration", no_set_class, show_configuration,
1862 _("Show how GDB was configured at build time."), &showlist);
1863
1864 add_setshow_zinteger_cmd ("remote", no_class, &remote_debug, _("\
1865 Set debugging of remote protocol."), _("\
1866 Show debugging of remote protocol."), _("\
1867 When enabled, each packet sent or received with the remote target\n\
1868 is displayed."),
1869 NULL,
1870 show_remote_debug,
1871 &setdebuglist, &showdebuglist);
1872
1873 add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class,
1874 &remote_timeout, _("\
1875 Set timeout limit to wait for target to respond."), _("\
1876 Show timeout limit to wait for target to respond."), _("\
1877 This value is used to set the time limit for gdb to wait for a response\n\
1878 from the target."),
1879 NULL,
1880 show_remote_timeout,
1881 &setlist, &showlist);
1882
1883 add_prefix_cmd ("debug", no_class, set_debug,
1884 _("Generic command for setting gdb debugging flags"),
1885 &setdebuglist, "set debug ", 0, &setlist);
1886
1887 add_prefix_cmd ("debug", no_class, show_debug,
1888 _("Generic command for showing gdb debugging flags"),
1889 &showdebuglist, "show debug ", 0, &showlist);
1890
1891 c = add_com ("shell", class_support, shell_command, _("\
1892 Execute the rest of the line as a shell command.\n\
1893 With no arguments, run an inferior shell."));
1894 set_cmd_completer (c, filename_completer);
1895
1896 add_com_alias ("!", "shell", class_support, 0);
1897
1898 c = add_com ("edit", class_files, edit_command, _("\
1899 Edit specified file or function.\n\
1900 With no argument, edits file containing most recent line listed.\n\
1901 Editing targets can be specified in these ways:\n\
1902 FILE:LINENUM, to edit at that line in that file,\n\
1903 FUNCTION, to edit at the beginning of that function,\n\
1904 FILE:FUNCTION, to distinguish among like-named static functions.\n\
1905 *ADDRESS, to edit at the line containing that address.\n\
1906 Uses EDITOR environment variable contents as editor (or ex as default)."));
1907
1908 c->completer = location_completer;
1909
1910 c = add_com ("pipe", class_support, pipe_command, _("\
1911 Send the output of a gdb command to a shell command.\n\
1912 Usage: | [COMMAND] | SHELL_COMMAND\n\
1913 Usage: | -d DELIM COMMAND DELIM SHELL_COMMAND\n\
1914 Usage: pipe [COMMAND] | SHELL_COMMAND\n\
1915 Usage: pipe -d DELIM COMMAND DELIM SHELL_COMMAND\n\
1916 \n\
1917 Executes COMMAND and sends its output to SHELL_COMMAND.\n\
1918 \n\
1919 The -d option indicates to use the string DELIM to separate COMMAND\n\
1920 from SHELL_COMMAND, in alternative to |. This is useful in\n\
1921 case COMMAND contains a | character.\n\
1922 \n\
1923 With no COMMAND, repeat the last executed command\n\
1924 and send its output to SHELL_COMMAND."));
1925 add_com_alias ("|", "pipe", class_support, 0);
1926
1927 add_com ("list", class_files, list_command, _("\
1928 List specified function or line.\n\
1929 With no argument, lists ten more lines after or around previous listing.\n\
1930 \"list -\" lists the ten lines before a previous ten-line listing.\n\
1931 One argument specifies a line, and ten lines are listed around that line.\n\
1932 Two arguments with comma between specify starting and ending lines to list.\n\
1933 Lines can be specified in these ways:\n\
1934 LINENUM, to list around that line in current file,\n\
1935 FILE:LINENUM, to list around that line in that file,\n\
1936 FUNCTION, to list around beginning of that function,\n\
1937 FILE:FUNCTION, to distinguish among like-named static functions.\n\
1938 *ADDRESS, to list around the line containing that address.\n\
1939 With two args, if one is empty, it stands for ten lines away from\n\
1940 the other arg.\n\
1941 \n\
1942 By default, when a single location is given, display ten lines.\n\
1943 This can be changed using \"set listsize\", and the current value\n\
1944 can be shown using \"show listsize\"."));
1945
1946 add_com_alias ("l", "list", class_files, 1);
1947
1948 if (dbx_commands)
1949 add_com_alias ("file", "list", class_files, 1);
1950
1951 c = add_com ("disassemble", class_vars, disassemble_command, _("\
1952 Disassemble a specified section of memory.\n\
1953 Default is the function surrounding the pc of the selected frame.\n\
1954 \n\
1955 With a /m modifier, source lines are included (if available).\n\
1956 This view is \"source centric\": the output is in source line order,\n\
1957 regardless of any optimization that is present. Only the main source file\n\
1958 is displayed, not those of, e.g., any inlined functions.\n\
1959 This modifier hasn't proved useful in practice and is deprecated\n\
1960 in favor of /s.\n\
1961 \n\
1962 With a /s modifier, source lines are included (if available).\n\
1963 This differs from /m in two important respects:\n\
1964 - the output is still in pc address order, and\n\
1965 - file names and contents for all relevant source files are displayed.\n\
1966 \n\
1967 With a /r modifier, raw instructions in hex are included.\n\
1968 \n\
1969 With a single argument, the function surrounding that address is dumped.\n\
1970 Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
1971 in the form of \"start,end\", or \"start,+length\".\n\
1972 \n\
1973 Note that the address is interpreted as an expression, not as a location\n\
1974 like in the \"break\" command.\n\
1975 So, for example, if you want to disassemble function bar in file foo.c\n\
1976 you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
1977 set_cmd_completer (c, location_completer);
1978
1979 c = add_com ("make", class_support, make_command, _("\
1980 Run the ``make'' program using the rest of the line as arguments."));
1981 set_cmd_completer (c, filename_completer);
1982 add_cmd ("user", no_class, show_user, _("\
1983 Show definitions of non-python/scheme user defined commands.\n\
1984 Argument is the name of the user defined command.\n\
1985 With no argument, show definitions of all user defined commands."), &showlist);
1986 add_com ("apropos", class_support, apropos_command, _("\
1987 Search for commands matching a REGEXP\n\
1988 Usage: apropos [-v] REGEXP\n\
1989 Flag -v indicates to produce a verbose output, showing full documentation\n\
1990 of the matching commands."));
1991
1992 add_setshow_uinteger_cmd ("max-user-call-depth", no_class,
1993 &max_user_call_depth, _("\
1994 Set the max call depth for non-python/scheme user-defined commands."), _("\
1995 Show the max call depth for non-python/scheme user-defined commands."), NULL,
1996 NULL,
1997 show_max_user_call_depth,
1998 &setlist, &showlist);
1999
2000 add_setshow_boolean_cmd ("trace-commands", no_class, &trace_commands, _("\
2001 Set tracing of GDB CLI commands."), _("\
2002 Show state of GDB CLI command tracing."), _("\
2003 When 'on', each command is displayed as it is executed."),
2004 NULL,
2005 NULL,
2006 &setlist, &showlist);
2007
2008 c = add_com ("alias", class_support, alias_command, _("\
2009 Define a new command that is an alias of an existing command.\n\
2010 Usage: alias [-a] [--] ALIAS = COMMAND\n\
2011 ALIAS is the name of the alias command to create.\n\
2012 COMMAND is the command being aliased to.\n\
2013 If \"-a\" is specified, the command is an abbreviation,\n\
2014 and will not appear in help command list output.\n\
2015 \n\
2016 Examples:\n\
2017 Make \"spe\" an alias of \"set print elements\":\n\
2018 alias spe = set print elements\n\
2019 Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
2020 alias -a set print elms = set print elements"));
2021 }
2022
2023 void
2024 init_cli_cmds (void)
2025 {
2026 struct cmd_list_element *c;
2027 char *source_help_text;
2028
2029 source_help_text = xstrprintf (_("\
2030 Read commands from a file named FILE.\n\
2031 \n\
2032 Usage: source [-s] [-v] FILE\n\
2033 -s: search for the script in the source search path,\n\
2034 even if FILE contains directories.\n\
2035 -v: each command in FILE is echoed as it is executed.\n\
2036 \n\
2037 Note that the file \"%s\" is read automatically in this way\n\
2038 when GDB is started."), gdbinit);
2039 c = add_cmd ("source", class_support, source_command,
2040 source_help_text, &cmdlist);
2041 set_cmd_completer (c, filename_completer);
2042 }
This page took 0.069985 seconds and 5 git commands to generate.