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