xref: /dflybsd-src/contrib/gdb-7/gdb/main.c (revision de8e141f24382815c10a4012d209bbbf7abf1112)
15796c8dcSSimon Schubert /* Top level stuff for GDB, the GNU debugger.
25796c8dcSSimon Schubert 
3*ef5ccd6cSJohn Marino    Copyright (C) 1986-2013 Free Software Foundation, Inc.
45796c8dcSSimon Schubert 
55796c8dcSSimon Schubert    This file is part of GDB.
65796c8dcSSimon Schubert 
75796c8dcSSimon Schubert    This program is free software; you can redistribute it and/or modify
85796c8dcSSimon Schubert    it under the terms of the GNU General Public License as published by
95796c8dcSSimon Schubert    the Free Software Foundation; either version 3 of the License, or
105796c8dcSSimon Schubert    (at your option) any later version.
115796c8dcSSimon Schubert 
125796c8dcSSimon Schubert    This program is distributed in the hope that it will be useful,
135796c8dcSSimon Schubert    but WITHOUT ANY WARRANTY; without even the implied warranty of
145796c8dcSSimon Schubert    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
155796c8dcSSimon Schubert    GNU General Public License for more details.
165796c8dcSSimon Schubert 
175796c8dcSSimon Schubert    You should have received a copy of the GNU General Public License
185796c8dcSSimon Schubert    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
195796c8dcSSimon Schubert 
205796c8dcSSimon Schubert #include "defs.h"
215796c8dcSSimon Schubert #include "top.h"
225796c8dcSSimon Schubert #include "target.h"
235796c8dcSSimon Schubert #include "inferior.h"
245796c8dcSSimon Schubert #include "symfile.h"
255796c8dcSSimon Schubert #include "gdbcore.h"
265796c8dcSSimon Schubert 
275796c8dcSSimon Schubert #include "exceptions.h"
285796c8dcSSimon Schubert #include "getopt.h"
295796c8dcSSimon Schubert 
305796c8dcSSimon Schubert #include <sys/types.h>
315796c8dcSSimon Schubert #include "gdb_stat.h"
325796c8dcSSimon Schubert #include <ctype.h>
335796c8dcSSimon Schubert 
345796c8dcSSimon Schubert #include "gdb_string.h"
355796c8dcSSimon Schubert #include "event-loop.h"
365796c8dcSSimon Schubert #include "ui-out.h"
375796c8dcSSimon Schubert 
385796c8dcSSimon Schubert #include "interps.h"
395796c8dcSSimon Schubert #include "main.h"
405796c8dcSSimon Schubert #include "source.h"
41cf7f2e2dSJohn Marino #include "cli/cli-cmds.h"
42cf7f2e2dSJohn Marino #include "python/python.h"
43c50c785cSJohn Marino #include "objfiles.h"
44*ef5ccd6cSJohn Marino #include "auto-load.h"
45*ef5ccd6cSJohn Marino 
46*ef5ccd6cSJohn Marino #include "filenames.h"
475796c8dcSSimon Schubert 
485796c8dcSSimon Schubert /* The selected interpreter.  This will be used as a set command
495796c8dcSSimon Schubert    variable, so it should always be malloc'ed - since
505796c8dcSSimon Schubert    do_setshow_command will free it.  */
515796c8dcSSimon Schubert char *interpreter_p;
525796c8dcSSimon Schubert 
53c50c785cSJohn Marino /* Whether xdb commands will be handled.  */
545796c8dcSSimon Schubert int xdb_commands = 0;
555796c8dcSSimon Schubert 
56c50c785cSJohn Marino /* Whether dbx commands will be handled.  */
575796c8dcSSimon Schubert int dbx_commands = 0;
585796c8dcSSimon Schubert 
595796c8dcSSimon Schubert /* System root path, used to find libraries etc.  */
605796c8dcSSimon Schubert char *gdb_sysroot = 0;
615796c8dcSSimon Schubert 
625796c8dcSSimon Schubert /* GDB datadir, used to store data files.  */
635796c8dcSSimon Schubert char *gdb_datadir = 0;
645796c8dcSSimon Schubert 
65*ef5ccd6cSJohn Marino /* Non-zero if GDB_DATADIR was provided on the command line.
66*ef5ccd6cSJohn Marino    This doesn't track whether data-directory is set later from the
67*ef5ccd6cSJohn Marino    command line, but we don't reread system.gdbinit when that happens.  */
68*ef5ccd6cSJohn Marino static int gdb_datadir_provided = 0;
69*ef5ccd6cSJohn Marino 
70cf7f2e2dSJohn Marino /* If gdb was configured with --with-python=/path,
71cf7f2e2dSJohn Marino    the possibly relocated path to python's lib directory.  */
72cf7f2e2dSJohn Marino char *python_libdir = 0;
73cf7f2e2dSJohn Marino 
745796c8dcSSimon Schubert struct ui_file *gdb_stdout;
755796c8dcSSimon Schubert struct ui_file *gdb_stderr;
765796c8dcSSimon Schubert struct ui_file *gdb_stdlog;
775796c8dcSSimon Schubert struct ui_file *gdb_stdin;
78c50c785cSJohn Marino /* Target IO streams.  */
795796c8dcSSimon Schubert struct ui_file *gdb_stdtargin;
805796c8dcSSimon Schubert struct ui_file *gdb_stdtarg;
815796c8dcSSimon Schubert struct ui_file *gdb_stdtargerr;
825796c8dcSSimon Schubert 
83cf7f2e2dSJohn Marino /* True if --batch or --batch-silent was seen.  */
84cf7f2e2dSJohn Marino int batch_flag = 0;
85cf7f2e2dSJohn Marino 
865796c8dcSSimon Schubert /* Support for the --batch-silent option.  */
875796c8dcSSimon Schubert int batch_silent = 0;
885796c8dcSSimon Schubert 
895796c8dcSSimon Schubert /* Support for --return-child-result option.
905796c8dcSSimon Schubert    Set the default to -1 to return error in the case
915796c8dcSSimon Schubert    that the program does not run or does not complete.  */
925796c8dcSSimon Schubert int return_child_result = 0;
935796c8dcSSimon Schubert int return_child_result_value = -1;
945796c8dcSSimon Schubert 
955796c8dcSSimon Schubert 
965796c8dcSSimon Schubert /* GDB as it has been invoked from the command line (i.e. argv[0]).  */
975796c8dcSSimon Schubert static char *gdb_program_name;
985796c8dcSSimon Schubert 
99a938cc15SJohn Marino /* DragonFly kgdb support */
100a938cc15SJohn Marino int kernel_debugger;
101a938cc15SJohn Marino 
1025796c8dcSSimon Schubert static void print_gdb_help (struct ui_file *);
1035796c8dcSSimon Schubert 
1045796c8dcSSimon Schubert /* Relocate a file or directory.  PROGNAME is the name by which gdb
1055796c8dcSSimon Schubert    was invoked (i.e., argv[0]).  INITIAL is the default value for the
1065796c8dcSSimon Schubert    file or directory.  FLAG is true if the value is relocatable, false
1075796c8dcSSimon Schubert    otherwise.  Returns a newly allocated string; this may return NULL
1085796c8dcSSimon Schubert    under the same conditions as make_relative_prefix.  */
109a45ae5f8SJohn Marino 
1105796c8dcSSimon Schubert static char *
relocate_path(const char * progname,const char * initial,int flag)1115796c8dcSSimon Schubert relocate_path (const char *progname, const char *initial, int flag)
1125796c8dcSSimon Schubert {
1135796c8dcSSimon Schubert   if (flag)
1145796c8dcSSimon Schubert     return make_relative_prefix (progname, BINDIR, initial);
1155796c8dcSSimon Schubert   return xstrdup (initial);
1165796c8dcSSimon Schubert }
1175796c8dcSSimon Schubert 
1185796c8dcSSimon Schubert /* Like relocate_path, but specifically checks for a directory.
1195796c8dcSSimon Schubert    INITIAL is relocated according to the rules of relocate_path.  If
1205796c8dcSSimon Schubert    the result is a directory, it is used; otherwise, INITIAL is used.
1215796c8dcSSimon Schubert    The chosen directory is then canonicalized using lrealpath.  This
1225796c8dcSSimon Schubert    function always returns a newly-allocated string.  */
123a45ae5f8SJohn Marino 
124a45ae5f8SJohn Marino char *
relocate_gdb_directory(const char * initial,int flag)125a45ae5f8SJohn Marino relocate_gdb_directory (const char *initial, int flag)
1265796c8dcSSimon Schubert {
1275796c8dcSSimon Schubert   char *dir;
1285796c8dcSSimon Schubert 
129a45ae5f8SJohn Marino   dir = relocate_path (gdb_program_name, initial, flag);
1305796c8dcSSimon Schubert   if (dir)
1315796c8dcSSimon Schubert     {
1325796c8dcSSimon Schubert       struct stat s;
1335796c8dcSSimon Schubert 
134*ef5ccd6cSJohn Marino       if (*dir == '\0' || stat (dir, &s) != 0 || !S_ISDIR (s.st_mode))
1355796c8dcSSimon Schubert 	{
1365796c8dcSSimon Schubert 	  xfree (dir);
1375796c8dcSSimon Schubert 	  dir = NULL;
1385796c8dcSSimon Schubert 	}
1395796c8dcSSimon Schubert     }
1405796c8dcSSimon Schubert   if (!dir)
1415796c8dcSSimon Schubert     dir = xstrdup (initial);
1425796c8dcSSimon Schubert 
1435796c8dcSSimon Schubert   /* Canonicalize the directory.  */
1445796c8dcSSimon Schubert   if (*dir)
1455796c8dcSSimon Schubert     {
1465796c8dcSSimon Schubert       char *canon_sysroot = lrealpath (dir);
147cf7f2e2dSJohn Marino 
1485796c8dcSSimon Schubert       if (canon_sysroot)
1495796c8dcSSimon Schubert 	{
1505796c8dcSSimon Schubert 	  xfree (dir);
1515796c8dcSSimon Schubert 	  dir = canon_sysroot;
1525796c8dcSSimon Schubert 	}
1535796c8dcSSimon Schubert     }
1545796c8dcSSimon Schubert 
1555796c8dcSSimon Schubert   return dir;
1565796c8dcSSimon Schubert }
1575796c8dcSSimon Schubert 
158c50c785cSJohn Marino /* Compute the locations of init files that GDB should source and
159c50c785cSJohn Marino    return them in SYSTEM_GDBINIT, HOME_GDBINIT, LOCAL_GDBINIT.  If
160c50c785cSJohn Marino    there is no system gdbinit (resp. home gdbinit and local gdbinit)
161c50c785cSJohn Marino    to be loaded, then SYSTEM_GDBINIT (resp. HOME_GDBINIT and
162c50c785cSJohn Marino    LOCAL_GDBINIT) is set to NULL.  */
1635796c8dcSSimon Schubert static void
get_init_files(char ** system_gdbinit,char ** home_gdbinit,char ** local_gdbinit)1645796c8dcSSimon Schubert get_init_files (char **system_gdbinit,
1655796c8dcSSimon Schubert 		char **home_gdbinit,
1665796c8dcSSimon Schubert 		char **local_gdbinit)
1675796c8dcSSimon Schubert {
1685796c8dcSSimon Schubert   static char *sysgdbinit = NULL;
1695796c8dcSSimon Schubert   static char *homeinit = NULL;
1705796c8dcSSimon Schubert   static char *localinit = NULL;
1715796c8dcSSimon Schubert   static int initialized = 0;
1725796c8dcSSimon Schubert 
1735796c8dcSSimon Schubert   if (!initialized)
1745796c8dcSSimon Schubert     {
1755796c8dcSSimon Schubert       struct stat homebuf, cwdbuf, s;
176*ef5ccd6cSJohn Marino       char *homedir;
1775796c8dcSSimon Schubert 
1785796c8dcSSimon Schubert       if (SYSTEM_GDBINIT[0])
1795796c8dcSSimon Schubert 	{
180*ef5ccd6cSJohn Marino 	  int datadir_len = strlen (GDB_DATADIR);
181*ef5ccd6cSJohn Marino 	  int sys_gdbinit_len = strlen (SYSTEM_GDBINIT);
182*ef5ccd6cSJohn Marino 	  char *relocated_sysgdbinit;
183*ef5ccd6cSJohn Marino 
184*ef5ccd6cSJohn Marino 	  /* If SYSTEM_GDBINIT lives in data-directory, and data-directory
185*ef5ccd6cSJohn Marino 	     has been provided, search for SYSTEM_GDBINIT there.  */
186*ef5ccd6cSJohn Marino 	  if (gdb_datadir_provided
187*ef5ccd6cSJohn Marino 	      && datadir_len < sys_gdbinit_len
188*ef5ccd6cSJohn Marino 	      && filename_ncmp (SYSTEM_GDBINIT, GDB_DATADIR, datadir_len) == 0
189*ef5ccd6cSJohn Marino 	      && IS_DIR_SEPARATOR (SYSTEM_GDBINIT[datadir_len]))
190*ef5ccd6cSJohn Marino 	    {
191*ef5ccd6cSJohn Marino 	      /* Append the part of SYSTEM_GDBINIT that follows GDB_DATADIR
192*ef5ccd6cSJohn Marino 		 to gdb_datadir.  */
193*ef5ccd6cSJohn Marino 	      char *tmp_sys_gdbinit = xstrdup (SYSTEM_GDBINIT + datadir_len);
194*ef5ccd6cSJohn Marino 	      char *p;
195*ef5ccd6cSJohn Marino 
196*ef5ccd6cSJohn Marino 	      for (p = tmp_sys_gdbinit; IS_DIR_SEPARATOR (*p); ++p)
197*ef5ccd6cSJohn Marino 		continue;
198*ef5ccd6cSJohn Marino 	      relocated_sysgdbinit = concat (gdb_datadir, SLASH_STRING, p,
199*ef5ccd6cSJohn Marino 					     NULL);
200*ef5ccd6cSJohn Marino 	      xfree (tmp_sys_gdbinit);
201*ef5ccd6cSJohn Marino 	    }
202*ef5ccd6cSJohn Marino 	  else
203*ef5ccd6cSJohn Marino 	    {
2045796c8dcSSimon Schubert 	      relocated_sysgdbinit = relocate_path (gdb_program_name,
2055796c8dcSSimon Schubert 						    SYSTEM_GDBINIT,
2065796c8dcSSimon Schubert 						    SYSTEM_GDBINIT_RELOCATABLE);
207*ef5ccd6cSJohn Marino 	    }
2085796c8dcSSimon Schubert 	  if (relocated_sysgdbinit && stat (relocated_sysgdbinit, &s) == 0)
2095796c8dcSSimon Schubert 	    sysgdbinit = relocated_sysgdbinit;
2105796c8dcSSimon Schubert 	  else
2115796c8dcSSimon Schubert 	    xfree (relocated_sysgdbinit);
2125796c8dcSSimon Schubert 	}
2135796c8dcSSimon Schubert 
2145796c8dcSSimon Schubert       homedir = getenv ("HOME");
2155796c8dcSSimon Schubert 
2165796c8dcSSimon Schubert       /* If the .gdbinit file in the current directory is the same as
2175796c8dcSSimon Schubert 	 the $HOME/.gdbinit file, it should not be sourced.  homebuf
2185796c8dcSSimon Schubert 	 and cwdbuf are used in that purpose.  Make sure that the stats
2195796c8dcSSimon Schubert 	 are zero in case one of them fails (this guarantees that they
2205796c8dcSSimon Schubert 	 won't match if either exists).  */
2215796c8dcSSimon Schubert 
2225796c8dcSSimon Schubert       memset (&homebuf, 0, sizeof (struct stat));
2235796c8dcSSimon Schubert       memset (&cwdbuf, 0, sizeof (struct stat));
2245796c8dcSSimon Schubert 
2255796c8dcSSimon Schubert       if (homedir)
2265796c8dcSSimon Schubert 	{
2275796c8dcSSimon Schubert 	  homeinit = xstrprintf ("%s/%s", homedir, gdbinit);
2285796c8dcSSimon Schubert 	  if (stat (homeinit, &homebuf) != 0)
2295796c8dcSSimon Schubert 	    {
2305796c8dcSSimon Schubert 	      xfree (homeinit);
2315796c8dcSSimon Schubert 	      homeinit = NULL;
2325796c8dcSSimon Schubert 	    }
2335796c8dcSSimon Schubert 	}
2345796c8dcSSimon Schubert 
2355796c8dcSSimon Schubert       if (stat (gdbinit, &cwdbuf) == 0)
2365796c8dcSSimon Schubert 	{
2375796c8dcSSimon Schubert 	  if (!homeinit
2385796c8dcSSimon Schubert 	      || memcmp ((char *) &homebuf, (char *) &cwdbuf,
2395796c8dcSSimon Schubert 			 sizeof (struct stat)))
2405796c8dcSSimon Schubert 	    localinit = gdbinit;
2415796c8dcSSimon Schubert 	}
2425796c8dcSSimon Schubert 
2435796c8dcSSimon Schubert       initialized = 1;
2445796c8dcSSimon Schubert     }
2455796c8dcSSimon Schubert 
2465796c8dcSSimon Schubert   *system_gdbinit = sysgdbinit;
2475796c8dcSSimon Schubert   *home_gdbinit = homeinit;
2485796c8dcSSimon Schubert   *local_gdbinit = localinit;
2495796c8dcSSimon Schubert }
2505796c8dcSSimon Schubert 
2515796c8dcSSimon Schubert /* Call command_loop.  If it happens to return, pass that through as a
2525796c8dcSSimon Schubert    non-zero return status.  */
2535796c8dcSSimon Schubert 
2545796c8dcSSimon Schubert static int
captured_command_loop(void * data)2555796c8dcSSimon Schubert captured_command_loop (void *data)
2565796c8dcSSimon Schubert {
257a45ae5f8SJohn Marino   /* Top-level execution commands can be run on the background from
258a45ae5f8SJohn Marino      here on.  */
259a45ae5f8SJohn Marino   interpreter_async = 1;
260a45ae5f8SJohn Marino 
2615796c8dcSSimon Schubert   current_interp_command_loop ();
2625796c8dcSSimon Schubert   /* FIXME: cagney/1999-11-05: A correct command_loop() implementaton
2635796c8dcSSimon Schubert      would clean things up (restoring the cleanup chain) to the state
2645796c8dcSSimon Schubert      they were just prior to the call.  Technically, this means that
2655796c8dcSSimon Schubert      the do_cleanups() below is redundant.  Unfortunately, many FUNCs
2665796c8dcSSimon Schubert      are not that well behaved.  do_cleanups should either be replaced
2675796c8dcSSimon Schubert      with a do_cleanups call (to cover the problem) or an assertion
2685796c8dcSSimon Schubert      check to detect bad FUNCs code.  */
269*ef5ccd6cSJohn Marino   do_cleanups (all_cleanups ());
2705796c8dcSSimon Schubert   /* If the command_loop returned, normally (rather than threw an
2715796c8dcSSimon Schubert      error) we try to quit.  If the quit is aborted, catch_errors()
2725796c8dcSSimon Schubert      which called this catch the signal and restart the command
2735796c8dcSSimon Schubert      loop.  */
2745796c8dcSSimon Schubert   quit_command (NULL, instream == stdin);
2755796c8dcSSimon Schubert   return 1;
2765796c8dcSSimon Schubert }
2775796c8dcSSimon Schubert 
278*ef5ccd6cSJohn Marino /* Arguments of --command option and its counterpart.  */
279*ef5ccd6cSJohn Marino typedef struct cmdarg {
280*ef5ccd6cSJohn Marino   /* Type of this option.  */
281*ef5ccd6cSJohn Marino   enum {
282*ef5ccd6cSJohn Marino     /* Option type -x.  */
283*ef5ccd6cSJohn Marino     CMDARG_FILE,
284*ef5ccd6cSJohn Marino 
285*ef5ccd6cSJohn Marino     /* Option type -ex.  */
286*ef5ccd6cSJohn Marino     CMDARG_COMMAND,
287*ef5ccd6cSJohn Marino 
288*ef5ccd6cSJohn Marino     /* Option type -ix.  */
289*ef5ccd6cSJohn Marino     CMDARG_INIT_FILE,
290*ef5ccd6cSJohn Marino 
291*ef5ccd6cSJohn Marino     /* Option type -iex.  */
292*ef5ccd6cSJohn Marino     CMDARG_INIT_COMMAND
293*ef5ccd6cSJohn Marino   } type;
294*ef5ccd6cSJohn Marino 
295*ef5ccd6cSJohn Marino   /* Value of this option - filename or the GDB command itself.  String memory
296*ef5ccd6cSJohn Marino      is not owned by this structure despite it is 'const'.  */
297*ef5ccd6cSJohn Marino   char *string;
298*ef5ccd6cSJohn Marino } cmdarg_s;
299*ef5ccd6cSJohn Marino 
300*ef5ccd6cSJohn Marino /* Define type VEC (cmdarg_s).  */
301*ef5ccd6cSJohn Marino DEF_VEC_O (cmdarg_s);
302*ef5ccd6cSJohn Marino 
3035796c8dcSSimon Schubert static int
captured_main(void * data)3045796c8dcSSimon Schubert captured_main (void *data)
3055796c8dcSSimon Schubert {
3065796c8dcSSimon Schubert   struct captured_main_args *context = data;
3075796c8dcSSimon Schubert   int argc = context->argc;
3085796c8dcSSimon Schubert   char **argv = context->argv;
3095796c8dcSSimon Schubert   static int quiet = 0;
3105796c8dcSSimon Schubert   static int set_args = 0;
311*ef5ccd6cSJohn Marino   static int inhibit_home_gdbinit = 0;
3125796c8dcSSimon Schubert 
3135796c8dcSSimon Schubert   /* Pointers to various arguments from command line.  */
3145796c8dcSSimon Schubert   char *symarg = NULL;
3155796c8dcSSimon Schubert   char *execarg = NULL;
3165796c8dcSSimon Schubert   char *pidarg = NULL;
3175796c8dcSSimon Schubert   char *corearg = NULL;
3185796c8dcSSimon Schubert   char *pid_or_core_arg = NULL;
3195796c8dcSSimon Schubert   char *cdarg = NULL;
3205796c8dcSSimon Schubert   char *ttyarg = NULL;
3215796c8dcSSimon Schubert 
322c50c785cSJohn Marino   /* These are static so that we can take their address in an
323c50c785cSJohn Marino      initializer.  */
3245796c8dcSSimon Schubert   static int print_help;
3255796c8dcSSimon Schubert   static int print_version;
3265796c8dcSSimon Schubert 
3275796c8dcSSimon Schubert   /* Pointers to all arguments of --command option.  */
328*ef5ccd6cSJohn Marino   VEC (cmdarg_s) *cmdarg_vec = NULL;
329*ef5ccd6cSJohn Marino   struct cmdarg *cmdarg_p;
3305796c8dcSSimon Schubert 
3315796c8dcSSimon Schubert   /* Indices of all arguments of --directory option.  */
3325796c8dcSSimon Schubert   char **dirarg;
3335796c8dcSSimon Schubert   /* Allocated size.  */
3345796c8dcSSimon Schubert   int dirsize;
3355796c8dcSSimon Schubert   /* Number of elements used.  */
3365796c8dcSSimon Schubert   int ndir;
3375796c8dcSSimon Schubert 
3385796c8dcSSimon Schubert   /* gdb init files.  */
3395796c8dcSSimon Schubert   char *system_gdbinit;
3405796c8dcSSimon Schubert   char *home_gdbinit;
3415796c8dcSSimon Schubert   char *local_gdbinit;
3425796c8dcSSimon Schubert 
3435796c8dcSSimon Schubert   int i;
344cf7f2e2dSJohn Marino   int save_auto_load;
345c50c785cSJohn Marino   struct objfile *objfile;
3465796c8dcSSimon Schubert 
347a45ae5f8SJohn Marino   struct cleanup *pre_stat_chain;
348a45ae5f8SJohn Marino 
349a45ae5f8SJohn Marino #ifdef HAVE_SBRK
350a45ae5f8SJohn Marino   /* Set this before calling make_command_stats_cleanup.  */
351a45ae5f8SJohn Marino   lim_at_start = (char *) sbrk (0);
352a45ae5f8SJohn Marino #endif
353a45ae5f8SJohn Marino 
354a45ae5f8SJohn Marino   pre_stat_chain = make_command_stats_cleanup (0);
3555796c8dcSSimon Schubert 
3565796c8dcSSimon Schubert #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
3575796c8dcSSimon Schubert   setlocale (LC_MESSAGES, "");
3585796c8dcSSimon Schubert #endif
3595796c8dcSSimon Schubert #if defined (HAVE_SETLOCALE)
3605796c8dcSSimon Schubert   setlocale (LC_CTYPE, "");
3615796c8dcSSimon Schubert #endif
3625796c8dcSSimon Schubert   bindtextdomain (PACKAGE, LOCALEDIR);
3635796c8dcSSimon Schubert   textdomain (PACKAGE);
3645796c8dcSSimon Schubert 
365*ef5ccd6cSJohn Marino   bfd_init ();
366*ef5ccd6cSJohn Marino 
367*ef5ccd6cSJohn Marino   make_cleanup (VEC_cleanup (cmdarg_s), &cmdarg_vec);
3685796c8dcSSimon Schubert   dirsize = 1;
3695796c8dcSSimon Schubert   dirarg = (char **) xmalloc (dirsize * sizeof (*dirarg));
3705796c8dcSSimon Schubert   ndir = 0;
3715796c8dcSSimon Schubert 
372*ef5ccd6cSJohn Marino   clear_quit_flag ();
373a45ae5f8SJohn Marino   saved_command_line = (char *) xmalloc (saved_command_line_size);
374a45ae5f8SJohn Marino   saved_command_line[0] = '\0';
3755796c8dcSSimon Schubert   instream = stdin;
3765796c8dcSSimon Schubert 
3775796c8dcSSimon Schubert   gdb_stdout = stdio_fileopen (stdout);
3785796c8dcSSimon Schubert   gdb_stderr = stdio_fileopen (stderr);
3795796c8dcSSimon Schubert   gdb_stdlog = gdb_stderr;	/* for moment */
3805796c8dcSSimon Schubert   gdb_stdtarg = gdb_stderr;	/* for moment */
3815796c8dcSSimon Schubert   gdb_stdin = stdio_fileopen (stdin);
3825796c8dcSSimon Schubert   gdb_stdtargerr = gdb_stderr;	/* for moment */
3835796c8dcSSimon Schubert   gdb_stdtargin = gdb_stdin;	/* for moment */
3845796c8dcSSimon Schubert 
385*ef5ccd6cSJohn Marino #ifdef __MINGW32__
386*ef5ccd6cSJohn Marino   /* On Windows, argv[0] is not necessarily set to absolute form when
387*ef5ccd6cSJohn Marino      GDB is found along PATH, without which relocation doesn't work.  */
388*ef5ccd6cSJohn Marino   gdb_program_name = windows_get_absolute_argv0 (argv[0]);
389*ef5ccd6cSJohn Marino #else
3905796c8dcSSimon Schubert   gdb_program_name = xstrdup (argv[0]);
391*ef5ccd6cSJohn Marino #endif
3925796c8dcSSimon Schubert 
3935796c8dcSSimon Schubert   if (! getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)))
3945796c8dcSSimon Schubert     /* Don't use *_filtered or warning() (which relies on
3955796c8dcSSimon Schubert        current_target) until after initialize_all_files().  */
3965796c8dcSSimon Schubert     fprintf_unfiltered (gdb_stderr,
397c50c785cSJohn Marino 			_("%s: warning: error finding "
398c50c785cSJohn Marino 			  "working directory: %s\n"),
3995796c8dcSSimon Schubert                         argv[0], safe_strerror (errno));
4005796c8dcSSimon Schubert 
4015796c8dcSSimon Schubert   current_directory = gdb_dirbuf;
4025796c8dcSSimon Schubert 
4035796c8dcSSimon Schubert   /* Set the sysroot path.  */
404a45ae5f8SJohn Marino   gdb_sysroot = relocate_gdb_directory (TARGET_SYSTEM_ROOT,
4055796c8dcSSimon Schubert 					TARGET_SYSTEM_ROOT_RELOCATABLE);
4065796c8dcSSimon Schubert 
407a45ae5f8SJohn Marino   debug_file_directory = relocate_gdb_directory (DEBUGDIR,
4085796c8dcSSimon Schubert 						 DEBUGDIR_RELOCATABLE);
4095796c8dcSSimon Schubert 
410a45ae5f8SJohn Marino   gdb_datadir = relocate_gdb_directory (GDB_DATADIR,
4115796c8dcSSimon Schubert 					GDB_DATADIR_RELOCATABLE);
4125796c8dcSSimon Schubert 
413cf7f2e2dSJohn Marino #ifdef WITH_PYTHON_PATH
414c50c785cSJohn Marino   {
415cf7f2e2dSJohn Marino     /* For later use in helping Python find itself.  */
416c50c785cSJohn Marino     char *tmp = concat (WITH_PYTHON_PATH, SLASH_STRING, "lib", NULL);
417c50c785cSJohn Marino 
418a45ae5f8SJohn Marino     python_libdir = relocate_gdb_directory (tmp, PYTHON_PATH_RELOCATABLE);
419c50c785cSJohn Marino     xfree (tmp);
420c50c785cSJohn Marino   }
421cf7f2e2dSJohn Marino #endif
422cf7f2e2dSJohn Marino 
4235796c8dcSSimon Schubert #ifdef RELOC_SRCDIR
4245796c8dcSSimon Schubert   add_substitute_path_rule (RELOC_SRCDIR,
425*ef5ccd6cSJohn Marino 			    make_relative_prefix (gdb_program_name, BINDIR,
4265796c8dcSSimon Schubert 						  RELOC_SRCDIR));
4275796c8dcSSimon Schubert #endif
4285796c8dcSSimon Schubert 
4295796c8dcSSimon Schubert   /* There will always be an interpreter.  Either the one passed into
4305796c8dcSSimon Schubert      this captured main, or one specified by the user at start up, or
4315796c8dcSSimon Schubert      the console.  Initialize the interpreter to the one requested by
4325796c8dcSSimon Schubert      the application.  */
4335796c8dcSSimon Schubert   interpreter_p = xstrdup (context->interpreter_p);
4345796c8dcSSimon Schubert 
4355796c8dcSSimon Schubert   /* Parse arguments and options.  */
4365796c8dcSSimon Schubert   {
4375796c8dcSSimon Schubert     int c;
4385796c8dcSSimon Schubert     /* When var field is 0, use flag field to record the equivalent
4395796c8dcSSimon Schubert        short option (or arbitrary numbers starting at 10 for those
4405796c8dcSSimon Schubert        with no equivalent).  */
4415796c8dcSSimon Schubert     enum {
4425796c8dcSSimon Schubert       OPT_SE = 10,
4435796c8dcSSimon Schubert       OPT_CD,
4445796c8dcSSimon Schubert       OPT_ANNOTATE,
4455796c8dcSSimon Schubert       OPT_STATISTICS,
4465796c8dcSSimon Schubert       OPT_TUI,
447a938cc15SJohn Marino       OPT_KGDB,
4485796c8dcSSimon Schubert       OPT_NOWINDOWS,
449*ef5ccd6cSJohn Marino       OPT_WINDOWS,
450*ef5ccd6cSJohn Marino       OPT_IX,
451*ef5ccd6cSJohn Marino       OPT_IEX
4525796c8dcSSimon Schubert     };
4535796c8dcSSimon Schubert     static struct option long_options[] =
4545796c8dcSSimon Schubert     {
4555796c8dcSSimon Schubert       {"tui", no_argument, 0, OPT_TUI},
4565796c8dcSSimon Schubert       {"xdb", no_argument, &xdb_commands, 1},
4575796c8dcSSimon Schubert       {"dbx", no_argument, &dbx_commands, 1},
4585796c8dcSSimon Schubert       {"readnow", no_argument, &readnow_symbol_files, 1},
4595796c8dcSSimon Schubert       {"r", no_argument, &readnow_symbol_files, 1},
4605796c8dcSSimon Schubert       {"quiet", no_argument, &quiet, 1},
4615796c8dcSSimon Schubert       {"q", no_argument, &quiet, 1},
4625796c8dcSSimon Schubert       {"silent", no_argument, &quiet, 1},
463*ef5ccd6cSJohn Marino       {"nh", no_argument, &inhibit_home_gdbinit, 1},
4645796c8dcSSimon Schubert       {"nx", no_argument, &inhibit_gdbinit, 1},
4655796c8dcSSimon Schubert       {"n", no_argument, &inhibit_gdbinit, 1},
4665796c8dcSSimon Schubert       {"batch-silent", no_argument, 0, 'B'},
467cf7f2e2dSJohn Marino       {"batch", no_argument, &batch_flag, 1},
4685796c8dcSSimon Schubert 
469c50c785cSJohn Marino     /* This is a synonym for "--annotate=1".  --annotate is now
470c50c785cSJohn Marino        preferred, but keep this here for a long time because people
471c50c785cSJohn Marino        will be running emacses which use --fullname.  */
4725796c8dcSSimon Schubert       {"fullname", no_argument, 0, 'f'},
4735796c8dcSSimon Schubert       {"f", no_argument, 0, 'f'},
4745796c8dcSSimon Schubert 
475a938cc15SJohn Marino       {"kernel", no_argument, 0, OPT_KGDB},
4765796c8dcSSimon Schubert       {"annotate", required_argument, 0, OPT_ANNOTATE},
4775796c8dcSSimon Schubert       {"help", no_argument, &print_help, 1},
4785796c8dcSSimon Schubert       {"se", required_argument, 0, OPT_SE},
4795796c8dcSSimon Schubert       {"symbols", required_argument, 0, 's'},
4805796c8dcSSimon Schubert       {"s", required_argument, 0, 's'},
4815796c8dcSSimon Schubert       {"exec", required_argument, 0, 'e'},
4825796c8dcSSimon Schubert       {"e", required_argument, 0, 'e'},
4835796c8dcSSimon Schubert       {"core", required_argument, 0, 'c'},
4845796c8dcSSimon Schubert       {"c", required_argument, 0, 'c'},
4855796c8dcSSimon Schubert       {"pid", required_argument, 0, 'p'},
4865796c8dcSSimon Schubert       {"p", required_argument, 0, 'p'},
4875796c8dcSSimon Schubert       {"command", required_argument, 0, 'x'},
4885796c8dcSSimon Schubert       {"eval-command", required_argument, 0, 'X'},
4895796c8dcSSimon Schubert       {"version", no_argument, &print_version, 1},
4905796c8dcSSimon Schubert       {"x", required_argument, 0, 'x'},
4915796c8dcSSimon Schubert       {"ex", required_argument, 0, 'X'},
492*ef5ccd6cSJohn Marino       {"init-command", required_argument, 0, OPT_IX},
493*ef5ccd6cSJohn Marino       {"init-eval-command", required_argument, 0, OPT_IEX},
494*ef5ccd6cSJohn Marino       {"ix", required_argument, 0, OPT_IX},
495*ef5ccd6cSJohn Marino       {"iex", required_argument, 0, OPT_IEX},
4965796c8dcSSimon Schubert #ifdef GDBTK
4975796c8dcSSimon Schubert       {"tclcommand", required_argument, 0, 'z'},
4985796c8dcSSimon Schubert       {"enable-external-editor", no_argument, 0, 'y'},
4995796c8dcSSimon Schubert       {"editor-command", required_argument, 0, 'w'},
5005796c8dcSSimon Schubert #endif
5015796c8dcSSimon Schubert       {"ui", required_argument, 0, 'i'},
5025796c8dcSSimon Schubert       {"interpreter", required_argument, 0, 'i'},
5035796c8dcSSimon Schubert       {"i", required_argument, 0, 'i'},
5045796c8dcSSimon Schubert       {"directory", required_argument, 0, 'd'},
5055796c8dcSSimon Schubert       {"d", required_argument, 0, 'd'},
506c50c785cSJohn Marino       {"data-directory", required_argument, 0, 'D'},
5075796c8dcSSimon Schubert       {"cd", required_argument, 0, OPT_CD},
5085796c8dcSSimon Schubert       {"tty", required_argument, 0, 't'},
5095796c8dcSSimon Schubert       {"baud", required_argument, 0, 'b'},
5105796c8dcSSimon Schubert       {"b", required_argument, 0, 'b'},
5115796c8dcSSimon Schubert       {"nw", no_argument, NULL, OPT_NOWINDOWS},
5125796c8dcSSimon Schubert       {"nowindows", no_argument, NULL, OPT_NOWINDOWS},
5135796c8dcSSimon Schubert       {"w", no_argument, NULL, OPT_WINDOWS},
5145796c8dcSSimon Schubert       {"windows", no_argument, NULL, OPT_WINDOWS},
5155796c8dcSSimon Schubert       {"statistics", no_argument, 0, OPT_STATISTICS},
5165796c8dcSSimon Schubert       {"write", no_argument, &write_files, 1},
5175796c8dcSSimon Schubert       {"args", no_argument, &set_args, 1},
5185796c8dcSSimon Schubert       {"l", required_argument, 0, 'l'},
5195796c8dcSSimon Schubert       {"return-child-result", no_argument, &return_child_result, 1},
5205796c8dcSSimon Schubert       {0, no_argument, 0, 0}
5215796c8dcSSimon Schubert     };
5225796c8dcSSimon Schubert 
5235796c8dcSSimon Schubert     while (1)
5245796c8dcSSimon Schubert       {
5255796c8dcSSimon Schubert 	int option_index;
5265796c8dcSSimon Schubert 
5275796c8dcSSimon Schubert 	c = getopt_long_only (argc, argv, "",
5285796c8dcSSimon Schubert 			      long_options, &option_index);
5295796c8dcSSimon Schubert 	if (c == EOF || set_args)
5305796c8dcSSimon Schubert 	  break;
5315796c8dcSSimon Schubert 
5325796c8dcSSimon Schubert 	/* Long option that takes an argument.  */
5335796c8dcSSimon Schubert 	if (c == 0 && long_options[option_index].flag == 0)
5345796c8dcSSimon Schubert 	  c = long_options[option_index].val;
5355796c8dcSSimon Schubert 
5365796c8dcSSimon Schubert 	switch (c)
5375796c8dcSSimon Schubert 	  {
5385796c8dcSSimon Schubert 	  case 0:
5395796c8dcSSimon Schubert 	    /* Long option that just sets a flag.  */
5405796c8dcSSimon Schubert 	    break;
5415796c8dcSSimon Schubert 	  case OPT_SE:
5425796c8dcSSimon Schubert 	    symarg = optarg;
5435796c8dcSSimon Schubert 	    execarg = optarg;
5445796c8dcSSimon Schubert 	    break;
5455796c8dcSSimon Schubert 	  case OPT_CD:
5465796c8dcSSimon Schubert 	    cdarg = optarg;
5475796c8dcSSimon Schubert 	    break;
5485796c8dcSSimon Schubert 	  case OPT_ANNOTATE:
5495796c8dcSSimon Schubert 	    /* FIXME: what if the syntax is wrong (e.g. not digits)?  */
5505796c8dcSSimon Schubert 	    annotation_level = atoi (optarg);
5515796c8dcSSimon Schubert 	    break;
5525796c8dcSSimon Schubert 	  case OPT_STATISTICS:
5535796c8dcSSimon Schubert 	    /* Enable the display of both time and space usage.  */
554cf7f2e2dSJohn Marino 	    set_display_time (1);
555cf7f2e2dSJohn Marino 	    set_display_space (1);
5565796c8dcSSimon Schubert 	    break;
5575796c8dcSSimon Schubert 	  case OPT_TUI:
5585796c8dcSSimon Schubert 	    /* --tui is equivalent to -i=tui.  */
5595796c8dcSSimon Schubert #ifdef TUI
5605796c8dcSSimon Schubert 	    xfree (interpreter_p);
5615796c8dcSSimon Schubert 	    interpreter_p = xstrdup (INTERP_TUI);
5625796c8dcSSimon Schubert #else
5635796c8dcSSimon Schubert 	    fprintf_unfiltered (gdb_stderr,
5645796c8dcSSimon Schubert 				_("%s: TUI mode is not supported\n"),
5655796c8dcSSimon Schubert 				argv[0]);
5665796c8dcSSimon Schubert 	    exit (1);
5675796c8dcSSimon Schubert #endif
5685796c8dcSSimon Schubert 	    break;
569a938cc15SJohn Marino 	  case OPT_KGDB:
570a938cc15SJohn Marino 	    kernel_debugger = 1;
571a938cc15SJohn Marino 	    break;
5725796c8dcSSimon Schubert 	  case OPT_WINDOWS:
5735796c8dcSSimon Schubert 	    /* FIXME: cagney/2003-03-01: Not sure if this option is
5745796c8dcSSimon Schubert                actually useful, and if it is, what it should do.  */
5755796c8dcSSimon Schubert #ifdef GDBTK
5765796c8dcSSimon Schubert 	    /* --windows is equivalent to -i=insight.  */
5775796c8dcSSimon Schubert 	    xfree (interpreter_p);
5785796c8dcSSimon Schubert 	    interpreter_p = xstrdup (INTERP_INSIGHT);
5795796c8dcSSimon Schubert #endif
5805796c8dcSSimon Schubert 	    use_windows = 1;
5815796c8dcSSimon Schubert 	    break;
5825796c8dcSSimon Schubert 	  case OPT_NOWINDOWS:
5835796c8dcSSimon Schubert 	    /* -nw is equivalent to -i=console.  */
5845796c8dcSSimon Schubert 	    xfree (interpreter_p);
5855796c8dcSSimon Schubert 	    interpreter_p = xstrdup (INTERP_CONSOLE);
5865796c8dcSSimon Schubert 	    use_windows = 0;
5875796c8dcSSimon Schubert 	    break;
5885796c8dcSSimon Schubert 	  case 'f':
5895796c8dcSSimon Schubert 	    annotation_level = 1;
590c50c785cSJohn Marino 	    /* We have probably been invoked from emacs.  Disable
591c50c785cSJohn Marino 	       window interface.  */
5925796c8dcSSimon Schubert 	    use_windows = 0;
5935796c8dcSSimon Schubert 	    break;
5945796c8dcSSimon Schubert 	  case 's':
5955796c8dcSSimon Schubert 	    symarg = optarg;
5965796c8dcSSimon Schubert 	    break;
5975796c8dcSSimon Schubert 	  case 'e':
5985796c8dcSSimon Schubert 	    execarg = optarg;
5995796c8dcSSimon Schubert 	    break;
6005796c8dcSSimon Schubert 	  case 'c':
6015796c8dcSSimon Schubert 	    corearg = optarg;
6025796c8dcSSimon Schubert 	    break;
6035796c8dcSSimon Schubert 	  case 'p':
6045796c8dcSSimon Schubert 	    pidarg = optarg;
6055796c8dcSSimon Schubert 	    break;
6065796c8dcSSimon Schubert 	  case 'x':
6075796c8dcSSimon Schubert 	    {
608*ef5ccd6cSJohn Marino 	      struct cmdarg cmdarg = { CMDARG_FILE, optarg };
609*ef5ccd6cSJohn Marino 
610*ef5ccd6cSJohn Marino 	      VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
6115796c8dcSSimon Schubert 	    }
6125796c8dcSSimon Schubert 	    break;
6135796c8dcSSimon Schubert 	  case 'X':
6145796c8dcSSimon Schubert 	    {
615*ef5ccd6cSJohn Marino 	      struct cmdarg cmdarg = { CMDARG_COMMAND, optarg };
616*ef5ccd6cSJohn Marino 
617*ef5ccd6cSJohn Marino 	      VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
618*ef5ccd6cSJohn Marino 	    }
619*ef5ccd6cSJohn Marino 	    break;
620*ef5ccd6cSJohn Marino 	  case OPT_IX:
621*ef5ccd6cSJohn Marino 	    {
622*ef5ccd6cSJohn Marino 	      struct cmdarg cmdarg = { CMDARG_INIT_FILE, optarg };
623*ef5ccd6cSJohn Marino 
624*ef5ccd6cSJohn Marino 	      VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
625*ef5ccd6cSJohn Marino 	    }
626*ef5ccd6cSJohn Marino 	    break;
627*ef5ccd6cSJohn Marino 	  case OPT_IEX:
628*ef5ccd6cSJohn Marino 	    {
629*ef5ccd6cSJohn Marino 	      struct cmdarg cmdarg = { CMDARG_INIT_COMMAND, optarg };
630*ef5ccd6cSJohn Marino 
631*ef5ccd6cSJohn Marino 	      VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
6325796c8dcSSimon Schubert 	    }
6335796c8dcSSimon Schubert 	    break;
6345796c8dcSSimon Schubert 	  case 'B':
635cf7f2e2dSJohn Marino 	    batch_flag = batch_silent = 1;
6365796c8dcSSimon Schubert 	    gdb_stdout = ui_file_new();
6375796c8dcSSimon Schubert 	    break;
638c50c785cSJohn Marino 	  case 'D':
639c50c785cSJohn Marino 	    xfree (gdb_datadir);
640c50c785cSJohn Marino 	    gdb_datadir = xstrdup (optarg);
641*ef5ccd6cSJohn Marino 	    gdb_datadir_provided = 1;
642c50c785cSJohn Marino 	    break;
6435796c8dcSSimon Schubert #ifdef GDBTK
6445796c8dcSSimon Schubert 	  case 'z':
6455796c8dcSSimon Schubert 	    {
6465796c8dcSSimon Schubert 	      extern int gdbtk_test (char *);
647c50c785cSJohn Marino 
6485796c8dcSSimon Schubert 	      if (!gdbtk_test (optarg))
6495796c8dcSSimon Schubert 		{
650c50c785cSJohn Marino 		  fprintf_unfiltered (gdb_stderr,
651c50c785cSJohn Marino 				      _("%s: unable to load "
652c50c785cSJohn Marino 					"tclcommand file \"%s\""),
6535796c8dcSSimon Schubert 				      argv[0], optarg);
6545796c8dcSSimon Schubert 		  exit (1);
6555796c8dcSSimon Schubert 		}
6565796c8dcSSimon Schubert 	      break;
6575796c8dcSSimon Schubert 	    }
6585796c8dcSSimon Schubert 	  case 'y':
6595796c8dcSSimon Schubert 	    /* Backwards compatibility only.  */
6605796c8dcSSimon Schubert 	    break;
6615796c8dcSSimon Schubert 	  case 'w':
6625796c8dcSSimon Schubert 	    {
663*ef5ccd6cSJohn Marino 	      /* Set the external editor commands when gdb is farming out files
664*ef5ccd6cSJohn Marino 		 to be edited by another program.  */
665*ef5ccd6cSJohn Marino 	      extern char *external_editor_command;
666*ef5ccd6cSJohn Marino 
6675796c8dcSSimon Schubert 	      external_editor_command = xstrdup (optarg);
6685796c8dcSSimon Schubert 	      break;
6695796c8dcSSimon Schubert 	    }
6705796c8dcSSimon Schubert #endif /* GDBTK */
6715796c8dcSSimon Schubert 	  case 'i':
6725796c8dcSSimon Schubert 	    xfree (interpreter_p);
6735796c8dcSSimon Schubert 	    interpreter_p = xstrdup (optarg);
6745796c8dcSSimon Schubert 	    break;
6755796c8dcSSimon Schubert 	  case 'd':
6765796c8dcSSimon Schubert 	    dirarg[ndir++] = optarg;
6775796c8dcSSimon Schubert 	    if (ndir >= dirsize)
6785796c8dcSSimon Schubert 	      {
6795796c8dcSSimon Schubert 		dirsize *= 2;
6805796c8dcSSimon Schubert 		dirarg = (char **) xrealloc ((char *) dirarg,
6815796c8dcSSimon Schubert 					     dirsize * sizeof (*dirarg));
6825796c8dcSSimon Schubert 	      }
6835796c8dcSSimon Schubert 	    break;
6845796c8dcSSimon Schubert 	  case 't':
6855796c8dcSSimon Schubert 	    ttyarg = optarg;
6865796c8dcSSimon Schubert 	    break;
6875796c8dcSSimon Schubert 	  case 'q':
6885796c8dcSSimon Schubert 	    quiet = 1;
6895796c8dcSSimon Schubert 	    break;
6905796c8dcSSimon Schubert 	  case 'b':
6915796c8dcSSimon Schubert 	    {
6925796c8dcSSimon Schubert 	      int i;
6935796c8dcSSimon Schubert 	      char *p;
6945796c8dcSSimon Schubert 
6955796c8dcSSimon Schubert 	      i = strtol (optarg, &p, 0);
6965796c8dcSSimon Schubert 	      if (i == 0 && p == optarg)
6975796c8dcSSimon Schubert 
6985796c8dcSSimon Schubert 		/* Don't use *_filtered or warning() (which relies on
6995796c8dcSSimon Schubert 		   current_target) until after initialize_all_files().  */
7005796c8dcSSimon Schubert 
7015796c8dcSSimon Schubert 		fprintf_unfiltered
7025796c8dcSSimon Schubert 		  (gdb_stderr,
7035796c8dcSSimon Schubert 		   _("warning: could not set baud rate to `%s'.\n"), optarg);
7045796c8dcSSimon Schubert 	      else
7055796c8dcSSimon Schubert 		baud_rate = i;
7065796c8dcSSimon Schubert 	    }
7075796c8dcSSimon Schubert             break;
7085796c8dcSSimon Schubert 	  case 'l':
7095796c8dcSSimon Schubert 	    {
7105796c8dcSSimon Schubert 	      int i;
7115796c8dcSSimon Schubert 	      char *p;
7125796c8dcSSimon Schubert 
7135796c8dcSSimon Schubert 	      i = strtol (optarg, &p, 0);
7145796c8dcSSimon Schubert 	      if (i == 0 && p == optarg)
7155796c8dcSSimon Schubert 
7165796c8dcSSimon Schubert 		/* Don't use *_filtered or warning() (which relies on
7175796c8dcSSimon Schubert 		   current_target) until after initialize_all_files().  */
7185796c8dcSSimon Schubert 
719c50c785cSJohn Marino 		fprintf_unfiltered (gdb_stderr,
720c50c785cSJohn Marino 				    _("warning: could not set "
721c50c785cSJohn Marino 				      "timeout limit to `%s'.\n"), optarg);
7225796c8dcSSimon Schubert 	      else
7235796c8dcSSimon Schubert 		remote_timeout = i;
7245796c8dcSSimon Schubert 	    }
7255796c8dcSSimon Schubert 	    break;
7265796c8dcSSimon Schubert 
7275796c8dcSSimon Schubert 	  case '?':
7285796c8dcSSimon Schubert 	    fprintf_unfiltered (gdb_stderr,
729c50c785cSJohn Marino 				_("Use `%s --help' for a "
730c50c785cSJohn Marino 				  "complete list of options.\n"),
7315796c8dcSSimon Schubert 				argv[0]);
7325796c8dcSSimon Schubert 	    exit (1);
7335796c8dcSSimon Schubert 	  }
7345796c8dcSSimon Schubert       }
7355796c8dcSSimon Schubert 
7365796c8dcSSimon Schubert     /* If --help or --version, disable window interface.  */
7375796c8dcSSimon Schubert     if (print_help || print_version)
7385796c8dcSSimon Schubert       {
7395796c8dcSSimon Schubert 	use_windows = 0;
7405796c8dcSSimon Schubert       }
7415796c8dcSSimon Schubert 
742cf7f2e2dSJohn Marino     if (batch_flag)
743cf7f2e2dSJohn Marino       quiet = 1;
744cf7f2e2dSJohn Marino   }
745cf7f2e2dSJohn Marino 
746cf7f2e2dSJohn Marino   /* Initialize all files.  Give the interpreter a chance to take
747cf7f2e2dSJohn Marino      control of the console via the deprecated_init_ui_hook ().  */
748*ef5ccd6cSJohn Marino   gdb_init (gdb_program_name);
749cf7f2e2dSJohn Marino 
750c50c785cSJohn Marino   /* Now that gdb_init has created the initial inferior, we're in
751c50c785cSJohn Marino      position to set args for that inferior.  */
7525796c8dcSSimon Schubert   if (set_args)
7535796c8dcSSimon Schubert     {
7545796c8dcSSimon Schubert       /* The remaining options are the command-line options for the
7555796c8dcSSimon Schubert 	 inferior.  The first one is the sym/exec file, and the rest
7565796c8dcSSimon Schubert 	 are arguments.  */
7575796c8dcSSimon Schubert       if (optind >= argc)
7585796c8dcSSimon Schubert 	{
7595796c8dcSSimon Schubert 	  fprintf_unfiltered (gdb_stderr,
760c50c785cSJohn Marino 			      _("%s: `--args' specified but "
761c50c785cSJohn Marino 				"no program specified\n"),
7625796c8dcSSimon Schubert 			      argv[0]);
7635796c8dcSSimon Schubert 	  exit (1);
7645796c8dcSSimon Schubert 	}
7655796c8dcSSimon Schubert       symarg = argv[optind];
7665796c8dcSSimon Schubert       execarg = argv[optind];
7675796c8dcSSimon Schubert       ++optind;
7685796c8dcSSimon Schubert       set_inferior_args_vector (argc - optind, &argv[optind]);
7695796c8dcSSimon Schubert     }
7705796c8dcSSimon Schubert   else
7715796c8dcSSimon Schubert     {
7725796c8dcSSimon Schubert       /* OK, that's all the options.  */
7735796c8dcSSimon Schubert 
7745796c8dcSSimon Schubert       /* The first argument, if specified, is the name of the
7755796c8dcSSimon Schubert 	 executable.  */
7765796c8dcSSimon Schubert       if (optind < argc)
7775796c8dcSSimon Schubert 	{
7785796c8dcSSimon Schubert 	  symarg = argv[optind];
7795796c8dcSSimon Schubert 	  execarg = argv[optind];
7805796c8dcSSimon Schubert 	  optind++;
7815796c8dcSSimon Schubert 	}
7825796c8dcSSimon Schubert 
7835796c8dcSSimon Schubert       /* If the user hasn't already specified a PID or the name of a
7845796c8dcSSimon Schubert 	 core file, then a second optional argument is allowed.  If
7855796c8dcSSimon Schubert 	 present, this argument should be interpreted as either a
7865796c8dcSSimon Schubert 	 PID or a core file, whichever works.  */
7875796c8dcSSimon Schubert       if (pidarg == NULL && corearg == NULL && optind < argc)
7885796c8dcSSimon Schubert 	{
7895796c8dcSSimon Schubert 	  pid_or_core_arg = argv[optind];
7905796c8dcSSimon Schubert 	  optind++;
7915796c8dcSSimon Schubert 	}
7925796c8dcSSimon Schubert 
7935796c8dcSSimon Schubert       /* Any argument left on the command line is unexpected and
7945796c8dcSSimon Schubert 	 will be ignored.  Inform the user.  */
7955796c8dcSSimon Schubert       if (optind < argc)
796c50c785cSJohn Marino 	fprintf_unfiltered (gdb_stderr,
797c50c785cSJohn Marino 			    _("Excess command line "
798c50c785cSJohn Marino 			      "arguments ignored. (%s%s)\n"),
7995796c8dcSSimon Schubert 			    argv[optind],
8005796c8dcSSimon Schubert 			    (optind == argc - 1) ? "" : " ...");
8015796c8dcSSimon Schubert     }
8025796c8dcSSimon Schubert 
803c50c785cSJohn Marino   /* Lookup gdbinit files.  Note that the gdbinit file name may be
804c50c785cSJohn Marino      overriden during file initialization, so get_init_files should be
805c50c785cSJohn Marino      called after gdb_init.  */
8065796c8dcSSimon Schubert   get_init_files (&system_gdbinit, &home_gdbinit, &local_gdbinit);
8075796c8dcSSimon Schubert 
8085796c8dcSSimon Schubert   /* Do these (and anything which might call wrap_here or *_filtered)
8095796c8dcSSimon Schubert      after initialize_all_files() but before the interpreter has been
8105796c8dcSSimon Schubert      installed.  Otherwize the help/version messages will be eaten by
8115796c8dcSSimon Schubert      the interpreter's output handler.  */
8125796c8dcSSimon Schubert 
8135796c8dcSSimon Schubert   if (print_version)
8145796c8dcSSimon Schubert     {
8155796c8dcSSimon Schubert       print_gdb_version (gdb_stdout);
8165796c8dcSSimon Schubert       wrap_here ("");
8175796c8dcSSimon Schubert       printf_filtered ("\n");
8185796c8dcSSimon Schubert       exit (0);
8195796c8dcSSimon Schubert     }
8205796c8dcSSimon Schubert 
8215796c8dcSSimon Schubert   if (print_help)
8225796c8dcSSimon Schubert     {
8235796c8dcSSimon Schubert       print_gdb_help (gdb_stdout);
8245796c8dcSSimon Schubert       fputs_unfiltered ("\n", gdb_stdout);
8255796c8dcSSimon Schubert       exit (0);
8265796c8dcSSimon Schubert     }
8275796c8dcSSimon Schubert 
8285796c8dcSSimon Schubert   /* FIXME: cagney/2003-02-03: The big hack (part 1 of 2) that lets
8295796c8dcSSimon Schubert      GDB retain the old MI1 interpreter startup behavior.  Output the
8305796c8dcSSimon Schubert      copyright message before the interpreter is installed.  That way
8315796c8dcSSimon Schubert      it isn't encapsulated in MI output.  */
8325796c8dcSSimon Schubert   if (!quiet && strcmp (interpreter_p, INTERP_MI1) == 0)
8335796c8dcSSimon Schubert     {
834c50c785cSJohn Marino       /* Print all the junk at the top, with trailing "..." if we are
835c50c785cSJohn Marino          about to read a symbol file (possibly slowly).  */
8365796c8dcSSimon Schubert       print_gdb_version (gdb_stdout);
8375796c8dcSSimon Schubert       if (symarg)
8385796c8dcSSimon Schubert 	printf_filtered ("..");
8395796c8dcSSimon Schubert       wrap_here ("");
8405796c8dcSSimon Schubert       printf_filtered ("\n");
841c50c785cSJohn Marino       gdb_flush (gdb_stdout);	/* Force to screen during slow
842c50c785cSJohn Marino 				   operations.  */
8435796c8dcSSimon Schubert     }
8445796c8dcSSimon Schubert 
8455796c8dcSSimon Schubert   /* Install the default UI.  All the interpreters should have had a
8465796c8dcSSimon Schubert      look at things by now.  Initialize the default interpreter.  */
8475796c8dcSSimon Schubert 
8485796c8dcSSimon Schubert   {
8495796c8dcSSimon Schubert     /* Find it.  */
8505796c8dcSSimon Schubert     struct interp *interp = interp_lookup (interpreter_p);
851cf7f2e2dSJohn Marino 
8525796c8dcSSimon Schubert     if (interp == NULL)
8535796c8dcSSimon Schubert       error (_("Interpreter `%s' unrecognized"), interpreter_p);
8545796c8dcSSimon Schubert     /* Install it.  */
8555796c8dcSSimon Schubert     if (!interp_set (interp, 1))
8565796c8dcSSimon Schubert       {
8575796c8dcSSimon Schubert         fprintf_unfiltered (gdb_stderr,
8585796c8dcSSimon Schubert 			    "Interpreter `%s' failed to initialize.\n",
8595796c8dcSSimon Schubert                             interpreter_p);
8605796c8dcSSimon Schubert         exit (1);
8615796c8dcSSimon Schubert       }
8625796c8dcSSimon Schubert   }
8635796c8dcSSimon Schubert 
8645796c8dcSSimon Schubert   /* FIXME: cagney/2003-02-03: The big hack (part 2 of 2) that lets
8655796c8dcSSimon Schubert      GDB retain the old MI1 interpreter startup behavior.  Output the
8665796c8dcSSimon Schubert      copyright message after the interpreter is installed when it is
8675796c8dcSSimon Schubert      any sane interpreter.  */
8685796c8dcSSimon Schubert   if (!quiet && !current_interp_named_p (INTERP_MI1))
8695796c8dcSSimon Schubert     {
870c50c785cSJohn Marino       /* Print all the junk at the top, with trailing "..." if we are
871c50c785cSJohn Marino          about to read a symbol file (possibly slowly).  */
8725796c8dcSSimon Schubert       print_gdb_version (gdb_stdout);
8735796c8dcSSimon Schubert       if (symarg)
8745796c8dcSSimon Schubert 	printf_filtered ("..");
8755796c8dcSSimon Schubert       wrap_here ("");
8765796c8dcSSimon Schubert       printf_filtered ("\n");
877c50c785cSJohn Marino       gdb_flush (gdb_stdout);	/* Force to screen during slow
878c50c785cSJohn Marino 				   operations.  */
8795796c8dcSSimon Schubert     }
8805796c8dcSSimon Schubert 
8815796c8dcSSimon Schubert   /* Set off error and warning messages with a blank line.  */
8825796c8dcSSimon Schubert   error_pre_print = "\n";
8835796c8dcSSimon Schubert   quit_pre_print = error_pre_print;
8845796c8dcSSimon Schubert   warning_pre_print = _("\nwarning: ");
8855796c8dcSSimon Schubert 
8865796c8dcSSimon Schubert   /* Read and execute the system-wide gdbinit file, if it exists.
8875796c8dcSSimon Schubert      This is done *before* all the command line arguments are
8885796c8dcSSimon Schubert      processed; it sets global parameters, which are independent of
8895796c8dcSSimon Schubert      what file you are debugging or what directory you are in.  */
8905796c8dcSSimon Schubert   if (system_gdbinit && !inhibit_gdbinit)
8915796c8dcSSimon Schubert     catch_command_errors (source_script, system_gdbinit, 0, RETURN_MASK_ALL);
8925796c8dcSSimon Schubert 
8935796c8dcSSimon Schubert   /* Read and execute $HOME/.gdbinit file, if it exists.  This is done
8945796c8dcSSimon Schubert      *before* all the command line arguments are processed; it sets
8955796c8dcSSimon Schubert      global parameters, which are independent of what file you are
8965796c8dcSSimon Schubert      debugging or what directory you are in.  */
8975796c8dcSSimon Schubert 
898*ef5ccd6cSJohn Marino   if (home_gdbinit && !inhibit_gdbinit && !inhibit_home_gdbinit)
8995796c8dcSSimon Schubert     catch_command_errors (source_script, home_gdbinit, 0, RETURN_MASK_ALL);
9005796c8dcSSimon Schubert 
901*ef5ccd6cSJohn Marino   /* Process '-ix' and '-iex' options early.  */
902*ef5ccd6cSJohn Marino   for (i = 0; VEC_iterate (cmdarg_s, cmdarg_vec, i, cmdarg_p); i++)
903*ef5ccd6cSJohn Marino     switch (cmdarg_p->type)
904*ef5ccd6cSJohn Marino     {
905*ef5ccd6cSJohn Marino       case CMDARG_INIT_FILE:
906*ef5ccd6cSJohn Marino         catch_command_errors (source_script, cmdarg_p->string,
907*ef5ccd6cSJohn Marino 			      !batch_flag, RETURN_MASK_ALL);
908*ef5ccd6cSJohn Marino 	break;
909*ef5ccd6cSJohn Marino       case CMDARG_INIT_COMMAND:
910*ef5ccd6cSJohn Marino         catch_command_errors (execute_command, cmdarg_p->string,
911*ef5ccd6cSJohn Marino 			      !batch_flag, RETURN_MASK_ALL);
912*ef5ccd6cSJohn Marino 	break;
913*ef5ccd6cSJohn Marino     }
914*ef5ccd6cSJohn Marino 
9155796c8dcSSimon Schubert   /* Now perform all the actions indicated by the arguments.  */
9165796c8dcSSimon Schubert   if (cdarg != NULL)
9175796c8dcSSimon Schubert     {
9185796c8dcSSimon Schubert       catch_command_errors (cd_command, cdarg, 0, RETURN_MASK_ALL);
9195796c8dcSSimon Schubert     }
9205796c8dcSSimon Schubert 
9215796c8dcSSimon Schubert   for (i = 0; i < ndir; i++)
9225796c8dcSSimon Schubert     catch_command_errors (directory_switch, dirarg[i], 0, RETURN_MASK_ALL);
9235796c8dcSSimon Schubert   xfree (dirarg);
9245796c8dcSSimon Schubert 
925cf7f2e2dSJohn Marino   /* Skip auto-loading section-specified scripts until we've sourced
926c50c785cSJohn Marino      local_gdbinit (which is often used to augment the source search
927c50c785cSJohn Marino      path).  */
928*ef5ccd6cSJohn Marino   save_auto_load = global_auto_load;
929*ef5ccd6cSJohn Marino   global_auto_load = 0;
930cf7f2e2dSJohn Marino 
9315796c8dcSSimon Schubert   if (execarg != NULL
9325796c8dcSSimon Schubert       && symarg != NULL
9335796c8dcSSimon Schubert       && strcmp (execarg, symarg) == 0)
9345796c8dcSSimon Schubert     {
9355796c8dcSSimon Schubert       /* The exec file and the symbol-file are the same.  If we can't
9365796c8dcSSimon Schubert          open it, better only print one error message.
9375796c8dcSSimon Schubert          catch_command_errors returns non-zero on success!  */
938c50c785cSJohn Marino       if (catch_command_errors (exec_file_attach, execarg,
939c50c785cSJohn Marino 				!batch_flag, RETURN_MASK_ALL))
940c50c785cSJohn Marino 	catch_command_errors (symbol_file_add_main, symarg,
941c50c785cSJohn Marino 			      !batch_flag, RETURN_MASK_ALL);
9425796c8dcSSimon Schubert     }
9435796c8dcSSimon Schubert   else
9445796c8dcSSimon Schubert     {
9455796c8dcSSimon Schubert       if (execarg != NULL)
946c50c785cSJohn Marino 	catch_command_errors (exec_file_attach, execarg,
947c50c785cSJohn Marino 			      !batch_flag, RETURN_MASK_ALL);
9485796c8dcSSimon Schubert       if (symarg != NULL)
949c50c785cSJohn Marino 	catch_command_errors (symbol_file_add_main, symarg,
950c50c785cSJohn Marino 			      !batch_flag, RETURN_MASK_ALL);
9515796c8dcSSimon Schubert     }
9525796c8dcSSimon Schubert 
9535796c8dcSSimon Schubert   if (corearg && pidarg)
954c50c785cSJohn Marino     error (_("Can't attach to process and specify "
955c50c785cSJohn Marino 	     "a core file at the same time."));
9565796c8dcSSimon Schubert 
9575796c8dcSSimon Schubert   if (corearg != NULL)
9585796c8dcSSimon Schubert     catch_command_errors (core_file_command, corearg,
959cf7f2e2dSJohn Marino 			  !batch_flag, RETURN_MASK_ALL);
9605796c8dcSSimon Schubert   else if (pidarg != NULL)
9615796c8dcSSimon Schubert     catch_command_errors (attach_command, pidarg,
962cf7f2e2dSJohn Marino 			  !batch_flag, RETURN_MASK_ALL);
9635796c8dcSSimon Schubert   else if (pid_or_core_arg)
9645796c8dcSSimon Schubert     {
9655796c8dcSSimon Schubert       /* The user specified 'gdb program pid' or gdb program core'.
9665796c8dcSSimon Schubert 	 If pid_or_core_arg's first character is a digit, try attach
9675796c8dcSSimon Schubert 	 first and then corefile.  Otherwise try just corefile.  */
9685796c8dcSSimon Schubert 
9695796c8dcSSimon Schubert       if (isdigit (pid_or_core_arg[0]))
9705796c8dcSSimon Schubert 	{
9715796c8dcSSimon Schubert 	  if (catch_command_errors (attach_command, pid_or_core_arg,
972cf7f2e2dSJohn Marino 				    !batch_flag, RETURN_MASK_ALL) == 0)
9735796c8dcSSimon Schubert 	    catch_command_errors (core_file_command, pid_or_core_arg,
974cf7f2e2dSJohn Marino 				  !batch_flag, RETURN_MASK_ALL);
9755796c8dcSSimon Schubert 	}
9765796c8dcSSimon Schubert       else /* Can't be a pid, better be a corefile.  */
9775796c8dcSSimon Schubert 	catch_command_errors (core_file_command, pid_or_core_arg,
978cf7f2e2dSJohn Marino 			      !batch_flag, RETURN_MASK_ALL);
9795796c8dcSSimon Schubert     }
9805796c8dcSSimon Schubert 
9815796c8dcSSimon Schubert   if (ttyarg != NULL)
982cf7f2e2dSJohn Marino     set_inferior_io_terminal (ttyarg);
9835796c8dcSSimon Schubert 
9845796c8dcSSimon Schubert   /* Error messages should no longer be distinguished with extra output.  */
9855796c8dcSSimon Schubert   error_pre_print = NULL;
9865796c8dcSSimon Schubert   quit_pre_print = NULL;
9875796c8dcSSimon Schubert   warning_pre_print = _("warning: ");
9885796c8dcSSimon Schubert 
9895796c8dcSSimon Schubert   /* Read the .gdbinit file in the current directory, *if* it isn't
9905796c8dcSSimon Schubert      the same as the $HOME/.gdbinit file (it should exist, also).  */
991*ef5ccd6cSJohn Marino   if (local_gdbinit)
992*ef5ccd6cSJohn Marino     {
993*ef5ccd6cSJohn Marino       auto_load_local_gdbinit_pathname = gdb_realpath (local_gdbinit);
994*ef5ccd6cSJohn Marino 
995*ef5ccd6cSJohn Marino       if (!inhibit_gdbinit && auto_load_local_gdbinit
996*ef5ccd6cSJohn Marino 	  && file_is_auto_load_safe (local_gdbinit,
997*ef5ccd6cSJohn Marino 				     _("auto-load: Loading .gdbinit "
998*ef5ccd6cSJohn Marino 				       "file \"%s\".\n"),
999*ef5ccd6cSJohn Marino 				     local_gdbinit))
1000*ef5ccd6cSJohn Marino 	{
1001*ef5ccd6cSJohn Marino 	  auto_load_local_gdbinit_loaded = 1;
1002*ef5ccd6cSJohn Marino 
1003*ef5ccd6cSJohn Marino 	  catch_command_errors (source_script, local_gdbinit, 0,
1004*ef5ccd6cSJohn Marino 				RETURN_MASK_ALL);
1005*ef5ccd6cSJohn Marino 	}
1006*ef5ccd6cSJohn Marino     }
10075796c8dcSSimon Schubert 
1008cf7f2e2dSJohn Marino   /* Now that all .gdbinit's have been read and all -d options have been
1009cf7f2e2dSJohn Marino      processed, we can read any scripts mentioned in SYMARG.
1010cf7f2e2dSJohn Marino      We wait until now because it is common to add to the source search
1011cf7f2e2dSJohn Marino      path in local_gdbinit.  */
1012*ef5ccd6cSJohn Marino   global_auto_load = save_auto_load;
1013c50c785cSJohn Marino   ALL_OBJFILES (objfile)
1014c50c785cSJohn Marino     load_auto_scripts_for_objfile (objfile);
1015cf7f2e2dSJohn Marino 
1016*ef5ccd6cSJohn Marino   /* Process '-x' and '-ex' options.  */
1017*ef5ccd6cSJohn Marino   for (i = 0; VEC_iterate (cmdarg_s, cmdarg_vec, i, cmdarg_p); i++)
1018*ef5ccd6cSJohn Marino     switch (cmdarg_p->type)
10195796c8dcSSimon Schubert     {
1020*ef5ccd6cSJohn Marino       case CMDARG_FILE:
1021*ef5ccd6cSJohn Marino         catch_command_errors (source_script, cmdarg_p->string,
1022cf7f2e2dSJohn Marino 			      !batch_flag, RETURN_MASK_ALL);
1023*ef5ccd6cSJohn Marino 	break;
1024*ef5ccd6cSJohn Marino       case CMDARG_COMMAND:
1025*ef5ccd6cSJohn Marino         catch_command_errors (execute_command, cmdarg_p->string,
1026cf7f2e2dSJohn Marino 			      !batch_flag, RETURN_MASK_ALL);
1027*ef5ccd6cSJohn Marino 	break;
10285796c8dcSSimon Schubert     }
10295796c8dcSSimon Schubert 
1030c50c785cSJohn Marino   /* Read in the old history after all the command files have been
1031c50c785cSJohn Marino      read.  */
10325796c8dcSSimon Schubert   init_history ();
10335796c8dcSSimon Schubert 
1034cf7f2e2dSJohn Marino   if (batch_flag)
10355796c8dcSSimon Schubert     {
10365796c8dcSSimon Schubert       /* We have hit the end of the batch file.  */
10375796c8dcSSimon Schubert       quit_force (NULL, 0);
10385796c8dcSSimon Schubert     }
10395796c8dcSSimon Schubert 
10405796c8dcSSimon Schubert   /* Show time and/or space usage.  */
1041cf7f2e2dSJohn Marino   do_cleanups (pre_stat_chain);
10425796c8dcSSimon Schubert 
10435796c8dcSSimon Schubert   /* NOTE: cagney/1999-11-07: There is probably no reason for not
10445796c8dcSSimon Schubert      moving this loop and the code found in captured_command_loop()
10455796c8dcSSimon Schubert      into the command_loop() proper.  The main thing holding back that
10465796c8dcSSimon Schubert      change - SET_TOP_LEVEL() - has been eliminated.  */
10475796c8dcSSimon Schubert   while (1)
10485796c8dcSSimon Schubert     {
10495796c8dcSSimon Schubert       catch_errors (captured_command_loop, 0, "", RETURN_MASK_ALL);
10505796c8dcSSimon Schubert     }
10515796c8dcSSimon Schubert   /* No exit -- exit is through quit_command.  */
10525796c8dcSSimon Schubert }
10535796c8dcSSimon Schubert 
10545796c8dcSSimon Schubert int
gdb_main(struct captured_main_args * args)10555796c8dcSSimon Schubert gdb_main (struct captured_main_args *args)
10565796c8dcSSimon Schubert {
1057a938cc15SJohn Marino   kernel_debugger = 0;
10585796c8dcSSimon Schubert   use_windows = args->use_windows;
10595796c8dcSSimon Schubert   catch_errors (captured_main, args, "", RETURN_MASK_ALL);
10605796c8dcSSimon Schubert   /* The only way to end up here is by an error (normal exit is
10615796c8dcSSimon Schubert      handled by quit_force()), hence always return an error status.  */
10625796c8dcSSimon Schubert   return 1;
10635796c8dcSSimon Schubert }
10645796c8dcSSimon Schubert 
10655796c8dcSSimon Schubert 
10665796c8dcSSimon Schubert /* Don't use *_filtered for printing help.  We don't want to prompt
10675796c8dcSSimon Schubert    for continue no matter how small the screen or how much we're going
10685796c8dcSSimon Schubert    to print.  */
10695796c8dcSSimon Schubert 
10705796c8dcSSimon Schubert static void
print_gdb_help(struct ui_file * stream)10715796c8dcSSimon Schubert print_gdb_help (struct ui_file *stream)
10725796c8dcSSimon Schubert {
10735796c8dcSSimon Schubert   char *system_gdbinit;
10745796c8dcSSimon Schubert   char *home_gdbinit;
10755796c8dcSSimon Schubert   char *local_gdbinit;
10765796c8dcSSimon Schubert 
10775796c8dcSSimon Schubert   get_init_files (&system_gdbinit, &home_gdbinit, &local_gdbinit);
10785796c8dcSSimon Schubert 
10795796c8dcSSimon Schubert   fputs_unfiltered (_("\
10805796c8dcSSimon Schubert This is the GNU debugger.  Usage:\n\n\
10815796c8dcSSimon Schubert     gdb [options] [executable-file [core-file or process-id]]\n\
10825796c8dcSSimon Schubert     gdb [options] --args executable-file [inferior-arguments ...]\n\n\
10835796c8dcSSimon Schubert Options:\n\n\
10845796c8dcSSimon Schubert "), stream);
10855796c8dcSSimon Schubert   fputs_unfiltered (_("\
10865796c8dcSSimon Schubert   --args             Arguments after executable-file are passed to inferior\n\
10875796c8dcSSimon Schubert "), stream);
10885796c8dcSSimon Schubert   fputs_unfiltered (_("\
10895796c8dcSSimon Schubert   -b BAUDRATE        Set serial port baud rate used for remote debugging.\n\
10905796c8dcSSimon Schubert   --batch            Exit after processing options.\n\
10915796c8dcSSimon Schubert   --batch-silent     As for --batch, but suppress all gdb stdout output.\n\
10925796c8dcSSimon Schubert   --return-child-result\n\
10935796c8dcSSimon Schubert                      GDB exit code will be the child's exit code.\n\
10945796c8dcSSimon Schubert   --cd=DIR           Change current directory to DIR.\n\
10955796c8dcSSimon Schubert   --command=FILE, -x Execute GDB commands from FILE.\n\
10965796c8dcSSimon Schubert   --eval-command=COMMAND, -ex\n\
10975796c8dcSSimon Schubert                      Execute a single GDB command.\n\
10985796c8dcSSimon Schubert                      May be used multiple times and in conjunction\n\
10995796c8dcSSimon Schubert                      with --command.\n\
1100*ef5ccd6cSJohn Marino   --init-command=FILE, -ix Like -x but execute it before loading inferior.\n\
1101*ef5ccd6cSJohn Marino   --init-eval-command=COMMAND, -iex Like -ex but before loading inferior.\n\
11025796c8dcSSimon Schubert   --core=COREFILE    Analyze the core dump COREFILE.\n\
11035796c8dcSSimon Schubert   --pid=PID          Attach to running process PID.\n\
11045796c8dcSSimon Schubert "), stream);
11055796c8dcSSimon Schubert   fputs_unfiltered (_("\
11065796c8dcSSimon Schubert   --dbx              DBX compatibility mode.\n\
11075796c8dcSSimon Schubert   --directory=DIR    Search for source files in DIR.\n\
11085796c8dcSSimon Schubert   --exec=EXECFILE    Use EXECFILE as the executable.\n\
11095796c8dcSSimon Schubert   --fullname         Output information used by emacs-GDB interface.\n\
11105796c8dcSSimon Schubert   --help             Print this message.\n\
11115796c8dcSSimon Schubert "), stream);
11125796c8dcSSimon Schubert   fputs_unfiltered (_("\
11135796c8dcSSimon Schubert   --interpreter=INTERP\n\
11145796c8dcSSimon Schubert                      Select a specific interpreter / user interface\n\
11155796c8dcSSimon Schubert "), stream);
11165796c8dcSSimon Schubert   fputs_unfiltered (_("\
11175796c8dcSSimon Schubert   -l TIMEOUT         Set timeout in seconds for remote debugging.\n\
11185796c8dcSSimon Schubert   --nw		     Do not use a window interface.\n\
1119*ef5ccd6cSJohn Marino   --nx               Do not read any "), stream);
11205796c8dcSSimon Schubert   fputs_unfiltered (gdbinit, stream);
1121*ef5ccd6cSJohn Marino   fputs_unfiltered (_(" files.\n\
1122*ef5ccd6cSJohn Marino   --nh               Do not read "), stream);
1123*ef5ccd6cSJohn Marino   fputs_unfiltered (gdbinit, stream);
1124*ef5ccd6cSJohn Marino   fputs_unfiltered (_(" file from home directory.\n\
11255796c8dcSSimon Schubert   --quiet            Do not print version number on startup.\n\
11265796c8dcSSimon Schubert   --readnow          Fully read symbol files on first access.\n\
11275796c8dcSSimon Schubert "), stream);
11285796c8dcSSimon Schubert   fputs_unfiltered (_("\
11295796c8dcSSimon Schubert   --se=FILE          Use FILE as symbol file and executable file.\n\
11305796c8dcSSimon Schubert   --symbols=SYMFILE  Read symbols from SYMFILE.\n\
11315796c8dcSSimon Schubert   --tty=TTY          Use TTY for input/output by the program being debugged.\n\
11325796c8dcSSimon Schubert "), stream);
11335796c8dcSSimon Schubert #if defined(TUI)
11345796c8dcSSimon Schubert   fputs_unfiltered (_("\
11355796c8dcSSimon Schubert   --tui              Use a terminal user interface.\n\
11365796c8dcSSimon Schubert "), stream);
11375796c8dcSSimon Schubert #endif
11385796c8dcSSimon Schubert   fputs_unfiltered (_("\
11395796c8dcSSimon Schubert   --version          Print version information and then exit.\n\
11405796c8dcSSimon Schubert   -w                 Use a window interface.\n\
11415796c8dcSSimon Schubert   --write            Set writing into executable and core files.\n\
11425796c8dcSSimon Schubert   --xdb              XDB compatibility mode.\n\
11435796c8dcSSimon Schubert "), stream);
11445796c8dcSSimon Schubert   fputs_unfiltered (_("\n\
11455796c8dcSSimon Schubert At startup, GDB reads the following init files and executes their commands:\n\
11465796c8dcSSimon Schubert "), stream);
11475796c8dcSSimon Schubert   if (system_gdbinit)
11485796c8dcSSimon Schubert     fprintf_unfiltered (stream, _("\
11495796c8dcSSimon Schubert    * system-wide init file: %s\n\
11505796c8dcSSimon Schubert "), system_gdbinit);
11515796c8dcSSimon Schubert   if (home_gdbinit)
11525796c8dcSSimon Schubert     fprintf_unfiltered (stream, _("\
11535796c8dcSSimon Schubert    * user-specific init file: %s\n\
11545796c8dcSSimon Schubert "), home_gdbinit);
11555796c8dcSSimon Schubert   if (local_gdbinit)
11565796c8dcSSimon Schubert     fprintf_unfiltered (stream, _("\
1157*ef5ccd6cSJohn Marino    * local init file (see also 'set auto-load local-gdbinit'): ./%s\n\
11585796c8dcSSimon Schubert "), local_gdbinit);
11595796c8dcSSimon Schubert   fputs_unfiltered (_("\n\
11605796c8dcSSimon Schubert For more information, type \"help\" from within GDB, or consult the\n\
11615796c8dcSSimon Schubert GDB manual (available as on-line info or a printed manual).\n\
11625796c8dcSSimon Schubert "), stream);
11635796c8dcSSimon Schubert   if (REPORT_BUGS_TO[0] && stream == gdb_stdout)
11645796c8dcSSimon Schubert     fprintf_unfiltered (stream, _("\
11655796c8dcSSimon Schubert Report bugs to \"%s\".\n\
11665796c8dcSSimon Schubert "), REPORT_BUGS_TO);
11675796c8dcSSimon Schubert }
1168