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