2006-07-21 Andrew Stubbs <andrew.stubbs@st.com>
[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       gdb_flush (gdb_stdout);   /* Force to screen during slow operations */
593     }
594
595
596   /* Install the default UI.  All the interpreters should have had a
597      look at things by now.  Initialize the default interpreter. */
598
599   {
600     /* Find it.  */
601     struct interp *interp = interp_lookup (interpreter_p);
602     if (interp == NULL)
603       error (_("Interpreter `%s' unrecognized"), interpreter_p);
604     /* Install it.  */
605     if (!interp_set (interp))
606       {
607         fprintf_unfiltered (gdb_stderr,
608                             "Interpreter `%s' failed to initialize.\n",
609                             interpreter_p);
610         exit (1);
611       }
612   }
613
614   /* FIXME: cagney/2003-02-03: The big hack (part 2 of 2) that lets
615      GDB retain the old MI1 interpreter startup behavior.  Output the
616      copyright message after the interpreter is installed when it is
617      any sane interpreter.  */
618   if (!quiet && !current_interp_named_p (INTERP_MI1))
619     {
620       /* Print all the junk at the top, with trailing "..." if we are about
621          to read a symbol file (possibly slowly).  */
622       print_gdb_version (gdb_stdout);
623       if (symarg)
624         printf_filtered ("..");
625       wrap_here ("");
626       gdb_flush (gdb_stdout);   /* Force to screen during slow operations */
627     }
628
629   error_pre_print = "\n\n";
630   quit_pre_print = error_pre_print;
631
632   /* We may get more than one warning, don't double space all of them... */
633   warning_pre_print = _("\nwarning: ");
634
635   /* Read and execute $HOME/.gdbinit file, if it exists.  This is done
636      *before* all the command line arguments are processed; it sets
637      global parameters, which are independent of what file you are
638      debugging or what directory you are in.  */
639   homedir = getenv ("HOME");
640   if (homedir)
641     {
642       char *homeinit = xstrprintf ("%s/%s", homedir, gdbinit);
643
644       if (!inhibit_gdbinit)
645         {
646           catch_command_errors (source_script, homeinit, 0, RETURN_MASK_ALL);
647         }
648
649       /* Do stats; no need to do them elsewhere since we'll only
650          need them if homedir is set.  Make sure that they are
651          zero in case one of them fails (this guarantees that they
652          won't match if either exists).  */
653
654       memset (&homebuf, 0, sizeof (struct stat));
655       memset (&cwdbuf, 0, sizeof (struct stat));
656
657       stat (homeinit, &homebuf);
658       stat (gdbinit, &cwdbuf);  /* We'll only need this if
659                                    homedir was set.  */
660       xfree (homeinit);
661     }
662
663   /* Now perform all the actions indicated by the arguments.  */
664   if (cdarg != NULL)
665     {
666       catch_command_errors (cd_command, cdarg, 0, RETURN_MASK_ALL);
667     }
668
669   for (i = 0; i < ndir; i++)
670     catch_command_errors (directory_switch, dirarg[i], 0, RETURN_MASK_ALL);
671   xfree (dirarg);
672
673   if (execarg != NULL
674       && symarg != NULL
675       && strcmp (execarg, symarg) == 0)
676     {
677       /* The exec file and the symbol-file are the same.  If we can't
678          open it, better only print one error message.
679          catch_command_errors returns non-zero on success! */
680       if (catch_command_errors (exec_file_attach, execarg, !batch, RETURN_MASK_ALL))
681         catch_command_errors (symbol_file_add_main, symarg, 0, RETURN_MASK_ALL);
682     }
683   else
684     {
685       if (execarg != NULL)
686         catch_command_errors (exec_file_attach, execarg, !batch, RETURN_MASK_ALL);
687       if (symarg != NULL)
688         catch_command_errors (symbol_file_add_main, symarg, 0, RETURN_MASK_ALL);
689     }
690
691   /* After the symbol file has been read, print a newline to get us
692      beyond the copyright line...  But errors should still set off
693      the error message with a (single) blank line.  */
694   if (!quiet)
695     printf_filtered ("\n");
696   error_pre_print = "\n";
697   quit_pre_print = error_pre_print;
698   warning_pre_print = _("\nwarning: ");
699
700   if (corearg != NULL)
701     {
702       /* corearg may be either a corefile or a pid.
703          If its first character is a digit, try attach first
704          and then corefile.  Otherwise try corefile first. */
705
706       if (isdigit (corearg[0]))
707         {
708           if (catch_command_errors (attach_command, corearg, 
709                                     !batch, RETURN_MASK_ALL) == 0)
710             catch_command_errors (core_file_command, corearg, 
711                                   !batch, RETURN_MASK_ALL);
712         }
713       else /* Can't be a pid, better be a corefile. */
714         catch_command_errors (core_file_command, corearg, 
715                               !batch, RETURN_MASK_ALL);
716     }
717
718   if (ttyarg != NULL)
719     catch_command_errors (tty_command, ttyarg, !batch, RETURN_MASK_ALL);
720
721   /* Error messages should no longer be distinguished with extra output. */
722   error_pre_print = NULL;
723   quit_pre_print = NULL;
724   warning_pre_print = _("warning: ");
725
726   /* Read the .gdbinit file in the current directory, *if* it isn't
727      the same as the $HOME/.gdbinit file (it should exist, also).  */
728
729   if (!homedir
730       || memcmp ((char *) &homebuf, (char *) &cwdbuf, sizeof (struct stat)))
731     if (!inhibit_gdbinit)
732       {
733         catch_command_errors (source_script, gdbinit, 0, RETURN_MASK_ALL);
734       }
735
736   for (i = 0; i < ncmd; i++)
737     {
738 #if 0
739       /* NOTE: cagney/1999-11-03: SET_TOP_LEVEL() was a macro that
740          expanded into a call to setjmp().  */
741       if (!SET_TOP_LEVEL ()) /* NB: This is #if 0'd out */
742         {
743           /* NOTE: I am commenting this out, because it is not clear
744              where this feature is used. It is very old and
745              undocumented. ezannoni: 1999-05-04 */
746 #if 0
747           if (cmdarg[i][0] == '-' && cmdarg[i][1] == '\0')
748             read_command_file (stdin);
749           else
750 #endif
751             source_script (cmdarg[i], !batch);
752           do_cleanups (ALL_CLEANUPS);
753         }
754 #endif
755       if (cmdarg[i].type == CMDARG_FILE)
756         catch_command_errors (source_script, cmdarg[i].string,
757                               !batch, RETURN_MASK_ALL);
758       else  /* cmdarg[i].type == CMDARG_COMMAND */
759         catch_command_errors (execute_command, cmdarg[i].string,
760                               !batch, RETURN_MASK_ALL);
761     }
762   xfree (cmdarg);
763
764   /* Read in the old history after all the command files have been read. */
765   init_history ();
766
767   if (batch)
768     {
769       /* We have hit the end of the batch file.  */
770       quit_force (NULL, 0);
771     }
772
773   /* Do any host- or target-specific hacks.  This is used for i960 targets
774      to force the user to set a nindy target and spec its parameters.  */
775
776 #ifdef BEFORE_MAIN_LOOP_HOOK
777   BEFORE_MAIN_LOOP_HOOK;
778 #endif
779
780   /* Show time and/or space usage.  */
781
782   if (display_time)
783     {
784       long init_time = get_run_time () - time_at_startup;
785
786       printf_unfiltered (_("Startup time: %ld.%06ld\n"),
787                          init_time / 1000000, init_time % 1000000);
788     }
789
790   if (display_space)
791     {
792 #ifdef HAVE_SBRK
793       extern char **environ;
794       char *lim = (char *) sbrk (0);
795
796       printf_unfiltered (_("Startup size: data size %ld\n"),
797                          (long) (lim - (char *) &environ));
798 #endif
799     }
800
801 #if 0
802   /* FIXME: cagney/1999-11-06: The original main loop was like: */
803   while (1)
804     {
805       if (!SET_TOP_LEVEL ())
806         {
807           do_cleanups (ALL_CLEANUPS);   /* Do complete cleanup */
808           /* GUIs generally have their own command loop, mainloop, or
809              whatever.  This is a good place to gain control because
810              many error conditions will end up here via longjmp().  */
811           if (deprecated_command_loop_hook)
812             deprecated_command_loop_hook ();
813           else
814             deprecated_command_loop ();
815           quit_command ((char *) 0, instream == stdin);
816         }
817     }
818   /* NOTE: If the command_loop() returned normally, the loop would
819      attempt to exit by calling the function quit_command().  That
820      function would either call exit() or throw an error returning
821      control to SET_TOP_LEVEL. */
822   /* NOTE: The function do_cleanups() was called once each time round
823      the loop.  The usefulness of the call isn't clear.  If an error
824      was thrown, everything would have already been cleaned up.  If
825      command_loop() returned normally and quit_command() was called,
826      either exit() or error() (again cleaning up) would be called. */
827 #endif
828   /* NOTE: cagney/1999-11-07: There is probably no reason for not
829      moving this loop and the code found in captured_command_loop()
830      into the command_loop() proper.  The main thing holding back that
831      change - SET_TOP_LEVEL() - has been eliminated. */
832   while (1)
833     {
834       catch_errors (captured_command_loop, 0, "", RETURN_MASK_ALL);
835     }
836   /* No exit -- exit is through quit_command.  */
837 }
838
839 int
840 gdb_main (struct captured_main_args *args)
841 {
842   use_windows = args->use_windows;
843   catch_errors (captured_main, args, "", RETURN_MASK_ALL);
844   /* The only way to end up here is by an error (normal exit is
845      handled by quit_force()), hence always return an error status.  */
846   return 1;
847 }
848
849
850 /* Don't use *_filtered for printing help.  We don't want to prompt
851    for continue no matter how small the screen or how much we're going
852    to print.  */
853
854 static void
855 print_gdb_help (struct ui_file *stream)
856 {
857   fputs_unfiltered (_("\
858 This is the GNU debugger.  Usage:\n\n\
859     gdb [options] [executable-file [core-file or process-id]]\n\
860     gdb [options] --args executable-file [inferior-arguments ...]\n\n\
861 Options:\n\n\
862 "), stream);
863   fputs_unfiltered (_("\
864   --args             Arguments after executable-file are passed to inferior\n\
865 "), stream);
866   fputs_unfiltered (_("\
867   -b BAUDRATE        Set serial port baud rate used for remote debugging.\n\
868   --batch            Exit after processing options.\n\
869   --batch-silent     As for --batch, but suppress all gdb stdout output.\n\
870   --return-child-result\n\
871                      GDB exit code will be the child's exit code.\n\
872   --cd=DIR           Change current directory to DIR.\n\
873   --command=FILE, -x Execute GDB commands from FILE.\n\
874   --eval-command=COMMAND, -ex\n\
875                      Execute a single GDB command.\n\
876                      May be used multiple times and in conjunction\n\
877                      with --command.\n\
878   --core=COREFILE    Analyze the core dump COREFILE.\n\
879   --pid=PID          Attach to running process PID.\n\
880 "), stream);
881   fputs_unfiltered (_("\
882   --dbx              DBX compatibility mode.\n\
883   --directory=DIR    Search for source files in DIR.\n\
884   --epoch            Output information used by epoch emacs-GDB interface.\n\
885   --exec=EXECFILE    Use EXECFILE as the executable.\n\
886   --fullname         Output information used by emacs-GDB interface.\n\
887   --help             Print this message.\n\
888 "), stream);
889   fputs_unfiltered (_("\
890   --interpreter=INTERP\n\
891                      Select a specific interpreter / user interface\n\
892 "), stream);
893   fputs_unfiltered (_("\
894   -l TIMEOUT         Set timeout in seconds for remote debugging.\n\
895   --nw               Do not use a window interface.\n\
896   --nx               Do not read "), stream);
897   fputs_unfiltered (gdbinit, stream);
898   fputs_unfiltered (_(" file.\n\
899   --quiet            Do not print version number on startup.\n\
900   --readnow          Fully read symbol files on first access.\n\
901 "), stream);
902   fputs_unfiltered (_("\
903   --se=FILE          Use FILE as symbol file and executable file.\n\
904   --symbols=SYMFILE  Read symbols from SYMFILE.\n\
905   --tty=TTY          Use TTY for input/output by the program being debugged.\n\
906 "), stream);
907 #if defined(TUI)
908   fputs_unfiltered (_("\
909   --tui              Use a terminal user interface.\n\
910 "), stream);
911 #endif
912   fputs_unfiltered (_("\
913   --version          Print version information and then exit.\n\
914   -w                 Use a window interface.\n\
915   --write            Set writing into executable and core files.\n\
916   --xdb              XDB compatibility mode.\n\
917 "), stream);
918   fputs_unfiltered (_("\n\
919 For more information, type \"help\" from within GDB, or consult the\n\
920 GDB manual (available as on-line info or a printed manual).\n\
921 Report bugs to \"bug-gdb@gnu.org\".\
922 "), stream);
923 }