mirror of
https://github.com/reactos/reactos.git
synced 2024-09-30 22:47:28 +00:00
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:
parent
d6dcda9708
commit
9060c87bad
|
@ -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_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_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) \
|
if(_SEHTopTryLevel) \
|
||||||
{ \
|
{ \
|
||||||
_SEH2LeaveFrame(); \
|
_SEH2LeaveFrame(); \
|
||||||
__asm__ __volatile__("mov %0, %%esp" : : "g" (_SEHStackPointer)); \
|
__asm__ __volatile__("mov %0, %%esp" : : "g" (_SEHStackPointer)); \
|
||||||
} \
|
}
|
||||||
else \
|
|
||||||
{ \
|
|
||||||
__SEH_SET_TRYLEVEL(_SEHPrevTryLevelP); \
|
|
||||||
} \
|
|
||||||
|
|
||||||
#define __SEH_END_SCOPE_CHAIN \
|
#define __SEH_END_SCOPE_CHAIN \
|
||||||
static __attribute__((unused)) const int _SEH2ScopeKind = 1; \
|
static __attribute__((unused)) const int _SEH2ScopeKind = 1; \
|
||||||
|
@ -289,7 +291,7 @@ void * _SEHClosureFromTrampoline(_SEHTrampoline_t * trampoline_)
|
||||||
\
|
\
|
||||||
_SEHAbnormalTermination = 0; \
|
_SEHAbnormalTermination = 0; \
|
||||||
\
|
\
|
||||||
__SEH_LEAVE_SCOPE(); \
|
__SEH_LEAVE_TRYLEVEL(); \
|
||||||
\
|
\
|
||||||
_SEHFinally(); \
|
_SEHFinally(); \
|
||||||
goto _SEHEndExcept; \
|
goto _SEHEndExcept; \
|
||||||
|
@ -362,7 +364,7 @@ void * _SEHClosureFromTrampoline(_SEHTrampoline_t * trampoline_)
|
||||||
__attribute__((unused)) __SEH_DEFINE_FINALLY(_SEHFinally) { __SEH_RETURN_FINALLY(); } \
|
__attribute__((unused)) __SEH_DEFINE_FINALLY(_SEHFinally) { __SEH_RETURN_FINALLY(); } \
|
||||||
\
|
\
|
||||||
_SEHAfterTry:; \
|
_SEHAfterTry:; \
|
||||||
__SEH_LEAVE_SCOPE(); \
|
__SEH_LEAVE_TRYLEVEL(); \
|
||||||
\
|
\
|
||||||
goto _SEHEndExcept; \
|
goto _SEHEndExcept; \
|
||||||
\
|
\
|
||||||
|
@ -377,6 +379,8 @@ void * _SEHClosureFromTrampoline(_SEHTrampoline_t * trampoline_)
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
_SEHEndExcept:; \
|
_SEHEndExcept:; \
|
||||||
|
\
|
||||||
|
__SEH_LEAVE_FRAME(); \
|
||||||
} \
|
} \
|
||||||
__SEH_END_SCOPE;
|
__SEH_END_SCOPE;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue