xref: /dflybsd-src/contrib/gdb-7/gdb/main.c (revision ef5ccd6c41237a870dd7242b72b006d6bd42cd07)
1 /* Top level stuff for GDB, the GNU debugger.
2 
3    Copyright (C) 1986-2013 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #include "defs.h"
21 #include "top.h"
22 #include "target.h"
23 #include "inferior.h"
24 #include "symfile.h"
25 #include "gdbcore.h"
26 
27 #include "exceptions.h"
28 #include "getopt.h"
29 
30 #include <sys/types.h>
31 #include "gdb_stat.h"
32 #include <ctype.h>
33 
34 #include "gdb_string.h"
35 #include "event-loop.h"
36 #include "ui-out.h"
37 
38 #include "interps.h"
39 #include "main.h"
40 #include "source.h"
41 #include "cli/cli-cmds.h"
42 #include "python/python.h"
43 #include "objfiles.h"
44 #include "auto-load.h"
45 
46 #include "filenames.h"
47 
48 /* The selected interpreter.  This will be used as a set command
49    variable, so it should always be malloc'ed - since
50    do_setshow_command will free it.  */
51 char *interpreter_p;
52 
53 /* Whether xdb commands will be handled.  */
54 int xdb_commands = 0;
55 
56 /* Whether dbx commands will be handled.  */
57 int dbx_commands = 0;
58 
59 /* System root path, used to find libraries etc.  */
60 char *gdb_sysroot = 0;
61 
62 /* GDB datadir, used to store data files.  */
63 char *gdb_datadir = 0;
64 
65 /* Non-zero if GDB_DATADIR was provided on the command line.
66    This doesn't track whether data-directory is set later from the
67    command line, but we don't reread system.gdbinit when that happens.  */
68 static int gdb_datadir_provided = 0;
69 
70 /* If gdb was configured with --with-python=/path,
71    the possibly relocated path to python's lib directory.  */
72 char *python_libdir = 0;
73 
74 struct ui_file *gdb_stdout;
75 struct ui_file *gdb_stderr;
76 struct ui_file *gdb_stdlog;
77 struct ui_file *gdb_stdin;
78 /* Target IO streams.  */
79 struct ui_file *gdb_stdtargin;
80 struct ui_file *gdb_stdtarg;
81 struct ui_file *gdb_stdtargerr;
82 
83 /* True if --batch or --batch-silent was seen.  */
84 int batch_flag = 0;
85 
86 /* Support for the --batch-silent option.  */
87 int batch_silent = 0;
88 
89 /* Support for --return-child-result option.
90    Set the default to -1 to return error in the case
91    that the program does not run or does not complete.  */
92 int return_child_result = 0;
93 int return_child_result_value = -1;
94 
95 
96 /* GDB as it has been invoked from the command line (i.e. argv[0]).  */
97 static char *gdb_program_name;
98 
99 static void print_gdb_help (struct ui_file *);
100 
101 /* Relocate a file or directory.  PROGNAME is the name by which gdb
102    was invoked (i.e., argv[0]).  INITIAL is the default value for the
103    file or directory.  FLAG is true if the value is relocatable, false
104    otherwise.  Returns a newly allocated string; this may return NULL
105    under the same conditions as make_relative_prefix.  */
106 
107 static char *
108 relocate_path (const char *progname, const char *initial, int flag)
109 {
110   if (flag)
111     return make_relative_prefix (progname, BINDIR, initial);
112   return xstrdup (initial);
113 }
114 
115 /* Like relocate_path, but specifically checks for a directory.
116    INITIAL is relocated according to the rules of relocate_path.  If
117    the result is a directory, it is used; otherwise, INITIAL is used.
118    The chosen directory is then canonicalized using lrealpath.  This
119    function always returns a newly-allocated string.  */
120 
121 char *
122 relocate_gdb_directory (const char *initial, int flag)
123 {
124   char *dir;
125 
126   dir = relocate_path (gdb_program_name, initial, flag);
127   if (dir)
128     {
129       struct stat s;
130 
131       if (*dir == '\0' || stat (dir, &s) != 0 || !S_ISDIR (s.st_mode))
132 	{
133 	  xfree (dir);
134 	  dir = NULL;
135 	}
136     }
137   if (!dir)
138     dir = xstrdup (initial);
139 
140   /* Canonicalize the directory.  */
141   if (*dir)
142     {
143       char *canon_sysroot = lrealpath (dir);
144 
145       if (canon_sysroot)
146 	{
147 	  xfree (dir);
148 	  dir = canon_sysroot;
149 	}
150     }
151 
152   return dir;
153 }
154 
155 /* Compute the locations of init files that GDB should source and
156    return them in SYSTEM_GDBINIT, HOME_GDBINIT, LOCAL_GDBINIT.  If
157    there is no system gdbinit (resp. home gdbinit and local gdbinit)
158    to be loaded, then SYSTEM_GDBINIT (resp. HOME_GDBINIT and
159    LOCAL_GDBINIT) is set to NULL.  */
160 static void
161 get_init_files (char **system_gdbinit,
162 		char **home_gdbinit,
163 		char **local_gdbinit)
164 {
165   static char *sysgdbinit = NULL;
166   static char *homeinit = NULL;
167   static char *localinit = NULL;
168   static int initialized = 0;
169 
170   if (!initialized)
171     {
172       struct stat homebuf, cwdbuf, s;
173       char *homedir;
174 
175       if (SYSTEM_GDBINIT[0])
176 	{
177 	  int datadir_len = strlen (GDB_DATADIR);
178 	  int sys_gdbinit_len = strlen (SYSTEM_GDBINIT);
179 	  char *relocated_sysgdbinit;
180 
181 	  /* If SYSTEM_GDBINIT lives in data-directory, and data-directory
182 	     has been provided, search for SYSTEM_GDBINIT there.  */
183 	  if (gdb_datadir_provided
184 	      && datadir_len < sys_gdbinit_len
185 	      && filename_ncmp (SYSTEM_GDBINIT, GDB_DATADIR, datadir_len) == 0
186 	      && IS_DIR_SEPARATOR (SYSTEM_GDBINIT[datadir_len]))
187 	    {
188 	      /* Append the part of SYSTEM_GDBINIT that follows GDB_DATADIR
189 		 to gdb_datadir.  */
190 	      char *tmp_sys_gdbinit = xstrdup (SYSTEM_GDBINIT + datadir_len);
191 	      char *p;
192 
193 	      for (p = tmp_sys_gdbinit; IS_DIR_SEPARATOR (*p); ++p)
194 		continue;
195 	      relocated_sysgdbinit = concat (gdb_datadir, SLASH_STRING, p,
196 					     NULL);
197 	      xfree (tmp_sys_gdbinit);
198 	    }
199 	  else
200 	    {
201 	      relocated_sysgdbinit = relocate_path (gdb_program_name,
202 						    SYSTEM_GDBINIT,
203 						    SYSTEM_GDBINIT_RELOCATABLE);
204 	    }
205 	  if (relocated_sysgdbinit && stat (relocated_sysgdbinit, &s) == 0)
206 	    sysgdbinit = relocated_sysgdbinit;
207 	  else
208 	    xfree (relocated_sysgdbinit);
209 	}
210 
211       homedir = getenv ("HOME");
212 
213       /* If the .gdbinit file in the current directory is the same as
214 	 the $HOME/.gdbinit file, it should not be sourced.  homebuf
215 	 and cwdbuf are used in that purpose.  Make sure that the stats
216 	 are zero in case one of them fails (this guarantees that they
217 	 won't match if either exists).  */
218 
219       memset (&homebuf, 0, sizeof (struct stat));
220       memset (&cwdbuf, 0, sizeof (struct stat));
221 
222       if (homedir)
223 	{
224 	  homeinit = xstrprintf ("%s/%s", homedir, gdbinit);
225 	  if (stat (homeinit, &homebuf) != 0)
226 	    {
227 	      xfree (homeinit);
228 	      homeinit = NULL;
229 	    }
230 	}
231 
232       if (stat (gdbinit, &cwdbuf) == 0)
233 	{
234 	  if (!homeinit
235 	      || memcmp ((char *) &homebuf, (char *) &cwdbuf,
236 			 sizeof (struct stat)))
237 	    localinit = gdbinit;
238 	}
239 
240       initialized = 1;
241     }
242 
243   *system_gdbinit = sysgdbinit;
244   *home_gdbinit = homeinit;
245   *local_gdbinit = localinit;
246 }
247 
248 /* Call command_loop.  If it happens to return, pass that through as a
249    non-zero return status.  */
250 
251 static int
252 captured_command_loop (void *data)
253 {
254   /* Top-level execution commands can be run on the background from
255      here on.  */
256   interpreter_async = 1;
257 
258   current_interp_command_loop ();
259   /* FIXME: cagney/1999-11-05: A correct command_loop() implementaton
260      would clean things up (restoring the cleanup chain) to the state
261      they were just prior to the call.  Technically, this means that
262      the do_cleanups() below is redundant.  Unfortunately, many FUNCs
263      are not that well behaved.  do_cleanups should either be replaced
264      with a do_cleanups call (to cover the problem) or an assertion
265      check to detect bad FUNCs code.  */
266   do_cleanups (all_cleanups ());
267   /* If the command_loop returned, normally (rather than threw an
268      error) we try to quit.  If the quit is aborted, catch_errors()
269      which called this catch the signal and restart the command
270      loop.  */
271   quit_command (NULL, instream == stdin);
272   return 1;
273 }
274 
275 /* Arguments of --command option and its counterpart.  */
276 typedef struct cmdarg {
277   /* Type of this option.  */
278   enum {
279     /* Option type -x.  */
280     CMDARG_FILE,
281 
282     /* Option type -ex.  */
283     CMDARG_COMMAND,
284 
285     /* Option type -ix.  */
286     CMDARG_INIT_FILE,
287 
288     /* Option type -iex.  */
289     CMDARG_INIT_COMMAND
290   } type;
291 
292   /* Value of this option - filename or the GDB command itself.  String memory
293      is not owned by this structure despite it is 'const'.  */
294   char *string;
295 } cmdarg_s;
296 
297 /* Define type VEC (cmdarg_s).  */
298 DEF_VEC_O (cmdarg_s);
299 
300 static int
301 captured_main (void *data)
302 {
303   struct captured_main_args *context = data;
304   int argc = context->argc;
305   char **argv = context->argv;
306   static int quiet = 0;
307   static int set_args = 0;
308   static int inhibit_home_gdbinit = 0;
309 
310   /* Pointers to various arguments from command line.  */
311   char *symarg = NULL;
312   char *execarg = NULL;
313   char *pidarg = NULL;
314   char *corearg = NULL;
315   char *pid_or_core_arg = NULL;
316   char *cdarg = NULL;
317   char *ttyarg = NULL;
318 
319   /* These are static so that we can take their address in an
320      initializer.  */
321   static int print_help;
322   static int print_version;
323 
324   /* Pointers to all arguments of --command option.  */
325   VEC (cmdarg_s) *cmdarg_vec = NULL;
326   struct cmdarg *cmdarg_p;
327 
328   /* Indices of all arguments of --directory option.  */
329   char **dirarg;
330   /* Allocated size.  */
331   int dirsize;
332   /* Number of elements used.  */
333   int ndir;
334 
335   /* gdb init files.  */
336   char *system_gdbinit;
337   char *home_gdbinit;
338   char *local_gdbinit;
339 
340   int i;
341   int save_auto_load;
342   struct objfile *objfile;
343 
344   struct cleanup *pre_stat_chain;
345 
346 #ifdef HAVE_SBRK
347   /* Set this before calling make_command_stats_cleanup.  */
348   lim_at_start = (char *) sbrk (0);
349 #endif
350 
351   pre_stat_chain = make_command_stats_cleanup (0);
352 
353 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
354   setlocale (LC_MESSAGES, "");
355 #endif
356 #if defined (HAVE_SETLOCALE)
357   setlocale (LC_CTYPE, "");
358 #endif
359   bindtextdomain (PACKAGE, LOCALEDIR);
360   textdomain (PACKAGE);
361 
362   bfd_init ();
363 
364   make_cleanup (VEC_cleanup (cmdarg_s), &cmdarg_vec);
365   dirsize = 1;
366   dirarg = (char **) xmalloc (dirsize * sizeof (*dirarg));
367   ndir = 0;
368 
369   clear_quit_flag ();
370   saved_command_line = (char *) xmalloc (saved_command_line_size);
371   saved_command_line[0] = '\0';
372   instream = stdin;
373 
374   gdb_stdout = stdio_fileopen (stdout);
375   gdb_stderr = stdio_fileopen (stderr);
376   gdb_stdlog = gdb_stderr;	/* for moment */
377   gdb_stdtarg = gdb_stderr;	/* for moment */
378   gdb_stdin = stdio_fileopen (stdin);
379   gdb_stdtargerr = gdb_stderr;	/* for moment */
380   gdb_stdtargin = gdb_stdin;	/* for moment */
381 
382 #ifdef __MINGW32__
383   /* On Windows, argv[0] is not necessarily set to absolute form when
384      GDB is found along PATH, without which relocation doesn't work.  */
385   gdb_program_name = windows_get_absolute_argv0 (argv[0]);
386 #else
387   gdb_program_name = xstrdup (argv[0]);
388 #endif
389 
390   if (! getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)))
391     /* Don't use *_filtered or warning() (which relies on
392        current_target) until after initialize_all_files().  */
393     fprintf_unfiltered (gdb_stderr,
394 			_("%s: warning: error finding "
395 			  "working directory: %s\n"),
396                         argv[0], safe_strerror (errno));
397 
398   current_directory = gdb_dirbuf;
399 
400   /* Set the sysroot path.  */
401   gdb_sysroot = relocate_gdb_directory (TARGET_SYSTEM_ROOT,
402 					TARGET_SYSTEM_ROOT_RELOCATABLE);
403 
404   debug_file_directory = relocate_gdb_directory (DEBUGDIR,
405 						 DEBUGDIR_RELOCATABLE);
406 
407   gdb_datadir = relocate_gdb_directory (GDB_DATADIR,
408 					GDB_DATADIR_RELOCATABLE);
409 
410 #ifdef WITH_PYTHON_PATH
411   {
412     /* For later use in helping Python find itself.  */
413     char *tmp = concat (WITH_PYTHON_PATH, SLASH_STRING, "lib", NULL);
414 
415     python_libdir = relocate_gdb_directory (tmp, PYTHON_PATH_RELOCATABLE);
416     xfree (tmp);
417   }
418 #endif
419 
420 #ifdef RELOC_SRCDIR
421   add_substitute_path_rule (RELOC_SRCDIR,
422 			    make_relative_prefix (gdb_program_name, BINDIR,
423 						  RELOC_SRCDIR));
424 #endif
425 
426   /* There will always be an interpreter.  Either the one passed into
427      this captured main, or one specified by the user at start up, or
428      the console.  Initialize the interpreter to the one requested by
429      the application.  */
430   interpreter_p = xstrdup (context->interpreter_p);
431 
432   /* Parse arguments and options.  */
433   {
434     int c;
435     /* When var field is 0, use flag field to record the equivalent
436        short option (or arbitrary numbers starting at 10 for those
437        with no equivalent).  */
438     enum {
439       OPT_SE = 10,
440       OPT_CD,
441       OPT_ANNOTATE,
442       OPT_STATISTICS,
443       OPT_TUI,
444       OPT_NOWINDOWS,
445       OPT_WINDOWS,
446       OPT_IX,
447       OPT_IEX
448     };
449     static struct option long_options[] =
450     {
451       {"tui", no_argument, 0, OPT_TUI},
452       {"xdb", no_argument, &xdb_commands, 1},
453       {"dbx", no_argument, &dbx_commands, 1},
454       {"readnow", no_argument, &readnow_symbol_files, 1},
455       {"r", no_argument, &readnow_symbol_files, 1},
456       {"quiet", no_argument, &quiet, 1},
457       {"q", no_argument, &quiet, 1},
458       {"silent", no_argument, &quiet, 1},
459       {"nh", no_argument, &inhibit_home_gdbinit, 1},
460       {"nx", no_argument, &inhibit_gdbinit, 1},
461       {"n", no_argument, &inhibit_gdbinit, 1},
462       {"batch-silent", no_argument, 0, 'B'},
463       {"batch", no_argument, &batch_flag, 1},
464 
465     /* This is a synonym for "--annotate=1".  --annotate is now
466        preferred, but keep this here for a long time because people
467        will be running emacses which use --fullname.  */
468       {"fullname", no_argument, 0, 'f'},
469       {"f", no_argument, 0, 'f'},
470 
471       {"annotate", required_argument, 0, OPT_ANNOTATE},
472       {"help", no_argument, &print_help, 1},
473       {"se", required_argument, 0, OPT_SE},
474       {"symbols", required_argument, 0, 's'},
475       {"s", required_argument, 0, 's'},
476       {"exec", required_argument, 0, 'e'},
477       {"e", required_argument, 0, 'e'},
478       {"core", required_argument, 0, 'c'},
479       {"c", required_argument, 0, 'c'},
480       {"pid", required_argument, 0, 'p'},
481       {"p", required_argument, 0, 'p'},
482       {"command", required_argument, 0, 'x'},
483       {"eval-command", required_argument, 0, 'X'},
484       {"version", no_argument, &print_version, 1},
485       {"x", required_argument, 0, 'x'},
486       {"ex", required_argument, 0, 'X'},
487       {"init-command", required_argument, 0, OPT_IX},
488       {"init-eval-command", required_argument, 0, OPT_IEX},
489       {"ix", required_argument, 0, OPT_IX},
490       {"iex", required_argument, 0, OPT_IEX},
491 #ifdef GDBTK
492       {"tclcommand", required_argument, 0, 'z'},
493       {"enable-external-editor", no_argument, 0, 'y'},
494       {"editor-command", required_argument, 0, 'w'},
495 #endif
496       {"ui", required_argument, 0, 'i'},
497       {"interpreter", required_argument, 0, 'i'},
498       {"i", required_argument, 0, 'i'},
499       {"directory", required_argument, 0, 'd'},
500       {"d", required_argument, 0, 'd'},
501       {"data-directory", required_argument, 0, 'D'},
502       {"cd", required_argument, 0, OPT_CD},
503       {"tty", required_argument, 0, 't'},
504       {"baud", required_argument, 0, 'b'},
505       {"b", required_argument, 0, 'b'},
506       {"nw", no_argument, NULL, OPT_NOWINDOWS},
507       {"nowindows", no_argument, NULL, OPT_NOWINDOWS},
508       {"w", no_argument, NULL, OPT_WINDOWS},
509       {"windows", no_argument, NULL, OPT_WINDOWS},
510       {"statistics", no_argument, 0, OPT_STATISTICS},
511       {"write", no_argument, &write_files, 1},
512       {"args", no_argument, &set_args, 1},
513       {"l", required_argument, 0, 'l'},
514       {"return-child-result", no_argument, &return_child_result, 1},
515       {0, no_argument, 0, 0}
516     };
517 
518     while (1)
519       {
520 	int option_index;
521 
522 	c = getopt_long_only (argc, argv, "",
523 			      long_options, &option_index);
524 	if (c == EOF || set_args)
525 	  break;
526 
527 	/* Long option that takes an argument.  */
528 	if (c == 0 && long_options[option_index].flag == 0)
529 	  c = long_options[option_index].val;
530 
531 	switch (c)
532 	  {
533 	  case 0:
534 	    /* Long option that just sets a flag.  */
535 	    break;
536 	  case OPT_SE:
537 	    symarg = optarg;
538 	    execarg = optarg;
539 	    break;
540 	  case OPT_CD:
541 	    cdarg = optarg;
542 	    break;
543 	  case OPT_ANNOTATE:
544 	    /* FIXME: what if the syntax is wrong (e.g. not digits)?  */
545 	    annotation_level = atoi (optarg);
546 	    break;
547 	  case OPT_STATISTICS:
548 	    /* Enable the display of both time and space usage.  */
549 	    set_display_time (1);
550 	    set_display_space (1);
551 	    break;
552 	  case OPT_TUI:
553 	    /* --tui is equivalent to -i=tui.  */
554 #ifdef TUI
555 	    xfree (interpreter_p);
556 	    interpreter_p = xstrdup (INTERP_TUI);
557 #else
558 	    fprintf_unfiltered (gdb_stderr,
559 				_("%s: TUI mode is not supported\n"),
560 				argv[0]);
561 	    exit (1);
562 #endif
563 	    break;
564 	  case OPT_WINDOWS:
565 	    /* FIXME: cagney/2003-03-01: Not sure if this option is
566                actually useful, and if it is, what it should do.  */
567 #ifdef GDBTK
568 	    /* --windows is equivalent to -i=insight.  */
569 	    xfree (interpreter_p);
570 	    interpreter_p = xstrdup (INTERP_INSIGHT);
571 #endif
572 	    use_windows = 1;
573 	    break;
574 	  case OPT_NOWINDOWS:
575 	    /* -nw is equivalent to -i=console.  */
576 	    xfree (interpreter_p);
577 	    interpreter_p = xstrdup (INTERP_CONSOLE);
578 	    use_windows = 0;
579 	    break;
580 	  case 'f':
581 	    annotation_level = 1;
582 	    /* We have probably been invoked from emacs.  Disable
583 	       window interface.  */
584 	    use_windows = 0;
585 	    break;
586 	  case 's':
587 	    symarg = optarg;
588 	    break;
589 	  case 'e':
590 	    execarg = optarg;
591 	    break;
592 	  case 'c':
593 	    corearg = optarg;
594 	    break;
595 	  case 'p':
596 	    pidarg = optarg;
597 	    break;
598 	  case 'x':
599 	    {
600 	      struct cmdarg cmdarg = { CMDARG_FILE, optarg };
601 
602 	      VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
603 	    }
604 	    break;
605 	  case 'X':
606 	    {
607 	      struct cmdarg cmdarg = { CMDARG_COMMAND, optarg };
608 
609 	      VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
610 	    }
611 	    break;
612 	  case OPT_IX:
613 	    {
614 	      struct cmdarg cmdarg = { CMDARG_INIT_FILE, optarg };
615 
616 	      VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
617 	    }
618 	    break;
619 	  case OPT_IEX:
620 	    {
621 	      struct cmdarg cmdarg = { CMDARG_INIT_COMMAND, optarg };
622 
623 	      VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
624 	    }
625 	    break;
626 	  case 'B':
627 	    batch_flag = batch_silent = 1;
628 	    gdb_stdout = ui_file_new();
629 	    break;
630 	  case 'D':
631 	    xfree (gdb_datadir);
632 	    gdb_datadir = xstrdup (optarg);
633 	    gdb_datadir_provided = 1;
634 	    break;
635 #ifdef GDBTK
636 	  case 'z':
637 	    {
638 	      extern int gdbtk_test (char *);
639 
640 	      if (!gdbtk_test (optarg))
641 		{
642 		  fprintf_unfiltered (gdb_stderr,
643 				      _("%s: unable to load "
644 					"tclcommand file \"%s\""),
645 				      argv[0], optarg);
646 		  exit (1);
647 		}
648 	      break;
649 	    }
650 	  case 'y':
651 	    /* Backwards compatibility only.  */
652 	    break;
653 	  case 'w':
654 	    {
655 	      /* Set the external editor commands when gdb is farming out files
656 		 to be edited by another program.  */
657 	      extern char *external_editor_command;
658 
659 	      external_editor_command = xstrdup (optarg);
660 	      break;
661 	    }
662 #endif /* GDBTK */
663 	  case 'i':
664 	    xfree (interpreter_p);
665 	    interpreter_p = xstrdup (optarg);
666 	    break;
667 	  case 'd':
668 	    dirarg[ndir++] = optarg;
669 	    if (ndir >= dirsize)
670 	      {
671 		dirsize *= 2;
672 		dirarg = (char **) xrealloc ((char *) dirarg,
673 					     dirsize * sizeof (*dirarg));
674 	      }
675 	    break;
676 	  case 't':
677 	    ttyarg = optarg;
678 	    break;
679 	  case 'q':
680 	    quiet = 1;
681 	    break;
682 	  case 'b':
683 	    {
684 	      int i;
685 	      char *p;
686 
687 	      i = strtol (optarg, &p, 0);
688 	      if (i == 0 && p == optarg)
689 
690 		/* Don't use *_filtered or warning() (which relies on
691 		   current_target) until after initialize_all_files().  */
692 
693 		fprintf_unfiltered
694 		  (gdb_stderr,
695 		   _("warning: could not set baud rate to `%s'.\n"), optarg);
696 	      else
697 		baud_rate = i;
698 	    }
699             break;
700 	  case 'l':
701 	    {
702 	      int i;
703 	      char *p;
704 
705 	      i = strtol (optarg, &p, 0);
706 	      if (i == 0 && p == optarg)
707 
708 		/* Don't use *_filtered or warning() (which relies on
709 		   current_target) until after initialize_all_files().  */
710 
711 		fprintf_unfiltered (gdb_stderr,
712 				    _("warning: could not set "
713 				      "timeout limit to `%s'.\n"), optarg);
714 	      else
715 		remote_timeout = i;
716 	    }
717 	    break;
718 
719 	  case '?':
720 	    fprintf_unfiltered (gdb_stderr,
721 				_("Use `%s --help' for a "
722 				  "complete list of options.\n"),
723 				argv[0]);
724 	    exit (1);
725 	  }
726       }
727 
728     /* If --help or --version, disable window interface.  */
729     if (print_help || print_version)
730       {
731 	use_windows = 0;
732       }
733 
734     if (batch_flag)
735       quiet = 1;
736   }
737 
738   /* Initialize all files.  Give the interpreter a chance to take
739      control of the console via the deprecated_init_ui_hook ().  */
740   gdb_init (gdb_program_name);
741 
742   /* Now that gdb_init has created the initial inferior, we're in
743      position to set args for that inferior.  */
744   if (set_args)
745     {
746       /* The remaining options are the command-line options for the
747 	 inferior.  The first one is the sym/exec file, and the rest
748 	 are arguments.  */
749       if (optind >= argc)
750 	{
751 	  fprintf_unfiltered (gdb_stderr,
752 			      _("%s: `--args' specified but "
753 				"no program specified\n"),
754 			      argv[0]);
755 	  exit (1);
756 	}
757       symarg = argv[optind];
758       execarg = argv[optind];
759       ++optind;
760       set_inferior_args_vector (argc - optind, &argv[optind]);
761     }
762   else
763     {
764       /* OK, that's all the options.  */
765 
766       /* The first argument, if specified, is the name of the
767 	 executable.  */
768       if (optind < argc)
769 	{
770 	  symarg = argv[optind];
771 	  execarg = argv[optind];
772 	  optind++;
773 	}
774 
775       /* If the user hasn't already specified a PID or the name of a
776 	 core file, then a second optional argument is allowed.  If
777 	 present, this argument should be interpreted as either a
778 	 PID or a core file, whichever works.  */
779       if (pidarg == NULL && corearg == NULL && optind < argc)
780 	{
781 	  pid_or_core_arg = argv[optind];
782 	  optind++;
783 	}
784 
785       /* Any argument left on the command line is unexpected and
786 	 will be ignored.  Inform the user.  */
787       if (optind < argc)
788 	fprintf_unfiltered (gdb_stderr,
789 			    _("Excess command line "
790 			      "arguments ignored. (%s%s)\n"),
791 			    argv[optind],
792 			    (optind == argc - 1) ? "" : " ...");
793     }
794 
795   /* Lookup gdbinit files.  Note that the gdbinit file name may be
796      overriden during file initialization, so get_init_files should be
797      called after gdb_init.  */
798   get_init_files (&system_gdbinit, &home_gdbinit, &local_gdbinit);
799 
800   /* Do these (and anything which might call wrap_here or *_filtered)
801      after initialize_all_files() but before the interpreter has been
802      installed.  Otherwize the help/version messages will be eaten by
803      the interpreter's output handler.  */
804 
805   if (print_version)
806     {
807       print_gdb_version (gdb_stdout);
808       wrap_here ("");
809       printf_filtered ("\n");
810       exit (0);
811     }
812 
813   if (print_help)
814     {
815       print_gdb_help (gdb_stdout);
816       fputs_unfiltered ("\n", gdb_stdout);
817       exit (0);
818     }
819 
820   /* FIXME: cagney/2003-02-03: The big hack (part 1 of 2) that lets
821      GDB retain the old MI1 interpreter startup behavior.  Output the
822      copyright message before the interpreter is installed.  That way
823      it isn't encapsulated in MI output.  */
824   if (!quiet && strcmp (interpreter_p, INTERP_MI1) == 0)
825     {
826       /* Print all the junk at the top, with trailing "..." if we are
827          about to read a symbol file (possibly slowly).  */
828       print_gdb_version (gdb_stdout);
829       if (symarg)
830 	printf_filtered ("..");
831       wrap_here ("");
832       printf_filtered ("\n");
833       gdb_flush (gdb_stdout);	/* Force to screen during slow
834 				   operations.  */
835     }
836 
837   /* Install the default UI.  All the interpreters should have had a
838      look at things by now.  Initialize the default interpreter.  */
839 
840   {
841     /* Find it.  */
842     struct interp *interp = interp_lookup (interpreter_p);
843 
844     if (interp == NULL)
845       error (_("Interpreter `%s' unrecognized"), interpreter_p);
846     /* Install it.  */
847     if (!interp_set (interp, 1))
848       {
849         fprintf_unfiltered (gdb_stderr,
850 			    "Interpreter `%s' failed to initialize.\n",
851                             interpreter_p);
852         exit (1);
853       }
854   }
855 
856   /* FIXME: cagney/2003-02-03: The big hack (part 2 of 2) that lets
857      GDB retain the old MI1 interpreter startup behavior.  Output the
858      copyright message after the interpreter is installed when it is
859      any sane interpreter.  */
860   if (!quiet && !current_interp_named_p (INTERP_MI1))
861     {
862       /* Print all the junk at the top, with trailing "..." if we are
863          about to read a symbol file (possibly slowly).  */
864       print_gdb_version (gdb_stdout);
865       if (symarg)
866 	printf_filtered ("..");
867       wrap_here ("");
868       printf_filtered ("\n");
869       gdb_flush (gdb_stdout);	/* Force to screen during slow
870 				   operations.  */
871     }
872 
873   /* Set off error and warning messages with a blank line.  */
874   error_pre_print = "\n";
875   quit_pre_print = error_pre_print;
876   warning_pre_print = _("\nwarning: ");
877 
878   /* Read and execute the system-wide gdbinit file, if it exists.
879      This is done *before* all the command line arguments are
880      processed; it sets global parameters, which are independent of
881      what file you are debugging or what directory you are in.  */
882   if (system_gdbinit && !inhibit_gdbinit)
883     catch_command_errors (source_script, system_gdbinit, 0, RETURN_MASK_ALL);
884 
885   /* Read and execute $HOME/.gdbinit file, if it exists.  This is done
886      *before* all the command line arguments are processed; it sets
887      global parameters, which are independent of what file you are
888      debugging or what directory you are in.  */
889 
890   if (home_gdbinit && !inhibit_gdbinit && !inhibit_home_gdbinit)
891     catch_command_errors (source_script, home_gdbinit, 0, RETURN_MASK_ALL);
892 
893   /* Process '-ix' and '-iex' options early.  */
894   for (i = 0; VEC_iterate (cmdarg_s, cmdarg_vec, i, cmdarg_p); i++)
895     switch (cmdarg_p->type)
896     {
897       case CMDARG_INIT_FILE:
898         catch_command_errors (source_script, cmdarg_p->string,
899 			      !batch_flag, RETURN_MASK_ALL);
900 	break;
901       case CMDARG_INIT_COMMAND:
902         catch_command_errors (execute_command, cmdarg_p->string,
903 			      !batch_flag, RETURN_MASK_ALL);
904 	break;
905     }
906 
907   /* Now perform all the actions indicated by the arguments.  */
908   if (cdarg != NULL)
909     {
910       catch_command_errors (cd_command, cdarg, 0, RETURN_MASK_ALL);
911     }
912 
913   for (i = 0; i < ndir; i++)
914     catch_command_errors (directory_switch, dirarg[i], 0, RETURN_MASK_ALL);
915   xfree (dirarg);
916 
917   /* Skip auto-loading section-specified scripts until we've sourced
918      local_gdbinit (which is often used to augment the source search
919      path).  */
920   save_auto_load = global_auto_load;
921   global_auto_load = 0;
922 
923   if (execarg != NULL
924       && symarg != NULL
925       && strcmp (execarg, symarg) == 0)
926     {
927       /* The exec file and the symbol-file are the same.  If we can't
928          open it, better only print one error message.
929          catch_command_errors returns non-zero on success!  */
930       if (catch_command_errors (exec_file_attach, execarg,
931 				!batch_flag, RETURN_MASK_ALL))
932 	catch_command_errors (symbol_file_add_main, symarg,
933 			      !batch_flag, RETURN_MASK_ALL);
934     }
935   else
936     {
937       if (execarg != NULL)
938 	catch_command_errors (exec_file_attach, execarg,
939 			      !batch_flag, RETURN_MASK_ALL);
940       if (symarg != NULL)
941 	catch_command_errors (symbol_file_add_main, symarg,
942 			      !batch_flag, RETURN_MASK_ALL);
943     }
944 
945   if (corearg && pidarg)
946     error (_("Can't attach to process and specify "
947 	     "a core file at the same time."));
948 
949   if (corearg != NULL)
950     catch_command_errors (core_file_command, corearg,
951 			  !batch_flag, RETURN_MASK_ALL);
952   else if (pidarg != NULL)
953     catch_command_errors (attach_command, pidarg,
954 			  !batch_flag, RETURN_MASK_ALL);
955   else if (pid_or_core_arg)
956     {
957       /* The user specified 'gdb program pid' or gdb program core'.
958 	 If pid_or_core_arg's first character is a digit, try attach
959 	 first and then corefile.  Otherwise try just corefile.  */
960 
961       if (isdigit (pid_or_core_arg[0]))
962 	{
963 	  if (catch_command_errors (attach_command, pid_or_core_arg,
964 				    !batch_flag, RETURN_MASK_ALL) == 0)
965 	    catch_command_errors (core_file_command, pid_or_core_arg,
966 				  !batch_flag, RETURN_MASK_ALL);
967 	}
968       else /* Can't be a pid, better be a corefile.  */
969 	catch_command_errors (core_file_command, pid_or_core_arg,
970 			      !batch_flag, RETURN_MASK_ALL);
971     }
972 
973   if (ttyarg != NULL)
974     set_inferior_io_terminal (ttyarg);
975 
976   /* Error messages should no longer be distinguished with extra output.  */
977   error_pre_print = NULL;
978   quit_pre_print = NULL;
979   warning_pre_print = _("warning: ");
980 
981   /* Read the .gdbinit file in the current directory, *if* it isn't
982      the same as the $HOME/.gdbinit file (it should exist, also).  */
983   if (local_gdbinit)
984     {
985       auto_load_local_gdbinit_pathname = gdb_realpath (local_gdbinit);
986 
987       if (!inhibit_gdbinit && auto_load_local_gdbinit
988 	  && file_is_auto_load_safe (local_gdbinit,
989 				     _("auto-load: Loading .gdbinit "
990 				       "file \"%s\".\n"),
991 				     local_gdbinit))
992 	{
993 	  auto_load_local_gdbinit_loaded = 1;
994 
995 	  catch_command_errors (source_script, local_gdbinit, 0,
996 				RETURN_MASK_ALL);
997 	}
998     }
999 
1000   /* Now that all .gdbinit's have been read and all -d options have been
1001      processed, we can read any scripts mentioned in SYMARG.
1002      We wait until now because it is common to add to the source search
1003      path in local_gdbinit.  */
1004   global_auto_load = save_auto_load;
1005   ALL_OBJFILES (objfile)
1006     load_auto_scripts_for_objfile (objfile);
1007 
1008   /* Process '-x' and '-ex' options.  */
1009   for (i = 0; VEC_iterate (cmdarg_s, cmdarg_vec, i, cmdarg_p); i++)
1010     switch (cmdarg_p->type)
1011     {
1012       case CMDARG_FILE:
1013         catch_command_errors (source_script, cmdarg_p->string,
1014 			      !batch_flag, RETURN_MASK_ALL);
1015 	break;
1016       case CMDARG_COMMAND:
1017         catch_command_errors (execute_command, cmdarg_p->string,
1018 			      !batch_flag, RETURN_MASK_ALL);
1019 	break;
1020     }
1021 
1022   /* Read in the old history after all the command files have been
1023      read.  */
1024   init_history ();
1025 
1026   if (batch_flag)
1027     {
1028       /* We have hit the end of the batch file.  */
1029       quit_force (NULL, 0);
1030     }
1031 
1032   /* Show time and/or space usage.  */
1033   do_cleanups (pre_stat_chain);
1034 
1035   /* NOTE: cagney/1999-11-07: There is probably no reason for not
1036      moving this loop and the code found in captured_command_loop()
1037      into the command_loop() proper.  The main thing holding back that
1038      change - SET_TOP_LEVEL() - has been eliminated.  */
1039   while (1)
1040     {
1041       catch_errors (captured_command_loop, 0, "", RETURN_MASK_ALL);
1042     }
1043   /* No exit -- exit is through quit_command.  */
1044 }
1045 
1046 int
1047 gdb_main (struct captured_main_args *args)
1048 {
1049   use_windows = args->use_windows;
1050   catch_errors (captured_main, args, "", RETURN_MASK_ALL);
1051   /* The only way to end up here is by an error (normal exit is
1052      handled by quit_force()), hence always return an error status.  */
1053   return 1;
1054 }
1055 
1056 
1057 /* Don't use *_filtered for printing help.  We don't want to prompt
1058    for continue no matter how small the screen or how much we're going
1059    to print.  */
1060 
1061 static void
1062 print_gdb_help (struct ui_file *stream)
1063 {
1064   char *system_gdbinit;
1065   char *home_gdbinit;
1066   char *local_gdbinit;
1067 
1068   get_init_files (&system_gdbinit, &home_gdbinit, &local_gdbinit);
1069 
1070   fputs_unfiltered (_("\
1071 This is the GNU debugger.  Usage:\n\n\
1072     gdb [options] [executable-file [core-file or process-id]]\n\
1073     gdb [options] --args executable-file [inferior-arguments ...]\n\n\
1074 Options:\n\n\
1075 "), stream);
1076   fputs_unfiltered (_("\
1077   --args             Arguments after executable-file are passed to inferior\n\
1078 "), stream);
1079   fputs_unfiltered (_("\
1080   -b BAUDRATE        Set serial port baud rate used for remote debugging.\n\
1081   --batch            Exit after processing options.\n\
1082   --batch-silent     As for --batch, but suppress all gdb stdout output.\n\
1083   --return-child-result\n\
1084                      GDB exit code will be the child's exit code.\n\
1085   --cd=DIR           Change current directory to DIR.\n\
1086   --command=FILE, -x Execute GDB commands from FILE.\n\
1087   --eval-command=COMMAND, -ex\n\
1088                      Execute a single GDB command.\n\
1089                      May be used multiple times and in conjunction\n\
1090                      with --command.\n\
1091   --init-command=FILE, -ix Like -x but execute it before loading inferior.\n\
1092   --init-eval-command=COMMAND, -iex Like -ex but before loading inferior.\n\
1093   --core=COREFILE    Analyze the core dump COREFILE.\n\
1094   --pid=PID          Attach to running process PID.\n\
1095 "), stream);
1096   fputs_unfiltered (_("\
1097   --dbx              DBX compatibility mode.\n\
1098   --directory=DIR    Search for source files in DIR.\n\
1099   --exec=EXECFILE    Use EXECFILE as the executable.\n\
1100   --fullname         Output information used by emacs-GDB interface.\n\
1101   --help             Print this message.\n\
1102 "), stream);
1103   fputs_unfiltered (_("\
1104   --interpreter=INTERP\n\
1105                      Select a specific interpreter / user interface\n\
1106 "), stream);
1107   fputs_unfiltered (_("\
1108   -l TIMEOUT         Set timeout in seconds for remote debugging.\n\
1109   --nw		     Do not use a window interface.\n\
1110   --nx               Do not read any "), stream);
1111   fputs_unfiltered (gdbinit, stream);
1112   fputs_unfiltered (_(" files.\n\
1113   --nh               Do not read "), stream);
1114   fputs_unfiltered (gdbinit, stream);
1115   fputs_unfiltered (_(" file from home directory.\n\
1116   --quiet            Do not print version number on startup.\n\
1117   --readnow          Fully read symbol files on first access.\n\
1118 "), stream);
1119   fputs_unfiltered (_("\
1120   --se=FILE          Use FILE as symbol file and executable file.\n\
1121   --symbols=SYMFILE  Read symbols from SYMFILE.\n\
1122   --tty=TTY          Use TTY for input/output by the program being debugged.\n\
1123 "), stream);
1124 #if defined(TUI)
1125   fputs_unfiltered (_("\
1126   --tui              Use a terminal user interface.\n\
1127 "), stream);
1128 #endif
1129   fputs_unfiltered (_("\
1130   --version          Print version information and then exit.\n\
1131   -w                 Use a window interface.\n\
1132   --write            Set writing into executable and core files.\n\
1133   --xdb              XDB compatibility mode.\n\
1134 "), stream);
1135   fputs_unfiltered (_("\n\
1136 At startup, GDB reads the following init files and executes their commands:\n\
1137 "), stream);
1138   if (system_gdbinit)
1139     fprintf_unfiltered (stream, _("\
1140    * system-wide init file: %s\n\
1141 "), system_gdbinit);
1142   if (home_gdbinit)
1143     fprintf_unfiltered (stream, _("\
1144    * user-specific init file: %s\n\
1145 "), home_gdbinit);
1146   if (local_gdbinit)
1147     fprintf_unfiltered (stream, _("\
1148    * local init file (see also 'set auto-load local-gdbinit'): ./%s\n\
1149 "), local_gdbinit);
1150   fputs_unfiltered (_("\n\
1151 For more information, type \"help\" from within GDB, or consult the\n\
1152 GDB manual (available as on-line info or a printed manual).\n\
1153 "), stream);
1154   if (REPORT_BUGS_TO[0] && stream == gdb_stdout)
1155     fprintf_unfiltered (stream, _("\
1156 Report bugs to \"%s\".\n\
1157 "), REPORT_BUGS_TO);
1158 }
1159