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