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