* top.h (lim_at_start): Declare.
[external/binutils.git] / gdb / main.c
1 /* Top level stuff for GDB, the GNU debugger.
2
3    Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
4    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
5    Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 59 Temple Place - Suite 330,
22    Boston, MA 02111-1307, USA.  */
23
24 #include "defs.h"
25 #include "top.h"
26 #include "target.h"
27 #include "inferior.h"
28 #include "symfile.h"
29 #include "gdbcore.h"
30
31 #include "getopt.h"
32
33 #include <sys/types.h>
34 #include "gdb_stat.h"
35 #include <ctype.h>
36
37 #include "gdb_string.h"
38 #include "event-loop.h"
39 #include "ui-out.h"
40
41 #include "interps.h"
42 #include "main.h"
43
44 /* If nonzero, display time usage both at startup and for each command.  */
45
46 int display_time;
47
48 /* If nonzero, display space usage both at startup and for each command.  */
49
50 int display_space;
51
52 /* Whether this is the async version or not.  The async version is
53    invoked on the command line with the -nw --async options.  In this
54    version, the usual command_loop is substituted by and event loop which
55    processes UI events asynchronously. */
56 int event_loop_p = 1;
57
58 /* The selected interpreter.  This will be used as a set command
59    variable, so it should always be malloc'ed - since
60    do_setshow_command will free it. */
61 char *interpreter_p;
62
63 /* Whether xdb commands will be handled */
64 int xdb_commands = 0;
65
66 /* Whether dbx commands will be handled */
67 int dbx_commands = 0;
68
69 /* System root path, used to find libraries etc.  */
70 char *gdb_sysroot = 0;
71
72 struct ui_file *gdb_stdout;
73 struct ui_file *gdb_stderr;
74 struct ui_file *gdb_stdlog;
75 struct ui_file *gdb_stdtarg;
76
77 /* Used to initialize error() - defined in utils.c */
78
79 extern void error_init (void);
80
81 /* Whether to enable writing into executable and core files */
82 extern int write_files;
83
84 static void print_gdb_help (struct ui_file *);
85
86 /* These two are used to set the external editor commands when gdb is farming
87    out files to be edited by another program. */
88
89 extern char *external_editor_command;
90
91 /* Call command_loop.  If it happens to return, pass that through as a
92    non-zero return status. */
93
94 static int
95 captured_command_loop (void *data)
96 {
97   current_interp_command_loop ();
98   /* FIXME: cagney/1999-11-05: A correct command_loop() implementaton
99      would clean things up (restoring the cleanup chain) to the state
100      they were just prior to the call.  Technically, this means that
101      the do_cleanups() below is redundant.  Unfortunately, many FUNCs
102      are not that well behaved.  do_cleanups should either be replaced
103      with a do_cleanups call (to cover the problem) or an assertion
104      check to detect bad FUNCs code. */
105   do_cleanups (ALL_CLEANUPS);
106   /* If the command_loop returned, normally (rather than threw an
107      error) we try to quit. If the quit is aborted, catch_errors()
108      which called this catch the signal and restart the command
109      loop. */
110   quit_command (NULL, instream == stdin);
111   return 1;
112 }
113
114 static int
115 captured_main (void *data)
116 {
117   struct captured_main_args *context = data;
118   int argc = context->argc;
119   char **argv = context->argv;
120   int count;
121   static int quiet = 0;
122   static int batch = 0;
123   static int set_args = 0;
124
125   /* Pointers to various arguments from command line.  */
126   char *symarg = NULL;
127   char *execarg = NULL;
128   char *corearg = NULL;
129   char *cdarg = NULL;
130   char *ttyarg = NULL;
131
132   /* These are static so that we can take their address in an initializer.  */
133   static int print_help;
134   static int print_version;
135
136   /* Pointers to all arguments of --command option.  */
137   char **cmdarg;
138   /* Allocated size of cmdarg.  */
139   int cmdsize;
140   /* Number of elements of cmdarg used.  */
141   int ncmd;
142
143   /* Indices of all arguments of --directory option.  */
144   char **dirarg;
145   /* Allocated size.  */
146   int dirsize;
147   /* Number of elements used.  */
148   int ndir;
149
150   struct stat homebuf, cwdbuf;
151   char *homedir, *homeinit;
152
153   register int i;
154
155   long time_at_startup = get_run_time ();
156
157 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
158   setlocale (LC_MESSAGES, "");
159 #endif
160 #if defined (HAVE_SETLOCALE)
161   setlocale (LC_CTYPE, "");
162 #endif
163   bindtextdomain (PACKAGE, LOCALEDIR);
164   textdomain (PACKAGE);
165
166   START_PROGRESS (argv[0], 0);
167
168   /* This needs to happen before the first use of malloc.  */
169   init_malloc (NULL);
170
171 #ifdef HAVE_SBRK
172   lim_at_start = (char *) sbrk (0);
173 #endif
174
175 #if defined (ALIGN_STACK_ON_STARTUP)
176   i = (int) &count & 0x3;
177   if (i != 0)
178     alloca (4 - i);
179 #endif
180
181   cmdsize = 1;
182   cmdarg = (char **) xmalloc (cmdsize * sizeof (*cmdarg));
183   ncmd = 0;
184   dirsize = 1;
185   dirarg = (char **) xmalloc (dirsize * sizeof (*dirarg));
186   ndir = 0;
187
188   quit_flag = 0;
189   line = (char *) xmalloc (linesize);
190   line[0] = '\0';               /* Terminate saved (now empty) cmd line */
191   instream = stdin;
192
193   getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
194   current_directory = gdb_dirbuf;
195
196   gdb_stdout = stdio_fileopen (stdout);
197   gdb_stderr = stdio_fileopen (stderr);
198   gdb_stdlog = gdb_stderr;      /* for moment */
199   gdb_stdtarg = gdb_stderr;     /* for moment */
200
201   /* initialize error() */
202   error_init ();
203
204   /* Set the sysroot path.  */
205 #ifdef TARGET_SYSTEM_ROOT_RELOCATABLE
206   gdb_sysroot = make_relative_prefix (argv[0], BINDIR, TARGET_SYSTEM_ROOT);
207   if (gdb_sysroot)
208     {
209       struct stat s;
210       int res = 0;
211
212       if (stat (gdb_sysroot, &s) == 0)
213         if (S_ISDIR (s.st_mode))
214           res = 1;
215
216       if (res == 0)
217         {
218           xfree (gdb_sysroot);
219           gdb_sysroot = TARGET_SYSTEM_ROOT;
220         }
221     }
222   else
223     gdb_sysroot = TARGET_SYSTEM_ROOT;
224 #else
225 #if defined (TARGET_SYSTEM_ROOT)
226   gdb_sysroot = TARGET_SYSTEM_ROOT;
227 #else
228   gdb_sysroot = "";
229 #endif
230 #endif
231
232   /* There will always be an interpreter.  Either the one passed into
233      this captured main, or one specified by the user at start up, or
234      the console.  Initialize the interpreter to the one requested by 
235      the application.  */
236   interpreter_p = xstrdup (context->interpreter_p);
237
238   /* Parse arguments and options.  */
239   {
240     int c;
241     /* When var field is 0, use flag field to record the equivalent
242        short option (or arbitrary numbers starting at 10 for those
243        with no equivalent).  */
244     enum {
245       OPT_SE = 10,
246       OPT_CD,
247       OPT_ANNOTATE,
248       OPT_STATISTICS,
249       OPT_TUI,
250       OPT_NOWINDOWS,
251       OPT_WINDOWS
252     };
253     static struct option long_options[] =
254     {
255       {"async", no_argument, &event_loop_p, 1},
256       {"noasync", no_argument, &event_loop_p, 0},
257 #if defined(TUI)
258       {"tui", no_argument, 0, OPT_TUI},
259 #endif
260       {"xdb", no_argument, &xdb_commands, 1},
261       {"dbx", no_argument, &dbx_commands, 1},
262       {"readnow", no_argument, &readnow_symbol_files, 1},
263       {"r", no_argument, &readnow_symbol_files, 1},
264       {"mapped", no_argument, &mapped_symbol_files, 1},
265       {"m", no_argument, &mapped_symbol_files, 1},
266       {"quiet", no_argument, &quiet, 1},
267       {"q", no_argument, &quiet, 1},
268       {"silent", no_argument, &quiet, 1},
269       {"nx", no_argument, &inhibit_gdbinit, 1},
270       {"n", no_argument, &inhibit_gdbinit, 1},
271       {"batch", no_argument, &batch, 1},
272       {"epoch", no_argument, &epoch_interface, 1},
273
274     /* This is a synonym for "--annotate=1".  --annotate is now preferred,
275        but keep this here for a long time because people will be running
276        emacses which use --fullname.  */
277       {"fullname", no_argument, 0, 'f'},
278       {"f", no_argument, 0, 'f'},
279
280       {"annotate", required_argument, 0, OPT_ANNOTATE},
281       {"help", no_argument, &print_help, 1},
282       {"se", required_argument, 0, OPT_SE},
283       {"symbols", required_argument, 0, 's'},
284       {"s", required_argument, 0, 's'},
285       {"exec", required_argument, 0, 'e'},
286       {"e", required_argument, 0, 'e'},
287       {"core", required_argument, 0, 'c'},
288       {"c", required_argument, 0, 'c'},
289       {"pid", required_argument, 0, 'p'},
290       {"p", required_argument, 0, 'p'},
291       {"command", required_argument, 0, 'x'},
292       {"version", no_argument, &print_version, 1},
293       {"x", required_argument, 0, 'x'},
294 #ifdef GDBTK
295       {"tclcommand", required_argument, 0, 'z'},
296       {"enable-external-editor", no_argument, 0, 'y'},
297       {"editor-command", required_argument, 0, 'w'},
298 #endif
299       {"ui", required_argument, 0, 'i'},
300       {"interpreter", required_argument, 0, 'i'},
301       {"i", required_argument, 0, 'i'},
302       {"directory", required_argument, 0, 'd'},
303       {"d", required_argument, 0, 'd'},
304       {"cd", required_argument, 0, OPT_CD},
305       {"tty", required_argument, 0, 't'},
306       {"baud", required_argument, 0, 'b'},
307       {"b", required_argument, 0, 'b'},
308       {"nw", no_argument, NULL, OPT_NOWINDOWS},
309       {"nowindows", no_argument, NULL, OPT_NOWINDOWS},
310       {"w", no_argument, NULL, OPT_WINDOWS},
311       {"windows", no_argument, NULL, OPT_WINDOWS},
312       {"statistics", no_argument, 0, OPT_STATISTICS},
313       {"write", no_argument, &write_files, 1},
314       {"args", no_argument, &set_args, 1},
315       {0, no_argument, 0, 0}
316     };
317
318     while (1)
319       {
320         int option_index;
321
322         c = getopt_long_only (argc, argv, "",
323                               long_options, &option_index);
324         if (c == EOF || set_args)
325           break;
326
327         /* Long option that takes an argument.  */
328         if (c == 0 && long_options[option_index].flag == 0)
329           c = long_options[option_index].val;
330
331         switch (c)
332           {
333           case 0:
334             /* Long option that just sets a flag.  */
335             break;
336           case OPT_SE:
337             symarg = optarg;
338             execarg = optarg;
339             break;
340           case OPT_CD:
341             cdarg = optarg;
342             break;
343           case OPT_ANNOTATE:
344             /* FIXME: what if the syntax is wrong (e.g. not digits)?  */
345             annotation_level = atoi (optarg);
346             break;
347           case OPT_STATISTICS:
348             /* Enable the display of both time and space usage.  */
349             display_time = 1;
350             display_space = 1;
351             break;
352           case OPT_TUI:
353             /* --tui is equivalent to -i=tui.  */
354             xfree (interpreter_p);
355             interpreter_p = xstrdup ("tui");
356             break;
357           case OPT_WINDOWS:
358             /* FIXME: cagney/2003-03-01: Not sure if this option is
359                actually useful, and if it is, what it should do.  */
360             use_windows = 1;
361             break;
362           case OPT_NOWINDOWS:
363             /* -nw is equivalent to -i=console.  */
364             xfree (interpreter_p);
365             interpreter_p = xstrdup (INTERP_CONSOLE);
366             use_windows = 0;
367             break;
368           case 'f':
369             annotation_level = 1;
370 /* We have probably been invoked from emacs.  Disable window interface.  */
371             use_windows = 0;
372             break;
373           case 's':
374             symarg = optarg;
375             break;
376           case 'e':
377             execarg = optarg;
378             break;
379           case 'c':
380             corearg = optarg;
381             break;
382           case 'p':
383             /* "corearg" is shared by "--core" and "--pid" */
384             corearg = optarg;
385             break;
386           case 'x':
387             cmdarg[ncmd++] = optarg;
388             if (ncmd >= cmdsize)
389               {
390                 cmdsize *= 2;
391                 cmdarg = (char **) xrealloc ((char *) cmdarg,
392                                              cmdsize * sizeof (*cmdarg));
393               }
394             break;
395 #ifdef GDBTK
396           case 'z':
397             {
398 extern int gdbtk_test (char *);
399               if (!gdbtk_test (optarg))
400                 {
401                   fprintf_unfiltered (gdb_stderr, _("%s: unable to load tclcommand file \"%s\""),
402                                       argv[0], optarg);
403                   exit (1);
404                 }
405               break;
406             }
407           case 'y':
408             /* Backwards compatibility only.  */
409             break;
410           case 'w':
411             {
412               external_editor_command = xstrdup (optarg);
413               break;
414             }
415 #endif /* GDBTK */
416           case 'i':
417             xfree (interpreter_p);
418             interpreter_p = xstrdup (optarg);
419             break;
420           case 'd':
421             dirarg[ndir++] = optarg;
422             if (ndir >= dirsize)
423               {
424                 dirsize *= 2;
425                 dirarg = (char **) xrealloc ((char *) dirarg,
426                                              dirsize * sizeof (*dirarg));
427               }
428             break;
429           case 't':
430             ttyarg = optarg;
431             break;
432           case 'q':
433             quiet = 1;
434             break;
435           case 'b':
436             {
437               int i;
438               char *p;
439
440               i = strtol (optarg, &p, 0);
441               if (i == 0 && p == optarg)
442
443                 /* Don't use *_filtered or warning() (which relies on
444                    current_target) until after initialize_all_files(). */
445
446                 fprintf_unfiltered
447                   (gdb_stderr,
448                    _("warning: could not set baud rate to `%s'.\n"), optarg);
449               else
450                 baud_rate = i;
451             }
452             break;
453           case 'l':
454             {
455               int i;
456               char *p;
457
458               i = strtol (optarg, &p, 0);
459               if (i == 0 && p == optarg)
460
461                 /* Don't use *_filtered or warning() (which relies on
462                    current_target) until after initialize_all_files(). */
463
464                 fprintf_unfiltered
465                   (gdb_stderr,
466                  _("warning: could not set timeout limit to `%s'.\n"), optarg);
467               else
468                 remote_timeout = i;
469             }
470             break;
471
472           case '?':
473             fprintf_unfiltered (gdb_stderr,
474                         _("Use `%s --help' for a complete list of options.\n"),
475                                 argv[0]);
476             exit (1);
477           }
478       }
479
480     /* If --help or --version, disable window interface.  */
481     if (print_help || print_version)
482       {
483         use_windows = 0;
484       }
485
486     if (set_args)
487       {
488         /* The remaining options are the command-line options for the
489            inferior.  The first one is the sym/exec file, and the rest
490            are arguments.  */
491         if (optind >= argc)
492           {
493             fprintf_unfiltered (gdb_stderr,
494                                 _("%s: `--args' specified but no program specified\n"),
495                                 argv[0]);
496             exit (1);
497           }
498         symarg = argv[optind];
499         execarg = argv[optind];
500         ++optind;
501         set_inferior_args_vector (argc - optind, &argv[optind]);
502       }
503     else
504       {
505         /* OK, that's all the options.  The other arguments are filenames.  */
506         count = 0;
507         for (; optind < argc; optind++)
508           switch (++count)
509             {
510             case 1:
511               symarg = argv[optind];
512               execarg = argv[optind];
513               break;
514             case 2:
515               /* The documentation says this can be a "ProcID" as well. 
516                  We will try it as both a corefile and a pid.  */
517               corearg = argv[optind];
518               break;
519             case 3:
520               fprintf_unfiltered (gdb_stderr,
521                                   _("Excess command line arguments ignored. (%s%s)\n"),
522                                   argv[optind], (optind == argc - 1) ? "" : " ...");
523               break;
524             }
525       }
526     if (batch)
527       quiet = 1;
528   }
529
530   /* Initialize all files.  Give the interpreter a chance to take
531      control of the console via the init_ui_hook()) */
532   gdb_init (argv[0]);
533
534   /* Do these (and anything which might call wrap_here or *_filtered)
535      after initialize_all_files() but before the interpreter has been
536      installed.  Otherwize the help/version messages will be eaten by
537      the interpreter's output handler.  */
538
539   if (print_version)
540     {
541       print_gdb_version (gdb_stdout);
542       wrap_here ("");
543       printf_filtered ("\n");
544       exit (0);
545     }
546
547   if (print_help)
548     {
549       print_gdb_help (gdb_stdout);
550       fputs_unfiltered ("\n", gdb_stdout);
551       exit (0);
552     }
553
554   /* FIXME: cagney/2003-02-03: The big hack (part 1 of 2) that lets
555      GDB retain the old MI1 interpreter startup behavior.  Output the
556      copyright message before the interpreter is installed.  That way
557      it isn't encapsulated in MI output.  */
558   if (!quiet && strcmp (interpreter_p, INTERP_MI1) == 0)
559     {
560       /* Print all the junk at the top, with trailing "..." if we are about
561          to read a symbol file (possibly slowly).  */
562       print_gdb_version (gdb_stdout);
563       if (symarg)
564         printf_filtered ("..");
565       wrap_here ("");
566       gdb_flush (gdb_stdout);   /* Force to screen during slow operations */
567     }
568
569
570   /* Install the default UI.  All the interpreters should have had a
571      look at things by now.  Initialize the default interpreter. */
572
573   {
574     /* Find it.  */
575     struct interp *interp = interp_lookup (interpreter_p);
576     if (interp == NULL)
577       error ("Interpreter `%s' unrecognized", interpreter_p);
578     /* Install it.  */
579     if (!interp_set (interp))
580       {
581         fprintf_unfiltered (gdb_stderr,
582                             "Interpreter `%s' failed to initialize.\n",
583                             interpreter_p);
584         exit (1);
585       }
586   }
587
588   /* FIXME: cagney/2003-02-03: The big hack (part 2 of 2) that lets
589      GDB retain the old MI1 interpreter startup behavior.  Output the
590      copyright message after the interpreter is installed when it is
591      any sane interpreter.  */
592   if (!quiet && !current_interp_named_p (INTERP_MI1))
593     {
594       /* Print all the junk at the top, with trailing "..." if we are about
595          to read a symbol file (possibly slowly).  */
596       print_gdb_version (gdb_stdout);
597       if (symarg)
598         printf_filtered ("..");
599       wrap_here ("");
600       gdb_flush (gdb_stdout);   /* Force to screen during slow operations */
601     }
602
603   error_pre_print = "\n\n";
604   quit_pre_print = error_pre_print;
605
606   /* We may get more than one warning, don't double space all of them... */
607   warning_pre_print = _("\nwarning: ");
608
609   /* Read and execute $HOME/.gdbinit file, if it exists.  This is done
610      *before* all the command line arguments are processed; it sets
611      global parameters, which are independent of what file you are
612      debugging or what directory you are in.  */
613   homedir = getenv ("HOME");
614   if (homedir)
615     {
616       homeinit = (char *) alloca (strlen (homedir) +
617                                   strlen (gdbinit) + 10);
618       strcpy (homeinit, homedir);
619       strcat (homeinit, "/");
620       strcat (homeinit, gdbinit);
621
622       if (!inhibit_gdbinit)
623         {
624           catch_command_errors (source_command, homeinit, 0, RETURN_MASK_ALL);
625         }
626
627       /* Do stats; no need to do them elsewhere since we'll only
628          need them if homedir is set.  Make sure that they are
629          zero in case one of them fails (this guarantees that they
630          won't match if either exists).  */
631
632       memset (&homebuf, 0, sizeof (struct stat));
633       memset (&cwdbuf, 0, sizeof (struct stat));
634
635       stat (homeinit, &homebuf);
636       stat (gdbinit, &cwdbuf);  /* We'll only need this if
637                                    homedir was set.  */
638     }
639
640   /* Now perform all the actions indicated by the arguments.  */
641   if (cdarg != NULL)
642     {
643       catch_command_errors (cd_command, cdarg, 0, RETURN_MASK_ALL);
644     }
645
646   for (i = 0; i < ndir; i++)
647     catch_command_errors (directory_command, dirarg[i], 0, RETURN_MASK_ALL);
648   xfree (dirarg);
649
650   if (execarg != NULL
651       && symarg != NULL
652       && strcmp (execarg, symarg) == 0)
653     {
654       /* The exec file and the symbol-file are the same.  If we can't
655          open it, better only print one error message.
656          catch_command_errors returns non-zero on success! */
657       if (catch_command_errors (exec_file_attach, execarg, !batch, RETURN_MASK_ALL))
658         catch_command_errors (symbol_file_add_main, symarg, 0, RETURN_MASK_ALL);
659     }
660   else
661     {
662       if (execarg != NULL)
663         catch_command_errors (exec_file_attach, execarg, !batch, RETURN_MASK_ALL);
664       if (symarg != NULL)
665         catch_command_errors (symbol_file_add_main, symarg, 0, RETURN_MASK_ALL);
666     }
667
668   /* After the symbol file has been read, print a newline to get us
669      beyond the copyright line...  But errors should still set off
670      the error message with a (single) blank line.  */
671   if (!quiet)
672     printf_filtered ("\n");
673   error_pre_print = "\n";
674   quit_pre_print = error_pre_print;
675   warning_pre_print = _("\nwarning: ");
676
677   if (corearg != NULL)
678     {
679       /* corearg may be either a corefile or a pid.
680          If its first character is a digit, try attach first
681          and then corefile.  Otherwise try corefile first. */
682
683       if (isdigit (corearg[0]))
684         {
685           if (catch_command_errors (attach_command, corearg, 
686                                     !batch, RETURN_MASK_ALL) == 0)
687             catch_command_errors (core_file_command, corearg, 
688                                   !batch, RETURN_MASK_ALL);
689         }
690       else /* Can't be a pid, better be a corefile. */
691         catch_command_errors (core_file_command, corearg, 
692                               !batch, RETURN_MASK_ALL);
693     }
694
695   if (ttyarg != NULL)
696     catch_command_errors (tty_command, ttyarg, !batch, RETURN_MASK_ALL);
697
698   /* Error messages should no longer be distinguished with extra output. */
699   error_pre_print = NULL;
700   quit_pre_print = NULL;
701   warning_pre_print = _("warning: ");
702
703   /* Read the .gdbinit file in the current directory, *if* it isn't
704      the same as the $HOME/.gdbinit file (it should exist, also).  */
705
706   if (!homedir
707       || memcmp ((char *) &homebuf, (char *) &cwdbuf, sizeof (struct stat)))
708     if (!inhibit_gdbinit)
709       {
710         catch_command_errors (source_command, gdbinit, 0, RETURN_MASK_ALL);
711       }
712
713   for (i = 0; i < ncmd; i++)
714     {
715 #if 0
716       /* NOTE: cagney/1999-11-03: SET_TOP_LEVEL() was a macro that
717          expanded into a call to setjmp().  */
718       if (!SET_TOP_LEVEL ()) /* NB: This is #if 0'd out */
719         {
720           /* NOTE: I am commenting this out, because it is not clear
721              where this feature is used. It is very old and
722              undocumented. ezannoni: 1999-05-04 */
723 #if 0
724           if (cmdarg[i][0] == '-' && cmdarg[i][1] == '\0')
725             read_command_file (stdin);
726           else
727 #endif
728             source_command (cmdarg[i], !batch);
729           do_cleanups (ALL_CLEANUPS);
730         }
731 #endif
732       catch_command_errors (source_command, cmdarg[i], !batch, RETURN_MASK_ALL);
733     }
734   xfree (cmdarg);
735
736   /* Read in the old history after all the command files have been read. */
737   init_history ();
738
739   if (batch)
740     {
741       /* We have hit the end of the batch file.  */
742       exit (0);
743     }
744
745   /* Do any host- or target-specific hacks.  This is used for i960 targets
746      to force the user to set a nindy target and spec its parameters.  */
747
748 #ifdef BEFORE_MAIN_LOOP_HOOK
749   BEFORE_MAIN_LOOP_HOOK;
750 #endif
751
752   END_PROGRESS (argv[0]);
753
754   /* Show time and/or space usage.  */
755
756   if (display_time)
757     {
758       long init_time = get_run_time () - time_at_startup;
759
760       printf_unfiltered (_("Startup time: %ld.%06ld\n"),
761                          init_time / 1000000, init_time % 1000000);
762     }
763
764   if (display_space)
765     {
766 #ifdef HAVE_SBRK
767       extern char **environ;
768       char *lim = (char *) sbrk (0);
769
770       printf_unfiltered (_("Startup size: data size %ld\n"),
771                          (long) (lim - (char *) &environ));
772 #endif
773     }
774
775 #if 0
776   /* FIXME: cagney/1999-11-06: The original main loop was like: */
777   while (1)
778     {
779       if (!SET_TOP_LEVEL ())
780         {
781           do_cleanups (ALL_CLEANUPS);   /* Do complete cleanup */
782           /* GUIs generally have their own command loop, mainloop, or whatever.
783              This is a good place to gain control because many error
784              conditions will end up here via longjmp(). */
785           if (command_loop_hook)
786             command_loop_hook ();
787           else
788             command_loop ();
789           quit_command ((char *) 0, instream == stdin);
790         }
791     }
792   /* NOTE: If the command_loop() returned normally, the loop would
793      attempt to exit by calling the function quit_command().  That
794      function would either call exit() or throw an error returning
795      control to SET_TOP_LEVEL. */
796   /* NOTE: The function do_cleanups() was called once each time round
797      the loop.  The usefulness of the call isn't clear.  If an error
798      was thrown, everything would have already been cleaned up.  If
799      command_loop() returned normally and quit_command() was called,
800      either exit() or error() (again cleaning up) would be called. */
801 #endif
802   /* NOTE: cagney/1999-11-07: There is probably no reason for not
803      moving this loop and the code found in captured_command_loop()
804      into the command_loop() proper.  The main thing holding back that
805      change - SET_TOP_LEVEL() - has been eliminated. */
806   while (1)
807     {
808       catch_errors (captured_command_loop, 0, "", RETURN_MASK_ALL);
809     }
810   /* No exit -- exit is through quit_command.  */
811 }
812
813 int
814 gdb_main (struct captured_main_args *args)
815 {
816   use_windows = args->use_windows;
817   catch_errors (captured_main, args, "", RETURN_MASK_ALL);
818   /* The only way to end up here is by an error (normal exit is
819      handled by quit_force()), hence always return an error status.  */
820   return 1;
821 }
822
823
824 /* Don't use *_filtered for printing help.  We don't want to prompt
825    for continue no matter how small the screen or how much we're going
826    to print.  */
827
828 static void
829 print_gdb_help (struct ui_file *stream)
830 {
831   fputs_unfiltered (_("\
832 This is the GNU debugger.  Usage:\n\n\
833     gdb [options] [executable-file [core-file or process-id]]\n\
834     gdb [options] --args executable-file [inferior-arguments ...]\n\n\
835 Options:\n\n\
836 "), stream);
837   fputs_unfiltered (_("\
838   --args             Arguments after executable-file are passed to inferior\n\
839 "), stream);
840   fputs_unfiltered (_("\
841   --[no]async        Enable (disable) asynchronous version of CLI\n\
842 "), stream);
843   fputs_unfiltered (_("\
844   -b BAUDRATE        Set serial port baud rate used for remote debugging.\n\
845   --batch            Exit after processing options.\n\
846   --cd=DIR           Change current directory to DIR.\n\
847   --command=FILE     Execute GDB commands from FILE.\n\
848   --core=COREFILE    Analyze the core dump COREFILE.\n\
849   --pid=PID          Attach to running process PID.\n\
850 "), stream);
851   fputs_unfiltered (_("\
852   --dbx              DBX compatibility mode.\n\
853   --directory=DIR    Search for source files in DIR.\n\
854   --epoch            Output information used by epoch emacs-GDB interface.\n\
855   --exec=EXECFILE    Use EXECFILE as the executable.\n\
856   --fullname         Output information used by emacs-GDB interface.\n\
857   --help             Print this message.\n\
858 "), stream);
859   fputs_unfiltered (_("\
860   --interpreter=INTERP\n\
861                      Select a specific interpreter / user interface\n\
862 "), stream);
863   fputs_unfiltered (_("\
864   --mapped           Use mapped symbol files if supported on this system.\n\
865   --nw               Do not use a window interface.\n\
866   --nx               Do not read "), stream);
867   fputs_unfiltered (gdbinit, stream);
868   fputs_unfiltered (_(" file.\n\
869   --quiet            Do not print version number on startup.\n\
870   --readnow          Fully read symbol files on first access.\n\
871 "), stream);
872   fputs_unfiltered (_("\
873   --se=FILE          Use FILE as symbol file and executable file.\n\
874   --symbols=SYMFILE  Read symbols from SYMFILE.\n\
875   --tty=TTY          Use TTY for input/output by the program being debugged.\n\
876 "), stream);
877 #if defined(TUI)
878   fputs_unfiltered (_("\
879   --tui              Use a terminal user interface.\n\
880 "), stream);
881 #endif
882   fputs_unfiltered (_("\
883   --version          Print version information and then exit.\n\
884   -w                 Use a window interface.\n\
885   --write            Set writing into executable and core files.\n\
886   --xdb              XDB compatibility mode.\n\
887 "), stream);
888   fputs_unfiltered (_("\n\
889 For more information, type \"help\" from within GDB, or consult the\n\
890 GDB manual (available as on-line info or a printed manual).\n\
891 Report bugs to \"bug-gdb@gnu.org\".\
892 "), stream);
893 }