diff options
Diffstat (limited to 'gdb/guile/scm-breakpoint.c')
-rw-r--r-- | gdb/guile/scm-breakpoint.c | 79 |
1 files changed, 55 insertions, 24 deletions
diff --git a/gdb/guile/scm-breakpoint.c b/gdb/guile/scm-breakpoint.c index c1f9f91..ad853ed 100644 --- a/gdb/guile/scm-breakpoint.c +++ b/gdb/guile/scm-breakpoint.c @@ -407,7 +407,7 @@ gdbscm_register_breakpoint_x (SCM self) { breakpoint_smob *bp_smob = bpscm_get_breakpoint_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); - volatile struct gdb_exception except; + struct gdb_exception except = exception_none; /* We only support registering breakpoints created with make-breakpoint. */ if (!bp_smob->is_scheme_bkpt) @@ -418,7 +418,7 @@ gdbscm_register_breakpoint_x (SCM self) pending_breakpoint_scm = self; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { char *location = bp_smob->spec.location; int internal = bp_smob->spec.is_internal; @@ -455,6 +455,12 @@ gdbscm_register_breakpoint_x (SCM self) gdb_assert_not_reached ("invalid breakpoint type"); } } + CATCH (ex, RETURN_MASK_ALL) + { + except = ex; + } + END_CATCH + /* Ensure this gets reset, even if there's an error. */ pending_breakpoint_scm = SCM_BOOL_F; GDBSCM_HANDLE_GDB_EXCEPTION (except); @@ -473,13 +479,16 @@ gdbscm_delete_breakpoint_x (SCM self) { breakpoint_smob *bp_smob = bpscm_get_valid_breakpoint_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); - volatile struct gdb_exception except; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { delete_breakpoint (bp_smob->bp); } - GDBSCM_HANDLE_GDB_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDBSCM_HANDLE_GDB_EXCEPTION (except); + } + END_CATCH return SCM_UNSPECIFIED; } @@ -565,19 +574,22 @@ gdbscm_set_breakpoint_enabled_x (SCM self, SCM newvalue) { breakpoint_smob *bp_smob = bpscm_get_valid_breakpoint_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); - volatile struct gdb_exception except; SCM_ASSERT_TYPE (gdbscm_is_bool (newvalue), newvalue, SCM_ARG2, FUNC_NAME, _("boolean")); - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { if (gdbscm_is_true (newvalue)) enable_breakpoint (bp_smob->bp); else disable_breakpoint (bp_smob->bp); } - GDBSCM_HANDLE_GDB_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDBSCM_HANDLE_GDB_EXCEPTION (except); + } + END_CATCH return SCM_UNSPECIFIED; } @@ -600,16 +612,19 @@ gdbscm_set_breakpoint_silent_x (SCM self, SCM newvalue) { breakpoint_smob *bp_smob = bpscm_get_valid_breakpoint_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); - volatile struct gdb_exception except; SCM_ASSERT_TYPE (gdbscm_is_bool (newvalue), newvalue, SCM_ARG2, FUNC_NAME, _("boolean")); - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { breakpoint_set_silent (bp_smob->bp, gdbscm_is_true (newvalue)); } - GDBSCM_HANDLE_GDB_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDBSCM_HANDLE_GDB_EXCEPTION (except); + } + END_CATCH return SCM_UNSPECIFIED; } @@ -634,7 +649,6 @@ gdbscm_set_breakpoint_ignore_count_x (SCM self, SCM newvalue) breakpoint_smob *bp_smob = bpscm_get_valid_breakpoint_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); long value; - volatile struct gdb_exception except; SCM_ASSERT_TYPE (scm_is_signed_integer (newvalue, LONG_MIN, LONG_MAX), newvalue, SCM_ARG2, FUNC_NAME, _("integer")); @@ -643,11 +657,15 @@ gdbscm_set_breakpoint_ignore_count_x (SCM self, SCM newvalue) if (value < 0) value = 0; - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { set_ignore_count (bp_smob->number, (int) value, 0); } - GDBSCM_HANDLE_GDB_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDBSCM_HANDLE_GDB_EXCEPTION (except); + } + END_CATCH return SCM_UNSPECIFIED; } @@ -755,17 +773,20 @@ gdbscm_set_breakpoint_task_x (SCM self, SCM newvalue) = bpscm_get_valid_breakpoint_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); long id; int valid_id = 0; - volatile struct gdb_exception except; if (scm_is_signed_integer (newvalue, LONG_MIN, LONG_MAX)) { id = scm_to_long (newvalue); - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { valid_id = valid_task_id (id); } - GDBSCM_HANDLE_GDB_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDBSCM_HANDLE_GDB_EXCEPTION (except); + } + END_CATCH if (! valid_id) { @@ -778,11 +799,15 @@ gdbscm_set_breakpoint_task_x (SCM self, SCM newvalue) else SCM_ASSERT_TYPE (0, newvalue, SCM_ARG2, FUNC_NAME, _("integer or #f")); - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { breakpoint_set_task (bp_smob->bp, id); } - GDBSCM_HANDLE_GDB_EXCEPTION (except); + CATCH (except, RETURN_MASK_ALL) + { + GDBSCM_HANDLE_GDB_EXCEPTION (except); + } + END_CATCH return SCM_UNSPECIFIED; } @@ -855,7 +880,7 @@ gdbscm_set_breakpoint_condition_x (SCM self, SCM newvalue) breakpoint_smob *bp_smob = bpscm_get_valid_breakpoint_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); char *exp; - volatile struct gdb_exception except; + struct gdb_exception except = exception_none; SCM_ASSERT_TYPE (scm_is_string (newvalue) || gdbscm_is_false (newvalue), newvalue, SCM_ARG2, FUNC_NAME, @@ -866,10 +891,16 @@ gdbscm_set_breakpoint_condition_x (SCM self, SCM newvalue) else exp = gdbscm_scm_to_c_string (newvalue); - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { set_breakpoint_condition (bp_smob->bp, exp ? exp : "", 0); } + CATCH (ex, RETURN_MASK_ALL) + { + except = ex; + } + END_CATCH + xfree (exp); GDBSCM_HANDLE_GDB_EXCEPTION (except); @@ -936,7 +967,6 @@ gdbscm_breakpoint_commands (SCM self) = bpscm_get_valid_breakpoint_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); struct breakpoint *bp; long length; - volatile struct gdb_exception except; struct ui_file *string_file; struct cleanup *chain; SCM result; @@ -951,16 +981,17 @@ gdbscm_breakpoint_commands (SCM self) chain = make_cleanup_ui_file_delete (string_file); ui_out_redirect (current_uiout, string_file); - TRY_CATCH (except, RETURN_MASK_ALL) + TRY { print_command_lines (current_uiout, breakpoint_commands (bp), 0); } ui_out_redirect (current_uiout, NULL); - if (except.reason < 0) + CATCH (except, RETURN_MASK_ALL) { do_cleanups (chain); gdbscm_throw_gdb_exception (except); } + END_CATCH cmdstr = ui_file_xstrdup (string_file, &length); make_cleanup (xfree, cmdstr); |