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