modified include/reactos/libs/pseh/pseh2.h

Only leave the frame in the outermost _SEH2_END (like in PSEH1)

svn path=/trunk/; revision=41812
This commit is contained in:
KJK::Hyperion 2009-07-08 19:52:48 +00:00
parent d6dcda9708
commit 9060c87bad

View file

@ -194,16 +194,18 @@ void * _SEHClosureFromTrampoline(_SEHTrampoline_t * trampoline_)
#define __SEH_ENTER_SCOPE(TRYLEVEL_) (_SEHTopTryLevel ? __SEH_ENTER_FRAME_AND_TRYLEVEL(TRYLEVEL_) : __SEH_ENTER_TRYLEVEL(TRYLEVEL_))
#define __SEH_ENTER_HANDLE_SCOPE(TRYLEVEL_, HANDLE_) (({ __SEH_BARRIER; __asm__ __volatile__("mov %%esp, %0" : "=m" ((TRYLEVEL_)->SHT_Esp)); __SEH_BARRIER; }), (_SEHTopTryLevel ? __SEH_ENTER_FRAME_AND_HANDLE_TRYLEVEL((TRYLEVEL_), (HANDLE_)) : __SEH_ENTER_HANDLE_TRYLEVEL((TRYLEVEL_), (HANDLE_))))
#define __SEH_LEAVE_SCOPE() \
#define __SEH_LEAVE_TRYLEVEL() \
if(!_SEHTopTryLevel) \
{ \
__SEH_SET_TRYLEVEL(_SEHPrevTryLevelP); \
} \
#define __SEH_LEAVE_FRAME() \
if(_SEHTopTryLevel) \
{ \
_SEH2LeaveFrame(); \
__asm__ __volatile__("mov %0, %%esp" : : "g" (_SEHStackPointer)); \
} \
else \
{ \
__SEH_SET_TRYLEVEL(_SEHPrevTryLevelP); \
} \
}
#define __SEH_END_SCOPE_CHAIN \
static __attribute__((unused)) const int _SEH2ScopeKind = 1; \
@ -289,7 +291,7 @@ void * _SEHClosureFromTrampoline(_SEHTrampoline_t * trampoline_)
\
_SEHAbnormalTermination = 0; \
\
__SEH_LEAVE_SCOPE(); \
__SEH_LEAVE_TRYLEVEL(); \
\
_SEHFinally(); \
goto _SEHEndExcept; \
@ -362,7 +364,7 @@ void * _SEHClosureFromTrampoline(_SEHTrampoline_t * trampoline_)
__attribute__((unused)) __SEH_DEFINE_FINALLY(_SEHFinally) { __SEH_RETURN_FINALLY(); } \
\
_SEHAfterTry:; \
__SEH_LEAVE_SCOPE(); \
__SEH_LEAVE_TRYLEVEL(); \
\
goto _SEHEndExcept; \
\
@ -377,6 +379,8 @@ void * _SEHClosureFromTrampoline(_SEHTrampoline_t * trampoline_)
} \
\
_SEHEndExcept:; \
\
__SEH_LEAVE_FRAME(); \
} \
__SEH_END_SCOPE;