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