c33c242bad58d7fdbccdd2a82d6fd31717ec0a31
[deliverable/binutils-gdb.git] / gdb / cli / cli-cmds.c
1 /* GDB CLI commands.
2
3 Copyright 2000, 2001, 2002, 2003 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 2 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, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
21
22 #include "defs.h"
23 #include <readline/tilde.h>
24 #include "completer.h"
25 #include "target.h" /* For baud_rate, remote_debug and remote_timeout */
26 #include "gdb_wait.h" /* For shell escape implementation */
27 #include "gdb_regex.h" /* Used by apropos_command */
28 #include "gdb_string.h"
29 #include "linespec.h"
30 #include "expression.h"
31 #include "frame.h"
32 #include "value.h"
33 #include "language.h"
34 #include "filenames.h" /* for DOSish file names */
35 #include "objfiles.h"
36 #include "source.h"
37 #include "disasm.h"
38
39 #include "ui-out.h"
40
41 #include "top.h"
42 #include "cli/cli-decode.h"
43 #include "cli/cli-script.h"
44 #include "cli/cli-setshow.h"
45 #include "cli/cli-cmds.h"
46
47 #ifndef GDBINIT_FILENAME
48 #define GDBINIT_FILENAME ".gdbinit"
49 #endif
50
51 /* From gdb/top.c */
52
53 extern void dont_repeat (void);
54
55 extern void set_verbose (char *, int, struct cmd_list_element *);
56
57 extern void show_history (char *, int);
58
59 extern void set_history (char *, int);
60
61 extern void show_commands (char *, int);
62
63 /* Prototypes for local command functions */
64
65 static void complete_command (char *, int);
66
67 static void echo_command (char *, int);
68
69 static void pwd_command (char *, int);
70
71 static void show_version (char *, int);
72
73 static void validate_comname (char *);
74
75 static void help_command (char *, int);
76
77 static void show_command (char *, int);
78
79 static void info_command (char *, int);
80
81 static void show_debug (char *, int);
82
83 static void set_debug (char *, int);
84
85 static void show_user (char *, int);
86
87 static void make_command (char *, int);
88
89 static void shell_escape (char *, int);
90
91 static void edit_command (char *, int);
92
93 static void list_command (char *, int);
94
95 void apropos_command (char *, int);
96
97 /* Prototypes for local utility functions */
98
99 static void ambiguous_line_spec (struct symtabs_and_lines *);
100 \f
101 /* Limit the call depth of user-defined commands */
102 int max_user_call_depth;
103
104 /* Define all cmd_list_elements. */
105
106 /* Chain containing all defined commands. */
107
108 struct cmd_list_element *cmdlist;
109
110 /* Chain containing all defined info subcommands. */
111
112 struct cmd_list_element *infolist;
113
114 /* Chain containing all defined enable subcommands. */
115
116 struct cmd_list_element *enablelist;
117
118 /* Chain containing all defined disable subcommands. */
119
120 struct cmd_list_element *disablelist;
121
122 /* Chain containing all defined toggle subcommands. */
123
124 struct cmd_list_element *togglelist;
125
126 /* Chain containing all defined stop subcommands. */
127
128 struct cmd_list_element *stoplist;
129
130 /* Chain containing all defined delete subcommands. */
131
132 struct cmd_list_element *deletelist;
133
134 /* Chain containing all defined "enable breakpoint" subcommands. */
135
136 struct cmd_list_element *enablebreaklist;
137
138 /* Chain containing all defined set subcommands */
139
140 struct cmd_list_element *setlist;
141
142 /* Chain containing all defined unset subcommands */
143
144 struct cmd_list_element *unsetlist;
145
146 /* Chain containing all defined show subcommands. */
147
148 struct cmd_list_element *showlist;
149
150 /* Chain containing all defined \"set history\". */
151
152 struct cmd_list_element *sethistlist;
153
154 /* Chain containing all defined \"show history\". */
155
156 struct cmd_list_element *showhistlist;
157
158 /* Chain containing all defined \"unset history\". */
159
160 struct cmd_list_element *unsethistlist;
161
162 /* Chain containing all defined maintenance subcommands. */
163
164 struct cmd_list_element *maintenancelist;
165
166 /* Chain containing all defined "maintenance info" subcommands. */
167
168 struct cmd_list_element *maintenanceinfolist;
169
170 /* Chain containing all defined "maintenance print" subcommands. */
171
172 struct cmd_list_element *maintenanceprintlist;
173
174 /* Chain containing all defined "maintenance list" subcommands. */
175
176 struct cmd_list_element *maintenancelistlist;
177
178 struct cmd_list_element *setprintlist;
179
180 struct cmd_list_element *showprintlist;
181
182 struct cmd_list_element *setdebuglist;
183
184 struct cmd_list_element *showdebuglist;
185
186 struct cmd_list_element *setchecklist;
187
188 struct cmd_list_element *showchecklist;
189 \f
190 /* Utility used everywhere when at least one argument is needed and
191 none is supplied. */
192
193 void
194 error_no_arg (char *why)
195 {
196 error ("Argument required (%s).", why);
197 }
198
199 /* The "info" command is defined as a prefix, with allow_unknown = 0.
200 Therefore, its own definition is called only for "info" with no args. */
201
202 /* ARGSUSED */
203 static void
204 info_command (char *arg, int from_tty)
205 {
206 printf_unfiltered ("\"info\" must be followed by the name of an info command.\n");
207 help_list (infolist, "info ", -1, gdb_stdout);
208 }
209
210 /* The "show" command with no arguments shows all the settings. */
211
212 /* ARGSUSED */
213 static void
214 show_command (char *arg, int from_tty)
215 {
216 cmd_show_list (showlist, from_tty, "");
217 }
218 \f
219 /* Provide documentation on command or list given by COMMAND. FROM_TTY
220 is ignored. */
221
222 /* ARGSUSED */
223 static void
224 help_command (char *command, int from_tty)
225 {
226 help_cmd (command, gdb_stdout);
227 }
228 \f
229 /* String compare function for qsort. */
230 static int
231 compare_strings (const void *arg1, const void *arg2)
232 {
233 const char **s1 = (const char **) arg1;
234 const char **s2 = (const char **) arg2;
235 return strcmp (*s1, *s2);
236 }
237
238 /* The "complete" command is used by Emacs to implement completion. */
239
240 /* ARGSUSED */
241 static void
242 complete_command (char *arg, int from_tty)
243 {
244 int i;
245 int argpoint;
246 char **completions;
247
248 dont_repeat ();
249
250 if (arg == NULL)
251 arg = "";
252 argpoint = strlen (arg);
253
254 completions = complete_line (arg, arg, argpoint);
255
256 if (completions)
257 {
258 int item, size;
259
260 for (size = 0; completions[size]; ++size)
261 ;
262 qsort (completions, size, sizeof (char *), compare_strings);
263
264 /* We do extra processing here since we only want to print each
265 unique item once. */
266 item = 0;
267 while (item < size)
268 {
269 int next_item;
270 printf_unfiltered ("%s\n", completions[item]);
271 next_item = item + 1;
272 while (next_item < size
273 && ! strcmp (completions[item], completions[next_item]))
274 {
275 xfree (completions[next_item]);
276 ++next_item;
277 }
278
279 xfree (completions[item]);
280 item = next_item;
281 }
282
283 xfree (completions);
284 }
285 }
286
287 int
288 is_complete_command (struct cmd_list_element *c)
289 {
290 return cmd_cfunc_eq (c, complete_command);
291 }
292
293 /* ARGSUSED */
294 static void
295 show_version (char *args, int from_tty)
296 {
297 immediate_quit++;
298 print_gdb_version (gdb_stdout);
299 printf_filtered ("\n");
300 immediate_quit--;
301 }
302
303 /* Handle the quit command. */
304
305 void
306 quit_command (char *args, int from_tty)
307 {
308 if (!quit_confirm ())
309 error ("Not confirmed.");
310 quit_force (args, from_tty);
311 }
312
313 /* ARGSUSED */
314 static void
315 pwd_command (char *args, int from_tty)
316 {
317 if (args)
318 error ("The \"pwd\" command does not take an argument: %s", args);
319 getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
320
321 if (!STREQ (gdb_dirbuf, current_directory))
322 printf_unfiltered ("Working directory %s\n (canonically %s).\n",
323 current_directory, gdb_dirbuf);
324 else
325 printf_unfiltered ("Working directory %s.\n", current_directory);
326 }
327
328 void
329 cd_command (char *dir, int from_tty)
330 {
331 int len;
332 /* Found something other than leading repetitions of "/..". */
333 int found_real_path;
334 char *p;
335
336 /* If the new directory is absolute, repeat is a no-op; if relative,
337 repeat might be useful but is more likely to be a mistake. */
338 dont_repeat ();
339
340 if (dir == 0)
341 error_no_arg ("new working directory");
342
343 dir = tilde_expand (dir);
344 make_cleanup (xfree, dir);
345
346 if (chdir (dir) < 0)
347 perror_with_name (dir);
348
349 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
350 /* There's too much mess with DOSish names like "d:", "d:.",
351 "d:./foo" etc. Instead of having lots of special #ifdef'ed code,
352 simply get the canonicalized name of the current directory. */
353 dir = getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
354 #endif
355
356 len = strlen (dir);
357 if (IS_DIR_SEPARATOR (dir[len - 1]))
358 {
359 /* Remove the trailing slash unless this is a root directory
360 (including a drive letter on non-Unix systems). */
361 if (!(len == 1) /* "/" */
362 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
363 && !(len == 3 && dir[1] == ':') /* "d:/" */
364 #endif
365 )
366 len--;
367 }
368
369 dir = savestring (dir, len);
370 if (IS_ABSOLUTE_PATH (dir))
371 current_directory = dir;
372 else
373 {
374 if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]))
375 current_directory = concat (current_directory, dir, NULL);
376 else
377 current_directory = concat (current_directory, SLASH_STRING, dir, NULL);
378 xfree (dir);
379 }
380
381 /* Now simplify any occurrences of `.' and `..' in the pathname. */
382
383 found_real_path = 0;
384 for (p = current_directory; *p;)
385 {
386 if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.'
387 && (p[2] == 0 || IS_DIR_SEPARATOR (p[2])))
388 strcpy (p, p + 2);
389 else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.'
390 && (p[3] == 0 || IS_DIR_SEPARATOR (p[3])))
391 {
392 if (found_real_path)
393 {
394 /* Search backwards for the directory just before the "/.."
395 and obliterate it and the "/..". */
396 char *q = p;
397 while (q != current_directory && !IS_DIR_SEPARATOR (q[-1]))
398 --q;
399
400 if (q == current_directory)
401 /* current_directory is
402 a relative pathname ("can't happen"--leave it alone). */
403 ++p;
404 else
405 {
406 strcpy (q - 1, p + 3);
407 p = q - 1;
408 }
409 }
410 else
411 /* We are dealing with leading repetitions of "/..", for example
412 "/../..", which is the Mach super-root. */
413 p += 3;
414 }
415 else
416 {
417 found_real_path = 1;
418 ++p;
419 }
420 }
421
422 forget_cached_source_info ();
423
424 if (from_tty)
425 pwd_command ((char *) 0, 1);
426 }
427 \f
428 void
429 source_command (char *args, int from_tty)
430 {
431 FILE *stream;
432 struct cleanup *old_cleanups;
433 char *file = args;
434
435 if (file == NULL)
436 {
437 error ("source command requires pathname of file to source.");
438 }
439
440 file = tilde_expand (file);
441 old_cleanups = make_cleanup (xfree, file);
442
443 stream = fopen (file, FOPEN_RT);
444 if (!stream)
445 {
446 if (from_tty)
447 perror_with_name (file);
448 else
449 return;
450 }
451
452 script_from_file (stream, file);
453
454 do_cleanups (old_cleanups);
455 }
456
457 /* ARGSUSED */
458 static void
459 echo_command (char *text, int from_tty)
460 {
461 char *p = text;
462 register int c;
463
464 if (text)
465 while ((c = *p++) != '\0')
466 {
467 if (c == '\\')
468 {
469 /* \ at end of argument is used after spaces
470 so they won't be lost. */
471 if (*p == 0)
472 return;
473
474 c = parse_escape (&p);
475 if (c >= 0)
476 printf_filtered ("%c", c);
477 }
478 else
479 printf_filtered ("%c", c);
480 }
481
482 /* Force this output to appear now. */
483 wrap_here ("");
484 gdb_flush (gdb_stdout);
485 }
486
487 /* ARGSUSED */
488 static void
489 shell_escape (char *arg, int from_tty)
490 {
491 #ifdef CANT_FORK
492 /* If ARG is NULL, they want an inferior shell, but `system' just
493 reports if the shell is available when passed a NULL arg. */
494 int rc = system (arg ? arg : "");
495
496 if (!arg)
497 arg = "inferior shell";
498
499 if (rc == -1)
500 {
501 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
502 safe_strerror (errno));
503 gdb_flush (gdb_stderr);
504 }
505 else if (rc)
506 {
507 fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
508 gdb_flush (gdb_stderr);
509 }
510 #ifdef GLOBAL_CURDIR
511 /* Make sure to return to the directory GDB thinks it is, in case the
512 shell command we just ran changed it. */
513 chdir (current_directory);
514 #endif
515 #else /* Can fork. */
516 int rc, status, pid;
517 char *p, *user_shell;
518
519 if ((user_shell = (char *) getenv ("SHELL")) == NULL)
520 user_shell = "/bin/sh";
521
522 /* Get the name of the shell for arg0 */
523 if ((p = strrchr (user_shell, '/')) == NULL)
524 p = user_shell;
525 else
526 p++; /* Get past '/' */
527
528 if ((pid = fork ()) == 0)
529 {
530 if (!arg)
531 execl (user_shell, p, 0);
532 else
533 execl (user_shell, p, "-c", arg, 0);
534
535 fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
536 safe_strerror (errno));
537 gdb_flush (gdb_stderr);
538 _exit (0177);
539 }
540
541 if (pid != -1)
542 while ((rc = wait (&status)) != pid && rc != -1)
543 ;
544 else
545 error ("Fork failed");
546 #endif /* Can fork. */
547 }
548
549 static void
550 edit_command (char *arg, int from_tty)
551 {
552 struct symtabs_and_lines sals;
553 struct symtab_and_line sal;
554 struct symbol *sym;
555 char *arg1;
556 int cmdlen, log10;
557 unsigned m;
558 char *editor;
559 char *p;
560
561 /* Pull in the current default source line if necessary */
562 if (arg == 0)
563 {
564 set_default_source_symtab_and_line ();
565 sal = get_current_source_symtab_and_line ();
566 }
567
568 /* bare "edit" edits file with present line. */
569
570 if (arg == 0)
571 {
572 if (sal.symtab == 0)
573 error ("No default source file yet.");
574 sal.line += get_lines_to_list () / 2;
575 }
576 else
577 {
578
579 /* Now should only be one argument -- decode it in SAL */
580
581 arg1 = arg;
582 sals = decode_line_1 (&arg1, 0, 0, 0, 0);
583
584 if (! sals.nelts) return; /* C++ */
585 if (sals.nelts > 1) {
586 ambiguous_line_spec (&sals);
587 xfree (sals.sals);
588 return;
589 }
590
591 sal = sals.sals[0];
592 xfree (sals.sals);
593
594 if (*arg1)
595 error ("Junk at end of line specification.");
596
597 /* if line was specified by address,
598 first print exactly which line, and which file.
599 In this case, sal.symtab == 0 means address is outside
600 of all known source files, not that user failed to give a filename. */
601 if (*arg == '*')
602 {
603 if (sal.symtab == 0)
604 /* FIXME-32x64--assumes sal.pc fits in long. */
605 error ("No source file for address %s.",
606 local_hex_string((unsigned long) sal.pc));
607 sym = find_pc_function (sal.pc);
608 if (sym)
609 {
610 print_address_numeric (sal.pc, 1, gdb_stdout);
611 printf_filtered (" is in ");
612 fputs_filtered (SYMBOL_PRINT_NAME (sym), gdb_stdout);
613 printf_filtered (" (%s:%d).\n", sal.symtab->filename, sal.line);
614 }
615 else
616 {
617 print_address_numeric (sal.pc, 1, gdb_stdout);
618 printf_filtered (" is at %s:%d.\n",
619 sal.symtab->filename, sal.line);
620 }
621 }
622
623 /* If what was given does not imply a symtab, it must be an undebuggable
624 symbol which means no source code. */
625
626 if (sal.symtab == 0)
627 error ("No line number known for %s.", arg);
628 }
629
630 if ((editor = (char *) getenv ("EDITOR")) == NULL)
631 editor = "/bin/ex";
632
633 /* Approximate base-10 log of line to 1 unit for digit count */
634 for(log10=32, m=0x80000000; !(sal.line & m) && log10>0; log10--, m=m>>1);
635 log10 = 1 + (int)((log10 + (0 == ((m-1) & sal.line)))/3.32192809);
636
637 cmdlen = strlen(editor) + 1
638 + (NULL == sal.symtab->dirname ? 0 : strlen(sal.symtab->dirname) + 1)
639 + (NULL == sal.symtab->filename? 0 : strlen(sal.symtab->filename)+ 1)
640 + log10 + 2;
641
642 p = xmalloc(cmdlen);
643 sprintf(p,"%s +%d %s%s",editor,sal.line,
644 (NULL == sal.symtab->dirname ? "./" :
645 (NULL != sal.symtab->filename && *(sal.symtab->filename) != '/') ?
646 sal.symtab->dirname : ""),
647 (NULL == sal.symtab->filename ? "unknown" : sal.symtab->filename)
648 );
649 shell_escape(p, from_tty);
650
651 xfree(p);
652 }
653
654 static void
655 list_command (char *arg, int from_tty)
656 {
657 struct symtabs_and_lines sals, sals_end;
658 struct symtab_and_line sal, sal_end, cursal;
659 struct symbol *sym;
660 char *arg1;
661 int no_end = 1;
662 int dummy_end = 0;
663 int dummy_beg = 0;
664 int linenum_beg = 0;
665 char *p;
666
667 /* Pull in the current default source line if necessary */
668 if (arg == 0 || arg[0] == '+' || arg[0] == '-')
669 {
670 set_default_source_symtab_and_line ();
671 cursal = get_current_source_symtab_and_line ();
672 }
673
674 /* "l" or "l +" lists next ten lines. */
675
676 if (arg == 0 || STREQ (arg, "+"))
677 {
678 print_source_lines (cursal.symtab, cursal.line,
679 cursal.line + get_lines_to_list (), 0);
680 return;
681 }
682
683 /* "l -" lists previous ten lines, the ones before the ten just listed. */
684 if (STREQ (arg, "-"))
685 {
686 print_source_lines (cursal.symtab,
687 max (get_first_line_listed () - get_lines_to_list (), 1),
688 get_first_line_listed (), 0);
689 return;
690 }
691
692 /* Now if there is only one argument, decode it in SAL
693 and set NO_END.
694 If there are two arguments, decode them in SAL and SAL_END
695 and clear NO_END; however, if one of the arguments is blank,
696 set DUMMY_BEG or DUMMY_END to record that fact. */
697
698 if (!have_full_symbols () && !have_partial_symbols ())
699 error ("No symbol table is loaded. Use the \"file\" command.");
700
701 arg1 = arg;
702 if (*arg1 == ',')
703 dummy_beg = 1;
704 else
705 {
706 sals = decode_line_1 (&arg1, 0, 0, 0, 0);
707
708 if (!sals.nelts)
709 return; /* C++ */
710 if (sals.nelts > 1)
711 {
712 ambiguous_line_spec (&sals);
713 xfree (sals.sals);
714 return;
715 }
716
717 sal = sals.sals[0];
718 xfree (sals.sals);
719 }
720
721 /* Record whether the BEG arg is all digits. */
722
723 for (p = arg; p != arg1 && *p >= '0' && *p <= '9'; p++);
724 linenum_beg = (p == arg1);
725
726 while (*arg1 == ' ' || *arg1 == '\t')
727 arg1++;
728 if (*arg1 == ',')
729 {
730 no_end = 0;
731 arg1++;
732 while (*arg1 == ' ' || *arg1 == '\t')
733 arg1++;
734 if (*arg1 == 0)
735 dummy_end = 1;
736 else
737 {
738 if (dummy_beg)
739 sals_end = decode_line_1 (&arg1, 0, 0, 0, 0);
740 else
741 sals_end = decode_line_1 (&arg1, 0, sal.symtab, sal.line, 0);
742 if (sals_end.nelts == 0)
743 return;
744 if (sals_end.nelts > 1)
745 {
746 ambiguous_line_spec (&sals_end);
747 xfree (sals_end.sals);
748 return;
749 }
750 sal_end = sals_end.sals[0];
751 xfree (sals_end.sals);
752 }
753 }
754
755 if (*arg1)
756 error ("Junk at end of line specification.");
757
758 if (!no_end && !dummy_beg && !dummy_end
759 && sal.symtab != sal_end.symtab)
760 error ("Specified start and end are in different files.");
761 if (dummy_beg && dummy_end)
762 error ("Two empty args do not say what lines to list.");
763
764 /* if line was specified by address,
765 first print exactly which line, and which file.
766 In this case, sal.symtab == 0 means address is outside
767 of all known source files, not that user failed to give a filename. */
768 if (*arg == '*')
769 {
770 if (sal.symtab == 0)
771 /* FIXME-32x64--assumes sal.pc fits in long. */
772 error ("No source file for address %s.",
773 local_hex_string ((unsigned long) sal.pc));
774 sym = find_pc_function (sal.pc);
775 if (sym)
776 {
777 print_address_numeric (sal.pc, 1, gdb_stdout);
778 printf_filtered (" is in ");
779 fputs_filtered (SYMBOL_PRINT_NAME (sym), gdb_stdout);
780 printf_filtered (" (%s:%d).\n", sal.symtab->filename, sal.line);
781 }
782 else
783 {
784 print_address_numeric (sal.pc, 1, gdb_stdout);
785 printf_filtered (" is at %s:%d.\n",
786 sal.symtab->filename, sal.line);
787 }
788 }
789
790 /* If line was not specified by just a line number,
791 and it does not imply a symtab, it must be an undebuggable symbol
792 which means no source code. */
793
794 if (!linenum_beg && sal.symtab == 0)
795 error ("No line number known for %s.", arg);
796
797 /* If this command is repeated with RET,
798 turn it into the no-arg variant. */
799
800 if (from_tty)
801 *arg = 0;
802
803 if (dummy_beg && sal_end.symtab == 0)
804 error ("No default source file yet. Do \"help list\".");
805 if (dummy_beg)
806 print_source_lines (sal_end.symtab,
807 max (sal_end.line - (get_lines_to_list () - 1), 1),
808 sal_end.line + 1, 0);
809 else if (sal.symtab == 0)
810 error ("No default source file yet. Do \"help list\".");
811 else if (no_end)
812 {
813 int first_line = sal.line - get_lines_to_list () / 2;
814
815 if (first_line < 1) first_line = 1;
816
817 print_source_lines (sal.symtab,
818 first_line,
819 first_line + get_lines_to_list (),
820 0);
821 }
822 else
823 print_source_lines (sal.symtab, sal.line,
824 (dummy_end
825 ? sal.line + get_lines_to_list ()
826 : sal_end.line + 1),
827 0);
828 }
829
830 /* Dump a specified section of assembly code. With no command line
831 arguments, this command will dump the assembly code for the
832 function surrounding the pc value in the selected frame. With one
833 argument, it will dump the assembly code surrounding that pc value.
834 Two arguments are interpeted as bounds within which to dump
835 assembly. */
836
837 /* ARGSUSED */
838 static void
839 disassemble_command (char *arg, int from_tty)
840 {
841 CORE_ADDR low, high;
842 char *name;
843 CORE_ADDR pc, pc_masked;
844 char *space_index;
845 #if 0
846 asection *section;
847 #endif
848
849 name = NULL;
850 if (!arg)
851 {
852 if (!deprecated_selected_frame)
853 error ("No frame selected.\n");
854
855 pc = get_frame_pc (deprecated_selected_frame);
856 if (find_pc_partial_function (pc, &name, &low, &high) == 0)
857 error ("No function contains program counter for selected frame.\n");
858 #if defined(TUI)
859 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
860 `tui_version'. */
861 else if (tui_active)
862 low = tuiGetLowDisassemblyAddress (low, pc);
863 #endif
864 low += FUNCTION_START_OFFSET;
865 }
866 else if (!(space_index = (char *) strchr (arg, ' ')))
867 {
868 /* One argument. */
869 pc = parse_and_eval_address (arg);
870 if (find_pc_partial_function (pc, &name, &low, &high) == 0)
871 error ("No function contains specified address.\n");
872 #if defined(TUI)
873 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
874 `tui_version'. */
875 else if (tui_active)
876 low = tuiGetLowDisassemblyAddress (low, pc);
877 #endif
878 low += FUNCTION_START_OFFSET;
879 }
880 else
881 {
882 /* Two arguments. */
883 *space_index = '\0';
884 low = parse_and_eval_address (arg);
885 high = parse_and_eval_address (space_index + 1);
886 }
887
888 #if defined(TUI)
889 if (!tui_is_window_visible (DISASSEM_WIN))
890 #endif
891 {
892 printf_filtered ("Dump of assembler code ");
893 if (name != NULL)
894 {
895 printf_filtered ("for function %s:\n", name);
896 }
897 else
898 {
899 printf_filtered ("from ");
900 print_address_numeric (low, 1, gdb_stdout);
901 printf_filtered (" to ");
902 print_address_numeric (high, 1, gdb_stdout);
903 printf_filtered (":\n");
904 }
905
906 /* Dump the specified range. */
907 gdb_disassembly (uiout, 0, 0, 0, -1, low, high);
908
909 printf_filtered ("End of assembler dump.\n");
910 gdb_flush (gdb_stdout);
911 }
912 #if defined(TUI)
913 else
914 {
915 tui_show_assembly (low);
916 }
917 #endif
918 }
919
920 static void
921 make_command (char *arg, int from_tty)
922 {
923 char *p;
924
925 if (arg == 0)
926 p = "make";
927 else
928 {
929 p = xmalloc (sizeof ("make ") + strlen (arg));
930 strcpy (p, "make ");
931 strcpy (p + sizeof ("make ") - 1, arg);
932 }
933
934 shell_escape (p, from_tty);
935 }
936
937 /* ARGSUSED */
938 static void
939 show_user (char *args, int from_tty)
940 {
941 struct cmd_list_element *c;
942 extern struct cmd_list_element *cmdlist;
943
944 if (args)
945 {
946 c = lookup_cmd (&args, cmdlist, "", 0, 1);
947 if (c->class != class_user)
948 error ("Not a user command.");
949 show_user_1 (c, gdb_stdout);
950 }
951 else
952 {
953 for (c = cmdlist; c; c = c->next)
954 {
955 if (c->class == class_user)
956 show_user_1 (c, gdb_stdout);
957 }
958 }
959 }
960
961 /* Search through names of commands and documentations for a certain
962 regular expression.
963 */
964 void
965 apropos_command (char *searchstr, int from_tty)
966 {
967 extern struct cmd_list_element *cmdlist; /*This is the main command list*/
968 regex_t pattern;
969 char *pattern_fastmap;
970 char errorbuffer[512];
971 pattern_fastmap = xcalloc (256, sizeof (char));
972 if (searchstr == NULL)
973 error("REGEXP string is empty");
974
975 if (regcomp(&pattern,searchstr,REG_ICASE) == 0)
976 {
977 pattern.fastmap=pattern_fastmap;
978 re_compile_fastmap(&pattern);
979 apropos_cmd (gdb_stdout,cmdlist,&pattern,"");
980 }
981 else
982 {
983 regerror(regcomp(&pattern,searchstr,REG_ICASE),NULL,errorbuffer,512);
984 error("Error in regular expression:%s",errorbuffer);
985 }
986 xfree (pattern_fastmap);
987 }
988 \f
989 /* Print a list of files and line numbers which a user may choose from
990 in order to list a function which was specified ambiguously (as with
991 `list classname::overloadedfuncname', for example). The vector in
992 SALS provides the filenames and line numbers. */
993
994 static void
995 ambiguous_line_spec (struct symtabs_and_lines *sals)
996 {
997 int i;
998
999 for (i = 0; i < sals->nelts; ++i)
1000 printf_filtered ("file: \"%s\", line number: %d\n",
1001 sals->sals[i].symtab->filename, sals->sals[i].line);
1002 }
1003
1004 static void
1005 set_debug (char *arg, int from_tty)
1006 {
1007 printf_unfiltered ("\"set debug\" must be followed by the name of a print subcommand.\n");
1008 help_list (setdebuglist, "set debug ", -1, gdb_stdout);
1009 }
1010
1011 static void
1012 show_debug (char *args, int from_tty)
1013 {
1014 cmd_show_list (showdebuglist, from_tty, "");
1015 }
1016
1017 void
1018 init_cmd_lists (void)
1019 {
1020 max_user_call_depth = 1024;
1021
1022 cmdlist = NULL;
1023 infolist = NULL;
1024 enablelist = NULL;
1025 disablelist = NULL;
1026 togglelist = NULL;
1027 stoplist = NULL;
1028 deletelist = NULL;
1029 enablebreaklist = NULL;
1030 setlist = NULL;
1031 unsetlist = NULL;
1032 showlist = NULL;
1033 sethistlist = NULL;
1034 showhistlist = NULL;
1035 unsethistlist = NULL;
1036 maintenancelist = NULL;
1037 maintenanceinfolist = NULL;
1038 maintenanceprintlist = NULL;
1039 maintenancelistlist = NULL;
1040 setprintlist = NULL;
1041 showprintlist = NULL;
1042 setchecklist = NULL;
1043 showchecklist = NULL;
1044 }
1045
1046 \f
1047 void
1048 init_cli_cmds (void)
1049 {
1050 struct cmd_list_element *c;
1051
1052 /* Define the classes of commands.
1053 They will appear in the help list in the reverse of this order. */
1054
1055 add_cmd ("internals", class_maintenance, NULL,
1056 "Maintenance commands.\n\
1057 Some gdb commands are provided just for use by gdb maintainers.\n\
1058 These commands are subject to frequent change, and may not be as\n\
1059 well documented as user commands.",
1060 &cmdlist);
1061 add_cmd ("obscure", class_obscure, NULL, "Obscure features.", &cmdlist);
1062 add_cmd ("aliases", class_alias, NULL, "Aliases of other commands.", &cmdlist);
1063 add_cmd ("user-defined", class_user, NULL, "User-defined commands.\n\
1064 The commands in this class are those defined by the user.\n\
1065 Use the \"define\" command to define a command.", &cmdlist);
1066 add_cmd ("support", class_support, NULL, "Support facilities.", &cmdlist);
1067 if (!dbx_commands)
1068 add_cmd ("status", class_info, NULL, "Status inquiries.", &cmdlist);
1069 add_cmd ("files", class_files, NULL, "Specifying and examining files.", &cmdlist);
1070 add_cmd ("breakpoints", class_breakpoint, NULL, "Making program stop at certain points.", &cmdlist);
1071 add_cmd ("data", class_vars, NULL, "Examining data.", &cmdlist);
1072 add_cmd ("stack", class_stack, NULL, "Examining the stack.\n\
1073 The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
1074 counting from zero for the innermost (currently executing) frame.\n\n\
1075 At any time gdb identifies one frame as the \"selected\" frame.\n\
1076 Variable lookups are done with respect to the selected frame.\n\
1077 When the program being debugged stops, gdb selects the innermost frame.\n\
1078 The commands below can be used to select other frames by number or address.",
1079 &cmdlist);
1080 add_cmd ("running", class_run, NULL, "Running the program.", &cmdlist);
1081
1082 /* Define general commands. */
1083
1084 add_com ("pwd", class_files, pwd_command,
1085 "Print working directory. This is used for your program as well.");
1086 c = add_cmd ("cd", class_files, cd_command,
1087 "Set working directory to DIR for debugger and program being debugged.\n\
1088 The change does not take effect for the program being debugged\n\
1089 until the next time it is started.", &cmdlist);
1090 set_cmd_completer (c, filename_completer);
1091
1092 add_com ("echo", class_support, echo_command,
1093 "Print a constant string. Give string as argument.\n\
1094 C escape sequences may be used in the argument.\n\
1095 No newline is added at the end of the argument;\n\
1096 use \"\\n\" if you want a newline to be printed.\n\
1097 Since leading and trailing whitespace are ignored in command arguments,\n\
1098 if you want to print some you must use \"\\\" before leading whitespace\n\
1099 to be printed or after trailing whitespace.");
1100 add_com ("document", class_support, document_command,
1101 "Document a user-defined command.\n\
1102 Give command name as argument. Give documentation on following lines.\n\
1103 End with a line of just \"end\".");
1104 add_com ("define", class_support, define_command,
1105 "Define a new command name. Command name is argument.\n\
1106 Definition appears on following lines, one command per line.\n\
1107 End with a line of just \"end\".\n\
1108 Use the \"document\" command to give documentation for the new command.\n\
1109 Commands defined in this way may have up to ten arguments.");
1110
1111 c = add_cmd ("source", class_support, source_command,
1112 "Read commands from a file named FILE.\n\
1113 Note that the file \"" GDBINIT_FILENAME "\" is read automatically in this way\n\
1114 when gdb is started.", &cmdlist);
1115 set_cmd_completer (c, filename_completer);
1116
1117 add_com ("quit", class_support, quit_command, "Exit gdb.");
1118 c = add_com ("help", class_support, help_command, "Print list of commands.");
1119 set_cmd_completer (c, command_completer);
1120 add_com_alias ("q", "quit", class_support, 1);
1121 add_com_alias ("h", "help", class_support, 1);
1122
1123 c = add_set_cmd ("verbose", class_support, var_boolean, (char *) &info_verbose,
1124 "Set ",
1125 &setlist),
1126 add_show_from_set (c, &showlist);
1127 set_cmd_sfunc (c, set_verbose);
1128 set_verbose (NULL, 0, c);
1129
1130 add_prefix_cmd ("history", class_support, set_history,
1131 "Generic command for setting command history parameters.",
1132 &sethistlist, "set history ", 0, &setlist);
1133 add_prefix_cmd ("history", class_support, show_history,
1134 "Generic command for showing command history parameters.",
1135 &showhistlist, "show history ", 0, &showlist);
1136
1137 add_show_from_set
1138 (add_set_cmd ("expansion", no_class, var_boolean, (char *) &history_expansion_p,
1139 "Set history expansion on command input.\n\
1140 Without an argument, history expansion is enabled.", &sethistlist),
1141 &showhistlist);
1142
1143 add_prefix_cmd ("info", class_info, info_command,
1144 "Generic command for showing things about the program being debugged.",
1145 &infolist, "info ", 0, &cmdlist);
1146 add_com_alias ("i", "info", class_info, 1);
1147
1148 add_com ("complete", class_obscure, complete_command,
1149 "List the completions for the rest of the line as a command.");
1150
1151 add_prefix_cmd ("show", class_info, show_command,
1152 "Generic command for showing things about the debugger.",
1153 &showlist, "show ", 0, &cmdlist);
1154 /* Another way to get at the same thing. */
1155 add_info ("set", show_command, "Show all GDB settings.");
1156
1157 add_cmd ("commands", no_class, show_commands,
1158 "Show the history of commands you typed.\n\
1159 You can supply a command number to start with, or a `+' to start after\n\
1160 the previous command number shown.",
1161 &showlist);
1162
1163 add_cmd ("version", no_class, show_version,
1164 "Show what version of GDB this is.", &showlist);
1165
1166 add_com ("while", class_support, while_command,
1167 "Execute nested commands WHILE the conditional expression is non zero.\n\
1168 The conditional expression must follow the word `while' and must in turn be\n\
1169 followed by a new line. The nested commands must be entered one per line,\n\
1170 and should be terminated by the word `end'.");
1171
1172 add_com ("if", class_support, if_command,
1173 "Execute nested commands once IF the conditional expression is non zero.\n\
1174 The conditional expression must follow the word `if' and must in turn be\n\
1175 followed by a new line. The nested commands must be entered one per line,\n\
1176 and should be terminated by the word 'else' or `end'. If an else clause\n\
1177 is used, the same rules apply to its nested commands as to the first ones.");
1178
1179 /* If target is open when baud changes, it doesn't take effect until the
1180 next open (I think, not sure). */
1181 add_show_from_set (add_set_cmd ("remotebaud", no_class,
1182 var_zinteger, (char *) &baud_rate,
1183 "Set baud rate for remote serial I/O.\n\
1184 This value is used to set the speed of the serial port when debugging\n\
1185 using remote targets.", &setlist),
1186 &showlist);
1187
1188 c = add_set_cmd ("remotedebug", no_class, var_zinteger,
1189 (char *) &remote_debug,
1190 "Set debugging of remote protocol.\n\
1191 When enabled, each packet sent or received with the remote target\n\
1192 is displayed.", &setlist);
1193 deprecate_cmd (c, "set debug remote");
1194 deprecate_cmd (add_show_from_set (c, &showlist), "show debug remote");
1195
1196 add_show_from_set (add_set_cmd ("remote", no_class, var_zinteger,
1197 (char *) &remote_debug,
1198 "Set debugging of remote protocol.\n\
1199 When enabled, each packet sent or received with the remote target\n\
1200 is displayed.", &setdebuglist),
1201 &showdebuglist);
1202
1203 add_show_from_set (
1204 add_set_cmd ("remotetimeout", no_class, var_integer, (char *) &remote_timeout,
1205 "Set timeout limit to wait for target to respond.\n\
1206 This value is used to set the time limit for gdb to wait for a response\n\
1207 from the target.", &setlist),
1208 &showlist);
1209
1210 add_prefix_cmd ("debug", no_class, set_debug,
1211 "Generic command for setting gdb debugging flags",
1212 &setdebuglist, "set debug ", 0, &setlist);
1213
1214 add_prefix_cmd ("debug", no_class, show_debug,
1215 "Generic command for showing gdb debugging flags",
1216 &showdebuglist, "show debug ", 0, &showlist);
1217
1218 c = add_com ("shell", class_support, shell_escape,
1219 "Execute the rest of the line as a shell command.\n\
1220 With no arguments, run an inferior shell.");
1221 set_cmd_completer (c, filename_completer);
1222
1223 c = add_com ("edit", class_files, edit_command,
1224 concat ("Edit specified file or function.\n\
1225 With no argument, edits file containing most recent line listed.\n\
1226 ", "\
1227 Editing targets can be specified in these ways:\n\
1228 FILE:LINENUM, to edit at that line in that file,\n\
1229 FUNCTION, to edit at the beginning of that function,\n\
1230 FILE:FUNCTION, to distinguish among like-named static functions.\n\
1231 *ADDRESS, to edit at the line containing that address.\n\
1232 Uses EDITOR environment variable contents as editor (or ex as default).",NULL));
1233
1234 c->completer = location_completer;
1235
1236 add_com ("list", class_files, list_command,
1237 concat ("List specified function or line.\n\
1238 With no argument, lists ten more lines after or around previous listing.\n\
1239 \"list -\" lists the ten lines before a previous ten-line listing.\n\
1240 One argument specifies a line, and ten lines are listed around that line.\n\
1241 Two arguments with comma between specify starting and ending lines to list.\n\
1242 ", "\
1243 Lines can be specified in these ways:\n\
1244 LINENUM, to list around that line in current file,\n\
1245 FILE:LINENUM, to list around that line in that file,\n\
1246 FUNCTION, to list around beginning of that function,\n\
1247 FILE:FUNCTION, to distinguish among like-named static functions.\n\
1248 *ADDRESS, to list around the line containing that address.\n\
1249 With two args if one is empty it stands for ten lines away from the other arg.", NULL));
1250
1251 if (!xdb_commands)
1252 add_com_alias ("l", "list", class_files, 1);
1253 else
1254 add_com_alias ("v", "list", class_files, 1);
1255
1256 if (dbx_commands)
1257 add_com_alias ("file", "list", class_files, 1);
1258
1259 c = add_com ("disassemble", class_vars, disassemble_command,
1260 "Disassemble a specified section of memory.\n\
1261 Default is the function surrounding the pc of the selected frame.\n\
1262 With a single argument, the function surrounding that address is dumped.\n\
1263 Two arguments are taken as a range of memory to dump.");
1264 set_cmd_completer (c, location_completer);
1265 if (xdb_commands)
1266 add_com_alias ("va", "disassemble", class_xdb, 0);
1267
1268 /* NOTE: cagney/2000-03-20: Being able to enter ``(gdb) !ls'' would
1269 be a really useful feature. Unfortunately, the below wont do
1270 this. Instead it adds support for the form ``(gdb) ! ls''
1271 (i.e. the space is required). If the ``!'' command below is
1272 added the complains about no ``!'' command would be replaced by
1273 complains about how the ``!'' command is broken :-) */
1274 if (xdb_commands)
1275 add_com_alias ("!", "shell", class_support, 0);
1276
1277 c = add_com ("make", class_support, make_command,
1278 "Run the ``make'' program using the rest of the line as arguments.");
1279 set_cmd_completer (c, filename_completer);
1280 add_cmd ("user", no_class, show_user,
1281 "Show definitions of user defined commands.\n\
1282 Argument is the name of the user defined command.\n\
1283 With no argument, show definitions of all user defined commands.", &showlist);
1284 add_com ("apropos", class_support, apropos_command, "Search for commands matching a REGEXP");
1285
1286 add_show_from_set (
1287 add_set_cmd ("max-user-call-depth", no_class, var_integer,
1288 (char *) &max_user_call_depth,
1289 "Set the max call depth for user-defined commands.\n",
1290 &setlist),
1291 &showlist);
1292 }
This page took 0.053245 seconds and 3 git commands to generate.