[PSEH3]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Sun, 30 Dec 2012 18:01:34 +0000 (18:01 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Sun, 30 Dec 2012 18:01:34 +0000 (18:01 +0000)
Apply the same mechanism to prevent inlining SEH using functions that was already applied to PSEH2.

svn path=/trunk/; revision=58059

reactos/include/reactos/libs/pseh/pseh3.h

index de9092c..b5ee1d8 100644 (file)
@@ -45,6 +45,9 @@ typedef struct _SEH3$_REGISTRATION_FRAME
 
 } SEH3$_REGISTRATION_FRAME ,*PSEH3$_REGISTRATION_FRAME;
 
+/* Prevent gcc from inlining functions that use SEH. */
+static inline __attribute__((always_inline)) __attribute__((returns_twice)) void _SEH3$_PreventInlining() {}
+
 extern inline __attribute__((always_inline,gnu_inline))
 void _SEH3$_UnregisterFrame(volatile SEH3$_REGISTRATION_FRAME *RegistrationFrame)
 {
@@ -174,6 +177,7 @@ void * __cdecl __attribute__((error("Can only be used inside an exception filter
 
 
 #define _SEH3_TRY \
+    _SEH3$_PreventInlining(); \
     /* Enter the outer scope */ \
     do { \
         /* Declare local labels */ \