diff options
Diffstat (limited to 'gdb/python/py-frame.c')
-rw-r--r-- | gdb/python/py-frame.c | 162 |
1 files changed, 104 insertions, 58 deletions
diff --git a/gdb/python/py-frame.c b/gdb/python/py-frame.c index 9ef8608..cd6e859 100644 --- a/gdb/python/py-frame.c +++ b/gdb/python/py-frame.c @@ -101,13 +101,16 @@ static PyObject * frapy_is_valid (PyObject *self, PyObject *args) { struct frame_info *frame = NULL; - volatile struct gdb_exception except; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { frame = frame_object_to_frame_info (self); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH if (frame == NULL) Py_RETURN_FALSE; @@ -125,19 +128,19 @@ frapy_name (PyObject *self, PyObject *args) char *name = NULL; enum language lang; PyObject *result; - volatile struct gdb_exception except; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { FRAPY_REQUIRE_VALID (self, frame); find_frame_funname (frame, &name, &lang, NULL); } - - if (except.reason < 0) - xfree (name); - - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + xfree (name); + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH if (name) { @@ -161,15 +164,18 @@ frapy_type (PyObject *self, PyObject *args) { struct frame_info *frame; enum frame_type type = NORMAL_FRAME;/* Initialize to appease gcc warning. */ - volatile struct gdb_exception except; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { FRAPY_REQUIRE_VALID (self, frame); type = get_frame_type (frame); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH return PyInt_FromLong (type); } @@ -182,13 +188,16 @@ frapy_arch (PyObject *self, PyObject *args) { struct frame_info *frame = NULL; /* Initialize to appease gcc warning. */ frame_object *obj = (frame_object *) self; - volatile struct gdb_exception except; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { FRAPY_REQUIRE_VALID (self, frame); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH return gdbarch_to_arch_object (obj->gdbarch); } @@ -200,14 +209,17 @@ static PyObject * frapy_unwind_stop_reason (PyObject *self, PyObject *args) { struct frame_info *frame = NULL; /* Initialize to appease gcc warning. */ - volatile struct gdb_exception except; enum unwind_stop_reason stop_reason; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { FRAPY_REQUIRE_VALID (self, frame); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH stop_reason = get_frame_unwind_stop_reason (frame); @@ -222,15 +234,18 @@ frapy_pc (PyObject *self, PyObject *args) { CORE_ADDR pc = 0; /* Initialize to appease gcc warning. */ struct frame_info *frame; - volatile struct gdb_exception except; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { FRAPY_REQUIRE_VALID (self, frame); pc = get_frame_pc (frame); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH return gdb_py_long_from_ulongest (pc); } @@ -241,14 +256,13 @@ frapy_pc (PyObject *self, PyObject *args) static PyObject * frapy_read_register (PyObject *self, PyObject *args) { - volatile struct gdb_exception except; const char *regnum_str; struct value *val = NULL; if (!PyArg_ParseTuple (args, "s", ®num_str)) return NULL; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { struct frame_info *frame; int regnum; @@ -264,7 +278,11 @@ frapy_read_register (PyObject *self, PyObject *args) if (val == NULL) PyErr_SetString (PyExc_ValueError, _("Unknown register.")); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH return val == NULL ? NULL : value_to_value_object (val); } @@ -277,14 +295,17 @@ frapy_block (PyObject *self, PyObject *args) { struct frame_info *frame; const struct block *block = NULL, *fn_block; - volatile struct gdb_exception except; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { FRAPY_REQUIRE_VALID (self, frame); block = get_frame_block (frame, NULL); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH for (fn_block = block; fn_block != NULL && BLOCK_FUNCTION (fn_block) == NULL; @@ -316,15 +337,18 @@ frapy_function (PyObject *self, PyObject *args) { struct symbol *sym = NULL; struct frame_info *frame; - volatile struct gdb_exception except; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { FRAPY_REQUIRE_VALID (self, frame); sym = find_pc_function (get_frame_address_in_block (frame)); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH if (sym) return symbol_to_symbol_object (sym); @@ -339,13 +363,12 @@ PyObject * frame_info_to_frame_object (struct frame_info *frame) { frame_object *frame_obj; - volatile struct gdb_exception except; frame_obj = PyObject_New (frame_object, &frame_object_type); if (frame_obj == NULL) return NULL; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { /* Try to get the previous frame, to determine if this is the last frame @@ -365,12 +388,14 @@ frame_info_to_frame_object (struct frame_info *frame) } frame_obj->gdbarch = get_frame_arch (frame); } - if (except.reason < 0) + CATCH (except, RETURN_MASK_ALL) { Py_DECREF (frame_obj); gdbpy_convert_exception (except); return NULL; } + END_CATCH + return (PyObject *) frame_obj; } @@ -382,16 +407,19 @@ static PyObject * frapy_older (PyObject *self, PyObject *args) { struct frame_info *frame, *prev = NULL; - volatile struct gdb_exception except; PyObject *prev_obj = NULL; /* Initialize to appease gcc warning. */ - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { FRAPY_REQUIRE_VALID (self, frame); prev = get_prev_frame (frame); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH if (prev) prev_obj = (PyObject *) frame_info_to_frame_object (prev); @@ -412,16 +440,19 @@ static PyObject * frapy_newer (PyObject *self, PyObject *args) { struct frame_info *frame, *next = NULL; - volatile struct gdb_exception except; PyObject *next_obj = NULL; /* Initialize to appease gcc warning. */ - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { FRAPY_REQUIRE_VALID (self, frame); next = get_next_frame (frame); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH if (next) next_obj = (PyObject *) frame_info_to_frame_object (next); @@ -442,17 +473,20 @@ frapy_find_sal (PyObject *self, PyObject *args) { struct frame_info *frame; struct symtab_and_line sal; - volatile struct gdb_exception except; PyObject *sal_obj = NULL; /* Initialize to appease gcc warning. */ - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { FRAPY_REQUIRE_VALID (self, frame); find_frame_sal (frame, &sal); sal_obj = symtab_and_line_to_sal_object (sal); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH return sal_obj; } @@ -471,7 +505,6 @@ frapy_read_var (PyObject *self, PyObject *args) PyObject *sym_obj, *block_obj = NULL; struct symbol *var = NULL; /* gcc-4.3.2 false warning. */ struct value *val = NULL; - volatile struct gdb_exception except; if (!PyArg_ParseTuple (args, "O|O", &sym_obj, &block_obj)) return NULL; @@ -483,7 +516,6 @@ frapy_read_var (PyObject *self, PyObject *args) char *var_name; const struct block *block = NULL; struct cleanup *cleanup; - volatile struct gdb_exception except; var_name = python_string_to_target_string (sym_obj); if (!var_name) @@ -502,7 +534,7 @@ frapy_read_var (PyObject *self, PyObject *args) } } - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { FRAPY_REQUIRE_VALID (self, frame); @@ -510,12 +542,13 @@ frapy_read_var (PyObject *self, PyObject *args) block = get_frame_block (frame, NULL); var = lookup_symbol (var_name, block, VAR_DOMAIN, NULL); } - if (except.reason < 0) + CATCH (except, RETURN_MASK_ALL) { do_cleanups (cleanup); gdbpy_convert_exception (except); return NULL; } + END_CATCH if (!var) { @@ -535,13 +568,17 @@ frapy_read_var (PyObject *self, PyObject *args) return NULL; } - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { FRAPY_REQUIRE_VALID (self, frame); val = read_var_value (var, frame); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH return value_to_value_object (val); } @@ -552,15 +589,18 @@ static PyObject * frapy_select (PyObject *self, PyObject *args) { struct frame_info *fi; - volatile struct gdb_exception except; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { FRAPY_REQUIRE_VALID (self, fi); select_frame (fi); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH Py_RETURN_NONE; } @@ -572,13 +612,16 @@ PyObject * gdbpy_newest_frame (PyObject *self, PyObject *args) { struct frame_info *frame = NULL; - volatile struct gdb_exception except; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { frame = get_current_frame (); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH return frame_info_to_frame_object (frame); } @@ -590,13 +633,16 @@ PyObject * gdbpy_selected_frame (PyObject *self, PyObject *args) { struct frame_info *frame = NULL; - volatile struct gdb_exception except; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { frame = get_selected_frame ("No frame is currently selected."); } - GDB_PY_HANDLE_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH return frame_info_to_frame_object (frame); } |