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