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