]> Git Repo - binutils.git/blame - gdb/main.c
BSD Net2 changes, and misc other fixes.
[binutils.git] / gdb / main.c
CommitLineData
bd5635a1
RP
1/* Top level for GDB, the GNU debugger.
2 Copyright (C) 1986, 1987, 1988, 1989, 1990 Free Software Foundation, Inc.
3
4This file is part of GDB.
5
e522fb52 6This program is free software; you can redistribute it and/or modify
bd5635a1 7it under the terms of the GNU General Public License as published by
e522fb52
JG
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
bd5635a1 10
e522fb52 11This program is distributed in the hope that it will be useful,
bd5635a1
RP
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
e522fb52
JG
17along with this program; if not, write to the Free Software
18Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
bd5635a1
RP
19
20#include <stdio.h>
21int fclose ();
22#include "defs.h"
23#include "gdbcmd.h"
24#include "param.h"
25#include "symtab.h"
26#include "inferior.h"
27#include "signals.h"
28#include "target.h"
29#include "breakpoint.h"
30
e522fb52
JG
31#include "getopt.h"
32
33/* readline include files */
34#include "readline.h"
35#include "history.h"
bd5635a1
RP
36
37/* readline defines this. */
38#undef savestring
39
40#ifdef USG
41#include <sys/types.h>
42#include <unistd.h>
43#endif
44
45#include <string.h>
46#include <sys/file.h>
47#include <setjmp.h>
48#include <sys/param.h>
49#include <sys/stat.h>
e522fb52 50#include <ctype.h>
bd5635a1
RP
51
52#ifdef SET_STACK_LIMIT_HUGE
53#include <sys/time.h>
54#include <sys/resource.h>
bd5635a1
RP
55
56int original_stack_limit;
57#endif
58
59
60/* If this definition isn't overridden by the header files, assume
61 that isatty and fileno exist on this system. */
62#ifndef ISATTY
63#define ISATTY(FP) (isatty (fileno (FP)))
64#endif
65
66/* Initialization file name for gdb. This is overridden in some configs. */
67
68#ifndef GDBINIT_FILENAME
69#define GDBINIT_FILENAME ".gdbinit"
70#endif
71char gdbinit[] = GDBINIT_FILENAME;
72
f266e564
JK
73#define ALL_CLEANUPS ((struct cleanup *)0)
74
bd5635a1
RP
75/* Version number of GDB, as a string. */
76
77extern char *version;
78
79/* Flag for whether we want all the "from_tty" gubbish printed. */
80
81int caution = 1; /* Default is yes, sigh. */
82
83/*
84 * Define all cmd_list_element's
85 */
86
87/* Chain containing all defined commands. */
88
89struct cmd_list_element *cmdlist;
90
91/* Chain containing all defined info subcommands. */
92
93struct cmd_list_element *infolist;
94
95/* Chain containing all defined enable subcommands. */
96
97struct cmd_list_element *enablelist;
98
99/* Chain containing all defined disable subcommands. */
100
101struct cmd_list_element *disablelist;
102
103/* Chain containing all defined delete subcommands. */
104
105struct cmd_list_element *deletelist;
106
107/* Chain containing all defined "enable breakpoint" subcommands. */
108
109struct cmd_list_element *enablebreaklist;
110
111/* Chain containing all defined set subcommands */
112
113struct cmd_list_element *setlist;
114
115/* Chain containing all defined show subcommands. */
116struct cmd_list_element *showlist;
117
118/* Chain containing all defined \"set history\". */
119
120struct cmd_list_element *sethistlist;
121
122/* Chain containing all defined \"show history\". */
123struct cmd_list_element *showhistlist;
124
125/* Chain containing all defined \"unset history\". */
126
127struct cmd_list_element *unsethistlist;
128
129/* stdio stream that command input is being read from. */
130
131FILE *instream;
132
133/* Current working directory. */
134
135char *current_directory;
136
137/* The directory name is actually stored here (usually). */
138static char dirbuf[MAXPATHLEN];
139
140/* Function to call before reading a command, if nonzero.
141 The function receives two args: an input stream,
142 and a prompt string. */
143
144void (*window_hook) ();
145
146extern int frame_file_full_name;
147int epoch_interface;
148int xgdb_verbose;
149
150/* The external commands we call... */
151extern void init_source_path ();
152extern void directory_command ();
153extern void exec_file_command ();
154extern void symbol_file_command ();
155extern void core_file_command ();
156extern void tty_command ();
157
158extern void help_list ();
159extern void initialize_all_files ();
160extern void init_malloc ();
161
162/* Forward declarations for this file */
163void free_command_lines ();
164char *gdb_readline ();
165char *command_line_input ();
166static void initialize_main ();
167static void initialize_cmd_lists ();
168static void init_signals ();
169static void quit_command ();
170void command_loop ();
171static void source_command ();
172static void print_gdb_version ();
173static void float_handler ();
174static void cd_command ();
175static void read_command_file ();
176
177char *getenv ();
178
179/* gdb prints this when reading a command interactively */
180static char *prompt;
181
182/* Buffer used for reading command lines, and the size
183 allocated for it so far. */
184
185char *line;
186int linesize = 100;
187
188/* Baud rate specified for talking to serial target systems. Default
189 is left as a zero pointer, so targets can choose their own defaults. */
190
191char *baud_rate;
192
193/* Signal to catch ^Z typed while reading a command: SIGTSTP or SIGCONT. */
194
195#ifndef STOP_SIGNAL
196#ifdef SIGTSTP
197#define STOP_SIGNAL SIGTSTP
198#endif
199#endif
d566d62a
JK
200
201/* Some System V have job control but not sigsetmask(). */
202#if !defined (HAVE_SIGSETMASK)
203#define HAVE_SIGSETMASK !defined (USG)
204#endif
205
206#if !HAVE_SIGSETMASK
207#define sigsetmask(n)
208#endif
bd5635a1
RP
209\f
210/* This is how `error' returns to command level. */
211
212jmp_buf to_top_level;
213
214void
215return_to_top_level ()
216{
217 quit_flag = 0;
218 immediate_quit = 0;
219 bpstat_clear_actions(stop_bpstat); /* Clear queued breakpoint commands */
220 clear_momentary_breakpoints ();
221 disable_current_display ();
f266e564 222 do_cleanups (ALL_CLEANUPS);
bd5635a1
RP
223 longjmp (to_top_level, 1);
224}
225
226/* Call FUNC with arg ARGS, catching any errors.
227 If there is no error, return the value returned by FUNC.
228 If there is an error, return zero after printing ERRSTRING
229 (which is in addition to the specific error message already printed). */
230
231int
232catch_errors (func, args, errstring)
233 int (*func) ();
234 int args;
235 char *errstring;
236{
237 jmp_buf saved;
238 int val;
239 struct cleanup *saved_cleanup_chain;
240
241 saved_cleanup_chain = save_cleanups ();
242
243 bcopy (to_top_level, saved, sizeof (jmp_buf));
244
245 if (setjmp (to_top_level) == 0)
246 val = (*func) (args);
247 else
248 {
249 if (errstring)
250 fprintf (stderr, "%s\n", errstring);
251 val = 0;
252 }
253
254 restore_cleanups (saved_cleanup_chain);
255
256 bcopy (saved, to_top_level, sizeof (jmp_buf));
257 return val;
258}
259
260/* Handler for SIGHUP. */
261
262static void
263disconnect ()
264{
265 kill_inferior_fast ();
266 signal (SIGHUP, SIG_DFL);
267 kill (getpid (), SIGHUP);
268}
269\f
270/* Clean up on error during a "source" command (or execution of a
271 user-defined command). */
272
273static void
274source_cleanup (stream)
275 FILE *stream;
276{
277 /* Restore the previous input stream. */
278 instream = stream;
279}
280
281/* Read commands from STREAM. */
282static void
283read_command_file (stream)
284 FILE *stream;
285{
286 struct cleanup *cleanups;
287
288 cleanups = make_cleanup (source_cleanup, instream);
289 instream = stream;
290 command_loop ();
291 do_cleanups (cleanups);
292}
293\f
294int
295main (argc, argv)
296 int argc;
297 char **argv;
298{
299 int count;
300 static int inhibit_gdbinit = 0;
301 static int quiet = 0;
302 static int batch = 0;
303
304 /* Pointers to various arguments from command line. */
305 char *symarg = NULL;
306 char *execarg = NULL;
307 char *corearg = NULL;
308 char *cdarg = NULL;
309 char *ttyarg = NULL;
310
311 /* Pointers to all arguments of +command option. */
312 char **cmdarg;
313 /* Allocated size of cmdarg. */
314 int cmdsize;
315 /* Number of elements of cmdarg used. */
316 int ncmd;
317
318 /* Indices of all arguments of +directory option. */
319 char **dirarg;
320 /* Allocated size. */
321 int dirsize;
322 /* Number of elements used. */
323 int ndir;
324
325 register int i;
326
327 /* This needs to happen before the first use of malloc. */
328 init_malloc ();
329
330#if defined (ALIGN_STACK_ON_STARTUP)
331 i = (int) &count & 0x3;
332 if (i != 0)
333 alloca (4 - i);
334#endif
335
336 cmdsize = 1;
337 cmdarg = (char **) xmalloc (cmdsize * sizeof (*cmdarg));
338 ncmd = 0;
339 dirsize = 1;
340 dirarg = (char **) xmalloc (dirsize * sizeof (*dirarg));
341 ndir = 0;
342
343 quit_flag = 0;
344 line = (char *) xmalloc (linesize);
345 line[0] = '\0'; /* Terminate saved (now empty) cmd line */
346 instream = stdin;
347
348 getwd (dirbuf);
349 current_directory = dirbuf;
350
351#ifdef SET_STACK_LIMIT_HUGE
352 {
353 struct rlimit rlim;
354
355 /* Set the stack limit huge so that alloca (particularly stringtab
356 * in dbxread.c) does not fail. */
357 getrlimit (RLIMIT_STACK, &rlim);
358 original_stack_limit = rlim.rlim_cur;
359 rlim.rlim_cur = rlim.rlim_max;
360 setrlimit (RLIMIT_STACK, &rlim);
361 }
362#endif /* SET_STACK_LIMIT_HUGE */
363
364 /* Parse arguments and options. */
365 {
366 int c;
367 static int print_help;
368 /* When var field is 0, use flag field to record the equivalent
369 short option (or arbitrary numbers starting at 10 for those
370 with no equivalent). */
371 static struct option long_options[] =
372 {
373 {"quiet", 0, &quiet, 1},
374 {"nx", 0, &inhibit_gdbinit, 1},
375 {"batch", 0, &batch, 1},
376 {"epoch", 0, &epoch_interface, 1},
377 {"fullname", 0, &frame_file_full_name, 1},
378 {"help", 0, &print_help, 1},
379 {"se", 1, 0, 10},
380 {"symbols", 1, 0, 's'},
381 {"s", 1, 0, 's'},
382 {"exec", 1, 0, 'e'},
383 {"core", 1, 0, 'c'},
384 {"c", 1, 0, 'c'},
385 {"command", 1, 0, 'x'},
386 {"x", 1, 0, 'x'},
387 {"directory", 1, 0, 'd'},
388 {"cd", 1, 0, 11},
389 {"tty", 1, 0, 't'},
390 {"b", 1, 0, 'b'},
391/* Allow machine descriptions to add more options... */
392#ifdef ADDITIONAL_OPTIONS
393 ADDITIONAL_OPTIONS
394#endif
395 };
396
397 while (1)
398 {
399 c = getopt_long_only (argc, argv, "",
400 long_options, &option_index);
401 if (c == EOF)
402 break;
403
404 /* Long option that takes an argument. */
405 if (c == 0 && long_options[option_index].flag == 0)
406 c = long_options[option_index].val;
407
408 switch (c)
409 {
410 case 0:
411 /* Long option that just sets a flag. */
412 break;
413 case 10:
414 symarg = optarg;
415 execarg = optarg;
416 break;
417 case 11:
418 cdarg = optarg;
419 break;
420 case 's':
421 symarg = optarg;
422 break;
423 case 'e':
424 execarg = optarg;
425 break;
426 case 'c':
427 corearg = optarg;
428 break;
429 case 'x':
430 cmdarg[ncmd++] = optarg;
431 if (ncmd >= cmdsize)
432 {
433 cmdsize *= 2;
434 cmdarg = (char **) xrealloc ((char *)cmdarg,
435 cmdsize * sizeof (*cmdarg));
436 }
437 break;
438 case 'd':
439 dirarg[ndir++] = optarg;
440 if (ndir >= dirsize)
441 {
442 dirsize *= 2;
443 dirarg = (char **) xrealloc ((char *)dirarg,
444 dirsize * sizeof (*dirarg));
445 }
446 break;
447 case 't':
448 ttyarg = optarg;
449 break;
450 case 'q':
451 quiet = 1;
452 break;
453 case 'b':
454 baud_rate = optarg;
455 break;
456#ifdef ADDITIONAL_OPTION_CASES
457 ADDITIONAL_OPTION_CASES
458#endif
459 case '?':
460 fprintf (stderr,
461 "Use `%s +help' for a complete list of options.\n",
462 argv[0]);
463 exit (1);
464 }
465
466 }
467 if (print_help)
468 {
469 fputs ("\
470This is GDB, the GNU debugger. Use the command\n\
471 gdb [options] [executable [core-file]]\n\
472to enter the debugger.\n\
473\n\
474Options available are:\n\
475 -help Print this message.\n\
476 -quiet Do not print version number on startup.\n\
477 -fullname Output information used by emacs-GDB interface.\n\
478 -epoch Output information used by epoch emacs-GDB interface.\n\
479 -batch Exit after processing options.\n\
480 -nx Do not read .gdbinit file.\n\
481 -tty=TTY Use TTY for input/output by the program being debugged.\n\
482 -cd=DIR Change current directory to DIR.\n\
483 -directory=DIR Search for source files in DIR.\n\
484 -command=FILE Execute GDB commands from FILE.\n\
485 -symbols=SYMFILE Read symbols from SYMFILE.\n\
486 -exec=EXECFILE Use EXECFILE as the executable.\n\
487 -se=FILE Use FILE as symbol file and executable file.\n\
488 -core=COREFILE Analyze the core dump COREFILE.\n\
489 -b BAUDRATE Set serial port baud rate used for remote debugging\n\
490", stderr);
491#ifdef ADDITIONAL_OPTION_HELP
492 fputs (ADDITIONAL_OPTION_HELP, stderr);
493#endif
494 fputs ("\n\
495For more information, type \"help\" from within GDB, or consult the\n\
496GDB manual (available as on-line info or a printed manual).\n", stderr);
497 /* Exiting after printing this message seems like
498 the most useful thing to do. */
499 exit (0);
500 }
501
502 /* OK, that's all the options. The other arguments are filenames. */
503 count = 0;
504 for (; optind < argc; optind++)
505 switch (++count)
506 {
507 case 1:
508 symarg = argv[optind];
509 execarg = argv[optind];
510 break;
511 case 2:
512 corearg = argv[optind];
513 break;
514 case 3:
515 fprintf (stderr,
516 "Excess command line arguments ignored. (%s%s)\n",
517 argv[optind], (optind == argc - 1) ? "" : " ...");
518 break;
519 }
520 if (batch)
521 quiet = 1;
522 }
523
524 /* Run the init function of each source file */
525
526 initialize_cmd_lists (); /* This needs to be done first */
527 initialize_all_files ();
528 initialize_main (); /* But that omits this file! Do it now */
529 init_signals ();
530
531 if (!quiet)
532 {
533 /* Print all the junk in one place, with a blank line after it
534 to separate it from important stuff like "no such file".
535 Also, we skip most of the noise, like Emacs, if started with
536 a file name rather than with no arguments. */
537 if (execarg == 0) {
538 print_gdb_version (1);
539 printf ("Type \"help\" for a list of commands.\n\n");
540 }
541 }
542
543 /* Now perform all the actions indicated by the arguments. */
544 if (cdarg != NULL)
545 {
546 if (!setjmp (to_top_level))
547 {
548 cd_command (cdarg, 0);
549 init_source_path ();
550 }
551 }
f266e564
JK
552 do_cleanups (ALL_CLEANUPS);
553
bd5635a1
RP
554 for (i = 0; i < ndir; i++)
555 if (!setjmp (to_top_level))
556 directory_command (dirarg[i], 0);
557 free (dirarg);
f266e564
JK
558 do_cleanups (ALL_CLEANUPS);
559
bd5635a1
RP
560 if (execarg != NULL
561 && symarg != NULL
562 && strcmp (execarg, symarg) == 0)
563 {
564 /* The exec file and the symbol-file are the same. If we can't open
565 it, better only print one error message. */
566 if (!setjmp (to_top_level))
567 {
568 exec_file_command (execarg, !batch);
569 symbol_file_command (symarg, !batch);
570 }
571 }
572 else
573 {
574 if (execarg != NULL)
575 if (!setjmp (to_top_level))
576 exec_file_command (execarg, !batch);
577 if (symarg != NULL)
578 if (!setjmp (to_top_level))
579 symbol_file_command (symarg, !batch);
580 }
f266e564
JK
581 do_cleanups (ALL_CLEANUPS);
582
bd5635a1
RP
583 if (corearg != NULL)
584 if (!setjmp (to_top_level))
585 core_file_command (corearg, !batch);
e522fb52 586 else if (isdigit (corearg[0]) && !setjmp (to_top_level))
bd5635a1 587 attach_command (corearg, !batch);
f266e564 588 do_cleanups (ALL_CLEANUPS);
bd5635a1
RP
589
590 if (ttyarg != NULL)
591 if (!setjmp (to_top_level))
592 tty_command (ttyarg, !batch);
f266e564 593 do_cleanups (ALL_CLEANUPS);
bd5635a1
RP
594
595#ifdef ADDITIONAL_OPTION_HANDLER
596 ADDITIONAL_OPTION_HANDLER;
597#endif
598
599 {
600 struct stat homebuf, cwdbuf;
601 char *homedir, *homeinit;
602
603 /* Read init file, if it exists in home directory */
604 homedir = getenv ("HOME");
605 if (homedir)
606 {
607 homeinit = (char *) alloca (strlen (getenv ("HOME")) +
608 strlen (gdbinit) + 10);
609 strcpy (homeinit, getenv ("HOME"));
610 strcat (homeinit, "/");
611 strcat (homeinit, gdbinit);
612 if (!inhibit_gdbinit && access (homeinit, R_OK) == 0)
613 if (!setjmp (to_top_level))
614 source_command (homeinit, 0);
f266e564 615 do_cleanups (ALL_CLEANUPS);
bd5635a1
RP
616
617 /* Do stats; no need to do them elsewhere since we'll only
618 need them if homedir is set. Make sure that they are
619 zero in case one of them fails (this guarantees that they
620 won't match if either exists). */
621
622 bzero (&homebuf, sizeof (struct stat));
623 bzero (&cwdbuf, sizeof (struct stat));
624
625 stat (homeinit, &homebuf);
626 stat (gdbinit, &cwdbuf); /* We'll only need this if
627 homedir was set. */
628 }
629
630 /* Read the input file in the current directory, *if* it isn't
631 the same file (it should exist, also). */
632
633 if (!homedir
634 || bcmp ((char *) &homebuf,
635 (char *) &cwdbuf,
636 sizeof (struct stat)))
637 if (!inhibit_gdbinit && access (gdbinit, R_OK) == 0)
638 if (!setjmp (to_top_level))
639 source_command (gdbinit, 0);
f266e564 640 do_cleanups (ALL_CLEANUPS);
bd5635a1
RP
641 }
642
643 for (i = 0; i < ncmd; i++)
644 if (!setjmp (to_top_level))
645 {
646 if (cmdarg[i][0] == '-' && cmdarg[i][1] == '\0')
647 read_command_file (stdin);
648 else
649 source_command (cmdarg[i], !batch);
f266e564 650 do_cleanups (ALL_CLEANUPS);
bd5635a1
RP
651 }
652 free (cmdarg);
653
654 if (batch)
655 {
656 /* We have hit the end of the batch file. */
657 exit (0);
658 }
659
660 /* Do any host- or target-specific hacks. This is used for i960 targets
661 to force the user to set a nindy target and spec its parameters. */
662
663#ifdef BEFORE_MAIN_LOOP_HOOK
664 BEFORE_MAIN_LOOP_HOOK;
665#endif
666
667 /* The command loop. */
668
669 while (1)
670 {
671 if (!setjmp (to_top_level))
672 {
f266e564 673 do_cleanups (ALL_CLEANUPS); /* Do complete cleanup */
bd5635a1
RP
674 command_loop ();
675 quit_command ((char *)0, instream == stdin);
676 }
677 }
678 /* No exit -- exit is through quit_command. */
679}
680
681/* Execute the line P as a command.
682 Pass FROM_TTY as second argument to the defining function. */
683
684void
685execute_command (p, from_tty)
686 char *p;
687 int from_tty;
688{
689 register struct cmd_list_element *c;
690 register struct command_line *cmdlines;
691
692 free_all_values ();
693
694 /* This can happen when command_line_input hits end of file. */
695 if (p == NULL)
696 return;
697
698 while (*p == ' ' || *p == '\t') p++;
699 if (*p)
700 {
701 char *arg;
702
703 c = lookup_cmd (&p, cmdlist, "", 0, 1);
704 /* Pass null arg rather than an empty one. */
705 arg = *p ? p : 0;
706 if (c->class == class_user)
707 {
708 struct cleanup *old_chain;
709
710 if (*p)
711 error ("User-defined commands cannot take arguments.");
712 cmdlines = c->user_commands;
713 if (cmdlines == 0)
714 /* Null command */
715 return;
716
717 /* Set the instream to 0, indicating execution of a
718 user-defined function. */
719 old_chain = make_cleanup (source_cleanup, instream);
720 instream = (FILE *) 0;
721 while (cmdlines)
722 {
723 execute_command (cmdlines->line, 0);
724 cmdlines = cmdlines->next;
725 }
726 do_cleanups (old_chain);
727 }
728 else if (c->type == set_cmd || c->type == show_cmd)
729 do_setshow_command (arg, from_tty & caution, c);
730 else if (c->function == NO_FUNCTION)
731 error ("That is not a command, just a help topic.");
732 else
733 (*c->function) (arg, from_tty & caution);
734 }
735}
736
737/* ARGSUSED */
f266e564
JK
738void
739command_loop_marker (foo)
bd5635a1
RP
740 int foo;
741{
742}
743
744/* Read commands from `instream' and execute them
745 until end of file or error reading instream. */
746void
747command_loop ()
748{
749 struct cleanup *old_chain;
750 char *command;
751 int stdin_is_tty = ISATTY (stdin);
752
753 while (!feof (instream))
754 {
755 if (window_hook && instream == stdin)
756 (*window_hook) (instream, prompt);
757
758 quit_flag = 0;
759 if (instream == stdin && stdin_is_tty)
760 reinitialize_more_filter ();
f266e564 761 old_chain = make_cleanup (command_loop_marker, 0);
bd5635a1
RP
762 command = command_line_input (instream == stdin ? prompt : 0,
763 instream == stdin);
764 if (command == 0)
765 return;
766 execute_command (command, instream == stdin);
767 /* Do any commands attached to breakpoint we stopped at. */
768 bpstat_do_actions (&stop_bpstat);
769 do_cleanups (old_chain);
770 }
771}
772\f
773/* Commands call this if they do not want to be repeated by null lines. */
774
775void
776dont_repeat ()
777{
778 /* If we aren't reading from standard input, we are saving the last
779 thing read from stdin in line and don't want to delete it. Null lines
780 won't repeat here in any case. */
781 if (instream == stdin)
782 *line = 0;
783}
784\f
785/* Read a line from the stream "instream" without command line editing.
786
787 It prints PRROMPT once at the start.
788
789 If RETURN_RESULT is set it allocates
790 space for whatever the user types and returns the result.
791 If not, it just discards what the user types and returns a garbage
792 non-NULL value.
793
794 No matter what return_result is, a NULL return means end of file. */
795char *
796gdb_readline (prrompt, return_result)
797 char *prrompt;
798 int return_result;
799{
800 int c;
801 char *result;
802 int input_index = 0;
803 int result_size = 80;
804
805 if (prrompt)
806 {
807 printf (prrompt);
808 fflush (stdout);
809 }
810
811 if (return_result)
812 result = (char *) xmalloc (result_size);
813
814 while (1)
815 {
816 /* Read from stdin if we are executing a user defined command.
817 This is the right thing for prompt_for_continue, at least. */
818 c = fgetc (instream ? instream : stdin);
819 if (c == EOF || c == '\n')
820 break;
821 if (return_result)
822 {
823 result[input_index++] = c;
824 while (input_index >= result_size)
825 {
826 result_size *= 2;
827 result = (char *) xrealloc (result, result_size);
828 }
829 }
830 }
831
832 if (c == EOF)
833 {
834 if (return_result)
835 free (result);
836 return NULL;
837 }
838
839 if (return_result)
840 {
841 result[input_index++] = '\0';
842 return result;
843 }
844 else
845 /* Return any old non-NULL pointer. */
846 return (char *) "non-NULL";
847}
848
849/* Declaration for fancy readline with command line editing. */
850char *readline ();
851
852/* Variables which control command line editing and history
853 substitution. These variables are given default values at the end
854 of this file. */
855static int command_editing_p;
856static int history_expansion_p;
857static int write_history_p;
858static int history_size;
859static char *history_filename;
860
861/* Variables which are necessary for fancy command line editing. */
862char *gdb_completer_word_break_characters =
863 " \t\n!@#$%^&*()-+=|~`}{[]\"';:?/>.<,";
864
865/* Functions that are used as part of the fancy command line editing. */
866
867/* This can be used for functions which don't want to complete on symbols
868 but don't want to complete on anything else either. */
869/* ARGSUSED */
870char **
871noop_completer (text)
872 char *text;
873{
874 return NULL;
875}
876
877/* Generate symbol names one by one for the completer. If STATE is
878 zero, then we need to initialize, otherwise the initialization has
879 already taken place. TEXT is what we expect the symbol to start
880 with. RL_LINE_BUFFER is available to be looked at; it contains the
881 entire text of the line. RL_POINT is the offset in that line of
882 the cursor. You should pretend that the line ends at RL_POINT.
883 The result is NULL if there are no more completions, else a char
884 string which is a possible completion. */
885char *
886symbol_completion_function (text, state)
887 char *text;
888 int state;
889{
890 static char **list = (char **)NULL;
891 static int index;
892 char *output;
893 extern char *rl_line_buffer;
894 extern int rl_point;
895 char *tmp_command, *p;
896 struct cmd_list_element *c, *result_list;
897
898 if (!state)
899 {
900 /* Free the storage used by LIST, but not by the strings inside. This is
901 because rl_complete_internal () frees the strings. */
902 if (list)
903 free (list);
904 list = 0;
905 index = 0;
906
907 /* Decide whether to complete on a list of gdb commands or on
908 symbols. */
909 tmp_command = (char *) alloca (rl_point + 1);
910 p = tmp_command;
911
912 strncpy (tmp_command, rl_line_buffer, rl_point);
913 tmp_command[rl_point] = '\0';
914
915 if (rl_point == 0)
916 {
917 /* An empty line we want to consider ambiguous; that is,
918 it could be any command. */
919 c = (struct cmd_list_element *) -1;
920 result_list = 0;
921 }
922 else
923 c = lookup_cmd_1 (&p, cmdlist, &result_list, 1);
924
925 /* Move p up to the next interesting thing. */
926 while (*p == ' ' || *p == '\t')
927 p++;
928
929 if (!c)
930 /* He's typed something unrecognizable. Sigh. */
931 list = (char **) 0;
932 else if (c == (struct cmd_list_element *) -1)
933 {
934 /* If we didn't recognize everything up to the thing that
935 needs completing, and we don't know what command it is
936 yet, we are in trouble. Part of the trouble might be
937 that the list of delimiters used by readline includes
938 '-', which we use in commands. Check for this. */
939 if (p + strlen(text) != tmp_command + rl_point) {
940 if (tmp_command[rl_point - strlen(text) - 1] == '-')
941 text = p;
942 else {
943 /* This really should not produce an error. Better would
944 be to pretend to hit RETURN here; this would produce a
945 response like "Ambiguous command: foo, foobar, etc",
946 and leave the line available for re-entry with ^P. Instead,
947 this error blows away the user's typed input without
948 any way to get it back. */
949 error (" Unrecognized command.");
950 }
951 }
952
953 /* He's typed something ambiguous. This is easier. */
954 if (result_list)
955 list = complete_on_cmdlist (*result_list->prefixlist, text);
956 else
957 list = complete_on_cmdlist (cmdlist, text);
958 }
959 else
960 {
961 /* If we've gotten this far, gdb has recognized a full
962 command. There are several possibilities:
963
964 1) We need to complete on the command.
965 2) We need to complete on the possibilities coming after
966 the command.
967 2) We need to complete the text of what comes after the
968 command. */
969
970 if (!*p && *text)
971 /* Always (might be longer versions of thie command). */
972 list = complete_on_cmdlist (result_list, text);
973 else if (!*p && !*text)
974 {
975 if (c->prefixlist)
976 list = complete_on_cmdlist (*c->prefixlist, "");
977 else
978 list = (*c->completer) ("");
979 }
980 else
981 {
982 if (c->prefixlist && !c->allow_unknown)
983 {
984#if 0
985 /* Something like "info adsfkdj". But error() is not
986 the proper response; just return no completions
987 instead. */
988 *p = '\0';
989 error ("\"%s\" command requires a subcommand.",
990 tmp_command);
991#else
992 list = NULL;
993#endif
994 }
995 else
996 list = (*c->completer) (text);
997 }
998 }
999 }
1000
1001 /* If the debugged program wasn't compiled with symbols, or if we're
1002 clearly completing on a command and no command matches, return
1003 NULL. */
1004 if (!list)
1005 return ((char *)NULL);
1006
1007 output = list[index];
1008 if (output)
1009 index++;
1010
1011 return (output);
1012}
1013\f
1014#ifdef STOP_SIGNAL
1015static void
1016stop_sig ()
1017{
1018#if STOP_SIGNAL == SIGTSTP
1019 signal (SIGTSTP, SIG_DFL);
1020 sigsetmask (0);
1021 kill (getpid (), SIGTSTP);
1022 signal (SIGTSTP, stop_sig);
1023#else
1024 signal (STOP_SIGNAL, stop_sig);
1025#endif
1026 printf ("%s", prompt);
1027 fflush (stdout);
1028
1029 /* Forget about any previous command -- null line now will do nothing. */
1030 dont_repeat ();
1031}
1032#endif /* STOP_SIGNAL */
1033
1034#if 0
1035Writing the history file upon a terminating signal is not useful,
1036 because the info is rarely relevant and is in the core dump anyway.
1037 It is an annoyance to have the file cluttering up the place.
1038/* The list of signals that would terminate us if not caught.
1039 We catch them, but just so that we can write the history file,
1040 and so forth. */
1041int terminating_signals[] = {
1042 SIGHUP, SIGINT, SIGILL, SIGTRAP, SIGIOT,
1043 SIGEMT, SIGFPE, SIGKILL, SIGBUS, SIGSEGV, SIGSYS,
1044 SIGPIPE, SIGALRM, SIGTERM,
1045#ifdef SIGXCPU
1046 SIGXCPU,
1047#endif
1048#ifdef SIGXFSZ
1049 SIGXFSZ,
1050#endif
1051#ifdef SIGVTALRM
1052 SIGVTALRM,
1053#endif
1054#ifdef SIGPROF
1055 SIGPROF,
1056#endif
1057#ifdef SIGLOST
1058 SIGLOST,
1059#endif
1060#ifdef SIGUSR1
1061 SIGUSR1, SIGUSR2
1062#endif
1063 };
1064
1065#define TERMSIGS_LENGTH (sizeof (terminating_signals) / sizeof (int))
1066
1067static void
1068catch_termination (sig)
1069 int sig;
1070{
1071 /* We are probably here because GDB has a bug. Write out the history
1072 so that we might have a better chance of reproducing it. */
1073 /* Tell the user what we are doing so he can delete the file if
1074 it is unwanted. */
1075 write_history (history_filename);
1076 printf ("\n%s written.\n", history_filename);
1077 signal (sig, SIG_DFL);
1078 kill (getpid (), sig);
1079}
1080#endif
1081
1082/* Initialize signal handlers. */
f266e564
JK
1083static void
1084do_nothing ()
1085{
1086}
1087
bd5635a1
RP
1088static void
1089init_signals ()
1090{
1091 extern void request_quit ();
1092#if 0
1093 register int i;
1094
1095 for (i = 0; i < TERMSIGS_LENGTH; i++)
1096 signal (terminating_signals[i], catch_termination);
1097#endif
1098
1099 signal (SIGINT, request_quit);
1100
1101 /* If we initialize SIGQUIT to SIG_IGN, then the SIG_IGN will get
1102 passed to the inferior, which we don't want. It would be
1103 possible to do a "signal (SIGQUIT, SIG_DFL)" after we fork, but
1104 on BSD4.3 systems using vfork, that will (apparently) affect the
1105 GDB process as well as the inferior (the signal handling tables
1106 being shared between the two, apparently). Since we establish
1107 a handler for SIGQUIT, when we call exec it will set the signal
1108 to SIG_DFL for us. */
1109 signal (SIGQUIT, do_nothing);
1110 if (signal (SIGHUP, do_nothing) != SIG_IGN)
1111 signal (SIGHUP, disconnect);
1112 signal (SIGFPE, float_handler);
1113}
1114\f
1115/* Read one line from the command input stream `instream'
1116 into the local static buffer `linebuffer' (whose current length
1117 is `linelength').
1118 The buffer is made bigger as necessary.
1119 Returns the address of the start of the line.
1120
1121 NULL is returned for end of file.
1122
1123 *If* the instream == stdin & stdin is a terminal, the line read
1124 is copied into the file line saver (global var char *line,
1125 length linesize) so that it can be duplicated.
1126
1127 This routine either uses fancy command line editing or
1128 simple input as the user has requested. */
1129
1130char *
1131command_line_input (prrompt, repeat)
1132 char *prrompt;
1133 int repeat;
1134{
1135 static char *linebuffer = 0;
1136 static int linelength = 0;
1137 register char *p;
1138 char *p1;
1139 char *rl;
1140 char *local_prompt = prrompt;
1141 register int c;
1142 char *nline;
1143 char got_eof = 0;
1144
1145 if (linebuffer == 0)
1146 {
1147 linelength = 80;
1148 linebuffer = (char *) xmalloc (linelength);
1149 }
1150
1151 p = linebuffer;
1152
1153 /* Control-C quits instantly if typed while in this loop
1154 since it should not wait until the user types a newline. */
1155 immediate_quit++;
1156#ifdef STOP_SIGNAL
1157 signal (STOP_SIGNAL, stop_sig);
1158#endif
1159
1160 while (1)
1161 {
e522fb52
JG
1162 /* Reports are that some Sys V's don't flush stdout/err on reads
1163 from stdin, when stdin/out are sockets rather than ttys. So we
1164 have to do it ourselves, to make emacs-gdb and xxgdb work.
1165 On other machines, doing this once per input should be a cheap nop. */
1166 fflush (stdout);
1167 fflush (stderr);
1168
bd5635a1
RP
1169 /* Don't use fancy stuff if not talking to stdin. */
1170 if (command_editing_p && instream == stdin
1171 && ISATTY (instream))
1172 rl = readline (local_prompt);
1173 else
1174 rl = gdb_readline (local_prompt, 1);
1175
1176 if (!rl || rl == (char *) EOF)
1177 {
1178 got_eof = 1;
1179 break;
1180 }
1181 if (strlen(rl) + 1 + (p - linebuffer) > linelength)
1182 {
1183 linelength = strlen(rl) + 1 + (p - linebuffer);
1184 nline = (char *) xrealloc (linebuffer, linelength);
1185 p += nline - linebuffer;
1186 linebuffer = nline;
1187 }
1188 p1 = rl;
1189 /* Copy line. Don't copy null at end. (Leaves line alone
1190 if this was just a newline) */
1191 while (*p1)
1192 *p++ = *p1++;
1193
1194 free (rl); /* Allocated in readline. */
1195
1196 if (p == linebuffer || *(p - 1) != '\\')
1197 break;
1198
1199 p--; /* Put on top of '\'. */
1200 local_prompt = (char *) 0;
1201 }
1202
1203#ifdef STOP_SIGNAL
1204 signal (SIGTSTP, SIG_DFL);
1205#endif
1206 immediate_quit--;
1207
1208 if (got_eof)
1209 return NULL;
1210
1211 /* Do history expansion if that is wished. */
1212 if (history_expansion_p && instream == stdin
1213 && ISATTY (instream))
1214 {
1215 char *history_value;
1216 int expanded;
1217
1218 *p = '\0'; /* Insert null now. */
1219 expanded = history_expand (linebuffer, &history_value);
1220 if (expanded)
1221 {
1222 /* Print the changes. */
1223 printf ("%s\n", history_value);
1224
1225 /* If there was an error, call this function again. */
1226 if (expanded < 0)
1227 {
1228 free (history_value);
1229 return command_line_input (prrompt, repeat);
1230 }
1231 if (strlen (history_value) > linelength)
1232 {
1233 linelength = strlen (history_value) + 1;
1234 linebuffer = (char *) xrealloc (linebuffer, linelength);
1235 }
1236 strcpy (linebuffer, history_value);
1237 p = linebuffer + strlen(linebuffer);
1238 free (history_value);
1239 }
1240 }
1241
1242 /* If we just got an empty line, and that is supposed
1243 to repeat the previous command, return the value in the
1244 global buffer. */
1245 if (repeat)
1246 {
1247 if (p == linebuffer)
1248 return line;
1249 p1 = linebuffer;
1250 while (*p1 == ' ' || *p1 == '\t')
1251 p1++;
1252 if (!*p1)
1253 return line;
1254 }
1255
1256 *p = 0;
1257
1258 /* Add line to history if appropriate. */
1259 if (instream == stdin
1260 && ISATTY (stdin) && *linebuffer)
1261 add_history (linebuffer);
1262
1263 /* Note: lines consisting soley of comments are added to the command
1264 history. This is useful when you type a command, and then
1265 realize you don't want to execute it quite yet. You can comment
1266 out the command and then later fetch it from the value history
1267 and remove the '#'. The kill ring is probably better, but some
1268 people are in the habit of commenting things out. */
1269 p1 = linebuffer;
1270 while ((c = *p1++) != '\0')
1271 {
1272 if (c == '"')
1273 while ((c = *p1++) != '"')
1274 {
1275 /* Make sure an escaped '"' doesn't make us think the string
1276 is ended. */
1277 if (c == '\\')
1278 parse_escape (&p1);
1279 if (c == '\0')
1280 break;
1281 }
1282 else if (c == '\'')
1283 while ((c = *p1++) != '\'')
1284 {
1285 /* Make sure an escaped '\'' doesn't make us think the string
1286 is ended. */
1287 if (c == '\\')
1288 parse_escape (&p1);
1289 if (c == '\0')
1290 break;
1291 }
1292 else if (c == '#')
1293 {
1294 /* Found a comment. */
1295 p1[-1] = '\0';
1296 break;
1297 }
1298 }
1299
1300 /* Save into global buffer if appropriate. */
1301 if (repeat)
1302 {
1303 if (linelength > linesize)
1304 {
1305 line = xrealloc (line, linelength);
1306 linesize = linelength;
1307 }
1308 strcpy (line, linebuffer);
1309 return line;
1310 }
1311
1312 return linebuffer;
1313}
1314\f
1315/* Read lines from the input stream
1316 and accumulate them in a chain of struct command_line's
1317 which is then returned. */
1318
1319struct command_line *
1320read_command_lines ()
1321{
1322 struct command_line *first = 0;
1323 register struct command_line *next, *tail = 0;
1324 register char *p, *p1;
1325 struct cleanup *old_chain = 0;
1326
1327 while (1)
1328 {
1329 dont_repeat ();
1330 p = command_line_input (0, instream == stdin);
1331 if (p == NULL)
1332 /* Treat end of file like "end". */
1333 break;
1334
1335 /* Remove leading and trailing blanks. */
1336 while (*p == ' ' || *p == '\t') p++;
1337 p1 = p + strlen (p);
1338 while (p1 != p && (p1[-1] == ' ' || p1[-1] == '\t')) p1--;
1339
1340 /* Is this "end"? */
1341 if (p1 - p == 3 && !strncmp (p, "end", 3))
1342 break;
1343
1344 /* No => add this line to the chain of command lines. */
1345 next = (struct command_line *) xmalloc (sizeof (struct command_line));
1346 next->line = savestring (p, p1 - p);
1347 next->next = 0;
1348 if (tail)
1349 {
1350 tail->next = next;
1351 }
1352 else
1353 {
1354 /* We just read the first line.
1355 From now on, arrange to throw away the lines we have
1356 if we quit or get an error while inside this function. */
1357 first = next;
1358 old_chain = make_cleanup (free_command_lines, &first);
1359 }
1360 tail = next;
1361 }
1362
1363 dont_repeat ();
1364
1365 /* Now we are about to return the chain to our caller,
1366 so freeing it becomes his responsibility. */
1367 if (first)
1368 discard_cleanups (old_chain);
1369 return first;
1370}
1371
1372/* Free a chain of struct command_line's. */
1373
1374void
1375free_command_lines (lptr)
1376 struct command_line **lptr;
1377{
1378 register struct command_line *l = *lptr;
1379 register struct command_line *next;
1380
1381 while (l)
1382 {
1383 next = l->next;
1384 free (l->line);
1385 free (l);
1386 l = next;
1387 }
1388}
1389\f
1390/* Add an element to the list of info subcommands. */
1391
1392void
1393add_info (name, fun, doc)
1394 char *name;
1395 void (*fun) ();
1396 char *doc;
1397{
1398 add_cmd (name, no_class, fun, doc, &infolist);
1399}
1400
1401/* Add an alias to the list of info subcommands. */
1402
1403void
1404add_info_alias (name, oldname, abbrev_flag)
1405 char *name;
1406 char *oldname;
1407 int abbrev_flag;
1408{
1409 add_alias_cmd (name, oldname, 0, abbrev_flag, &infolist);
1410}
1411
1412/* The "info" command is defined as a prefix, with allow_unknown = 0.
1413 Therefore, its own definition is called only for "info" with no args. */
1414
1415/* ARGSUSED */
1416static void
1417info_command (arg, from_tty)
1418 char *arg;
1419 int from_tty;
1420{
1421 printf ("\"info\" must be followed by the name of an info command.\n");
1422 help_list (infolist, "info ", -1, stdout);
1423}
1424
1425/* The "show" command with no arguments shows all the settings. */
1426
1427/* ARGSUSED */
1428static void
1429show_command (arg, from_tty)
1430 char *arg;
1431 int from_tty;
1432{
1433 cmd_show_list (showlist, from_tty, "");
1434}
1435\f
1436/* Add an element to the list of commands. */
1437
1438void
1439add_com (name, class, fun, doc)
1440 char *name;
1441 enum command_class class;
1442 void (*fun) ();
1443 char *doc;
1444{
1445 add_cmd (name, class, fun, doc, &cmdlist);
1446}
1447
1448/* Add an alias or abbreviation command to the list of commands. */
1449
1450void
1451add_com_alias (name, oldname, class, abbrev_flag)
1452 char *name;
1453 char *oldname;
1454 enum command_class class;
1455 int abbrev_flag;
1456{
1457 add_alias_cmd (name, oldname, class, abbrev_flag, &cmdlist);
1458}
1459
1460void
1461error_no_arg (why)
1462 char *why;
1463{
1464 error ("Argument required (%s).", why);
1465}
1466
e1ce8aa5 1467/* ARGSUSED */
bd5635a1
RP
1468static void
1469help_command (command, from_tty)
1470 char *command;
1471 int from_tty; /* Ignored */
1472{
1473 help_cmd (command, stdout);
1474}
1475\f
1476static void
1477validate_comname (comname)
1478 char *comname;
1479{
1480 register char *p;
1481
1482 if (comname == 0)
1483 error_no_arg ("name of command to define");
1484
1485 p = comname;
1486 while (*p)
1487 {
1488 if (!(*p >= 'A' && *p <= 'Z')
1489 && !(*p >= 'a' && *p <= 'z')
1490 && !(*p >= '0' && *p <= '9')
1491 && *p != '-')
1492 error ("Junk in argument list: \"%s\"", p);
1493 p++;
1494 }
1495}
1496
1497static void
1498define_command (comname, from_tty)
1499 char *comname;
1500 int from_tty;
1501{
1502 register struct command_line *cmds;
1503 register struct cmd_list_element *c, *newc;
1504 char *tem = comname;
1505 extern void not_just_help_class_command ();
1506
1507 validate_comname (comname);
1508
1509 c = lookup_cmd (&tem, cmdlist, "", -1, 1);
1510 if (c)
1511 {
1512 if (c->class == class_user || c->class == class_alias)
1513 tem = "Redefine command \"%s\"? ";
1514 else
1515 tem = "Really redefine built-in command \"%s\"? ";
1516 if (!query (tem, comname))
1517 error ("Command \"%s\" not redefined.", comname);
1518 }
1519
1520 if (from_tty)
1521 {
1522 printf ("Type commands for definition of \"%s\".\n\
1523End with a line saying just \"end\".\n", comname);
1524 fflush (stdout);
1525 }
1526 comname = savestring (comname, strlen (comname));
1527
1528 cmds = read_command_lines ();
1529
1530 if (c && c->class == class_user)
1531 free_command_lines (&c->user_commands);
1532
1533 newc = add_cmd (comname, class_user, not_just_help_class_command,
1534 (c && c->class == class_user)
1535 ? c->doc : savestring ("User-defined.", 13), &cmdlist);
1536 newc->user_commands = cmds;
1537}
1538
1539static void
1540document_command (comname, from_tty)
1541 char *comname;
1542 int from_tty;
1543{
1544 struct command_line *doclines;
1545 register struct cmd_list_element *c;
1546 char *tem = comname;
1547
1548 validate_comname (comname);
1549
1550 c = lookup_cmd (&tem, cmdlist, "", 0, 1);
1551
1552 if (c->class != class_user)
1553 error ("Command \"%s\" is built-in.", comname);
1554
1555 if (from_tty)
1556 printf ("Type documentation for \"%s\".\n\
1557End with a line saying just \"end\".\n", comname);
1558
1559 doclines = read_command_lines ();
1560
1561 if (c->doc) free (c->doc);
1562
1563 {
1564 register struct command_line *cl1;
1565 register int len = 0;
1566
1567 for (cl1 = doclines; cl1; cl1 = cl1->next)
1568 len += strlen (cl1->line) + 1;
1569
1570 c->doc = (char *) xmalloc (len + 1);
1571 *c->doc = 0;
1572
1573 for (cl1 = doclines; cl1; cl1 = cl1->next)
1574 {
1575 strcat (c->doc, cl1->line);
1576 if (cl1->next)
1577 strcat (c->doc, "\n");
1578 }
1579 }
1580
1581 free_command_lines (&doclines);
1582}
1583\f
1584static void
1585print_gdb_version (shout)
1586 int shout;
1587{
1588 printf ("GDB %s, Copyright (C) 1991 Free Software Foundation, Inc.\n",
1589 version);
1590 if (shout)
1591 printf ("\
1592There is ABSOLUTELY NO WARRANTY for GDB; type \"info warranty\" for details.\n\
1593GDB is free software and you are welcome to distribute copies of it\n\
1594 under certain conditions; type \"info copying\" to see the conditions.\n");
1595}
1596
e1ce8aa5 1597/* ARGSUSED */
bd5635a1 1598static void
f266e564 1599show_version (args, from_tty)
bd5635a1
RP
1600 char *args;
1601 int from_tty;
1602{
1603 immediate_quit++;
1604 print_gdb_version (0);
1605 immediate_quit--;
1606}
1607\f
1608/* xgdb calls this to reprint the usual GDB prompt. */
1609
1610void
1611print_prompt ()
1612{
1613 printf ("%s", prompt);
1614 fflush (stdout);
1615}
1616\f
1617static void
1618quit_command (args, from_tty)
1619 char *args;
1620 int from_tty;
1621{
f266e564 1622 if (inferior_pid != 0 && target_has_execution)
bd5635a1
RP
1623 {
1624 if (query ("The program is running. Quit anyway? "))
1625 {
1626 target_kill (args, from_tty);
1627 }
1628 else
1629 error ("Not confirmed.");
1630 }
1631 /* Save the history information if it is appropriate to do so. */
1632 if (write_history_p && history_filename)
1633 write_history (history_filename);
1634 exit (0);
1635}
1636
1637int
1638input_from_terminal_p ()
1639{
1640 return (instream == stdin) & caution;
1641}
1642\f
e1ce8aa5 1643/* ARGSUSED */
bd5635a1
RP
1644static void
1645pwd_command (args, from_tty)
1646 char *args;
1647 int from_tty;
1648{
1649 if (args) error ("The \"pwd\" command does not take an argument: %s", args);
1650 getwd (dirbuf);
1651
1652 if (strcmp (dirbuf, current_directory))
1653 printf ("Working directory %s\n (canonically %s).\n",
1654 current_directory, dirbuf);
1655 else
1656 printf ("Working directory %s.\n", current_directory);
1657}
1658
1659static void
1660cd_command (dir, from_tty)
1661 char *dir;
1662 int from_tty;
1663{
1664 int len;
1665 int change;
1666
9107291d
JK
1667 /* If the new directory is absolute, repeat is a no-op; if relative,
1668 repeat might be useful but is more likely to be a mistake. */
1669 dont_repeat ();
1670
bd5635a1
RP
1671 if (dir == 0)
1672 error_no_arg ("new working directory");
1673
1674 dir = tilde_expand (dir);
1675 make_cleanup (free, dir);
1676
1677 len = strlen (dir);
1678 dir = savestring (dir, len - (len > 1 && dir[len-1] == '/'));
1679 if (dir[0] == '/')
1680 current_directory = dir;
1681 else
1682 {
1683 current_directory = concat (current_directory, "/", dir);
1684 free (dir);
1685 }
1686
1687 /* Now simplify any occurrences of `.' and `..' in the pathname. */
1688
1689 change = 1;
1690 while (change)
1691 {
1692 char *p;
1693 change = 0;
1694
1695 for (p = current_directory; *p;)
1696 {
1697 if (!strncmp (p, "/./", 2)
1698 && (p[2] == 0 || p[2] == '/'))
1699 strcpy (p, p + 2);
1700 else if (!strncmp (p, "/..", 3)
1701 && (p[3] == 0 || p[3] == '/')
1702 && p != current_directory)
1703 {
1704 char *q = p;
1705 while (q != current_directory && q[-1] != '/') q--;
1706 if (q != current_directory)
1707 {
1708 strcpy (q-1, p+3);
1709 p = q-1;
1710 }
1711 }
1712 else p++;
1713 }
1714 }
1715
1716 if (chdir (dir) < 0)
1717 perror_with_name (dir);
1718
1719 forget_cached_source_info ();
1720
1721 if (from_tty)
1722 pwd_command ((char *) 0, 1);
1723}
1724\f
e1ce8aa5 1725/* ARGSUSED */
bd5635a1
RP
1726static void
1727source_command (args, from_tty)
1728 char *args;
1729 int from_tty;
1730{
1731 FILE *stream;
1732 struct cleanup *cleanups;
1733 char *file = args;
1734
1735 if (file == 0)
1736 /* Let source without arguments read .gdbinit. */
1737 file = gdbinit;
1738
1739 file = tilde_expand (file);
1740 make_cleanup (free, file);
1741
1742 stream = fopen (file, "r");
1743 if (stream == 0)
1744 perror_with_name (file);
1745
1746 cleanups = make_cleanup (fclose, stream);
1747
1748 read_command_file (stream);
1749
1750 do_cleanups (cleanups);
1751}
1752
1753/* ARGSUSED */
1754static void
1755echo_command (text, from_tty)
1756 char *text;
1757 int from_tty;
1758{
1759 char *p = text;
1760 register int c;
1761
1762 if (text)
1763 while (c = *p++)
1764 {
1765 if (c == '\\')
1766 {
1767 /* \ at end of argument is used after spaces
1768 so they won't be lost. */
1769 if (*p == 0)
1770 return;
1771
1772 c = parse_escape (&p);
1773 if (c >= 0)
1774 fputc (c, stdout);
1775 }
1776 else
1777 fputc (c, stdout);
1778 }
f266e564 1779 fflush (stdout);
bd5635a1
RP
1780}
1781
1782/* ARGSUSED */
1783static void
1784dump_me_command (args, from_tty)
1785 char *args;
1786 int from_tty;
1787{
1788 if (query ("Should GDB dump core? "))
1789 {
1790 signal (SIGQUIT, SIG_DFL);
1791 kill (getpid (), SIGQUIT);
1792 }
1793}
1794\f
1795/* Functions to manipulate command line editing control variables. */
1796
f266e564 1797/* Number of commands to print in each call to show_commands. */
bd5635a1
RP
1798#define Hist_print 10
1799static void
f266e564 1800show_commands (args, from_tty)
bd5635a1
RP
1801 char *args;
1802 int from_tty;
1803{
1804 /* Index for history commands. Relative to history_base. */
1805 int offset;
1806
1807 /* Number of the history entry which we are planning to display next.
1808 Relative to history_base. */
1809 static int num = 0;
1810
1811 /* The first command in the history which doesn't exist (i.e. one more
1812 than the number of the last command). Relative to history_base. */
1813 int hist_len;
1814
1815 struct _hist_entry *history_get();
1816 extern int history_base;
1817
1818#if 0
1819 /* This is all reported by individual "show" commands. */
1820 printf_filtered ("Interactive command editing is %s.\n",
1821 command_editing_p ? "on" : "off");
1822
1823 printf_filtered ("History expansion of command input is %s.\n",
1824 history_expansion_p ? "on" : "off");
1825 printf_filtered ("Writing of a history record upon exit is %s.\n",
1826 write_history_p ? "enabled" : "disabled");
1827 printf_filtered ("The size of the history list (number of stored commands) is %d.\n",
1828 history_size);
1829 printf_filtered ("The name of the history record is \"%s\".\n\n",
1830 history_filename ? history_filename : "");
1831#endif /* 0 */
1832
1833 /* Print out some of the commands from the command history. */
1834 /* First determine the length of the history list. */
1835 hist_len = history_size;
1836 for (offset = 0; offset < history_size; offset++)
1837 {
1838 if (!history_get (history_base + offset))
1839 {
1840 hist_len = offset;
1841 break;
1842 }
1843 }
1844
1845 if (args)
1846 {
1847 if (args[0] == '+' && args[1] == '\0')
1848 /* "info editing +" should print from the stored position. */
1849 ;
1850 else
1851 /* "info editing <exp>" should print around command number <exp>. */
1852 num = (parse_and_eval_address (args) - history_base) - Hist_print / 2;
1853 }
1854 /* "info editing" means print the last Hist_print commands. */
1855 else
1856 {
1857 num = hist_len - Hist_print;
1858 }
1859
1860 if (num < 0)
1861 num = 0;
1862
1863 /* If there are at least Hist_print commands, we want to display the last
1864 Hist_print rather than, say, the last 6. */
1865 if (hist_len - num < Hist_print)
1866 {
1867 num = hist_len - Hist_print;
1868 if (num < 0)
1869 num = 0;
1870 }
1871
1872#if 0
1873 /* No need for a header now that "info editing" only prints one thing. */
1874 if (num == hist_len - Hist_print)
1875 printf_filtered ("The list of the last %d commands is:\n\n", Hist_print);
1876 else
1877 printf_filtered ("Some of the stored commands are:\n\n");
1878#endif /* 0 */
1879
1880 for (offset = num; offset < num + Hist_print && offset < hist_len; offset++)
1881 {
1882 printf_filtered ("%5d %s\n", history_base + offset,
1883 (history_get (history_base + offset))->line);
1884 }
1885
1886 /* The next command we want to display is the next one that we haven't
1887 displayed yet. */
1888 num += Hist_print;
1889
1890 /* If the user repeats this command with return, it should do what
1891 "info editing +" does. This is unnecessary if arg is null,
1892 because "info editing +" is not useful after "info editing". */
1893 if (from_tty && args)
1894 {
1895 args[0] = '+';
1896 args[1] = '\0';
1897 }
1898}
1899
1900/* Called by do_setshow_command. */
e1ce8aa5 1901/* ARGSUSED */
bd5635a1
RP
1902static void
1903set_history_size_command (args, from_tty, c)
1904 char *args;
1905 int from_tty;
1906 struct cmd_list_element *c;
1907{
1908 if (history_size == UINT_MAX)
1909 unstifle_history ();
1910 else
1911 stifle_history (history_size);
1912}
1913
e1ce8aa5 1914/* ARGSUSED */
bd5635a1
RP
1915static void
1916set_history (args, from_tty)
1917 char *args;
1918 int from_tty;
1919{
1920 printf ("\"set history\" must be followed by the name of a history subcommand.\n");
1921 help_list (sethistlist, "set history ", -1, stdout);
1922}
1923
e1ce8aa5 1924/* ARGSUSED */
bd5635a1
RP
1925static void
1926show_history (args, from_tty)
1927 char *args;
1928 int from_tty;
1929{
f266e564 1930 cmd_show_list (showhistlist, from_tty, "");
bd5635a1
RP
1931}
1932
1933int info_verbose = 0; /* Default verbose msgs off */
1934
1935/* Called by do_setshow_command. An elaborate joke. */
e1ce8aa5 1936/* ARGSUSED */
bd5635a1
RP
1937static void
1938set_verbose (args, from_tty, c)
1939 char *args;
1940 int from_tty;
1941 struct cmd_list_element *c;
1942{
1943 char *cmdname = "verbose";
1944 struct cmd_list_element *showcmd;
1945
1946 showcmd = lookup_cmd_1 (&cmdname, showlist, NULL, 1);
1947
1948 if (info_verbose)
1949 {
1950 c->doc = "Set verbose printing of informational messages.";
1951 showcmd->doc = "Show verbose printing of informational messages.";
1952 }
1953 else
1954 {
1955 c->doc = "Set verbosity.";
1956 showcmd->doc = "Show verbosity.";
1957 }
1958}
1959
1960static void
1961float_handler ()
1962{
1963 /* This message is based on ANSI C, section 4.7. Note that integer
1964 divide by zero causes this, so "float" is a misnomer. */
1965 error ("Erroneous arithmetic operation.");
1966}
1967
1968/* Return whether we are running a batch file or from terminal. */
1969int
1970batch_mode ()
1971{
1972 return !(instream == stdin && ISATTY (stdin));
1973}
1974
1975\f
1976static void
1977initialize_cmd_lists ()
1978{
1979 cmdlist = (struct cmd_list_element *) 0;
1980 infolist = (struct cmd_list_element *) 0;
1981 enablelist = (struct cmd_list_element *) 0;
1982 disablelist = (struct cmd_list_element *) 0;
1983 deletelist = (struct cmd_list_element *) 0;
1984 enablebreaklist = (struct cmd_list_element *) 0;
1985 setlist = (struct cmd_list_element *) 0;
1986 showlist = NULL;
1987 sethistlist = (struct cmd_list_element *) 0;
1988 showhistlist = NULL;
1989 unsethistlist = (struct cmd_list_element *) 0;
1990}
1991
1992static void
1993initialize_main ()
1994{
1995 struct cmd_list_element *c;
1996
1997 char *tmpenv;
1998
1999#ifdef DEFAULT_PROMPT
2000 prompt = savestring (DEFAULT_PROMPT, strlen(DEFAULT_PROMPT));
2001#else
2002 prompt = savestring ("(gdb) ", 6);
2003#endif
2004
2005 /* Set the important stuff up for command editing. */
2006 command_editing_p = 1;
2007 history_expansion_p = 0;
2008 write_history_p = 0;
2009
2010 if (tmpenv = getenv ("HISTSIZE"))
2011 history_size = atoi (tmpenv);
2012 else
2013 history_size = 256;
2014
2015 stifle_history (history_size);
2016
2017 if (tmpenv = getenv ("GDBHISTFILE"))
2018 history_filename = savestring (tmpenv, strlen(tmpenv));
2019 else
2020 /* We include the current directory so that if the user changes
2021 directories the file written will be the same as the one
2022 that was read. */
2023 history_filename = concat (current_directory, "/.gdb_history", "");
2024
2025 read_history (history_filename);
2026
2027 /* Setup important stuff for command line editing. */
2028 rl_completion_entry_function = (int (*)()) symbol_completion_function;
2029 rl_completer_word_break_characters = gdb_completer_word_break_characters;
2030 rl_readline_name = "gdb";
2031
2032 /* Define the classes of commands.
2033 They will appear in the help list in the reverse of this order. */
2034
2035 add_cmd ("obscure", class_obscure, NO_FUNCTION, "Obscure features.", &cmdlist);
2036 add_cmd ("aliases", class_alias, NO_FUNCTION, "Aliases of other commands.", &cmdlist);
2037 add_cmd ("user-defined", class_user, NO_FUNCTION, "User-defined commands.\n\
2038The commands in this class are those defined by the user.\n\
2039Use the \"define\" command to define a command.", &cmdlist);
2040 add_cmd ("support", class_support, NO_FUNCTION, "Support facilities.", &cmdlist);
2041 add_cmd ("status", class_info, NO_FUNCTION, "Status inquiries.", &cmdlist);
2042 add_cmd ("files", class_files, NO_FUNCTION, "Specifying and examining files.", &cmdlist);
2043 add_cmd ("breakpoints", class_breakpoint, NO_FUNCTION, "Making program stop at certain points.", &cmdlist);
2044 add_cmd ("data", class_vars, NO_FUNCTION, "Examining data.", &cmdlist);
2045 add_cmd ("stack", class_stack, NO_FUNCTION, "Examining the stack.\n\
2046The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
2047counting from zero for the innermost (currently executing) frame.\n\n\
2048At any time gdb identifies one frame as the \"selected\" frame.\n\
2049Variable lookups are done with respect to the selected frame.\n\
2050When the program being debugged stops, gdb selects the innermost frame.\n\
2051The commands below can be used to select other frames by number or address.",
2052 &cmdlist);
2053 add_cmd ("running", class_run, NO_FUNCTION, "Running the program.", &cmdlist);
2054
2055 add_com ("pwd", class_files, pwd_command,
2056 "Print working directory. This is used for your program as well.");
2057 add_com ("cd", class_files, cd_command,
2058 "Set working directory to DIR for debugger and program being debugged.\n\
2059The change does not take effect for the program being debugged\n\
2060until the next time it is started.");
2061
2062 add_show_from_set
2063 (add_set_cmd ("prompt", class_support, var_string, (char *)&prompt,
2064 "Set gdb's prompt",
2065 &setlist),
2066 &showlist);
2067
2068 add_com ("echo", class_support, echo_command,
2069 "Print a constant string. Give string as argument.\n\
2070C escape sequences may be used in the argument.\n\
2071No newline is added at the end of the argument;\n\
2072use \"\\n\" if you want a newline to be printed.\n\
2073Since leading and trailing whitespace are ignored in command arguments,\n\
2074if you want to print some you must use \"\\\" before leading whitespace\n\
2075to be printed or after trailing whitespace.");
2076 add_com ("document", class_support, document_command,
2077 "Document a user-defined command.\n\
2078Give command name as argument. Give documentation on following lines.\n\
2079End with a line of just \"end\".");
2080 add_com ("define", class_support, define_command,
2081 "Define a new command name. Command name is argument.\n\
2082Definition appears on following lines, one command per line.\n\
2083End with a line of just \"end\".\n\
2084Use the \"document\" command to give documentation for the new command.\n\
2085Commands defined in this way do not take arguments.");
2086
2087#ifdef __STDC__
2088 add_com ("source", class_support, source_command,
2089 "Read commands from a file named FILE.\n\
2090Note that the file \"" GDBINIT_FILENAME "\" is read automatically in this way\n\
2091when gdb is started.");
2092#else
2093 /* Punt file name, we can't help it easily. */
2094 add_com ("source", class_support, source_command,
2095 "Read commands from a file named FILE.\n\
2096Note that the file \".gdbinit\" is read automatically in this way\n\
2097when gdb is started.");
2098#endif
2099
2100 add_com ("quit", class_support, quit_command, "Exit gdb.");
2101 add_com ("help", class_support, help_command, "Print list of commands.");
2102 add_com_alias ("q", "quit", class_support, 1);
2103 add_com_alias ("h", "help", class_support, 1);
2104
2105
2106 c = add_set_cmd ("verbose", class_support, var_boolean, (char *)&info_verbose,
2107 "Set ",
2108 &setlist),
2109 add_show_from_set (c, &showlist);
2110 c->function = set_verbose;
2111 set_verbose (NULL, 0, c);
2112
2113 add_com ("dump-me", class_obscure, dump_me_command,
2114 "Get fatal error; make debugger dump its core.");
2115
2116 add_show_from_set
2117 (add_set_cmd ("editing", class_support, var_boolean, (char *)&command_editing_p,
2118 "Set command line editing.\n\
2119Use \"on\" to enable to enable the editing, and \"off\" to disable it.\n\
2120Without an argument, command line editing is enabled.", &setlist),
2121 &showlist);
2122
2123 add_prefix_cmd ("history", class_support, set_history,
2124 "Generic command for setting command history parameters.",
2125 &sethistlist, "set history ", 0, &setlist);
2126 add_prefix_cmd ("history", class_support, show_history,
2127 "Generic command for showing command history parameters.",
2128 &showhistlist, "show history ", 0, &showlist);
2129
2130 add_show_from_set
2131 (add_set_cmd ("expansion", no_class, var_boolean, (char *)&history_expansion_p,
2132 "Set history expansion on command input.\n\
2133Without an argument, history expansion is enabled.", &sethistlist),
2134 &showhistlist);
2135
2136 add_show_from_set
f266e564 2137 (add_set_cmd ("save", no_class, var_boolean, (char *)&write_history_p,
bd5635a1
RP
2138 "Set saving of the history record on exit.\n\
2139Use \"on\" to enable to enable the saving, and \"off\" to disable it.\n\
2140Without an argument, saving is enabled.", &sethistlist),
2141 &showhistlist);
2142
2143 c = add_set_cmd ("size", no_class, var_uinteger, (char *)&history_size,
2144 "Set the size of the command history, \n\
2145ie. the number of previous commands to keep a record of.", &sethistlist);
2146 add_show_from_set (c, &showhistlist);
2147 c->function = set_history_size_command;
2148
2149 add_show_from_set
2150 (add_set_cmd ("filename", no_class, var_filename, (char *)&history_filename,
2151 "Set the filename in which to record the command history\n\
2152 (the list of previous commands of which a record is kept).", &sethistlist),
2153 &showhistlist);
2154
2155 add_show_from_set
f266e564 2156 (add_set_cmd ("confirm", class_support, var_boolean,
bd5635a1 2157 (char *)&caution,
f266e564
JK
2158 "Set whether to confirm potentially dangerous operations.",
2159 &setlist),
bd5635a1
RP
2160 &showlist);
2161
2162 add_prefix_cmd ("info", class_info, info_command,
2163 "Generic command for printing status.",
2164 &infolist, "info ", 0, &cmdlist);
2165 add_com_alias ("i", "info", class_info, 1);
2166
2167 add_prefix_cmd ("show", class_info, show_command,
2168 "Generic command for showing things set with \"set\".",
2169 &showlist, "show ", 0, &cmdlist);
2170 /* Another way to get at the same thing. */
2171 add_info ("set", show_command, "Show all GDB settings.");
2172
f266e564
JK
2173 add_cmd ("commands", no_class, show_commands, "Status of command editor.",
2174 &showlist);
bd5635a1 2175
f266e564
JK
2176 add_cmd ("version", no_class, show_version,
2177 "Report what version of GDB this is.", &showlist);
bd5635a1 2178}
This page took 0.268182 seconds and 4 git commands to generate.