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