From 4c21ef03d15ae990db29e3ffb6a4be17cd458a59 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 4 Sep 2001 11:20:21 -0700 Subject: [PATCH] unwind.h (_UA_END_OF_STACK): New flag. * unwind.h (_UA_END_OF_STACK): New flag. * unwind.inc (_Unwind_ForcedUnwind_Phase2): Set it. From-SVN: r45384 --- gcc/ChangeLog | 5 +++++ gcc/unwind.h | 1 + gcc/unwind.inc | 8 ++++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 22c8efe7cbc..1de0a42fb77 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-09-04 Richard Henderson + + * unwind.h (_UA_END_OF_STACK): New flag. + * unwind.inc (_Unwind_ForcedUnwind_Phase2): Set it. + Tue Sep 4 11:16:35 2001 Jeffrey A Law (law@cygnus.com) * h8300/elf.h (LINK_SPEC): Redefine appropriately for the H8. diff --git a/gcc/unwind.h b/gcc/unwind.h index 0ad58144896..fc36913d979 100644 --- a/gcc/unwind.h +++ b/gcc/unwind.h @@ -87,6 +87,7 @@ typedef int _Unwind_Action; #define _UA_CLEANUP_PHASE 2 #define _UA_HANDLER_FRAME 4 #define _UA_FORCE_UNWIND 8 +#define _UA_END_OF_STACK 16 /* This is an opaque type used to refer to a system-specific data structure used by the system unwinder. This context is created and diff --git a/gcc/unwind.inc b/gcc/unwind.inc index 2b51ab7964b..bd867e60892 100644 --- a/gcc/unwind.inc +++ b/gcc/unwind.inc @@ -142,14 +142,18 @@ _Unwind_ForcedUnwind_Phase2(struct _Unwind_Exception *exc, while (1) { _Unwind_FrameState fs; + int action; code = uw_frame_state_for (context, &fs); if (code != _URC_NO_REASON && code != _URC_END_OF_STACK) return _URC_FATAL_PHASE2_ERROR; /* Unwind successful. */ - stop_code = (*stop) (1, _UA_FORCE_UNWIND | _UA_CLEANUP_PHASE, - exc->exception_class, exc, context, stop_argument); + action = _UA_FORCE_UNWIND | _UA_CLEANUP_PHASE; + if (code == _URC_END_OF_STACK) + action |= _UA_END_OF_STACK; + stop_code = (*stop) (1, action, exc->exception_class, exc, + context, stop_argument); if (stop_code != _URC_NO_REASON) return _URC_FATAL_PHASE2_ERROR;