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