ReactOS 0.4.16-dev-1946-g52006dd
setjmp.h
Go to the documentation of this file.
1
6#ifndef _INC_SETJMP
7#define _INC_SETJMP
8
9#include <vcruntime.h>
10
11#pragma pack(push,_CRT_PACKING)
12
13#ifdef __cplusplus
14extern "C" {
15#endif
16
17#if (defined(_X86_) && !defined(__x86_64))
18
19#define _JBLEN 16
20#define _JBTYPE int
21
22 typedef struct __JUMP_BUFFER {
23 unsigned long Ebp;
24 unsigned long Ebx;
25 unsigned long Edi;
26 unsigned long Esi;
27 unsigned long Esp;
28 unsigned long Eip;
29 unsigned long Registration;
30 unsigned long TryLevel;
31 unsigned long Cookie;
32 unsigned long UnwindFunc;
33 unsigned long UnwindData[6];
34 } _JUMP_BUFFER;
35
36#elif defined(__ia64__)
37
38 typedef _CRT_ALIGN(16) struct _SETJMP_FLOAT128 {
41 } SETJMP_FLOAT128;
42
43#define _JBLEN 33
44 typedef SETJMP_FLOAT128 _JBTYPE;
45
46 typedef struct __JUMP_BUFFER {
47
48 unsigned long iAReserved[6];
49
50 unsigned long Registration;
51 unsigned long TryLevel;
52 unsigned long Cookie;
53 unsigned long UnwindFunc;
54
55 unsigned long UnwindData[6];
56
57 SETJMP_FLOAT128 FltS0;
58 SETJMP_FLOAT128 FltS1;
59 SETJMP_FLOAT128 FltS2;
60 SETJMP_FLOAT128 FltS3;
61 SETJMP_FLOAT128 FltS4;
62 SETJMP_FLOAT128 FltS5;
63 SETJMP_FLOAT128 FltS6;
64 SETJMP_FLOAT128 FltS7;
65 SETJMP_FLOAT128 FltS8;
66 SETJMP_FLOAT128 FltS9;
67 SETJMP_FLOAT128 FltS10;
68 SETJMP_FLOAT128 FltS11;
69 SETJMP_FLOAT128 FltS12;
70 SETJMP_FLOAT128 FltS13;
71 SETJMP_FLOAT128 FltS14;
72 SETJMP_FLOAT128 FltS15;
73 SETJMP_FLOAT128 FltS16;
74 SETJMP_FLOAT128 FltS17;
75 SETJMP_FLOAT128 FltS18;
76 SETJMP_FLOAT128 FltS19;
95
96 } _JUMP_BUFFER;
97
98#elif defined(__x86_64)
99
100 typedef _CRT_ALIGN(16) struct _SETJMP_FLOAT128 {
101 unsigned __int64 Part[2];
102 } SETJMP_FLOAT128;
103
104#define _JBLEN 16
105 typedef SETJMP_FLOAT128 _JBTYPE;
106
107 typedef struct _JUMP_BUFFER {
108 unsigned __int64 Frame;
109 unsigned __int64 Rbx;
110 unsigned __int64 Rsp;
111 unsigned __int64 Rbp;
112 unsigned __int64 Rsi;
113 unsigned __int64 Rdi;
114 unsigned __int64 R12;
115 unsigned __int64 R13;
116 unsigned __int64 R14;
117 unsigned __int64 R15;
118 unsigned __int64 Rip;
119 unsigned long MxCsr;
120 unsigned short FpCsr;
121 unsigned short Spare;
122 SETJMP_FLOAT128 Xmm6;
123 SETJMP_FLOAT128 Xmm7;
124 SETJMP_FLOAT128 Xmm8;
125 SETJMP_FLOAT128 Xmm9;
126 SETJMP_FLOAT128 Xmm10;
127 SETJMP_FLOAT128 Xmm11;
128 SETJMP_FLOAT128 Xmm12;
129 SETJMP_FLOAT128 Xmm13;
130 SETJMP_FLOAT128 Xmm14;
131 SETJMP_FLOAT128 Xmm15;
132 } _JUMP_BUFFER;
133
134#elif defined(_M_ARM)
135
136#define _JBLEN 28
137#define _JBTYPE int
138
139 typedef struct _JUMP_BUFFER {
140 unsigned long Frame;
141 unsigned long R4;
142 unsigned long R5;
143 unsigned long R6;
144 unsigned long R7;
145 unsigned long R8;
146 unsigned long R9;
147 unsigned long R10;
148 unsigned long R11;
149 unsigned long Sp;
150 unsigned long Pc;
151 unsigned long Fpscr;
152 unsigned long long D[8]; // D8-D15 VFP/NEON regs
153 } _JUMP_BUFFER;
154
155#elif defined(_M_ARM64)
156
157#define _JBLEN 24
158#define _JBTYPE unsigned __int64
159
160typedef struct __JUMP_BUFFER {
161 unsigned __int64 Frame;
162 unsigned __int64 Reserved;
163 unsigned __int64 X19;
164 unsigned __int64 X20;
165 unsigned __int64 X21;
166 unsigned __int64 X22;
167 unsigned __int64 X23;
168 unsigned __int64 X24;
169 unsigned __int64 X25;
170 unsigned __int64 X26;
171 unsigned __int64 X27;
172 unsigned __int64 X28;
173 unsigned __int64 Fp;
174 unsigned __int64 Lr;
175 unsigned __int64 Sp;
176 unsigned long Fpcr;
177 unsigned long Fpsr;
178 double D[8];
179 } _JUMP_BUFFER;
180
181#else
182
183#error Define Setjmp for this architecture!
184
185#endif
186
187#ifndef _JMP_BUF_DEFINED
188 typedef _JBTYPE jmp_buf[_JBLEN];
189#define _JMP_BUF_DEFINED
190#endif
191
192#ifdef USE_MINGW_SETJMP_TWO_ARGS
193#ifndef _INC_SETJMPEX
194#if defined(__x86_64)
195# define mingw_getsp() \
196 ({ void* value; __asm__ __volatile__("movq %%rsp, %[value]" : [value] "=r" (value)); value; })
197#elif defined(_X86_)
198# define mingw_getsp() \
199 ({ void* value; __asm__ __volatile__("movl %%esp, %[value]" : [value] "=r" (value)); value; })
200#endif
201#define setjmp(BUF) _setjmp((BUF),mingw_getsp())
202 int __MINGW_NOTHROW __cdecl _setjmp(jmp_buf _Buf,void *_Ctx);
203#else /* _INC_SETJMPEX */
204#undef setjmp
205#define setjmp(BUF) _setjmpex((BUF),mingw_getsp())
206#define setjmpex(BUF) _setjmpex((BUF),mingw_getsp())
207 int __MINGW_NOTHROW __cdecl _setjmpex(jmp_buf _Buf,void *_Ctx);
208#endif /* _INC_SETJMPEX */
209#else /* !USE_MINGW_SETJMP_TWO_ARGS */
210#ifndef _INC_SETJMPEX
211#define setjmp _setjmp
212#endif
214#endif /* !USE_MINGW_SETJMP_TWO_ARGS */
215
216 __declspec(noreturn) __MINGW_NOTHROW void __cdecl ms_longjmp(jmp_buf _Buf,int _Value)/* throw(...)*/;
217 __declspec(noreturn) __MINGW_NOTHROW void __cdecl longjmp(jmp_buf _Buf,int _Value);
218
219#ifdef __cplusplus
220}
221#endif
222
223#pragma pack(pop)
224#endif
#define __MINGW_NOTHROW
Definition: _mingw.h:156
#define __MINGW_EXTENSION
Definition: _mingw.h:166
#define __cdecl
Definition: accygwin.h:79
@ R15
Definition: amd64_sup.c:13
@ R13
Definition: amd64_sup.c:13
@ R12
Definition: amd64_sup.c:13
@ R9
Definition: amd64_sup.c:13
@ R14
Definition: amd64_sup.c:13
@ R8
Definition: amd64_sup.c:13
@ R11
Definition: amd64_sup.c:13
@ R10
Definition: amd64_sup.c:13
#define __int64
Definition: basetyps.h:16
#define D(d)
Definition: builtin.c:4557
_Must_inspect_result_ _In_ CONST FLT_REGISTRATION * Registration
Definition: fltkernel.h:991
void __declspec(noinline) __cdecl _free_base(void *const block)
Definition: free_base.cpp:98
ULONG Sp
Definition: kdb_expr.c:99
#define R4(v, w, x, y, z, i)
Definition: sha1.c:39
#define _CRT_ALIGN(x)
Definition: corecrt.h:217
#define setjmp
Definition: setjmp.h:211
int _Value
Definition: setjmp.h:216
_JBTYPE jmp_buf[_JBLEN]
Definition: setjmp.h:188
_Reserved_ PVOID Reserved
Definition: winddi.h:3974
_In_opt_ PVOID _Out_ PLARGE_INTEGER Cookie
Definition: cmfuncs.h:14