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