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