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