aboutsummaryrefslogtreecommitdiff
path: root/gdb/frame-unwind.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/frame-unwind.c')
-rw-r--r--gdb/frame-unwind.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/gdb/frame-unwind.c b/gdb/frame-unwind.c
index e73650a..fcfedfd 100644
--- a/gdb/frame-unwind.c
+++ b/gdb/frame-unwind.c
@@ -105,18 +105,21 @@ frame_unwind_try_unwinder (struct frame_info *this_frame, void **this_cache,
{
res = unwinder->sniffer (unwinder, this_frame, this_cache);
}
- if (ex.reason < 0 && ex.error == NOT_AVAILABLE_ERROR)
+ if (ex.reason < 0)
{
- /* This usually means that not even the PC is available,
- thus most unwinders aren't able to determine if they're
- the best fit. Keep trying. Fallback prologue unwinders
- should always accept the frame. */
- do_cleanups (old_cleanup);
- return 0;
+ if (ex.error == NOT_AVAILABLE_ERROR)
+ {
+ /* This usually means that not even the PC is available,
+ thus most unwinders aren't able to determine if they're
+ the best fit. Keep trying. Fallback prologue unwinders
+ should always accept the frame. */
+ do_cleanups (old_cleanup);
+ return 0;
+ }
+ throw_exception (ex);
}
- else if (ex.reason < 0)
- throw_exception (ex);
- else if (res)
+
+ if (res)
{
discard_cleanups (old_cleanup);
return 1;