aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/infcmd.c14
2 files changed, 18 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 576eb18..746af29 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2010-03-18 Tom Tromey <tromey@redhat.com>
+
+ * infcmd.c (finish_command_continuation): Wrap print_return_value
+ in TRY_CATCH.
+
2010-03-18 Ulrich Weigand <uweigand@de.ibm.com>
* mi/mi-main.c (mi_cmd_list_thread_groups): Use get_current_arch
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index e2235db..174acde 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -1439,7 +1439,19 @@ finish_command_continuation (void *arg)
_("finish_command: function has no target type"));
if (TYPE_CODE (value_type) != TYPE_CODE_VOID)
- print_return_value (SYMBOL_TYPE (a->function), value_type);
+ {
+ volatile struct gdb_exception ex;
+
+ TRY_CATCH (ex, RETURN_MASK_ALL)
+ {
+ /* print_return_value can throw an exception in some
+ circumstances. We need to catch this so that we still
+ delete the breakpoint. */
+ print_return_value (SYMBOL_TYPE (a->function), value_type);
+ }
+ if (ex.reason < 0)
+ exception_print (gdb_stdout, ex);
+ }
}
/* We suppress normal call of normal_stop observer and do it here so