mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 17:22:59 +00:00
Use _alloca instead of stack variables, because the compiler feels too damn smart
svn path=/trunk/; revision=11706
This commit is contained in:
parent
c99ffa31ca
commit
34149e19fc
1 changed files with 13 additions and 11 deletions
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#include <pseh/framebased/internal.h>
|
#include <pseh/framebased/internal.h>
|
||||||
#include <pseh/excpt.h>
|
#include <pseh/excpt.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
#ifndef offsetof
|
#ifndef offsetof
|
||||||
# include <stddef.h>
|
# include <stddef.h>
|
||||||
|
@ -98,26 +99,27 @@ static __declspec(noreturn) void __stdcall _SEHCompilerSpecificHandler
|
||||||
|
|
||||||
#define _SEH_TRY_FILTER_FINALLY(FILTER_, FINALLY_) \
|
#define _SEH_TRY_FILTER_FINALLY(FILTER_, FINALLY_) \
|
||||||
{ \
|
{ \
|
||||||
static _SEHHandlers_t _SEHHandlers = \
|
static _SEHHandlers_t _SEHHandlers = \
|
||||||
{ \
|
{ \
|
||||||
(NULL), \
|
(NULL), \
|
||||||
_SEHCompilerSpecificHandler, \
|
_SEHCompilerSpecificHandler, \
|
||||||
(NULL) \
|
(NULL) \
|
||||||
}; \
|
}; \
|
||||||
_SEHHandlers.SH_Filter = FILTER_; \
|
_SEHHandlers.SH_Filter = FILTER_; \
|
||||||
_SEHHandlers.SH_Finally = FINALLY_; \
|
_SEHHandlers.SH_Finally = FINALLY_; \
|
||||||
\
|
\
|
||||||
_SEHFrame_t _SEHFrame; \
|
_SEHFrame_t * _SEHFrame; \
|
||||||
volatile _SEHPortableFrame_t * _SEHPortableFrame; \
|
volatile _SEHPortableFrame_t * _SEHPortableFrame; \
|
||||||
\
|
\
|
||||||
_SEHFrame.SEH_Header.SPF_Handlers = &_SEHHandlers; \
|
_SEHFrame = _alloca(sizeof(_SEHFrame_t)); \
|
||||||
|
_SEHFrame->SEH_Header.SPF_Handlers = &_SEHHandlers; \
|
||||||
\
|
\
|
||||||
_SEHPortableFrame = &_SEHFrame.SEH_Header; \
|
_SEHPortableFrame = &_SEHFrame->SEH_Header; \
|
||||||
(void)_SEHPortableFrame; \
|
(void)_SEHPortableFrame; \
|
||||||
\
|
\
|
||||||
if(setjmp(_SEHFrame.SEH_JmpBuf) == 0) \
|
if(setjmp(_SEHFrame->SEH_JmpBuf) == 0) \
|
||||||
{ \
|
{ \
|
||||||
_SEHEnter(&_SEHFrame.SEH_Header); \
|
_SEHEnter(&_SEHFrame->SEH_Header); \
|
||||||
\
|
\
|
||||||
do \
|
do \
|
||||||
{
|
{
|
||||||
|
@ -127,17 +129,17 @@ static __declspec(noreturn) void __stdcall _SEHCompilerSpecificHandler
|
||||||
} \
|
} \
|
||||||
while(0); \
|
while(0); \
|
||||||
\
|
\
|
||||||
_SEHLeave(&_SEHFrame.SEH_Header); \
|
_SEHLeave(&_SEHFrame->SEH_Header); \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
_SEHLeave(&_SEHFrame.SEH_Header); \
|
_SEHLeave(&_SEHFrame->SEH_Header); \
|
||||||
|
|
||||||
#define _SEH_END \
|
#define _SEH_END \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
if(_SEHHandlers.SH_Finally) \
|
if(_SEHHandlers.SH_Finally) \
|
||||||
_SEHHandlers.SH_Finally(&_SEHFrame.SEH_Header); \
|
_SEHHandlers.SH_Finally(&_SEHFrame->SEH_Header); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define _SEH_LEAVE break
|
#define _SEH_LEAVE break
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue