Rewrite TRY/CATCH

This rewrites gdb's TRY/CATCH to plain C++ try/catch.  The patch was
largely written by script, though one change (to a comment in
common-exceptions.h) was reverted by hand.

gdb/ChangeLog
2019-04-08  Tom Tromey  <tom@tromey.com>

	* xml-support.c: Use C++ exception handling.
	* x86-linux-nat.c: Use C++ exception handling.
	* windows-nat.c: Use C++ exception handling.
	* varobj.c: Use C++ exception handling.
	* value.c: Use C++ exception handling.
	* valprint.c: Use C++ exception handling.
	* valops.c: Use C++ exception handling.
	* unittests/parse-connection-spec-selftests.c: Use C++ exception
	handling.
	* unittests/cli-utils-selftests.c: Use C++ exception handling.
	* typeprint.c: Use C++ exception handling.
	* tui/tui.c: Use C++ exception handling.
	* tracefile-tfile.c: Use C++ exception handling.
	* top.c: Use C++ exception handling.
	* thread.c: Use C++ exception handling.
	* target.c: Use C++ exception handling.
	* symmisc.c: Use C++ exception handling.
	* symfile-mem.c: Use C++ exception handling.
	* stack.c: Use C++ exception handling.
	* sparc64-linux-tdep.c: Use C++ exception handling.
	* solib.c: Use C++ exception handling.
	* solib-svr4.c: Use C++ exception handling.
	* solib-spu.c: Use C++ exception handling.
	* solib-frv.c: Use C++ exception handling.
	* solib-dsbt.c: Use C++ exception handling.
	* selftest-arch.c: Use C++ exception handling.
	* s390-tdep.c: Use C++ exception handling.
	* rust-lang.c: Use C++ exception handling.
	* rust-exp.y: Use C++ exception handling.
	* rs6000-tdep.c: Use C++ exception handling.
	* rs6000-aix-tdep.c: Use C++ exception handling.
	* riscv-tdep.c: Use C++ exception handling.
	* remote.c: Use C++ exception handling.
	* remote-fileio.c: Use C++ exception handling.
	* record-full.c: Use C++ exception handling.
	* record-btrace.c: Use C++ exception handling.
	* python/python.c: Use C++ exception handling.
	* python/py-value.c: Use C++ exception handling.
	* python/py-utils.c: Use C++ exception handling.
	* python/py-unwind.c: Use C++ exception handling.
	* python/py-type.c: Use C++ exception handling.
	* python/py-symbol.c: Use C++ exception handling.
	* python/py-record.c: Use C++ exception handling.
	* python/py-record-btrace.c: Use C++ exception handling.
	* python/py-progspace.c: Use C++ exception handling.
	* python/py-prettyprint.c: Use C++ exception handling.
	* python/py-param.c: Use C++ exception handling.
	* python/py-objfile.c: Use C++ exception handling.
	* python/py-linetable.c: Use C++ exception handling.
	* python/py-lazy-string.c: Use C++ exception handling.
	* python/py-infthread.c: Use C++ exception handling.
	* python/py-inferior.c: Use C++ exception handling.
	* python/py-gdb-readline.c: Use C++ exception handling.
	* python/py-framefilter.c: Use C++ exception handling.
	* python/py-frame.c: Use C++ exception handling.
	* python/py-finishbreakpoint.c: Use C++ exception handling.
	* python/py-cmd.c: Use C++ exception handling.
	* python/py-breakpoint.c: Use C++ exception handling.
	* python/py-arch.c: Use C++ exception handling.
	* printcmd.c: Use C++ exception handling.
	* ppc-linux-tdep.c: Use C++ exception handling.
	* parse.c: Use C++ exception handling.
	* p-valprint.c: Use C++ exception handling.
	* objc-lang.c: Use C++ exception handling.
	* mi/mi-main.c: Use C++ exception handling.
	* mi/mi-interp.c: Use C++ exception handling.
	* mi/mi-cmd-stack.c: Use C++ exception handling.
	* mi/mi-cmd-break.c: Use C++ exception handling.
	* main.c: Use C++ exception handling.
	* linux-thread-db.c: Use C++ exception handling.
	* linux-tdep.c: Use C++ exception handling.
	* linux-nat.c: Use C++ exception handling.
	* linux-fork.c: Use C++ exception handling.
	* linespec.c: Use C++ exception handling.
	* language.c: Use C++ exception handling.
	* jit.c: Use C++ exception handling.
	* infrun.c: Use C++ exception handling.
	* infcmd.c: Use C++ exception handling.
	* infcall.c: Use C++ exception handling.
	* inf-loop.c: Use C++ exception handling.
	* i386-tdep.c: Use C++ exception handling.
	* i386-linux-tdep.c: Use C++ exception handling.
	* guile/scm-value.c: Use C++ exception handling.
	* guile/scm-type.c: Use C++ exception handling.
	* guile/scm-symtab.c: Use C++ exception handling.
	* guile/scm-symbol.c: Use C++ exception handling.
	* guile/scm-pretty-print.c: Use C++ exception handling.
	* guile/scm-ports.c: Use C++ exception handling.
	* guile/scm-param.c: Use C++ exception handling.
	* guile/scm-math.c: Use C++ exception handling.
	* guile/scm-lazy-string.c: Use C++ exception handling.
	* guile/scm-frame.c: Use C++ exception handling.
	* guile/scm-disasm.c: Use C++ exception handling.
	* guile/scm-cmd.c: Use C++ exception handling.
	* guile/scm-breakpoint.c: Use C++ exception handling.
	* guile/scm-block.c: Use C++ exception handling.
	* guile/guile-internal.h: Use C++ exception handling.
	* gnu-v3-abi.c: Use C++ exception handling.
	* gdbtypes.c: Use C++ exception handling.
	* frame.c: Use C++ exception handling.
	* frame-unwind.c: Use C++ exception handling.
	* fbsd-tdep.c: Use C++ exception handling.
	* f-valprint.c: Use C++ exception handling.
	* exec.c: Use C++ exception handling.
	* event-top.c: Use C++ exception handling.
	* event-loop.c: Use C++ exception handling.
	* eval.c: Use C++ exception handling.
	* dwarf2read.c: Use C++ exception handling.
	* dwarf2loc.c: Use C++ exception handling.
	* dwarf2-frame.c: Use C++ exception handling.
	* dwarf2-frame-tailcall.c: Use C++ exception handling.
	* dwarf-index-write.c: Use C++ exception handling.
	* dwarf-index-cache.c: Use C++ exception handling.
	* dtrace-probe.c: Use C++ exception handling.
	* disasm-selftests.c: Use C++ exception handling.
	* darwin-nat.c: Use C++ exception handling.
	* cp-valprint.c: Use C++ exception handling.
	* cp-support.c: Use C++ exception handling.
	* cp-abi.c: Use C++ exception handling.
	* corelow.c: Use C++ exception handling.
	* completer.c: Use C++ exception handling.
	* compile/compile-object-run.c: Use C++ exception handling.
	* compile/compile-object-load.c: Use C++ exception handling.
	* compile/compile-cplus-symbols.c: Use C++ exception handling.
	* compile/compile-c-symbols.c: Use C++ exception handling.
	* common/selftest.c: Use C++ exception handling.
	* common/new-op.c: Use C++ exception handling.
	* cli/cli-script.c: Use C++ exception handling.
	* cli/cli-interp.c: Use C++ exception handling.
	* cli/cli-cmds.c: Use C++ exception handling.
	* c-varobj.c: Use C++ exception handling.
	* btrace.c: Use C++ exception handling.
	* breakpoint.c: Use C++ exception handling.
	* break-catch-throw.c: Use C++ exception handling.
	* arch-utils.c: Use C++ exception handling.
	* amd64-tdep.c: Use C++ exception handling.
	* ada-valprint.c: Use C++ exception handling.
	* ada-typeprint.c: Use C++ exception handling.
	* ada-lang.c: Use C++ exception handling.
	* aarch64-tdep.c: Use C++ exception handling.

gdb/gdbserver/ChangeLog
2019-04-08  Tom Tromey  <tom@tromey.com>

	* server.c: Use C++ exception handling.
	* linux-low.c: Use C++ exception handling.
	* gdbreplay.c: Use C++ exception handling.
This commit is contained in:
Tom Tromey 2019-04-03 16:02:42 -06:00
parent 3d6e9d2336
commit a70b814420
144 changed files with 1033 additions and 1326 deletions

View file

@ -95,15 +95,14 @@ frapy_is_valid (PyObject *self, PyObject *args)
{
struct frame_info *frame = NULL;
TRY
try
{
frame = frame_object_to_frame_info (self);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
if (frame == NULL)
Py_RETURN_FALSE;
@ -122,17 +121,16 @@ frapy_name (PyObject *self, PyObject *args)
enum language lang;
PyObject *result;
TRY
try
{
FRAPY_REQUIRE_VALID (self, frame);
name = find_frame_funname (frame, &lang, NULL);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
if (name)
{
@ -157,17 +155,16 @@ frapy_type (PyObject *self, PyObject *args)
struct frame_info *frame;
enum frame_type type = NORMAL_FRAME;/* Initialize to appease gcc warning. */
TRY
try
{
FRAPY_REQUIRE_VALID (self, frame);
type = get_frame_type (frame);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
return PyInt_FromLong (type);
}
@ -181,15 +178,14 @@ frapy_arch (PyObject *self, PyObject *args)
struct frame_info *frame = NULL; /* Initialize to appease gcc warning. */
frame_object *obj = (frame_object *) self;
TRY
try
{
FRAPY_REQUIRE_VALID (self, frame);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
return gdbarch_to_arch_object (obj->gdbarch);
}
@ -203,15 +199,14 @@ frapy_unwind_stop_reason (PyObject *self, PyObject *args)
struct frame_info *frame = NULL; /* Initialize to appease gcc warning. */
enum unwind_stop_reason stop_reason;
TRY
try
{
FRAPY_REQUIRE_VALID (self, frame);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
stop_reason = get_frame_unwind_stop_reason (frame);
@ -227,17 +222,16 @@ frapy_pc (PyObject *self, PyObject *args)
CORE_ADDR pc = 0; /* Initialize to appease gcc warning. */
struct frame_info *frame;
TRY
try
{
FRAPY_REQUIRE_VALID (self, frame);
pc = get_frame_pc (frame);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
return gdb_py_long_from_ulongest (pc);
}
@ -254,7 +248,7 @@ frapy_read_register (PyObject *self, PyObject *args)
if (!PyArg_ParseTuple (args, "s", &regnum_str))
return NULL;
TRY
try
{
struct frame_info *frame;
int regnum;
@ -270,11 +264,10 @@ frapy_read_register (PyObject *self, PyObject *args)
if (val == NULL)
PyErr_SetString (PyExc_ValueError, _("Unknown register."));
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
return val == NULL ? NULL : value_to_value_object (val);
}
@ -288,16 +281,15 @@ frapy_block (PyObject *self, PyObject *args)
struct frame_info *frame;
const struct block *block = NULL, *fn_block;
TRY
try
{
FRAPY_REQUIRE_VALID (self, frame);
block = get_frame_block (frame, NULL);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
for (fn_block = block;
fn_block != NULL && BLOCK_FUNCTION (fn_block) == NULL;
@ -330,7 +322,7 @@ frapy_function (PyObject *self, PyObject *args)
struct symbol *sym = NULL;
struct frame_info *frame;
TRY
try
{
enum language funlang;
@ -339,11 +331,10 @@ frapy_function (PyObject *self, PyObject *args)
gdb::unique_xmalloc_ptr<char> funname
= find_frame_funname (frame, &funlang, &sym);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
if (sym)
return symbol_to_symbol_object (sym);
@ -362,7 +353,7 @@ frame_info_to_frame_object (struct frame_info *frame)
if (frame_obj == NULL)
return NULL;
TRY
try
{
/* Try to get the previous frame, to determine if this is the last frame
@ -382,12 +373,11 @@ frame_info_to_frame_object (struct frame_info *frame)
}
frame_obj->gdbarch = get_frame_arch (frame);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
gdbpy_convert_exception (except);
return NULL;
}
END_CATCH
return (PyObject *) frame_obj.release ();
}
@ -402,17 +392,16 @@ frapy_older (PyObject *self, PyObject *args)
struct frame_info *frame, *prev = NULL;
PyObject *prev_obj = NULL; /* Initialize to appease gcc warning. */
TRY
try
{
FRAPY_REQUIRE_VALID (self, frame);
prev = get_prev_frame (frame);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
if (prev)
prev_obj = frame_info_to_frame_object (prev);
@ -435,17 +424,16 @@ frapy_newer (PyObject *self, PyObject *args)
struct frame_info *frame, *next = NULL;
PyObject *next_obj = NULL; /* Initialize to appease gcc warning. */
TRY
try
{
FRAPY_REQUIRE_VALID (self, frame);
next = get_next_frame (frame);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
if (next)
next_obj = frame_info_to_frame_object (next);
@ -467,18 +455,17 @@ frapy_find_sal (PyObject *self, PyObject *args)
struct frame_info *frame;
PyObject *sal_obj = NULL; /* Initialize to appease gcc warning. */
TRY
try
{
FRAPY_REQUIRE_VALID (self, frame);
symtab_and_line sal = find_frame_sal (frame);
sal_obj = symtab_and_line_to_sal_object (sal);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
return sal_obj;
}
@ -523,7 +510,7 @@ frapy_read_var (PyObject *self, PyObject *args)
}
}
TRY
try
{
struct block_symbol lookup_sym;
FRAPY_REQUIRE_VALID (self, frame);
@ -534,12 +521,11 @@ frapy_read_var (PyObject *self, PyObject *args)
var = lookup_sym.symbol;
block = lookup_sym.block;
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
gdbpy_convert_exception (except);
return NULL;
}
END_CATCH
if (!var)
{
@ -556,17 +542,16 @@ frapy_read_var (PyObject *self, PyObject *args)
return NULL;
}
TRY
try
{
FRAPY_REQUIRE_VALID (self, frame);
val = read_var_value (var, block, frame);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
return value_to_value_object (val);
}
@ -578,17 +563,16 @@ frapy_select (PyObject *self, PyObject *args)
{
struct frame_info *fi;
TRY
try
{
FRAPY_REQUIRE_VALID (self, fi);
select_frame (fi);
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
Py_RETURN_NONE;
}
@ -601,15 +585,14 @@ gdbpy_newest_frame (PyObject *self, PyObject *args)
{
struct frame_info *frame = NULL;
TRY
try
{
frame = get_current_frame ();
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
return frame_info_to_frame_object (frame);
}
@ -622,15 +605,14 @@ gdbpy_selected_frame (PyObject *self, PyObject *args)
{
struct frame_info *frame = NULL;
TRY
try
{
frame = get_selected_frame ("No frame is currently selected.");
}
CATCH (except, RETURN_MASK_ALL)
catch (const gdb_exception_RETURN_MASK_ALL &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
END_CATCH
return frame_info_to_frame_object (frame);
}