ReactOS 0.4.15-dev-8100-g1887773
exception.h
Go to the documentation of this file.
1#ifndef __WINE_WINE_EXCEPTION_H
2#define __WINE_WINE_EXCEPTION_H
3
4#include <setjmp.h>
5#include <intrin.h>
6#ifdef __USE_PSEH2__
7# include <pseh/pseh2.h>
8# include <pseh/excpt.h>
9#endif
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15/* Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD */
16#define EH_NONCONTINUABLE 0x01
17#define EH_UNWINDING 0x02
18#define EH_EXIT_UNWIND 0x04
19#define EH_STACK_INVALID 0x08
20#define EH_NESTED_CALL 0x10
21#define EH_TARGET_UNWIND 0x20
22#define EH_COLLIDED_UNWIND 0x40
23
24#define EXCEPTION_WINE_STUB 0x80000100
25#define EXCEPTION_WINE_ASSERTION 0x80000101
26
27#define EXCEPTION_VM86_INTx 0x80000110
28#define EXCEPTION_VM86_STI 0x80000111
29#define EXCEPTION_VM86_PICRETURN 0x80000112
30
31#ifndef _RTLTYPES_H
33
34typedef
37 struct _EXCEPTION_RECORD*,
39 struct _CONTEXT*,
41
43
45{
48};
49#else
50typedef struct _WINE_EXCEPTION_REGISTRATION_RECORD
51{
52 PVOID Prev;
54} WINE_EXCEPTION_REGISTRATION_RECORD, *PWINE_EXCEPTION_REGISTRATION_RECORD;
55
56#define _EXCEPTION_REGISTRATION_RECORD _WINE_EXCEPTION_REGISTRATION_RECORD
57#define EXCEPTION_REGISTRATION_RECORD WINE_EXCEPTION_REGISTRATION_RECORD
58#define PEXCEPTION_REGISTRATION_RECORD PWINE_EXCEPTION_REGISTRATION_RECORD
59#endif
60
61#ifdef __USE_PSEH2__
62#define __TRY _SEH2_TRY
63#define __EXCEPT(func) _SEH2_EXCEPT(func(_SEH2_GetExceptionInformation()))
64#define __EXCEPT_CTX(func, ctx) _SEH2_EXCEPT((func)(GetExceptionInformation(), ctx))
65#define __EXCEPT_PAGE_FAULT _SEH2_EXCEPT(_SEH2_GetExceptionCode() == STATUS_ACCESS_VIOLATION)
66#define __EXCEPT_ALL _SEH2_EXCEPT(_SEH_EXECUTE_HANDLER)
67#define __ENDTRY _SEH2_END
68#define __FINALLY(func) _SEH2_FINALLY { func(!_SEH2_AbnormalTermination()); }
69#define __FINALLY_CTX(func, ctx) _SEH2_FINALLY { func(!_SEH2_AbnormalTermination(), ctx); }; _SEH2_END
70
71#ifndef GetExceptionCode
72#define GetExceptionCode() _SEH2_GetExceptionCode()
73#endif
74
75#ifndef GetExceptionInformation
76#define GetExceptionInformation() _SEH2_GetExceptionInformation()
77#endif
78
79#ifndef AbnormalTermination
80#define AbnormalTermination() _SEH2_AbnormalTermination()
81#endif
82#else
83#define __TRY __try
84#define __EXCEPT(func) __except(func(GetExceptionInformation()))
85#define __EXCEPT_CTX(func, ctx) __except((func)(GetExceptionInformation(), ctx))
86#define __EXCEPT_PAGE_FAULT __except(GetExceptionCode() == STATUS_ACCESS_VIOLATION)
87#define __EXCEPT_ALL __except(1)
88#define __ENDTRY
89#define __FINALLY(func) __finally { func(!AbnormalTermination()); }
90#define __FINALLY_CTX(func, ctx) __finally { func(!AbnormalTermination(), ctx); }
91#endif
92
93#if defined(__MINGW32__) || defined(__CYGWIN__)
94#define sigjmp_buf jmp_buf
95#define sigsetjmp(buf,sigs) setjmp(buf)
96#define siglongjmp(buf,val) longjmp(buf,val)
97#endif
98
99#ifdef _MSC_VER
100#pragma warning(push)
101#pragma warning(disable:4733)
102#endif
103
105{
106#ifdef __i386__
108 __writefsdword(0, (unsigned long)frame);
109 return frame->Prev;
110#else
111 NT_TIB *teb = (NT_TIB *)NtCurrentTeb();
112 frame->Prev = teb->ExceptionList;
113 teb->ExceptionList = (PVOID)frame;
114 return frame->Prev;
115#endif
116}
117
119{
120#ifdef __i386__
121 __writefsdword(0, (unsigned long)frame->Prev);
122 return frame->Prev;
123#else
124 NT_TIB *teb = (NT_TIB *)NtCurrentTeb();
125 frame->Prev = teb->ExceptionList;
126 teb->ExceptionList = (PVOID)frame;
127 return frame->Prev;
128#endif
129}
130
131#ifdef _MSC_VER
132#pragma warning(pop)
133#endif
134
136
137#ifdef __cplusplus
138}
139#endif
140
141#endif
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER Handler
Definition: acpixf.h:672
EXCEPTION_ROUTINE * PEXCEPTION_ROUTINE
Definition: compat.h:709
PPC_QUAL void __writefsdword(const unsigned long Offset, const unsigned long Data)
Definition: intrin_ppc.h:354
PPC_QUAL unsigned long __readfsdword(const unsigned long Offset)
Definition: intrin_ppc.h:382
#define NtCurrentTeb
#define DWORD
Definition: nt_native.h:44
static EXCEPTION_REGISTRATION_RECORD * __wine_push_frame(EXCEPTION_REGISTRATION_RECORD *frame)
Definition: exception.h:104
void __wine_enter_vm86(CONTEXT *context)
struct _EXCEPTION_REGISTRATION_RECORD * PEXCEPTION_REGISTRATION_RECORD
Definition: exception.h:42
DWORD(* PEXCEPTION_HANDLER)(struct _EXCEPTION_RECORD *, struct _EXCEPTION_REGISTRATION_RECORD *, struct _CONTEXT *, struct _EXCEPTION_REGISTRATION_RECORD **)
Definition: exception.h:36
static EXCEPTION_REGISTRATION_RECORD * __wine_pop_frame(EXCEPTION_REGISTRATION_RECORD *frame)
Definition: exception.h:118
PEXCEPTION_HANDLER Handler
Definition: exception.h:47
struct _EXCEPTION_REGISTRATION_RECORD * Prev
Definition: exception.h:46
struct _EXCEPTION_REGISTRATION_RECORD * ExceptionList
Definition: compat.h:711
Definition: http.c:7252
void * PVOID
Definition: typedefs.h:50