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