Fixed _SEH2_EXCEPT

svn path=/trunk/; revision=37606
This commit is contained in:
KJK::Hyperion 2008-11-24 03:00:50 +00:00
parent 0022cb57c0
commit 4b013bbd25

View file

@ -94,6 +94,12 @@ void * _SEHClosureFromTrampoline(_SEHTrampoline_t * trampoline_)
/* Soft memory barrier */ /* Soft memory barrier */
#define __SEH_BARRIER __asm__ __volatile__("#":::"memory") #define __SEH_BARRIER __asm__ __volatile__("#":::"memory")
/* GCC doesn't know that this equals zero */
#define __SEH_ZERO ({ int zero = 0; __asm__ __volatile__("#" : "+g" (zero)); zero; })
#define __SEH_FALSE __builtin_expect(__SEH_ZERO, 0)
#define __SEH_TRUE __builtin_expect(!__SEH_ZERO, 1)
typedef struct __SEH2Registration typedef struct __SEH2Registration
{ {
struct __SEH2Registration * SER_Prev; struct __SEH2Registration * SER_Prev;
@ -251,7 +257,7 @@ _SEH2TryLevel_t;
__SEH_USE_NESTED_FUNCTION(_SEHFinally); \ __SEH_USE_NESTED_FUNCTION(_SEHFinally); \
\ \
_SEHTryLevel.ST_FramePointer = _SEHClosureFromTrampoline((_SEHTrampoline_t *)&_SEHFinally); \ _SEHTryLevel.ST_FramePointer = _SEHClosureFromTrampoline((_SEHTrampoline_t *)&_SEHFinally); \
_SEHTryLevel.ST_Filter = NULL; \ _SEHTryLevel.ST_Filter = 0; \
_SEHTryLevel.ST_Body = _SEHFunctionFromTrampoline((_SEHTrampoline_t *)&_SEHFinally); \ _SEHTryLevel.ST_Body = _SEHFunctionFromTrampoline((_SEHTrampoline_t *)&_SEHFinally); \
\ \
goto _SEHDoTry; \ goto _SEHDoTry; \
@ -318,8 +324,11 @@ _SEH2TryLevel_t;
{ \ { \
__SEH_LEAVE_TRYLEVEL(); \ __SEH_LEAVE_TRYLEVEL(); \
} \ } \
\ \
goto _SEHEndExcept; \ if(__SEH_FALSE) \
goto _SEHBeginExcept; \
else \
goto _SEHEndExcept; \
\ \
_SEHBeginExcept: __SEH_SIDE_EFFECT; \ _SEHBeginExcept: __SEH_SIDE_EFFECT; \
{ \ { \