Author: hyperion Date: Sun Aug 16 18:40:52 2009 New Revision: 42737
URL: http://svn.reactos.org/svn/reactos?rev=42737&view=rev Log: modified include/reactos/libs/pseh/pseh2.h Trampoline-related definitions are no longer necessary in the public header
modified lib/pseh/i386/framebased-gcchack.c Don't use byte arrays when you mean unaligned field, Arch: use __attribute__((packed)) instead, and gcc will thank you for not violating strong aliasing
Modified: trunk/reactos/include/reactos/libs/pseh/pseh2.h trunk/reactos/lib/pseh/i386/framebased-gcchack.c
Modified: trunk/reactos/include/reactos/libs/pseh/pseh2.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/libs/pseh/p... ============================================================================== --- trunk/reactos/include/reactos/libs/pseh/pseh2.h [iso-8859-1] (original) +++ trunk/reactos/include/reactos/libs/pseh/pseh2.h [iso-8859-1] Sun Aug 16 18:40:52 2009 @@ -85,43 +85,6 @@
#ifdef __cplusplus } -#endif - -#if defined(__i386__) -typedef struct __SEHTrampoline -{ - unsigned char STR_MovEcx; - unsigned char STR_Closure[4]; - unsigned char STR_Jmp; - unsigned char STR_Function[4]; -} -_SEHTrampoline_t; - -static -__inline__ -__attribute__((always_inline)) -int _SEHIsTrampoline(_SEHTrampoline_t * trampoline_) -{ - return trampoline_->STR_MovEcx == 0xb9 && trampoline_->STR_Jmp == 0xe9; -} - -static -__inline__ -__attribute__((always_inline)) -void * _SEHFunctionFromTrampoline(_SEHTrampoline_t * trampoline_) -{ - return (void *)(*(int *)(&trampoline_->STR_Function[0]) + (int)(trampoline_ + 1)); -} - -static -__inline__ -__attribute__((always_inline)) -void * _SEHClosureFromTrampoline(_SEHTrampoline_t * trampoline_) -{ - return (void *)*(int *)(&trampoline_->STR_Closure[0]); -} -#else -#error TODO #endif
/* A no-op side effect that scares GCC */
Modified: trunk/reactos/lib/pseh/i386/framebased-gcchack.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/pseh/i386/framebased-gc... ============================================================================== --- trunk/reactos/lib/pseh/i386/framebased-gcchack.c [iso-8859-1] (original) +++ trunk/reactos/lib/pseh/i386/framebased-gcchack.c [iso-8859-1] Sun Aug 16 18:40:52 2009 @@ -41,6 +41,34 @@ extern DECLSPEC_NORETURN int __SEH2Handle(void *, void *, void *, void *, void *, void *); extern int __cdecl __SEH2FrameHandler(struct _EXCEPTION_RECORD *, void *, struct _CONTEXT *, void *); extern int __cdecl __SEH2UnwindHandler(struct _EXCEPTION_RECORD *, void *, struct _CONTEXT *, void *); + +typedef struct __SEHTrampoline +{ + unsigned char STR_MovEcx; + unsigned char * STR_Closure; + unsigned char STR_Jmp; + unsigned char * STR_Function; +} +__attribute__((packed)) +_SEHTrampoline_t; + +FORCEINLINE +int _SEHIsTrampoline(_SEHTrampoline_t * trampoline_) +{ + return trampoline_->STR_MovEcx == 0xb9 && trampoline_->STR_Jmp == 0xe9; +} + +FORCEINLINE +void * _SEHFunctionFromTrampoline(_SEHTrampoline_t * trampoline_) +{ + return (int)(trampoline_ + 1) + trampoline_->STR_Function; +} + +FORCEINLINE +void * _SEHClosureFromTrampoline(_SEHTrampoline_t * trampoline_) +{ + return trampoline_->STR_Closure; +}
FORCEINLINE _SEH2Registration_t * __cdecl _SEH2CurrentRegistration(void)