Home | History | Annotate | Line # | Download | only in gdb
      1   1.1  christos /* Top level stuff for GDB, the GNU debugger.
      2   1.1  christos 
      3  1.11  christos    Copyright (C) 1986-2024 Free Software Foundation, Inc.
      4   1.1  christos 
      5   1.1  christos    This file is part of GDB.
      6   1.1  christos 
      7   1.1  christos    This program is free software; you can redistribute it and/or modify
      8   1.1  christos    it under the terms of the GNU General Public License as published by
      9   1.1  christos    the Free Software Foundation; either version 3 of the License, or
     10   1.1  christos    (at your option) any later version.
     11   1.1  christos 
     12   1.1  christos    This program is distributed in the hope that it will be useful,
     13   1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14   1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15   1.1  christos    GNU General Public License for more details.
     16   1.1  christos 
     17   1.1  christos    You should have received a copy of the GNU General Public License
     18   1.1  christos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19   1.1  christos 
     20  1.11  christos #include "annotate.h"
     21  1.12  christos #include "exceptions.h"
     22   1.1  christos #include "top.h"
     23  1.11  christos #include "ui.h"
     24   1.1  christos #include "target.h"
     25   1.1  christos #include "inferior.h"
     26   1.1  christos #include "symfile.h"
     27   1.1  christos #include "gdbcore.h"
     28   1.1  christos #include "getopt.h"
     29   1.1  christos 
     30   1.1  christos #include <sys/types.h>
     31   1.1  christos #include <sys/stat.h>
     32   1.1  christos #include <ctype.h>
     33   1.9  christos #include "gdbsupport/event-loop.h"
     34   1.1  christos #include "ui-out.h"
     35   1.1  christos 
     36   1.1  christos #include "interps.h"
     37   1.1  christos #include "main.h"
     38   1.1  christos #include "source.h"
     39   1.1  christos #include "cli/cli-cmds.h"
     40   1.1  christos #include "objfiles.h"
     41   1.1  christos #include "auto-load.h"
     42   1.1  christos #include "maint.h"
     43   1.1  christos 
     44   1.1  christos #include "filenames.h"
     45   1.9  christos #include "gdbsupport/filestuff.h"
     46   1.3  christos #include <signal.h>
     47   1.3  christos #include "event-top.h"
     48   1.3  christos #include "infrun.h"
     49   1.9  christos #include "gdbsupport/signals-state-save-restore.h"
     50   1.9  christos #include <algorithm>
     51   1.7  christos #include <vector>
     52   1.9  christos #include "gdbsupport/pathstuff.h"
     53   1.8  christos #include "cli/cli-style.h"
     54   1.9  christos #ifdef GDBTK
     55   1.9  christos #include "gdbtk/generic/gdbtk.h"
     56   1.9  christos #endif
     57   1.9  christos #include "gdbsupport/alt-stack.h"
     58   1.9  christos #include "observable.h"
     59  1.10  christos #include "serial.h"
     60  1.11  christos #include "cli-out.h"
     61  1.12  christos #include "bt-utils.h"
     62   1.1  christos 
     63  1.10  christos /* The selected interpreter.  */
     64  1.10  christos std::string interpreter_p;
     65   1.1  christos 
     66   1.1  christos /* System root path, used to find libraries etc.  */
     67  1.10  christos std::string gdb_sysroot;
     68   1.1  christos 
     69   1.1  christos /* GDB datadir, used to store data files.  */
     70   1.9  christos std::string gdb_datadir;
     71   1.1  christos 
     72   1.1  christos /* Non-zero if GDB_DATADIR was provided on the command line.
     73   1.1  christos    This doesn't track whether data-directory is set later from the
     74   1.1  christos    command line, but we don't reread system.gdbinit when that happens.  */
     75   1.1  christos static int gdb_datadir_provided = 0;
     76   1.1  christos 
     77   1.1  christos /* If gdb was configured with --with-python=/path,
     78   1.1  christos    the possibly relocated path to python's lib directory.  */
     79   1.9  christos std::string python_libdir;
     80   1.1  christos 
     81   1.1  christos /* Target IO streams.  */
     82   1.1  christos struct ui_file *gdb_stdtargin;
     83   1.1  christos struct ui_file *gdb_stdtarg;
     84   1.1  christos 
     85   1.1  christos /* True if --batch or --batch-silent was seen.  */
     86   1.1  christos int batch_flag = 0;
     87   1.1  christos 
     88   1.1  christos /* Support for the --batch-silent option.  */
     89   1.1  christos int batch_silent = 0;
     90   1.1  christos 
     91   1.1  christos /* Support for --return-child-result option.
     92   1.1  christos    Set the default to -1 to return error in the case
     93   1.1  christos    that the program does not run or does not complete.  */
     94   1.1  christos int return_child_result = 0;
     95   1.1  christos int return_child_result_value = -1;
     96   1.1  christos 
     97   1.1  christos 
     98   1.1  christos /* GDB as it has been invoked from the command line (i.e. argv[0]).  */
     99   1.1  christos static char *gdb_program_name;
    100   1.1  christos 
    101   1.1  christos static void print_gdb_help (struct ui_file *);
    102   1.1  christos 
    103   1.3  christos /* Set the data-directory parameter to NEW_DATADIR.
    104   1.3  christos    If NEW_DATADIR is not a directory then a warning is printed.
    105   1.3  christos    We don't signal an error for backward compatibility.  */
    106   1.3  christos 
    107   1.3  christos void
    108   1.3  christos set_gdb_data_directory (const char *new_datadir)
    109   1.3  christos {
    110   1.3  christos   struct stat st;
    111   1.3  christos 
    112   1.3  christos   if (stat (new_datadir, &st) < 0)
    113  1.11  christos     warning_filename_and_errno (new_datadir, errno);
    114   1.3  christos   else if (!S_ISDIR (st.st_mode))
    115   1.9  christos     warning (_("%ps is not a directory."),
    116   1.9  christos 	     styled_string (file_name_style.style (), new_datadir));
    117   1.3  christos 
    118   1.9  christos   gdb_datadir = gdb_realpath (new_datadir).get ();
    119   1.3  christos 
    120   1.3  christos   /* gdb_realpath won't return an absolute path if the path doesn't exist,
    121   1.3  christos      but we still want to record an absolute path here.  If the user entered
    122   1.3  christos      "../foo" and "../foo" doesn't exist then we'll record $(pwd)/../foo which
    123   1.3  christos      isn't canonical, but that's ok.  */
    124   1.9  christos   if (!IS_ABSOLUTE_PATH (gdb_datadir.c_str ()))
    125  1.12  christos     gdb_datadir = gdb_abspath (gdb_datadir);
    126   1.3  christos }
    127   1.3  christos 
    128   1.1  christos /* Relocate a file or directory.  PROGNAME is the name by which gdb
    129   1.1  christos    was invoked (i.e., argv[0]).  INITIAL is the default value for the
    130   1.9  christos    file or directory.  RELOCATABLE is true if the value is relocatable,
    131   1.9  christos    false otherwise.  This may return an empty string under the same
    132   1.9  christos    conditions as make_relative_prefix returning NULL.  */
    133   1.1  christos 
    134   1.9  christos static std::string
    135   1.9  christos relocate_path (const char *progname, const char *initial, bool relocatable)
    136   1.1  christos {
    137   1.9  christos   if (relocatable)
    138   1.9  christos     {
    139   1.9  christos       gdb::unique_xmalloc_ptr<char> str (make_relative_prefix (progname,
    140   1.9  christos 							       BINDIR,
    141   1.9  christos 							       initial));
    142   1.9  christos       if (str != nullptr)
    143   1.9  christos 	return str.get ();
    144   1.9  christos       return std::string ();
    145   1.9  christos     }
    146   1.9  christos   return initial;
    147   1.1  christos }
    148   1.1  christos 
    149   1.1  christos /* Like relocate_path, but specifically checks for a directory.
    150   1.1  christos    INITIAL is relocated according to the rules of relocate_path.  If
    151   1.1  christos    the result is a directory, it is used; otherwise, INITIAL is used.
    152   1.9  christos    The chosen directory is then canonicalized using lrealpath.  */
    153   1.1  christos 
    154   1.9  christos std::string
    155   1.9  christos relocate_gdb_directory (const char *initial, bool relocatable)
    156   1.1  christos {
    157   1.9  christos   std::string dir = relocate_path (gdb_program_name, initial, relocatable);
    158   1.9  christos   if (!dir.empty ())
    159   1.1  christos     {
    160   1.1  christos       struct stat s;
    161   1.1  christos 
    162   1.9  christos       if (stat (dir.c_str (), &s) != 0 || !S_ISDIR (s.st_mode))
    163   1.1  christos 	{
    164   1.9  christos 	  dir.clear ();
    165   1.1  christos 	}
    166   1.1  christos     }
    167   1.9  christos   if (dir.empty ())
    168   1.9  christos     dir = initial;
    169   1.1  christos 
    170   1.1  christos   /* Canonicalize the directory.  */
    171   1.9  christos   if (!dir.empty ())
    172   1.1  christos     {
    173   1.9  christos       gdb::unique_xmalloc_ptr<char> canon_sysroot (lrealpath (dir.c_str ()));
    174   1.1  christos 
    175   1.1  christos       if (canon_sysroot)
    176   1.9  christos 	dir = canon_sysroot.get ();
    177   1.1  christos     }
    178   1.1  christos 
    179   1.1  christos   return dir;
    180   1.1  christos }
    181   1.1  christos 
    182   1.9  christos /* Given a gdbinit path in FILE, adjusts it according to the gdb_datadir
    183   1.9  christos    parameter if it is in the data dir, or passes it through relocate_path
    184   1.9  christos    otherwise.  */
    185   1.9  christos 
    186   1.9  christos static std::string
    187  1.10  christos relocate_file_path_maybe_in_datadir (const std::string &file,
    188  1.10  christos 				     bool relocatable)
    189   1.9  christos {
    190   1.9  christos   size_t datadir_len = strlen (GDB_DATADIR);
    191   1.9  christos 
    192   1.9  christos   std::string relocated_path;
    193   1.9  christos 
    194   1.9  christos   /* If SYSTEM_GDBINIT lives in data-directory, and data-directory
    195   1.9  christos      has been provided, search for SYSTEM_GDBINIT there.  */
    196   1.9  christos   if (gdb_datadir_provided
    197   1.9  christos       && datadir_len < file.length ()
    198   1.9  christos       && filename_ncmp (file.c_str (), GDB_DATADIR, datadir_len) == 0
    199   1.9  christos       && IS_DIR_SEPARATOR (file[datadir_len]))
    200   1.9  christos     {
    201   1.9  christos       /* Append the part of SYSTEM_GDBINIT that follows GDB_DATADIR
    202   1.9  christos 	 to gdb_datadir.  */
    203   1.9  christos 
    204   1.9  christos       size_t start = datadir_len;
    205   1.9  christos       for (; IS_DIR_SEPARATOR (file[start]); ++start)
    206   1.9  christos 	;
    207   1.9  christos       relocated_path = gdb_datadir + SLASH_STRING + file.substr (start);
    208   1.9  christos     }
    209   1.9  christos   else
    210   1.9  christos     {
    211   1.9  christos       relocated_path = relocate_path (gdb_program_name, file.c_str (),
    212   1.9  christos 				      relocatable);
    213   1.9  christos     }
    214   1.9  christos     return relocated_path;
    215   1.9  christos }
    216   1.9  christos 
    217  1.10  christos /* A class to wrap up the logic for finding the three different types of
    218  1.10  christos    initialisation files GDB uses, system wide, home directory, and current
    219  1.10  christos    working directory.  */
    220  1.10  christos 
    221  1.10  christos class gdb_initfile_finder
    222   1.1  christos {
    223  1.10  christos public:
    224  1.10  christos   /* Constructor.  Finds initialisation files named FILENAME in the home
    225  1.10  christos      directory or local (current working) directory.  System initialisation
    226  1.10  christos      files are found in both SYSTEM_FILENAME and SYSTEM_DIRNAME if these
    227  1.10  christos      are not nullptr (either or both can be).  The matching *_RELOCATABLE
    228  1.10  christos      flag is passed through to RELOCATE_FILE_PATH_MAYBE_IN_DATADIR.
    229  1.10  christos 
    230  1.10  christos      If FILENAME starts with a '.' then when looking in the home directory
    231  1.10  christos      this first '.' can be ignored in some cases.  */
    232  1.10  christos   explicit gdb_initfile_finder (const char *filename,
    233  1.10  christos 				const char *system_filename,
    234  1.10  christos 				bool system_filename_relocatable,
    235  1.10  christos 				const char *system_dirname,
    236  1.10  christos 				bool system_dirname_relocatable,
    237  1.10  christos 				bool lookup_local_file)
    238  1.10  christos   {
    239  1.10  christos     struct stat s;
    240   1.1  christos 
    241  1.10  christos     if (system_filename != nullptr && system_filename[0] != '\0')
    242  1.10  christos       {
    243  1.10  christos 	std::string relocated_filename
    244  1.10  christos 	  = relocate_file_path_maybe_in_datadir (system_filename,
    245  1.10  christos 						 system_filename_relocatable);
    246  1.10  christos 	if (!relocated_filename.empty ()
    247  1.10  christos 	    && stat (relocated_filename.c_str (), &s) == 0)
    248  1.10  christos 	  m_system_files.push_back (relocated_filename);
    249  1.10  christos       }
    250   1.1  christos 
    251  1.10  christos     if (system_dirname != nullptr && system_dirname[0] != '\0')
    252  1.10  christos       {
    253  1.10  christos 	std::string relocated_dirname
    254  1.10  christos 	  = relocate_file_path_maybe_in_datadir (system_dirname,
    255  1.10  christos 						 system_dirname_relocatable);
    256  1.10  christos 	if (!relocated_dirname.empty ())
    257  1.10  christos 	  {
    258  1.10  christos 	    gdb_dir_up dir (opendir (relocated_dirname.c_str ()));
    259   1.9  christos 	    if (dir != nullptr)
    260   1.9  christos 	      {
    261   1.9  christos 		std::vector<std::string> files;
    262  1.10  christos 		while (true)
    263   1.9  christos 		  {
    264   1.9  christos 		    struct dirent *ent = readdir (dir.get ());
    265   1.9  christos 		    if (ent == nullptr)
    266   1.9  christos 		      break;
    267   1.9  christos 		    std::string name (ent->d_name);
    268   1.9  christos 		    if (name == "." || name == "..")
    269   1.9  christos 		      continue;
    270  1.10  christos 		    /* ent->d_type is not available on all systems
    271  1.10  christos 		       (e.g. mingw, Solaris), so we have to call stat().  */
    272  1.10  christos 		    std::string tmp_filename
    273  1.10  christos 		      = relocated_dirname + SLASH_STRING + name;
    274  1.10  christos 		    if (stat (tmp_filename.c_str (), &s) != 0
    275   1.9  christos 			|| !S_ISREG (s.st_mode))
    276   1.9  christos 		      continue;
    277   1.9  christos 		    const struct extension_language_defn *extlang
    278  1.10  christos 		      = get_ext_lang_of_file (tmp_filename.c_str ());
    279   1.9  christos 		    /* We effectively don't support "set script-extension
    280  1.10  christos 		       off/soft", because we are loading system init files
    281  1.10  christos 		       here, so it does not really make sense to depend on
    282  1.10  christos 		       a setting.  */
    283   1.9  christos 		    if (extlang != nullptr && ext_lang_present_p (extlang))
    284  1.10  christos 		      files.push_back (std::move (tmp_filename));
    285   1.9  christos 		  }
    286   1.9  christos 		std::sort (files.begin (), files.end ());
    287  1.10  christos 		m_system_files.insert (m_system_files.end (),
    288  1.10  christos 				       files.begin (), files.end ());
    289   1.9  christos 	      }
    290   1.9  christos 	  }
    291  1.10  christos       }
    292   1.1  christos 
    293   1.1  christos       /* If the .gdbinit file in the current directory is the same as
    294   1.1  christos 	 the $HOME/.gdbinit file, it should not be sourced.  homebuf
    295   1.1  christos 	 and cwdbuf are used in that purpose.  Make sure that the stats
    296   1.1  christos 	 are zero in case one of them fails (this guarantees that they
    297   1.1  christos 	 won't match if either exists).  */
    298   1.1  christos 
    299  1.10  christos     struct stat homebuf, cwdbuf;
    300  1.10  christos     memset (&homebuf, 0, sizeof (struct stat));
    301  1.10  christos     memset (&cwdbuf, 0, sizeof (struct stat));
    302  1.10  christos 
    303  1.10  christos     m_home_file = find_gdb_home_config_file (filename, &homebuf);
    304   1.1  christos 
    305  1.10  christos     if (lookup_local_file && stat (filename, &cwdbuf) == 0)
    306  1.10  christos       {
    307  1.10  christos 	if (m_home_file.empty ()
    308  1.10  christos 	    || memcmp ((char *) &homebuf, (char *) &cwdbuf,
    309  1.10  christos 		       sizeof (struct stat)))
    310  1.10  christos 	  m_local_file = filename;
    311  1.10  christos       }
    312  1.10  christos   }
    313  1.10  christos 
    314  1.10  christos   DISABLE_COPY_AND_ASSIGN (gdb_initfile_finder);
    315  1.10  christos 
    316  1.10  christos   /* Return a list of system initialisation files.  The list could be
    317  1.10  christos      empty.  */
    318  1.10  christos   const std::vector<std::string> &system_files () const
    319  1.10  christos   { return m_system_files; }
    320  1.10  christos 
    321  1.10  christos   /* Return the path to the home initialisation file.  The string can be
    322  1.10  christos      empty if there is no such file.  */
    323  1.10  christos   const std::string &home_file () const
    324  1.10  christos   { return m_home_file; }
    325  1.10  christos 
    326  1.10  christos   /* Return the path to the local initialisation file.  The string can be
    327  1.10  christos      empty if there is no such file.  */
    328  1.10  christos   const std::string &local_file () const
    329  1.10  christos   { return m_local_file; }
    330  1.10  christos 
    331  1.10  christos private:
    332  1.10  christos 
    333  1.10  christos   /* Vector of all system init files in the order they should be processed.
    334  1.10  christos      Could be empty.  */
    335  1.10  christos   std::vector<std::string> m_system_files;
    336  1.10  christos 
    337  1.10  christos   /* Initialization file from the home directory.  Could be the empty
    338  1.10  christos      string if there is no such file found.  */
    339  1.10  christos   std::string m_home_file;
    340  1.10  christos 
    341  1.10  christos   /* Initialization file from the current working directory.  Could be the
    342  1.10  christos      empty string if there is no such file found.  */
    343  1.10  christos   std::string m_local_file;
    344  1.10  christos };
    345  1.10  christos 
    346  1.10  christos /* Compute the locations of init files that GDB should source and return
    347  1.10  christos    them in SYSTEM_GDBINIT, HOME_GDBINIT, LOCAL_GDBINIT.  The SYSTEM_GDBINIT
    348  1.10  christos    can be returned as an empty vector, and HOME_GDBINIT and LOCAL_GDBINIT
    349  1.10  christos    can be returned as empty strings if there is no init file of that
    350  1.10  christos    type.  */
    351  1.10  christos 
    352  1.10  christos static void
    353  1.10  christos get_init_files (std::vector<std::string> *system_gdbinit,
    354  1.10  christos 		std::string *home_gdbinit,
    355  1.10  christos 		std::string *local_gdbinit)
    356  1.10  christos {
    357  1.10  christos   /* Cache the file lookup object so we only actually search for the files
    358  1.10  christos      once.  */
    359  1.11  christos   static std::optional<gdb_initfile_finder> init_files;
    360  1.10  christos   if (!init_files.has_value ())
    361  1.10  christos     init_files.emplace (GDBINIT, SYSTEM_GDBINIT, SYSTEM_GDBINIT_RELOCATABLE,
    362  1.10  christos 			SYSTEM_GDBINIT_DIR, SYSTEM_GDBINIT_DIR_RELOCATABLE,
    363  1.10  christos 			true);
    364  1.10  christos 
    365  1.10  christos   *system_gdbinit = init_files->system_files ();
    366  1.10  christos   *home_gdbinit = init_files->home_file ();
    367  1.10  christos   *local_gdbinit = init_files->local_file ();
    368  1.10  christos }
    369  1.10  christos 
    370  1.10  christos /* Compute the location of the early init file GDB should source and return
    371  1.10  christos    it in HOME_GDBEARLYINIT.  HOME_GDBEARLYINIT could be returned as an
    372  1.10  christos    empty string if there is no early init file found.  */
    373   1.1  christos 
    374  1.10  christos static void
    375  1.10  christos get_earlyinit_files (std::string *home_gdbearlyinit)
    376  1.10  christos {
    377  1.10  christos   /* Cache the file lookup object so we only actually search for the files
    378  1.10  christos      once.  */
    379  1.11  christos   static std::optional<gdb_initfile_finder> init_files;
    380  1.10  christos   if (!init_files.has_value ())
    381  1.10  christos     init_files.emplace (GDBEARLYINIT, nullptr, false, nullptr, false, false);
    382   1.1  christos 
    383  1.10  christos   *home_gdbearlyinit = init_files->home_file ();
    384   1.1  christos }
    385   1.1  christos 
    386   1.9  christos /* Start up the event loop.  This is the entry point to the event loop
    387   1.9  christos    from the command loop.  */
    388   1.3  christos 
    389   1.3  christos static void
    390   1.9  christos start_event_loop ()
    391   1.3  christos {
    392   1.9  christos   /* Loop until there is nothing to do.  This is the entry point to
    393   1.9  christos      the event loop engine.  gdb_do_one_event will process one event
    394   1.9  christos      for each invocation.  It blocks waiting for an event and then
    395   1.9  christos      processes it.  */
    396   1.9  christos   while (1)
    397   1.9  christos     {
    398   1.9  christos       int result = 0;
    399   1.3  christos 
    400   1.9  christos       try
    401   1.9  christos 	{
    402   1.9  christos 	  result = gdb_do_one_event ();
    403   1.9  christos 	}
    404  1.11  christos       catch (const gdb_exception_forced_quit &ex)
    405  1.11  christos 	{
    406  1.11  christos 	  throw;
    407  1.11  christos 	}
    408   1.9  christos       catch (const gdb_exception &ex)
    409   1.9  christos 	{
    410   1.9  christos 	  exception_print (gdb_stderr, ex);
    411   1.3  christos 
    412   1.9  christos 	  /* If any exception escaped to here, we better enable
    413   1.9  christos 	     stdin.  Otherwise, any command that calls async_disable_stdin,
    414   1.9  christos 	     and then throws, will leave stdin inoperable.  */
    415   1.9  christos 	  SWITCH_THRU_ALL_UIS ()
    416   1.9  christos 	    {
    417   1.9  christos 	      async_enable_stdin ();
    418   1.9  christos 	    }
    419   1.9  christos 	  /* If we long-jumped out of do_one_event, we probably didn't
    420   1.9  christos 	     get around to resetting the prompt, which leaves readline
    421   1.9  christos 	     in a messed-up state.  Reset it here.  */
    422   1.9  christos 	  current_ui->prompt_state = PROMPT_NEEDED;
    423  1.11  christos 	  top_level_interpreter ()->on_command_error ();
    424   1.9  christos 	  /* This call looks bizarre, but it is required.  If the user
    425   1.9  christos 	     entered a command that caused an error,
    426   1.9  christos 	     after_char_processing_hook won't be called from
    427   1.9  christos 	     rl_callback_read_char_wrapper.  Using a cleanup there
    428   1.9  christos 	     won't work, since we want this function to be called
    429   1.9  christos 	     after a new prompt is printed.  */
    430   1.9  christos 	  if (after_char_processing_hook)
    431   1.9  christos 	    (*after_char_processing_hook) ();
    432   1.9  christos 	  /* Maybe better to set a flag to be checked somewhere as to
    433   1.9  christos 	     whether display the prompt or not.  */
    434   1.9  christos 	}
    435   1.9  christos 
    436   1.9  christos       if (result < 0)
    437   1.9  christos 	break;
    438   1.9  christos     }
    439   1.9  christos 
    440   1.9  christos   /* We are done with the event loop.  There are no more event sources
    441   1.9  christos      to listen to.  So we exit GDB.  */
    442   1.9  christos   return;
    443   1.3  christos }
    444   1.3  christos 
    445   1.8  christos /* Call command_loop.  */
    446   1.1  christos 
    447   1.8  christos /* Prevent inlining this function for the benefit of GDB's selftests
    448   1.8  christos    in the testsuite.  Those tests want to run GDB under GDB and stop
    449   1.8  christos    here.  */
    450   1.8  christos static void captured_command_loop () __attribute__((noinline));
    451   1.8  christos 
    452   1.8  christos static void
    453   1.8  christos captured_command_loop ()
    454   1.1  christos {
    455   1.6  christos   struct ui *ui = current_ui;
    456   1.6  christos 
    457   1.1  christos   /* Top-level execution commands can be run in the background from
    458   1.1  christos      here on.  */
    459   1.6  christos   current_ui->async = 1;
    460   1.6  christos 
    461   1.6  christos   /* Give the interpreter a chance to print a prompt, if necessary  */
    462   1.6  christos   if (ui->prompt_state != PROMPT_BLOCKED)
    463  1.11  christos     top_level_interpreter ()->pre_command_loop ();
    464   1.6  christos 
    465   1.6  christos   /* Now it's time to start the event loop.  */
    466   1.6  christos   start_event_loop ();
    467   1.1  christos 
    468   1.1  christos   /* If the command_loop returned, normally (rather than threw an
    469   1.8  christos      error) we try to quit.  If the quit is aborted, our caller
    470   1.8  christos      catches the signal and restarts the command loop.  */
    471   1.6  christos   quit_command (NULL, ui->instream == ui->stdin_stream);
    472   1.1  christos }
    473   1.1  christos 
    474   1.8  christos /* Handle command errors thrown from within catch_command_errors.  */
    475   1.3  christos 
    476   1.3  christos static int
    477   1.9  christos handle_command_errors (const struct gdb_exception &e)
    478   1.3  christos {
    479   1.3  christos   if (e.reason < 0)
    480   1.3  christos     {
    481   1.3  christos       exception_print (gdb_stderr, e);
    482   1.3  christos 
    483   1.3  christos       /* If any exception escaped to here, we better enable stdin.
    484   1.3  christos 	 Otherwise, any command that calls async_disable_stdin, and
    485   1.3  christos 	 then throws, will leave stdin inoperable.  */
    486   1.3  christos       async_enable_stdin ();
    487   1.3  christos       return 0;
    488   1.3  christos     }
    489   1.3  christos   return 1;
    490   1.3  christos }
    491   1.3  christos 
    492   1.8  christos /* Type of the command callback passed to the const
    493   1.8  christos    catch_command_errors.  */
    494   1.3  christos 
    495   1.8  christos typedef void (catch_command_errors_const_ftype) (const char *, int);
    496   1.3  christos 
    497   1.3  christos /* Wrap calls to commands run before the event loop is started.  */
    498   1.3  christos 
    499   1.3  christos static int
    500   1.8  christos catch_command_errors (catch_command_errors_const_ftype command,
    501  1.10  christos 		      const char *arg, int from_tty,
    502  1.10  christos 		      bool do_bp_actions = false)
    503   1.3  christos {
    504   1.9  christos   try
    505   1.3  christos     {
    506   1.6  christos       int was_sync = current_ui->prompt_state == PROMPT_BLOCKED;
    507   1.3  christos 
    508   1.3  christos       command (arg, from_tty);
    509   1.3  christos 
    510   1.3  christos       maybe_wait_sync_command_done (was_sync);
    511  1.10  christos 
    512  1.10  christos       /* Do any commands attached to breakpoint we stopped at.  */
    513  1.10  christos       if (do_bp_actions)
    514  1.10  christos 	bpstat_do_actions ();
    515   1.3  christos     }
    516  1.11  christos   catch (const gdb_exception_forced_quit &e)
    517  1.11  christos     {
    518  1.11  christos       quit_force (NULL, 0);
    519  1.11  christos     }
    520   1.9  christos   catch (const gdb_exception &e)
    521   1.5  christos     {
    522   1.5  christos       return handle_command_errors (e);
    523   1.5  christos     }
    524   1.5  christos 
    525   1.5  christos   return 1;
    526   1.3  christos }
    527   1.3  christos 
    528   1.7  christos /* Adapter for symbol_file_add_main that translates 'from_tty' to a
    529   1.7  christos    symfile_add_flags.  */
    530   1.7  christos 
    531   1.7  christos static void
    532   1.7  christos symbol_file_add_main_adapter (const char *arg, int from_tty)
    533   1.7  christos {
    534   1.7  christos   symfile_add_flags add_flags = 0;
    535   1.7  christos 
    536   1.7  christos   if (from_tty)
    537   1.7  christos     add_flags |= SYMFILE_VERBOSE;
    538   1.7  christos 
    539   1.7  christos   symbol_file_add_main (arg, add_flags);
    540   1.7  christos }
    541   1.7  christos 
    542   1.8  christos /* Perform validation of the '--readnow' and '--readnever' flags.  */
    543   1.8  christos 
    544   1.8  christos static void
    545   1.8  christos validate_readnow_readnever ()
    546   1.8  christos {
    547   1.8  christos   if (readnever_symbol_files && readnow_symbol_files)
    548   1.8  christos     {
    549   1.8  christos       error (_("%s: '--readnow' and '--readnever' cannot be "
    550   1.8  christos 	       "specified simultaneously"),
    551   1.8  christos 	     gdb_program_name);
    552   1.8  christos     }
    553   1.8  christos }
    554   1.8  christos 
    555   1.5  christos /* Type of this option.  */
    556   1.5  christos enum cmdarg_kind
    557   1.5  christos {
    558   1.5  christos   /* Option type -x.  */
    559   1.5  christos   CMDARG_FILE,
    560   1.5  christos 
    561   1.5  christos   /* Option type -ex.  */
    562   1.5  christos   CMDARG_COMMAND,
    563   1.5  christos 
    564   1.5  christos   /* Option type -ix.  */
    565   1.5  christos   CMDARG_INIT_FILE,
    566  1.10  christos 
    567   1.5  christos   /* Option type -iex.  */
    568  1.10  christos   CMDARG_INIT_COMMAND,
    569  1.10  christos 
    570  1.10  christos   /* Option type -eix.  */
    571  1.10  christos   CMDARG_EARLYINIT_FILE,
    572  1.10  christos 
    573  1.10  christos   /* Option type -eiex.  */
    574  1.10  christos   CMDARG_EARLYINIT_COMMAND
    575   1.5  christos };
    576   1.5  christos 
    577   1.1  christos /* Arguments of --command option and its counterpart.  */
    578   1.7  christos struct cmdarg
    579   1.7  christos {
    580   1.7  christos   cmdarg (cmdarg_kind type_, char *string_)
    581   1.7  christos     : type (type_), string (string_)
    582   1.7  christos   {}
    583   1.7  christos 
    584   1.1  christos   /* Type of this option.  */
    585   1.5  christos   enum cmdarg_kind type;
    586   1.1  christos 
    587   1.1  christos   /* Value of this option - filename or the GDB command itself.  String memory
    588   1.1  christos      is not owned by this structure despite it is 'const'.  */
    589   1.1  christos   char *string;
    590   1.7  christos };
    591   1.1  christos 
    592  1.10  christos /* From CMDARG_VEC execute command files (matching FILE_TYPE) or commands
    593  1.10  christos    (matching CMD_TYPE).  Update the value in *RET if and scripts or
    594  1.10  christos    commands are executed.  */
    595  1.10  christos 
    596  1.10  christos static void
    597  1.10  christos execute_cmdargs (const std::vector<struct cmdarg> *cmdarg_vec,
    598  1.10  christos 		 cmdarg_kind file_type, cmdarg_kind cmd_type,
    599  1.10  christos 		 int *ret)
    600  1.10  christos {
    601  1.10  christos   for (const auto &cmdarg_p : *cmdarg_vec)
    602  1.10  christos     {
    603  1.10  christos       if (cmdarg_p.type == file_type)
    604  1.10  christos 	*ret = catch_command_errors (source_script, cmdarg_p.string,
    605  1.10  christos 				     !batch_flag);
    606  1.10  christos       else if (cmdarg_p.type == cmd_type)
    607  1.10  christos 	*ret = catch_command_errors (execute_command, cmdarg_p.string,
    608  1.10  christos 				     !batch_flag, true);
    609  1.10  christos     }
    610  1.10  christos }
    611  1.10  christos 
    612   1.7  christos static void
    613   1.7  christos captured_main_1 (struct captured_main_args *context)
    614   1.1  christos {
    615   1.1  christos   int argc = context->argc;
    616   1.1  christos   char **argv = context->argv;
    617   1.7  christos 
    618   1.1  christos   static int quiet = 0;
    619   1.1  christos   static int set_args = 0;
    620   1.1  christos   static int inhibit_home_gdbinit = 0;
    621   1.1  christos 
    622   1.1  christos   /* Pointers to various arguments from command line.  */
    623   1.1  christos   char *symarg = NULL;
    624   1.1  christos   char *execarg = NULL;
    625   1.1  christos   char *pidarg = NULL;
    626   1.1  christos   char *corearg = NULL;
    627   1.1  christos   char *pid_or_core_arg = NULL;
    628   1.1  christos   char *cdarg = NULL;
    629   1.1  christos   char *ttyarg = NULL;
    630   1.1  christos 
    631   1.1  christos   /* These are static so that we can take their address in an
    632   1.1  christos      initializer.  */
    633   1.1  christos   static int print_help;
    634   1.1  christos   static int print_version;
    635   1.1  christos   static int print_configuration;
    636   1.1  christos 
    637   1.1  christos   /* Pointers to all arguments of --command option.  */
    638   1.7  christos   std::vector<struct cmdarg> cmdarg_vec;
    639   1.1  christos 
    640   1.7  christos   /* All arguments of --directory option.  */
    641   1.7  christos   std::vector<char *> dirarg;
    642   1.1  christos 
    643   1.1  christos   int i;
    644   1.1  christos   int save_auto_load;
    645   1.8  christos   int ret = 1;
    646   1.1  christos 
    647  1.11  christos   const char *no_color = getenv ("NO_COLOR");
    648  1.11  christos   if (no_color != nullptr && *no_color != '\0')
    649  1.11  christos     cli_styling = false;
    650  1.11  christos 
    651   1.8  christos #ifdef HAVE_USEFUL_SBRK
    652   1.7  christos   /* Set this before constructing scoped_command_stats.  */
    653   1.1  christos   lim_at_start = (char *) sbrk (0);
    654   1.1  christos #endif
    655   1.1  christos 
    656   1.7  christos   scoped_command_stats stat_reporter (false);
    657   1.1  christos 
    658   1.1  christos #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
    659   1.1  christos   setlocale (LC_MESSAGES, "");
    660   1.1  christos #endif
    661   1.1  christos #if defined (HAVE_SETLOCALE)
    662   1.1  christos   setlocale (LC_CTYPE, "");
    663   1.1  christos #endif
    664   1.7  christos #ifdef ENABLE_NLS
    665   1.1  christos   bindtextdomain (PACKAGE, LOCALEDIR);
    666   1.1  christos   textdomain (PACKAGE);
    667   1.7  christos #endif
    668   1.1  christos 
    669   1.1  christos   notice_open_fds ();
    670   1.1  christos 
    671   1.1  christos #ifdef __MINGW32__
    672   1.1  christos   /* Ensure stderr is unbuffered.  A Cygwin pty or pipe is implemented
    673   1.1  christos      as a Windows pipe, and Windows buffers on pipes.  */
    674   1.1  christos   setvbuf (stderr, NULL, _IONBF, BUFSIZ);
    675   1.1  christos #endif
    676   1.1  christos 
    677   1.8  christos   /* Note: `error' cannot be called before this point, because the
    678   1.8  christos      caller will crash when trying to print the exception.  */
    679   1.8  christos   main_ui = new ui (stdin, stdout, stderr);
    680  1.12  christos   gdb_internal_backtrace_init_str ();
    681   1.6  christos   current_ui = main_ui;
    682   1.1  christos 
    683  1.10  christos   gdb_stdtarg = gdb_stderr;
    684  1.10  christos   gdb_stdtargin = gdb_stdin;
    685   1.1  christos 
    686  1.11  christos   /* Put a CLI based uiout in place early.  If the early initialization
    687  1.11  christos      files trigger any I/O then it isn't hard to reach parts of GDB that
    688  1.11  christos      assume current_uiout is not nullptr.  Maybe we should just install the
    689  1.11  christos      CLI interpreter initially, then switch to the application requested
    690  1.11  christos      interpreter later?  But that would (potentially) result in an
    691  1.11  christos      interpreter being instantiated "just in case".  For now this feels
    692  1.11  christos      like the least effort way to protect GDB from crashing.  */
    693  1.11  christos   auto temp_uiout = std::make_unique<cli_ui_out> (gdb_stdout);
    694  1.11  christos   current_uiout = temp_uiout.get ();
    695  1.11  christos 
    696  1.11  christos   gdb_bfd_init ();
    697   1.8  christos 
    698   1.1  christos #ifdef __MINGW32__
    699   1.1  christos   /* On Windows, argv[0] is not necessarily set to absolute form when
    700   1.1  christos      GDB is found along PATH, without which relocation doesn't work.  */
    701   1.1  christos   gdb_program_name = windows_get_absolute_argv0 (argv[0]);
    702   1.1  christos #else
    703   1.1  christos   gdb_program_name = xstrdup (argv[0]);
    704   1.1  christos #endif
    705   1.1  christos 
    706   1.3  christos   /* Prefix warning messages with the command name.  */
    707   1.7  christos   gdb::unique_xmalloc_ptr<char> tmp_warn_preprint
    708  1.10  christos     = xstrprintf ("%s: warning: ", gdb_program_name);
    709   1.7  christos   warning_pre_print = tmp_warn_preprint.get ();
    710   1.3  christos 
    711   1.8  christos   current_directory = getcwd (NULL, 0);
    712   1.8  christos   if (current_directory == NULL)
    713   1.3  christos     perror_warning_with_name (_("error finding working directory"));
    714   1.3  christos 
    715   1.1  christos   /* Set the sysroot path.  */
    716  1.10  christos   gdb_sysroot = relocate_gdb_directory (TARGET_SYSTEM_ROOT,
    717  1.10  christos 					TARGET_SYSTEM_ROOT_RELOCATABLE);
    718   1.1  christos 
    719  1.10  christos   if (gdb_sysroot.empty ())
    720  1.10  christos     gdb_sysroot = TARGET_SYSROOT_PREFIX;
    721   1.5  christos 
    722   1.9  christos   debug_file_directory
    723  1.10  christos     = relocate_gdb_directory (DEBUGDIR, DEBUGDIR_RELOCATABLE);
    724   1.1  christos 
    725  1.11  christos #ifdef ADDITIONAL_DEBUG_DIRS
    726  1.11  christos   debug_file_directory = (debug_file_directory + DIRNAME_SEPARATOR
    727  1.11  christos 			  + ADDITIONAL_DEBUG_DIRS);
    728  1.11  christos #endif
    729  1.11  christos 
    730   1.1  christos   gdb_datadir = relocate_gdb_directory (GDB_DATADIR,
    731   1.1  christos 					GDB_DATADIR_RELOCATABLE);
    732   1.1  christos 
    733   1.9  christos #ifdef WITH_PYTHON_LIBDIR
    734   1.9  christos   python_libdir = relocate_gdb_directory (WITH_PYTHON_LIBDIR,
    735   1.9  christos 					  PYTHON_LIBDIR_RELOCATABLE);
    736   1.1  christos #endif
    737   1.1  christos 
    738   1.1  christos #ifdef RELOC_SRCDIR
    739   1.1  christos   add_substitute_path_rule (RELOC_SRCDIR,
    740   1.1  christos 			    make_relative_prefix (gdb_program_name, BINDIR,
    741   1.1  christos 						  RELOC_SRCDIR));
    742   1.1  christos #endif
    743   1.1  christos 
    744   1.1  christos   /* There will always be an interpreter.  Either the one passed into
    745   1.1  christos      this captured main, or one specified by the user at start up, or
    746   1.1  christos      the console.  Initialize the interpreter to the one requested by
    747   1.1  christos      the application.  */
    748  1.10  christos   interpreter_p = context->interpreter_p;
    749   1.1  christos 
    750   1.1  christos   /* Parse arguments and options.  */
    751   1.1  christos   {
    752   1.1  christos     int c;
    753   1.1  christos     /* When var field is 0, use flag field to record the equivalent
    754   1.1  christos        short option (or arbitrary numbers starting at 10 for those
    755   1.1  christos        with no equivalent).  */
    756   1.1  christos     enum {
    757   1.1  christos       OPT_SE = 10,
    758   1.1  christos       OPT_CD,
    759   1.1  christos       OPT_ANNOTATE,
    760   1.1  christos       OPT_STATISTICS,
    761   1.1  christos       OPT_TUI,
    762   1.1  christos       OPT_NOWINDOWS,
    763   1.1  christos       OPT_WINDOWS,
    764   1.1  christos       OPT_IX,
    765   1.8  christos       OPT_IEX,
    766  1.10  christos       OPT_EIX,
    767  1.10  christos       OPT_EIEX,
    768   1.8  christos       OPT_READNOW,
    769   1.8  christos       OPT_READNEVER
    770   1.1  christos     };
    771   1.9  christos     /* This struct requires int* in the struct, but write_files is a bool.
    772   1.9  christos        So use this temporary int that we write back after argument parsing.  */
    773   1.9  christos     int write_files_1 = 0;
    774   1.1  christos     static struct option long_options[] =
    775   1.1  christos     {
    776   1.1  christos       {"tui", no_argument, 0, OPT_TUI},
    777   1.8  christos       {"readnow", no_argument, NULL, OPT_READNOW},
    778   1.8  christos       {"readnever", no_argument, NULL, OPT_READNEVER},
    779   1.8  christos       {"r", no_argument, NULL, OPT_READNOW},
    780   1.1  christos       {"quiet", no_argument, &quiet, 1},
    781   1.1  christos       {"q", no_argument, &quiet, 1},
    782   1.1  christos       {"silent", no_argument, &quiet, 1},
    783   1.1  christos       {"nh", no_argument, &inhibit_home_gdbinit, 1},
    784   1.1  christos       {"nx", no_argument, &inhibit_gdbinit, 1},
    785   1.1  christos       {"n", no_argument, &inhibit_gdbinit, 1},
    786   1.1  christos       {"batch-silent", no_argument, 0, 'B'},
    787   1.1  christos       {"batch", no_argument, &batch_flag, 1},
    788   1.1  christos 
    789   1.1  christos     /* This is a synonym for "--annotate=1".  --annotate is now
    790   1.1  christos        preferred, but keep this here for a long time because people
    791   1.1  christos        will be running emacses which use --fullname.  */
    792   1.1  christos       {"fullname", no_argument, 0, 'f'},
    793   1.1  christos       {"f", no_argument, 0, 'f'},
    794   1.1  christos 
    795   1.1  christos       {"annotate", required_argument, 0, OPT_ANNOTATE},
    796   1.1  christos       {"help", no_argument, &print_help, 1},
    797   1.1  christos       {"se", required_argument, 0, OPT_SE},
    798   1.1  christos       {"symbols", required_argument, 0, 's'},
    799   1.1  christos       {"s", required_argument, 0, 's'},
    800   1.1  christos       {"exec", required_argument, 0, 'e'},
    801   1.1  christos       {"e", required_argument, 0, 'e'},
    802   1.1  christos       {"core", required_argument, 0, 'c'},
    803   1.1  christos       {"c", required_argument, 0, 'c'},
    804   1.1  christos       {"pid", required_argument, 0, 'p'},
    805   1.1  christos       {"p", required_argument, 0, 'p'},
    806   1.1  christos       {"command", required_argument, 0, 'x'},
    807   1.1  christos       {"eval-command", required_argument, 0, 'X'},
    808   1.1  christos       {"version", no_argument, &print_version, 1},
    809   1.1  christos       {"configuration", no_argument, &print_configuration, 1},
    810   1.1  christos       {"x", required_argument, 0, 'x'},
    811   1.1  christos       {"ex", required_argument, 0, 'X'},
    812   1.1  christos       {"init-command", required_argument, 0, OPT_IX},
    813   1.1  christos       {"init-eval-command", required_argument, 0, OPT_IEX},
    814   1.1  christos       {"ix", required_argument, 0, OPT_IX},
    815   1.1  christos       {"iex", required_argument, 0, OPT_IEX},
    816  1.10  christos       {"early-init-command", required_argument, 0, OPT_EIX},
    817  1.10  christos       {"early-init-eval-command", required_argument, 0, OPT_EIEX},
    818  1.10  christos       {"eix", required_argument, 0, OPT_EIX},
    819  1.10  christos       {"eiex", required_argument, 0, OPT_EIEX},
    820   1.1  christos #ifdef GDBTK
    821   1.1  christos       {"tclcommand", required_argument, 0, 'z'},
    822   1.1  christos       {"enable-external-editor", no_argument, 0, 'y'},
    823   1.1  christos       {"editor-command", required_argument, 0, 'w'},
    824   1.1  christos #endif
    825   1.1  christos       {"ui", required_argument, 0, 'i'},
    826   1.1  christos       {"interpreter", required_argument, 0, 'i'},
    827   1.1  christos       {"i", required_argument, 0, 'i'},
    828   1.1  christos       {"directory", required_argument, 0, 'd'},
    829   1.1  christos       {"d", required_argument, 0, 'd'},
    830   1.1  christos       {"data-directory", required_argument, 0, 'D'},
    831   1.3  christos       {"D", required_argument, 0, 'D'},
    832   1.1  christos       {"cd", required_argument, 0, OPT_CD},
    833   1.1  christos       {"tty", required_argument, 0, 't'},
    834   1.1  christos       {"baud", required_argument, 0, 'b'},
    835   1.1  christos       {"b", required_argument, 0, 'b'},
    836   1.1  christos       {"nw", no_argument, NULL, OPT_NOWINDOWS},
    837   1.1  christos       {"nowindows", no_argument, NULL, OPT_NOWINDOWS},
    838   1.1  christos       {"w", no_argument, NULL, OPT_WINDOWS},
    839   1.1  christos       {"windows", no_argument, NULL, OPT_WINDOWS},
    840   1.1  christos       {"statistics", no_argument, 0, OPT_STATISTICS},
    841   1.9  christos       {"write", no_argument, &write_files_1, 1},
    842   1.1  christos       {"args", no_argument, &set_args, 1},
    843   1.1  christos       {"l", required_argument, 0, 'l'},
    844   1.1  christos       {"return-child-result", no_argument, &return_child_result, 1},
    845   1.1  christos       {0, no_argument, 0, 0}
    846   1.1  christos     };
    847   1.1  christos 
    848   1.1  christos     while (1)
    849   1.1  christos       {
    850   1.1  christos 	int option_index;
    851   1.1  christos 
    852   1.1  christos 	c = getopt_long_only (argc, argv, "",
    853   1.1  christos 			      long_options, &option_index);
    854   1.1  christos 	if (c == EOF || set_args)
    855   1.1  christos 	  break;
    856   1.1  christos 
    857   1.1  christos 	/* Long option that takes an argument.  */
    858   1.1  christos 	if (c == 0 && long_options[option_index].flag == 0)
    859   1.1  christos 	  c = long_options[option_index].val;
    860   1.1  christos 
    861   1.1  christos 	switch (c)
    862   1.1  christos 	  {
    863   1.1  christos 	  case 0:
    864   1.1  christos 	    /* Long option that just sets a flag.  */
    865   1.1  christos 	    break;
    866   1.1  christos 	  case OPT_SE:
    867   1.1  christos 	    symarg = optarg;
    868   1.1  christos 	    execarg = optarg;
    869   1.1  christos 	    break;
    870   1.1  christos 	  case OPT_CD:
    871   1.1  christos 	    cdarg = optarg;
    872   1.1  christos 	    break;
    873   1.1  christos 	  case OPT_ANNOTATE:
    874   1.1  christos 	    /* FIXME: what if the syntax is wrong (e.g. not digits)?  */
    875   1.1  christos 	    annotation_level = atoi (optarg);
    876   1.1  christos 	    break;
    877   1.1  christos 	  case OPT_STATISTICS:
    878   1.1  christos 	    /* Enable the display of both time and space usage.  */
    879   1.1  christos 	    set_per_command_time (1);
    880   1.1  christos 	    set_per_command_space (1);
    881   1.1  christos 	    break;
    882   1.1  christos 	  case OPT_TUI:
    883   1.1  christos 	    /* --tui is equivalent to -i=tui.  */
    884   1.1  christos #ifdef TUI
    885  1.10  christos 	    interpreter_p = INTERP_TUI;
    886   1.1  christos #else
    887   1.3  christos 	    error (_("%s: TUI mode is not supported"), gdb_program_name);
    888   1.1  christos #endif
    889   1.1  christos 	    break;
    890   1.1  christos 	  case OPT_WINDOWS:
    891   1.1  christos 	    /* FIXME: cagney/2003-03-01: Not sure if this option is
    892  1.10  christos 	       actually useful, and if it is, what it should do.  */
    893   1.1  christos #ifdef GDBTK
    894   1.1  christos 	    /* --windows is equivalent to -i=insight.  */
    895  1.10  christos 	    interpreter_p = INTERP_INSIGHT;
    896   1.1  christos #endif
    897   1.1  christos 	    break;
    898   1.1  christos 	  case OPT_NOWINDOWS:
    899   1.1  christos 	    /* -nw is equivalent to -i=console.  */
    900  1.10  christos 	    interpreter_p = INTERP_CONSOLE;
    901   1.1  christos 	    break;
    902   1.1  christos 	  case 'f':
    903   1.1  christos 	    annotation_level = 1;
    904   1.1  christos 	    break;
    905   1.1  christos 	  case 's':
    906   1.1  christos 	    symarg = optarg;
    907   1.1  christos 	    break;
    908   1.1  christos 	  case 'e':
    909   1.1  christos 	    execarg = optarg;
    910   1.1  christos 	    break;
    911   1.1  christos 	  case 'c':
    912   1.1  christos 	    corearg = optarg;
    913   1.1  christos 	    break;
    914   1.1  christos 	  case 'p':
    915   1.1  christos 	    pidarg = optarg;
    916   1.1  christos 	    break;
    917   1.1  christos 	  case 'x':
    918   1.7  christos 	    cmdarg_vec.emplace_back (CMDARG_FILE, optarg);
    919   1.1  christos 	    break;
    920   1.1  christos 	  case 'X':
    921   1.7  christos 	    cmdarg_vec.emplace_back (CMDARG_COMMAND, optarg);
    922   1.1  christos 	    break;
    923   1.1  christos 	  case OPT_IX:
    924   1.7  christos 	    cmdarg_vec.emplace_back (CMDARG_INIT_FILE, optarg);
    925   1.1  christos 	    break;
    926   1.1  christos 	  case OPT_IEX:
    927   1.7  christos 	    cmdarg_vec.emplace_back (CMDARG_INIT_COMMAND, optarg);
    928   1.1  christos 	    break;
    929  1.10  christos 	  case OPT_EIX:
    930  1.10  christos 	    cmdarg_vec.emplace_back (CMDARG_EARLYINIT_FILE, optarg);
    931  1.10  christos 	    break;
    932  1.10  christos 	  case OPT_EIEX:
    933  1.10  christos 	    cmdarg_vec.emplace_back (CMDARG_EARLYINIT_COMMAND, optarg);
    934  1.10  christos 	    break;
    935   1.1  christos 	  case 'B':
    936   1.1  christos 	    batch_flag = batch_silent = 1;
    937   1.7  christos 	    gdb_stdout = new null_file ();
    938   1.1  christos 	    break;
    939   1.1  christos 	  case 'D':
    940   1.3  christos 	    if (optarg[0] == '\0')
    941   1.3  christos 	      error (_("%s: empty path for `--data-directory'"),
    942   1.3  christos 		     gdb_program_name);
    943   1.3  christos 	    set_gdb_data_directory (optarg);
    944   1.1  christos 	    gdb_datadir_provided = 1;
    945   1.1  christos 	    break;
    946   1.1  christos #ifdef GDBTK
    947   1.1  christos 	  case 'z':
    948   1.1  christos 	    {
    949   1.1  christos 	      if (!gdbtk_test (optarg))
    950   1.3  christos 		error (_("%s: unable to load tclcommand file \"%s\""),
    951   1.3  christos 		       gdb_program_name, optarg);
    952   1.1  christos 	      break;
    953   1.1  christos 	    }
    954   1.1  christos 	  case 'y':
    955   1.1  christos 	    /* Backwards compatibility only.  */
    956   1.1  christos 	    break;
    957   1.1  christos 	  case 'w':
    958   1.1  christos 	    {
    959   1.1  christos 	      /* Set the external editor commands when gdb is farming out files
    960   1.1  christos 		 to be edited by another program.  */
    961   1.1  christos 	      external_editor_command = xstrdup (optarg);
    962   1.1  christos 	      break;
    963   1.1  christos 	    }
    964   1.1  christos #endif /* GDBTK */
    965   1.1  christos 	  case 'i':
    966  1.10  christos 	    interpreter_p = optarg;
    967   1.1  christos 	    break;
    968   1.1  christos 	  case 'd':
    969   1.7  christos 	    dirarg.push_back (optarg);
    970   1.1  christos 	    break;
    971   1.1  christos 	  case 't':
    972   1.1  christos 	    ttyarg = optarg;
    973   1.1  christos 	    break;
    974   1.1  christos 	  case 'q':
    975   1.1  christos 	    quiet = 1;
    976   1.1  christos 	    break;
    977   1.1  christos 	  case 'b':
    978   1.1  christos 	    {
    979   1.8  christos 	      int rate;
    980   1.1  christos 	      char *p;
    981   1.1  christos 
    982   1.8  christos 	      rate = strtol (optarg, &p, 0);
    983   1.8  christos 	      if (rate == 0 && p == optarg)
    984   1.3  christos 		warning (_("could not set baud rate to `%s'."),
    985   1.3  christos 			 optarg);
    986   1.1  christos 	      else
    987   1.8  christos 		baud_rate = rate;
    988   1.1  christos 	    }
    989  1.10  christos 	    break;
    990   1.1  christos 	  case 'l':
    991   1.1  christos 	    {
    992   1.8  christos 	      int timeout;
    993   1.1  christos 	      char *p;
    994   1.1  christos 
    995   1.8  christos 	      timeout = strtol (optarg, &p, 0);
    996   1.8  christos 	      if (timeout == 0 && p == optarg)
    997   1.3  christos 		warning (_("could not set timeout limit to `%s'."),
    998   1.3  christos 			 optarg);
    999   1.1  christos 	      else
   1000   1.8  christos 		remote_timeout = timeout;
   1001   1.8  christos 	    }
   1002   1.8  christos 	    break;
   1003   1.8  christos 
   1004   1.8  christos 	  case OPT_READNOW:
   1005   1.8  christos 	    {
   1006   1.8  christos 	      readnow_symbol_files = 1;
   1007   1.8  christos 	      validate_readnow_readnever ();
   1008   1.8  christos 	    }
   1009   1.8  christos 	    break;
   1010   1.8  christos 
   1011   1.8  christos 	  case OPT_READNEVER:
   1012   1.8  christos 	    {
   1013   1.8  christos 	      readnever_symbol_files = 1;
   1014   1.8  christos 	      validate_readnow_readnever ();
   1015   1.1  christos 	    }
   1016   1.1  christos 	    break;
   1017   1.1  christos 
   1018   1.1  christos 	  case '?':
   1019   1.3  christos 	    error (_("Use `%s --help' for a complete list of options."),
   1020   1.3  christos 		   gdb_program_name);
   1021   1.1  christos 	  }
   1022   1.1  christos       }
   1023   1.9  christos     write_files = (write_files_1 != 0);
   1024   1.1  christos 
   1025   1.1  christos     if (batch_flag)
   1026   1.8  christos       {
   1027   1.8  christos 	quiet = 1;
   1028   1.8  christos 
   1029   1.8  christos 	/* Disable all output styling when running in batch mode.  */
   1030   1.8  christos 	cli_styling = 0;
   1031   1.8  christos       }
   1032   1.1  christos   }
   1033   1.1  christos 
   1034   1.8  christos   save_original_signals_state (quiet);
   1035   1.8  christos 
   1036   1.3  christos   /* Try to set up an alternate signal stack for SIGSEGV handlers.  */
   1037   1.9  christos   gdb::alternate_signal_stack signal_stack;
   1038   1.3  christos 
   1039   1.5  christos   /* Initialize all files.  */
   1040  1.10  christos   gdb_init ();
   1041  1.10  christos 
   1042  1.10  christos   /* Process early init files and early init options from the command line.  */
   1043  1.10  christos   if (!inhibit_gdbinit)
   1044  1.10  christos     {
   1045  1.10  christos       std::string home_gdbearlyinit;
   1046  1.10  christos       get_earlyinit_files (&home_gdbearlyinit);
   1047  1.10  christos       if (!home_gdbearlyinit.empty () && !inhibit_home_gdbinit)
   1048  1.10  christos 	ret = catch_command_errors (source_script,
   1049  1.10  christos 				    home_gdbearlyinit.c_str (), 0);
   1050  1.10  christos     }
   1051  1.10  christos   execute_cmdargs (&cmdarg_vec, CMDARG_EARLYINIT_FILE,
   1052  1.10  christos 		   CMDARG_EARLYINIT_COMMAND, &ret);
   1053  1.10  christos 
   1054  1.11  christos   /* Set the thread pool size here, so the size can be influenced by the
   1055  1.11  christos      early initialization commands.  */
   1056  1.11  christos   update_thread_pool_size ();
   1057  1.11  christos 
   1058  1.10  christos   /* Initialize the extension languages.  */
   1059  1.10  christos   ext_lang_initialization ();
   1060  1.10  christos 
   1061  1.10  christos   /* Recheck if we're starting up quietly after processing the startup
   1062  1.10  christos      scripts and commands.  */
   1063  1.10  christos   if (!quiet)
   1064  1.10  christos     quiet = check_quiet_mode ();
   1065   1.1  christos 
   1066   1.1  christos   /* Now that gdb_init has created the initial inferior, we're in
   1067   1.1  christos      position to set args for that inferior.  */
   1068   1.1  christos   if (set_args)
   1069   1.1  christos     {
   1070   1.1  christos       /* The remaining options are the command-line options for the
   1071   1.1  christos 	 inferior.  The first one is the sym/exec file, and the rest
   1072   1.1  christos 	 are arguments.  */
   1073   1.1  christos       if (optind >= argc)
   1074   1.3  christos 	error (_("%s: `--args' specified but no program specified"),
   1075   1.3  christos 	       gdb_program_name);
   1076   1.3  christos 
   1077   1.1  christos       symarg = argv[optind];
   1078   1.1  christos       execarg = argv[optind];
   1079   1.1  christos       ++optind;
   1080  1.11  christos       current_inferior ()->set_args
   1081  1.11  christos 	(gdb::array_view<char * const> (&argv[optind], argc - optind));
   1082   1.1  christos     }
   1083   1.1  christos   else
   1084   1.1  christos     {
   1085   1.1  christos       /* OK, that's all the options.  */
   1086   1.1  christos 
   1087   1.1  christos       /* The first argument, if specified, is the name of the
   1088   1.1  christos 	 executable.  */
   1089   1.1  christos       if (optind < argc)
   1090   1.1  christos 	{
   1091   1.1  christos 	  symarg = argv[optind];
   1092   1.1  christos 	  execarg = argv[optind];
   1093   1.1  christos 	  optind++;
   1094   1.1  christos 	}
   1095   1.1  christos 
   1096   1.1  christos       /* If the user hasn't already specified a PID or the name of a
   1097   1.1  christos 	 core file, then a second optional argument is allowed.  If
   1098   1.1  christos 	 present, this argument should be interpreted as either a
   1099   1.1  christos 	 PID or a core file, whichever works.  */
   1100   1.1  christos       if (pidarg == NULL && corearg == NULL && optind < argc)
   1101   1.1  christos 	{
   1102   1.1  christos 	  pid_or_core_arg = argv[optind];
   1103   1.1  christos 	  optind++;
   1104   1.1  christos 	}
   1105   1.1  christos 
   1106   1.1  christos       /* Any argument left on the command line is unexpected and
   1107   1.1  christos 	 will be ignored.  Inform the user.  */
   1108   1.1  christos       if (optind < argc)
   1109  1.10  christos 	gdb_printf (gdb_stderr,
   1110  1.10  christos 		    _("Excess command line "
   1111  1.10  christos 		      "arguments ignored. (%s%s)\n"),
   1112  1.10  christos 		    argv[optind],
   1113  1.10  christos 		    (optind == argc - 1) ? "" : " ...");
   1114   1.1  christos     }
   1115   1.1  christos 
   1116   1.1  christos   /* Lookup gdbinit files.  Note that the gdbinit file name may be
   1117   1.9  christos      overridden during file initialization, so get_init_files should be
   1118   1.1  christos      called after gdb_init.  */
   1119   1.9  christos   std::vector<std::string> system_gdbinit;
   1120   1.9  christos   std::string home_gdbinit;
   1121   1.9  christos   std::string local_gdbinit;
   1122   1.1  christos   get_init_files (&system_gdbinit, &home_gdbinit, &local_gdbinit);
   1123   1.1  christos 
   1124   1.1  christos   /* Do these (and anything which might call wrap_here or *_filtered)
   1125   1.1  christos      after initialize_all_files() but before the interpreter has been
   1126   1.1  christos      installed.  Otherwize the help/version messages will be eaten by
   1127   1.1  christos      the interpreter's output handler.  */
   1128   1.1  christos 
   1129   1.1  christos   if (print_version)
   1130   1.1  christos     {
   1131   1.8  christos       print_gdb_version (gdb_stdout, false);
   1132  1.10  christos       gdb_printf ("\n");
   1133   1.1  christos       exit (0);
   1134   1.1  christos     }
   1135   1.1  christos 
   1136   1.1  christos   if (print_help)
   1137   1.1  christos     {
   1138   1.1  christos       print_gdb_help (gdb_stdout);
   1139   1.1  christos       exit (0);
   1140   1.1  christos     }
   1141   1.1  christos 
   1142   1.1  christos   if (print_configuration)
   1143   1.1  christos     {
   1144   1.1  christos       print_gdb_configuration (gdb_stdout);
   1145  1.10  christos       gdb_printf ("\n");
   1146   1.1  christos       exit (0);
   1147   1.1  christos     }
   1148   1.1  christos 
   1149   1.1  christos   /* Install the default UI.  All the interpreters should have had a
   1150   1.1  christos      look at things by now.  Initialize the default interpreter.  */
   1151  1.11  christos   set_top_level_interpreter (interpreter_p.c_str (), false);
   1152  1.11  christos 
   1153  1.11  christos   /* The interpreter should have installed the real uiout by now.  */
   1154  1.11  christos   gdb_assert (current_uiout != temp_uiout.get ());
   1155  1.11  christos   temp_uiout = nullptr;
   1156   1.1  christos 
   1157  1.11  christos   if (!quiet)
   1158   1.1  christos     {
   1159   1.1  christos       /* Print all the junk at the top, with trailing "..." if we are
   1160  1.10  christos 	 about to read a symbol file (possibly slowly).  */
   1161   1.8  christos       print_gdb_version (gdb_stdout, true);
   1162   1.1  christos       if (symarg)
   1163  1.10  christos 	gdb_printf ("..");
   1164  1.10  christos       gdb_printf ("\n");
   1165   1.1  christos       gdb_flush (gdb_stdout);	/* Force to screen during slow
   1166   1.1  christos 				   operations.  */
   1167   1.1  christos     }
   1168   1.1  christos 
   1169   1.1  christos   /* Set off error and warning messages with a blank line.  */
   1170   1.7  christos   tmp_warn_preprint.reset ();
   1171   1.1  christos   warning_pre_print = _("\nwarning: ");
   1172   1.1  christos 
   1173   1.1  christos   /* Read and execute the system-wide gdbinit file, if it exists.
   1174   1.1  christos      This is done *before* all the command line arguments are
   1175   1.1  christos      processed; it sets global parameters, which are independent of
   1176   1.1  christos      what file you are debugging or what directory you are in.  */
   1177   1.9  christos   if (!system_gdbinit.empty () && !inhibit_gdbinit)
   1178   1.9  christos     {
   1179   1.9  christos       for (const std::string &file : system_gdbinit)
   1180   1.9  christos 	ret = catch_command_errors (source_script, file.c_str (), 0);
   1181   1.9  christos     }
   1182   1.1  christos 
   1183   1.1  christos   /* Read and execute $HOME/.gdbinit file, if it exists.  This is done
   1184   1.1  christos      *before* all the command line arguments are processed; it sets
   1185   1.1  christos      global parameters, which are independent of what file you are
   1186   1.1  christos      debugging or what directory you are in.  */
   1187   1.1  christos 
   1188   1.9  christos   if (!home_gdbinit.empty () && !inhibit_gdbinit && !inhibit_home_gdbinit)
   1189   1.9  christos     ret = catch_command_errors (source_script, home_gdbinit.c_str (), 0);
   1190   1.1  christos 
   1191   1.1  christos   /* Process '-ix' and '-iex' options early.  */
   1192  1.10  christos   execute_cmdargs (&cmdarg_vec, CMDARG_INIT_FILE, CMDARG_INIT_COMMAND, &ret);
   1193   1.1  christos 
   1194   1.1  christos   /* Now perform all the actions indicated by the arguments.  */
   1195   1.1  christos   if (cdarg != NULL)
   1196   1.1  christos     {
   1197   1.8  christos       ret = catch_command_errors (cd_command, cdarg, 0);
   1198   1.1  christos     }
   1199   1.1  christos 
   1200   1.7  christos   for (i = 0; i < dirarg.size (); i++)
   1201   1.8  christos     ret = catch_command_errors (directory_switch, dirarg[i], 0);
   1202   1.1  christos 
   1203   1.1  christos   /* Skip auto-loading section-specified scripts until we've sourced
   1204   1.1  christos      local_gdbinit (which is often used to augment the source search
   1205   1.1  christos      path).  */
   1206   1.1  christos   save_auto_load = global_auto_load;
   1207   1.1  christos   global_auto_load = 0;
   1208   1.1  christos 
   1209   1.1  christos   if (execarg != NULL
   1210   1.1  christos       && symarg != NULL
   1211   1.1  christos       && strcmp (execarg, symarg) == 0)
   1212   1.1  christos     {
   1213   1.1  christos       /* The exec file and the symbol-file are the same.  If we can't
   1214  1.10  christos 	 open it, better only print one error message.
   1215  1.10  christos 	 catch_command_errors returns non-zero on success!  */
   1216   1.8  christos       ret = catch_command_errors (exec_file_attach, execarg,
   1217   1.8  christos 				  !batch_flag);
   1218   1.8  christos       if (ret != 0)
   1219   1.8  christos 	ret = catch_command_errors (symbol_file_add_main_adapter,
   1220   1.8  christos 				    symarg, !batch_flag);
   1221   1.1  christos     }
   1222   1.1  christos   else
   1223   1.1  christos     {
   1224   1.1  christos       if (execarg != NULL)
   1225   1.8  christos 	ret = catch_command_errors (exec_file_attach, execarg,
   1226   1.5  christos 				    !batch_flag);
   1227   1.1  christos       if (symarg != NULL)
   1228   1.8  christos 	ret = catch_command_errors (symbol_file_add_main_adapter,
   1229   1.8  christos 				    symarg, !batch_flag);
   1230   1.1  christos     }
   1231   1.1  christos 
   1232   1.1  christos   if (corearg && pidarg)
   1233   1.1  christos     error (_("Can't attach to process and specify "
   1234   1.1  christos 	     "a core file at the same time."));
   1235   1.1  christos 
   1236   1.1  christos   if (corearg != NULL)
   1237   1.8  christos     {
   1238  1.12  christos       ret = catch_command_errors (core_file_command,
   1239  1.12  christos 				  make_quoted_string (corearg).c_str (),
   1240   1.8  christos 				  !batch_flag);
   1241   1.8  christos     }
   1242   1.1  christos   else if (pidarg != NULL)
   1243   1.8  christos     {
   1244   1.8  christos       ret = catch_command_errors (attach_command, pidarg, !batch_flag);
   1245   1.8  christos     }
   1246   1.1  christos   else if (pid_or_core_arg)
   1247   1.1  christos     {
   1248   1.1  christos       /* The user specified 'gdb program pid' or gdb program core'.
   1249   1.1  christos 	 If pid_or_core_arg's first character is a digit, try attach
   1250   1.1  christos 	 first and then corefile.  Otherwise try just corefile.  */
   1251   1.1  christos 
   1252  1.11  christos       if (isdigit ((unsigned char)pid_or_core_arg[0]))
   1253   1.1  christos 	{
   1254   1.8  christos 	  ret = catch_command_errors (attach_command, pid_or_core_arg,
   1255   1.8  christos 				      !batch_flag);
   1256   1.8  christos 	  if (ret == 0)
   1257  1.12  christos 	    ret = catch_command_errors
   1258  1.12  christos 	      (core_file_command,
   1259  1.12  christos 	       make_quoted_string (pid_or_core_arg).c_str (),
   1260  1.12  christos 	       !batch_flag);
   1261   1.8  christos 	}
   1262   1.8  christos       else
   1263   1.8  christos 	{
   1264   1.8  christos 	  /* Can't be a pid, better be a corefile.  */
   1265  1.12  christos 	  ret = catch_command_errors
   1266  1.12  christos 	    (core_file_command,
   1267  1.12  christos 	     make_quoted_string (pid_or_core_arg).c_str (),
   1268  1.12  christos 	     !batch_flag);
   1269   1.1  christos 	}
   1270   1.1  christos     }
   1271   1.1  christos 
   1272   1.1  christos   if (ttyarg != NULL)
   1273   1.9  christos     current_inferior ()->set_tty (ttyarg);
   1274   1.1  christos 
   1275   1.1  christos   /* Error messages should no longer be distinguished with extra output.  */
   1276   1.1  christos   warning_pre_print = _("warning: ");
   1277   1.1  christos 
   1278   1.1  christos   /* Read the .gdbinit file in the current directory, *if* it isn't
   1279   1.1  christos      the same as the $HOME/.gdbinit file (it should exist, also).  */
   1280   1.9  christos   if (!local_gdbinit.empty ())
   1281   1.1  christos     {
   1282   1.8  christos       auto_load_local_gdbinit_pathname
   1283   1.9  christos 	= gdb_realpath (local_gdbinit.c_str ()).release ();
   1284   1.1  christos 
   1285  1.10  christos       if (!inhibit_gdbinit && auto_load_local_gdbinit)
   1286   1.1  christos 	{
   1287  1.10  christos 	  auto_load_debug_printf ("Loading .gdbinit file \"%s\".",
   1288  1.10  christos 				  local_gdbinit.c_str ());
   1289  1.10  christos 
   1290  1.10  christos 	  if (file_is_auto_load_safe (local_gdbinit.c_str ()))
   1291  1.10  christos 	    {
   1292  1.10  christos 	      auto_load_local_gdbinit_loaded = 1;
   1293   1.1  christos 
   1294  1.10  christos 	      ret = catch_command_errors (source_script, local_gdbinit.c_str (), 0);
   1295  1.10  christos 	    }
   1296   1.1  christos 	}
   1297   1.1  christos     }
   1298   1.1  christos 
   1299   1.1  christos   /* Now that all .gdbinit's have been read and all -d options have been
   1300   1.1  christos      processed, we can read any scripts mentioned in SYMARG.
   1301   1.1  christos      We wait until now because it is common to add to the source search
   1302   1.1  christos      path in local_gdbinit.  */
   1303   1.1  christos   global_auto_load = save_auto_load;
   1304   1.8  christos   for (objfile *objfile : current_program_space->objfiles ())
   1305   1.1  christos     load_auto_scripts_for_objfile (objfile);
   1306   1.1  christos 
   1307   1.1  christos   /* Process '-x' and '-ex' options.  */
   1308  1.10  christos   execute_cmdargs (&cmdarg_vec, CMDARG_FILE, CMDARG_COMMAND, &ret);
   1309   1.1  christos 
   1310   1.1  christos   if (batch_flag)
   1311   1.1  christos     {
   1312   1.8  christos       int error_status = EXIT_FAILURE;
   1313   1.8  christos       int *exit_arg = ret == 0 ? &error_status : NULL;
   1314   1.8  christos 
   1315   1.1  christos       /* We have hit the end of the batch file.  */
   1316   1.8  christos       quit_force (exit_arg, 0);
   1317   1.1  christos     }
   1318  1.11  christos 
   1319  1.11  christos   /* We are starting an interactive session.  */
   1320  1.11  christos 
   1321  1.11  christos   /* Read in the history.  This is after all the command files have been read,
   1322  1.11  christos      so that the user can change the history file via a .gdbinit file.  This
   1323  1.11  christos      is also after the batch_flag check, because we don't need the history in
   1324  1.11  christos      batch mode.  */
   1325  1.11  christos   init_history ();
   1326   1.7  christos }
   1327   1.7  christos 
   1328   1.7  christos static void
   1329   1.7  christos captured_main (void *data)
   1330   1.7  christos {
   1331   1.7  christos   struct captured_main_args *context = (struct captured_main_args *) data;
   1332   1.1  christos 
   1333   1.7  christos   captured_main_1 (context);
   1334   1.1  christos 
   1335   1.1  christos   /* NOTE: cagney/1999-11-07: There is probably no reason for not
   1336   1.1  christos      moving this loop and the code found in captured_command_loop()
   1337   1.1  christos      into the command_loop() proper.  The main thing holding back that
   1338   1.1  christos      change - SET_TOP_LEVEL() - has been eliminated.  */
   1339   1.1  christos   while (1)
   1340   1.1  christos     {
   1341   1.9  christos       try
   1342   1.8  christos 	{
   1343   1.8  christos 	  captured_command_loop ();
   1344   1.8  christos 	}
   1345  1.11  christos       catch (const gdb_exception_forced_quit &ex)
   1346  1.11  christos 	{
   1347  1.11  christos 	  quit_force (NULL, 0);
   1348  1.11  christos 	}
   1349   1.9  christos       catch (const gdb_exception &ex)
   1350   1.8  christos 	{
   1351   1.8  christos 	  exception_print (gdb_stderr, ex);
   1352   1.8  christos 	}
   1353   1.1  christos     }
   1354   1.1  christos   /* No exit -- exit is through quit_command.  */
   1355   1.1  christos }
   1356   1.1  christos 
   1357   1.1  christos int
   1358   1.1  christos gdb_main (struct captured_main_args *args)
   1359   1.1  christos {
   1360   1.9  christos   try
   1361   1.6  christos     {
   1362   1.6  christos       captured_main (args);
   1363   1.6  christos     }
   1364   1.9  christos   catch (const gdb_exception &ex)
   1365   1.6  christos     {
   1366   1.6  christos       exception_print (gdb_stderr, ex);
   1367   1.6  christos     }
   1368   1.6  christos 
   1369   1.1  christos   /* The only way to end up here is by an error (normal exit is
   1370   1.1  christos      handled by quit_force()), hence always return an error status.  */
   1371   1.1  christos   return 1;
   1372   1.1  christos }
   1373   1.1  christos 
   1374   1.1  christos 
   1375   1.1  christos /* Don't use *_filtered for printing help.  We don't want to prompt
   1376   1.1  christos    for continue no matter how small the screen or how much we're going
   1377   1.1  christos    to print.  */
   1378   1.1  christos 
   1379   1.1  christos static void
   1380   1.1  christos print_gdb_help (struct ui_file *stream)
   1381   1.1  christos {
   1382   1.9  christos   std::vector<std::string> system_gdbinit;
   1383   1.9  christos   std::string home_gdbinit;
   1384   1.9  christos   std::string local_gdbinit;
   1385  1.10  christos   std::string home_gdbearlyinit;
   1386   1.1  christos 
   1387   1.1  christos   get_init_files (&system_gdbinit, &home_gdbinit, &local_gdbinit);
   1388  1.10  christos   get_earlyinit_files (&home_gdbearlyinit);
   1389   1.1  christos 
   1390   1.1  christos   /* Note: The options in the list below are only approximately sorted
   1391   1.1  christos      in the alphabetical order, so as to group closely related options
   1392   1.1  christos      together.  */
   1393  1.10  christos   gdb_puts (_("\
   1394   1.1  christos This is the GNU debugger.  Usage:\n\n\
   1395   1.1  christos     gdb [options] [executable-file [core-file or process-id]]\n\
   1396   1.1  christos     gdb [options] --args executable-file [inferior-arguments ...]\n\n\
   1397   1.1  christos "), stream);
   1398  1.10  christos   gdb_puts (_("\
   1399   1.1  christos Selection of debuggee and its files:\n\n\
   1400  1.10  christos   --args             Arguments after executable-file are passed to inferior.\n\
   1401   1.1  christos   --core=COREFILE    Analyze the core dump COREFILE.\n\
   1402   1.1  christos   --exec=EXECFILE    Use EXECFILE as the executable.\n\
   1403   1.1  christos   --pid=PID          Attach to running process PID.\n\
   1404   1.1  christos   --directory=DIR    Search for source files in DIR.\n\
   1405   1.1  christos   --se=FILE          Use FILE as symbol file and executable file.\n\
   1406   1.1  christos   --symbols=SYMFILE  Read symbols from SYMFILE.\n\
   1407   1.1  christos   --readnow          Fully read symbol files on first access.\n\
   1408   1.8  christos   --readnever        Do not read symbol files.\n\
   1409   1.1  christos   --write            Set writing into executable and core files.\n\n\
   1410   1.1  christos "), stream);
   1411  1.10  christos   gdb_puts (_("\
   1412   1.1  christos Initial commands and command files:\n\n\
   1413   1.1  christos   --command=FILE, -x Execute GDB commands from FILE.\n\
   1414   1.1  christos   --init-command=FILE, -ix\n\
   1415  1.10  christos 		     Like -x but execute commands before loading inferior.\n\
   1416   1.1  christos   --eval-command=COMMAND, -ex\n\
   1417  1.10  christos 		     Execute a single GDB command.\n\
   1418  1.10  christos 		     May be used multiple times and in conjunction\n\
   1419  1.10  christos 		     with --command.\n\
   1420   1.1  christos   --init-eval-command=COMMAND, -iex\n\
   1421  1.10  christos 		     Like -ex but before loading inferior.\n\
   1422   1.1  christos   --nh               Do not read ~/.gdbinit.\n\
   1423   1.1  christos   --nx               Do not read any .gdbinit files in any directory.\n\n\
   1424   1.1  christos "), stream);
   1425  1.10  christos   gdb_puts (_("\
   1426   1.1  christos Output and user interface control:\n\n\
   1427   1.1  christos   --fullname         Output information used by emacs-GDB interface.\n\
   1428   1.1  christos   --interpreter=INTERP\n\
   1429  1.10  christos 		     Select a specific interpreter / user interface.\n\
   1430   1.1  christos   --tty=TTY          Use TTY for input/output by the program being debugged.\n\
   1431   1.1  christos   -w                 Use the GUI interface.\n\
   1432   1.1  christos   --nw               Do not use the GUI interface.\n\
   1433   1.1  christos "), stream);
   1434   1.1  christos #if defined(TUI)
   1435  1.10  christos   gdb_puts (_("\
   1436   1.1  christos   --tui              Use a terminal user interface.\n\
   1437   1.1  christos "), stream);
   1438   1.1  christos #endif
   1439  1.10  christos   gdb_puts (_("\
   1440   1.3  christos   -q, --quiet, --silent\n\
   1441  1.10  christos 		     Do not print version number on startup.\n\n\
   1442   1.1  christos "), stream);
   1443  1.10  christos   gdb_puts (_("\
   1444   1.1  christos Operating modes:\n\n\
   1445   1.1  christos   --batch            Exit after processing options.\n\
   1446   1.1  christos   --batch-silent     Like --batch, but suppress all gdb stdout output.\n\
   1447   1.1  christos   --return-child-result\n\
   1448  1.10  christos 		     GDB exit code will be the child's exit code.\n\
   1449   1.1  christos   --configuration    Print details about GDB configuration and then exit.\n\
   1450   1.1  christos   --help             Print this message and then exit.\n\
   1451   1.1  christos   --version          Print version information and then exit.\n\n\
   1452   1.1  christos Remote debugging options:\n\n\
   1453   1.1  christos   -b BAUDRATE        Set serial port baud rate used for remote debugging.\n\
   1454   1.1  christos   -l TIMEOUT         Set timeout in seconds for remote debugging.\n\n\
   1455   1.1  christos Other options:\n\n\
   1456   1.1  christos   --cd=DIR           Change current directory to DIR.\n\
   1457   1.3  christos   --data-directory=DIR, -D\n\
   1458  1.10  christos 		     Set GDB's data-directory to DIR.\n\
   1459   1.1  christos "), stream);
   1460  1.10  christos   gdb_puts (_("\n\
   1461  1.10  christos At startup, GDB reads the following early init files and executes their\n\
   1462  1.10  christos commands:\n\
   1463  1.10  christos "), stream);
   1464  1.10  christos   if (!home_gdbearlyinit.empty ())
   1465  1.10  christos     gdb_printf (stream, _("\
   1466  1.10  christos    * user-specific early init file: %s\n\
   1467  1.10  christos "), home_gdbearlyinit.c_str ());
   1468  1.10  christos   if (home_gdbearlyinit.empty ())
   1469  1.10  christos     gdb_printf (stream, _("\
   1470  1.10  christos    None found.\n"));
   1471  1.10  christos   gdb_puts (_("\n\
   1472   1.1  christos At startup, GDB reads the following init files and executes their commands:\n\
   1473   1.1  christos "), stream);
   1474   1.9  christos   if (!system_gdbinit.empty ())
   1475   1.9  christos     {
   1476   1.9  christos       std::string output;
   1477   1.9  christos       for (size_t idx = 0; idx < system_gdbinit.size (); ++idx)
   1478  1.10  christos 	{
   1479   1.9  christos 	  output += system_gdbinit[idx];
   1480   1.9  christos 	  if (idx < system_gdbinit.size () - 1)
   1481   1.9  christos 	    output += ", ";
   1482   1.9  christos 	}
   1483  1.10  christos       gdb_printf (stream, _("\
   1484   1.9  christos    * system-wide init files: %s\n\
   1485   1.9  christos "), output.c_str ());
   1486   1.9  christos     }
   1487   1.9  christos   if (!home_gdbinit.empty ())
   1488  1.10  christos     gdb_printf (stream, _("\
   1489   1.1  christos    * user-specific init file: %s\n\
   1490   1.9  christos "), home_gdbinit.c_str ());
   1491   1.9  christos   if (!local_gdbinit.empty ())
   1492  1.10  christos     gdb_printf (stream, _("\
   1493   1.1  christos    * local init file (see also 'set auto-load local-gdbinit'): ./%s\n\
   1494   1.9  christos "), local_gdbinit.c_str ());
   1495  1.10  christos   if (system_gdbinit.empty () && home_gdbinit.empty ()
   1496  1.10  christos       && local_gdbinit.empty ())
   1497  1.10  christos     gdb_printf (stream, _("\
   1498  1.10  christos    None found.\n"));
   1499  1.12  christos   gdb_printf (stream, _("\n\
   1500  1.12  christos For more information, type \"%ps\" from within GDB, or consult the\n\
   1501   1.1  christos GDB manual (available as on-line info or a printed manual).\n\
   1502  1.12  christos "),
   1503  1.12  christos 	      styled_string (command_style.style (), "stream"));
   1504   1.1  christos   if (REPORT_BUGS_TO[0] && stream == gdb_stdout)
   1505  1.10  christos     gdb_printf (stream, _("\n\
   1506  1.10  christos Report bugs to %ps.\n\
   1507  1.10  christos "), styled_string (file_name_style.style (), REPORT_BUGS_TO));
   1508   1.9  christos   if (stream == gdb_stdout)
   1509  1.10  christos     gdb_printf (stream, _("\n\
   1510   1.9  christos You can ask GDB-related questions on the GDB users mailing list\n\
   1511  1.11  christos (gdb (at) sourceware.org) or on GDB's IRC channel (#gdb on Libera.Chat).\n"));
   1512   1.1  christos }
   1513