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