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