23 ".seh_proc __seh2_global_filter_func\n"
24 "__seh2_global_filter_func:\n"
29 "\t.seh_pushreg %rbp\n"
31 "\t.seh_pushreg %rbx\n"
33 "\t.seh_pushreg %rdi\n"
35 "\t.seh_pushreg %rsi\n"
37 "\t.seh_pushreg %r12\n"
39 "\t.seh_pushreg %r13\n"
41 "\t.seh_pushreg %r14\n"
43 "\t.seh_pushreg %r15\n"
45 "\t.seh_stackalloc 40\n"
46 "\t.seh_endprologue\n"
53 "__seh2_global_filter_func_exit:\n"
67#define STRINGIFY(a) #a
68#define EMIT_PRAGMA_(params) \
69 _Pragma( STRINGIFY(params) )
70#define EMIT_PRAGMA(type,line) \
71 EMIT_PRAGMA_(REACTOS seh(type,line))
73#define _SEH3$_EMIT_DEFS_AND_PRAGMA__(Line, Type) \
75 __asm__ __volatile__ goto ("\n" \
76 "\t__seh2$$begin_try__" #Line "=%l0\n"
\
77 "\t__seh2$$end_try__" #Line "=%l1 + 1\n"
\
78 "\t__seh2$$filter__" #Line "=%l2\n"
\
79 "\t__seh2$$begin_except__" #Line "=%l3\n"
\
83 : __seh2$$begin_try__, \
86 __seh2$$begin_except__); \
88 EMIT_PRAGMA(Type,Line)
90#define _SEH3$_EMIT_DEFS_AND_PRAGMA_(Line, Type) _SEH3$_EMIT_DEFS_AND_PRAGMA__(Line, Type)
91#define _SEH3$_EMIT_DEFS_AND_PRAGMA(Type) _SEH3$_EMIT_DEFS_AND_PRAGMA_(__LINE__, Type)
95 __label__ __seh2$$filter__; \
96 __label__ __seh2$$begin_except__; \
97 __label__ __seh2$$begin_try__; \
98 __label__ __seh2$$end_try__; \
106__seh2$$begin_try__: \
108 __label__ __seh2$$leave_scope__;
110#define _SEH2_EXCEPT(...) \
111__seh2$$leave_scope__: __MINGW_ATTRIB_UNUSED; \
113__seh2$$end_try__:(void)0; \
115 _SEH3$_EMIT_DEFS_AND_PRAGMA(__seh$$except); \
118 __label__ __seh2$$leave_scope__; \
119 long __MINGW_ATTRIB_UNUSED __seh2$$exception_code__; \
124 __label__ __seh2$$filter_funclet__; \
126 __asm__ __volatile__ goto( \
127 "\tleaq %l1(%%rip), %%r8\n" \
128 "\tjmp __seh2_global_filter_func\n" \
130 : "a"(__builtin_frame_address(0)) \
132 : __seh2$$filter_funclet__); \
134 struct _SEH$$_EXCEPTION_POINTERS* __seh2$$exception_ptr__; \
135 __seh2$$filter_funclet__: \
137 __asm__ __volatile__("" \
138 : "=c"(__seh2$$exception_ptr__)
\
141 "%rax", "%rbx","%rdx", "%rdi", "%rsi", \
142 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"); \
144 __seh2$$exception_code__ = __seh2$$exception_ptr__->ExceptionRecord->ExceptionCode; \
146 long __seh2$$filter_funclet_ret = ((__VA_ARGS__)); \
148 __asm__ __volatile__("jmp __seh2_global_filter_func_exit" \
150 : "a"(__seh2$$filter_funclet_ret)); \
155 __seh2$$abnormal_termination__ = 0 \
157 __seh2$$begin_except__:
159#define _SEH2_FINALLY \
160__seh2$$leave_scope__: __MINGW_ATTRIB_UNUSED; \
163__seh2$$begin_except__: __MINGW_ATTRIB_UNUSED; \
165 _SEH3$_EMIT_DEFS_AND_PRAGMA(__seh$$finally); \
168 __label__ __seh2$$finally__; \
169 __label__ __seh2$$begin_finally__; \
170 __label__ __seh2$$leave_scope__; \
171 __asm__ __volatile__ goto("" : : : : __seh2$$finally__); \
172 int __seh2$$abnormal_termination__; \
176 __seh2$$filter__: __MINGW_ATTRIB_UNUSED; \
177 __seh2$$finally__: __MINGW_ATTRIB_UNUSED; \
178 __asm__ __volatile__ goto( \
180 "\tleaq %l1(%%rip), %%r8\n" \
181 "\tjmp __seh2_global_filter_func\n" \
183 : "a"(__builtin_frame_address(0)) \
185 : __seh2$$begin_finally__); \
189 __asm__ __volatile__("xor %%rcx, %%rcx" \
193 "%rax", "%rbx", "%rcx", "%rdx", "%rdi", "%rsi", \
194 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"); \
196 __seh2$$begin_finally__: \
197 __asm__ __volatile__("" \
198 : "=c" (__seh2$$abnormal_termination__));
201 __seh2$$leave_scope__: __MINGW_ATTRIB_UNUSED; \
202 if (__seh2$$abnormal_termination__) \
204 __asm__("jmp __seh2_global_filter_func_exit"); \
209#define _SEH2_GetExceptionInformation() ((struct _EXCEPTION_POINTERS*)__seh2$$exception_ptr__)
210#define _SEH2_GetExceptionCode() __seh2$$exception_code__
211#define _SEH2_AbnormalTermination() __seh2$$abnormal_termination__
212#define _SEH2_LEAVE goto __seh2$$leave_scope__
213#define _SEH2_YIELD(__stmt) __stmt
214#define _SEH2_VOLATILE volatile
217#define __try _SEH2_TRY
218#define __except _SEH2_EXCEPT
219#define __finally _SEH2_FINALLY
220#define __endtry _SEH2_END
221#define __leave goto __seh2$$leave_scope__
222#define _exception_info() ((struct _EXCEPTION_POINTERS*)__seh2$$exception_ptr__)
223#define _exception_code() __seh2$$exception_code__
224#define _abnormal_termination() __seh2$$abnormal_termination__
__asm__(".p2align 4, 0x90\n" ".seh_proc __seh2_global_filter_func\n" "__seh2_global_filter_func:\n" "\tsub %rbp, %rax\n" "\tpush %rbp\n" "\t.seh_pushreg %rbp\n" "\tpush %rbx\n" "\t.seh_pushreg %rbx\n" "\tpush %rdi\n" "\t.seh_pushreg %rdi\n" "\tpush %rsi\n" "\t.seh_pushreg %rsi\n" "\tpush %r12\n" "\t.seh_pushreg %r12\n" "\tpush %r13\n" "\t.seh_pushreg %r13\n" "\tpush %r14\n" "\t.seh_pushreg %r14\n" "\tpush %r15\n" "\t.seh_pushreg %r15\n" "\tsub $40, %rsp\n" "\t.seh_stackalloc 40\n" "\t.seh_endprologue\n" "\tsub %rax, %rdx\n" "\tmov %rdx, %rbp\n" "\tjmp *%r8\n" "__seh2_global_filter_func_exit:\n" "\t.p2align 4\n" "\tadd $40, %rsp\n" "\tpop %r15\n" "\tpop %r14\n" "\tpop %r13\n" "\tpop %r12\n" "\tpop %rsi\n" "\tpop %rdi\n" "\tpop %rbx\n" "\tpop %rbp\n" "\tret\n" "\t.seh_endproc")
struct _SEH$$_EXCEPTION_RECORD * ExceptionRecord
struct _CONTEXT * ContextRecord
unsigned long long ExceptionInformation[15]
unsigned long ExceptionCode
struct _EXCEPTION_RECORD * ExceptionRecord
unsigned long ExceptionFlags
unsigned long NumberParameters