/* Top level stuff for GDB, the GNU debugger.
- Copyright (C) 1986-2018 Free Software Foundation, Inc.
+ Copyright (C) 1986-2019 Free Software Foundation, Inc.
This file is part of GDB.
#include "maint.h"
#include "filenames.h"
-#include "filestuff.h"
+#include "gdbsupport/filestuff.h"
#include <signal.h>
#include "event-top.h"
#include "infrun.h"
-#include "signals-state-save-restore.h"
+#include "gdbsupport/signals-state-save-restore.h"
#include <vector>
-#include "common/pathstuff.h"
+#include "gdbsupport/pathstuff.h"
+#include "cli/cli-style.h"
/* The selected interpreter. This will be used as a set command
variable, so it should always be malloc'ed - since
/* Now it's time to start the event loop. */
start_event_loop ();
- /* FIXME: cagney/1999-11-05: A correct command_loop() implementaton
- would clean things up (restoring the cleanup chain) to the state
- they were just prior to the call. Technically, this means that
- the do_cleanups() below is redundant. Unfortunately, many FUNCs
- are not that well behaved. do_cleanups should either be replaced
- with a do_cleanups call (to cover the problem) or an assertion
- check to detect bad FUNCs code. */
- do_cleanups (all_cleanups ());
/* If the command_loop returned, normally (rather than threw an
error) we try to quit. If the quit is aborted, our caller
catches the signal and restarts the command loop. */
/* Handle command errors thrown from within catch_command_errors. */
static int
-handle_command_errors (struct gdb_exception e)
+handle_command_errors (const struct gdb_exception &e)
{
if (e.reason < 0)
{
catch_command_errors (catch_command_errors_const_ftype command,
const char *arg, int from_tty)
{
- TRY
+ try
{
int was_sync = current_ui->prompt_state == PROMPT_BLOCKED;
maybe_wait_sync_command_done (was_sync);
}
- CATCH (e, RETURN_MASK_ALL)
+ catch (const gdb_exception &e)
{
return handle_command_errors (e);
}
- END_CATCH
return 1;
}
int i;
int save_auto_load;
- struct objfile *objfile;
int ret = 1;
#ifdef HAVE_USEFUL_SBRK
textdomain (PACKAGE);
#endif
- bfd_init ();
notice_open_fds ();
- saved_command_line = (char *) xstrdup ("");
-
#ifdef __MINGW32__
/* Ensure stderr is unbuffered. A Cygwin pty or pipe is implemented
as a Windows pipe, and Windows buffers on pipes. */
setvbuf (stderr, NULL, _IONBF, BUFSIZ);
#endif
+ /* Note: `error' cannot be called before this point, because the
+ caller will crash when trying to print the exception. */
main_ui = new ui (stdin, stdout, stderr);
current_ui = main_ui;
gdb_stdtargerr = gdb_stderr; /* for moment */
gdb_stdtargin = gdb_stdin; /* for moment */
+ if (bfd_init () != BFD_INIT_MAGIC)
+ error (_("fatal error: libbfd ABI mismatch"));
+
#ifdef __MINGW32__
/* On Windows, argv[0] is not necessarily set to absolute form when
GDB is found along PATH, without which relocation doesn't work. */
}
if (batch_flag)
- quiet = 1;
+ {
+ quiet = 1;
+
+ /* Disable all output styling when running in batch mode. */
+ cli_styling = 0;
+ }
}
save_original_signals_state (quiet);
We wait until now because it is common to add to the source search
path in local_gdbinit. */
global_auto_load = save_auto_load;
- ALL_OBJFILES (objfile)
+ for (objfile *objfile : current_program_space->objfiles ())
load_auto_scripts_for_objfile (objfile);
/* Process '-x' and '-ex' options. */
change - SET_TOP_LEVEL() - has been eliminated. */
while (1)
{
- TRY
+ try
{
captured_command_loop ();
}
- CATCH (ex, RETURN_MASK_ALL)
+ catch (const gdb_exception &ex)
{
exception_print (gdb_stderr, ex);
}
- END_CATCH
}
/* No exit -- exit is through quit_command. */
}
int
gdb_main (struct captured_main_args *args)
{
- TRY
+ try
{
captured_main (args);
}
- CATCH (ex, RETURN_MASK_ALL)
+ catch (const gdb_exception &ex)
{
exception_print (gdb_stderr, ex);
}
- END_CATCH
/* The only way to end up here is by an error (normal exit is
handled by quit_force()), hence always return an error status. */