aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/cli/cli-interp.c49
-rw-r--r--gdb/interps.c21
-rw-r--r--gdb/interps.h5
-rw-r--r--gdb/mi/mi-interp.c10
-rw-r--r--gdb/mi/mi-interp.h2
-rw-r--r--gdb/python/py-dap.c3
-rw-r--r--gdb/tui/tui-interp.c4
7 files changed, 30 insertions, 64 deletions
diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c
index 5f2ff72..9941014 100644
--- a/gdb/cli/cli-interp.c
+++ b/gdb/cli/cli-interp.c
@@ -48,7 +48,7 @@ class cli_interp final : public cli_interp_base
void init (bool top_level) override;
void resume () override;
void suspend () override;
- gdb_exception exec (const char *command_str) override;
+ void exec (const char *command_str) override;
ui_out *interp_ui_out () override;
private:
@@ -75,11 +75,6 @@ as_cli_interp_base (interp *interp)
return dynamic_cast<cli_interp_base *> (interp);
}
-/* Longjmp-safe wrapper for "execute_command". */
-static struct gdb_exception safe_execute_command (struct ui_out *uiout,
- const char *command,
- int from_tty);
-
/* See cli-interp.h.
Breakpoint hits should always be mirrored to a console. Deciding
@@ -314,12 +309,9 @@ cli_interp::suspend ()
gdb_disable_readline ();
}
-gdb_exception
+void
cli_interp::exec (const char *command_str)
{
- struct ui_file *old_stream;
- struct gdb_exception result;
-
/* gdb_stdout could change between the time m_cli_uiout was
initialized and now. Since we're probably using a different
interpreter which has a new ui_file for gdb_stdout, use that one
@@ -327,41 +319,28 @@ cli_interp::exec (const char *command_str)
It is important that it gets reset everytime, since the user
could set gdb to use a different interpreter. */
- old_stream = m_cli_uiout->set_stream (gdb_stdout);
- result = safe_execute_command (m_cli_uiout.get (), command_str, 1);
- m_cli_uiout->set_stream (old_stream);
- return result;
-}
-
-bool
-cli_interp_base::supports_command_editing ()
-{
- return true;
-}
-
-static struct gdb_exception
-safe_execute_command (struct ui_out *command_uiout, const char *command,
- int from_tty)
-{
- struct gdb_exception e;
+ ui_file *old_stream = m_cli_uiout->set_stream (gdb_stdout);
+ SCOPE_EXIT { m_cli_uiout->set_stream (old_stream); };
/* Save and override the global ``struct ui_out'' builder. */
scoped_restore saved_uiout = make_scoped_restore (&current_uiout,
- command_uiout);
+ m_cli_uiout.get ());
try
{
- execute_command (command, from_tty);
+ execute_command (command_str, 1);
}
- catch (gdb_exception &exception)
+ catch (const gdb_exception_error &ex)
{
- e = std::move (exception);
+ exception_print (gdb_stderr, ex);
+ throw;
}
+}
- /* FIXME: cagney/2005-01-13: This shouldn't be needed. Instead the
- caller should print the exception. */
- exception_print (gdb_stderr, e);
- return e;
+bool
+cli_interp_base::supports_command_editing ()
+{
+ return true;
}
ui_out *
diff --git a/gdb/interps.c b/gdb/interps.c
index 24dc616..9c7908b 100644
--- a/gdb/interps.c
+++ b/gdb/interps.c
@@ -39,6 +39,7 @@
#include "top.h" /* For command_loop. */
#include "main.h"
#include "gdbsupport/buildargv.h"
+#include "gdbsupport/scope-exit.h"
/* Each UI has its own independent set of interpreters. */
@@ -332,7 +333,7 @@ interp_supports_command_editing (struct interp *interp)
/* interp_exec - This executes COMMAND_STR in the current
interpreter. */
-struct gdb_exception
+void
interp_exec (struct interp *interp, const char *command_str)
{
struct ui_interp_info *ui_interp = get_current_interp_info ();
@@ -341,7 +342,7 @@ interp_exec (struct interp *interp, const char *command_str)
scoped_restore save_command_interp
= make_scoped_restore (&ui_interp->command_interpreter, interp);
- return interp->exec (command_str);
+ interp->exec (command_str);
}
/* A convenience routine that nulls out all the common command hooks.
@@ -393,19 +394,13 @@ interpreter_exec_cmd (const char *args, int from_tty)
error (_("Could not find interpreter \"%s\"."), prules[0]);
interp_set (interp_to_use, false);
-
- for (i = 1; i < nrules; i++)
+ SCOPE_EXIT
{
- struct gdb_exception e = interp_exec (interp_to_use, prules[i]);
-
- if (e.reason < 0)
- {
- interp_set (old_interp, 0);
- error (_("error in command: \"%s\"."), prules[i]);
- }
- }
+ interp_set (old_interp, false);
+ };
- interp_set (old_interp, 0);
+ for (i = 1; i < nrules; i++)
+ interp_exec (interp_to_use, prules[i]);
}
/* See interps.h. */
diff --git a/gdb/interps.h b/gdb/interps.h
index 2caa7bf..01bec47 100644
--- a/gdb/interps.h
+++ b/gdb/interps.h
@@ -36,8 +36,7 @@ typedef struct interp *(*interp_factory_func) (const char *name);
extern void interp_factory_register (const char *name,
interp_factory_func func);
-extern struct gdb_exception interp_exec (struct interp *interp,
- const char *command);
+extern void interp_exec (struct interp *interp, const char *command);
class interp
{
@@ -51,7 +50,7 @@ public:
virtual void resume () = 0;
virtual void suspend () = 0;
- virtual gdb_exception exec (const char *command) = 0;
+ virtual void exec (const char *command) = 0;
/* Returns the ui_out currently used to collect results for this
interpreter. It can be a formatter for stdout, as is the case
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c
index cf3d738..29d1aee 100644
--- a/gdb/mi/mi-interp.c
+++ b/gdb/mi/mi-interp.c
@@ -199,11 +199,10 @@ mi_interp::suspend ()
gdb_disable_readline ();
}
-gdb_exception
+void
mi_interp::exec (const char *command)
{
mi_execute_command_wrapper (command);
- return gdb_exception ();
}
void
@@ -240,12 +239,7 @@ mi_cmd_interpreter_exec (const char *command, char **argv, int argc)
};
for (i = 1; i < argc; i++)
- {
- struct gdb_exception e = interp_exec (interp_to_use, argv[i]);
-
- if (e.reason < 0)
- error ("%s", e.what ());
- }
+ interp_exec (interp_to_use, argv[i]);
}
/* This inserts a number of hooks that are meant to produce
diff --git a/gdb/mi/mi-interp.h b/gdb/mi/mi-interp.h
index 827297f..e07be12 100644
--- a/gdb/mi/mi-interp.h
+++ b/gdb/mi/mi-interp.h
@@ -36,7 +36,7 @@ public:
void init (bool top_level) override;
void resume () override;
void suspend () override;
- gdb_exception exec (const char *command_str) override;
+ void exec (const char *command_str) override;
ui_out *interp_ui_out () override;
void set_logging (ui_file_up logfile, bool logging_redirect,
bool debug_redirect) override;
diff --git a/gdb/python/py-dap.c b/gdb/python/py-dap.c
index 9c77b2a..32f9272 100644
--- a/gdb/python/py-dap.c
+++ b/gdb/python/py-dap.c
@@ -45,10 +45,9 @@ public:
{
}
- gdb_exception exec (const char *command) override
+ void exec (const char *command) override
{
/* Just ignore it. */
- return {};
}
void set_logging (ui_file_up logfile, bool logging_redirect,
diff --git a/gdb/tui/tui-interp.c b/gdb/tui/tui-interp.c
index 3c28145..812c62c 100644
--- a/gdb/tui/tui-interp.c
+++ b/gdb/tui/tui-interp.c
@@ -49,7 +49,7 @@ public:
void init (bool top_level) override;
void resume () override;
void suspend () override;
- gdb_exception exec (const char *command_str) override;
+ void exec (const char *command_str) override;
ui_out *interp_ui_out () override;
};
@@ -149,7 +149,7 @@ tui_interp::interp_ui_out ()
return tui_old_uiout;
}
-gdb_exception
+void
tui_interp::exec (const char *command_str)
{
internal_error (_("tui_exec called"));