source: Daodan/MSYS2/mingw32/i686-w64-mingw32/include/setjmp.h@ 1178

Last change on this file since 1178 was 1166, checked in by rossy, 3 years ago

Daodan: Replace MinGW build env with an up-to-date MSYS2 env

File size: 7.3 KB
Line 
1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6#ifndef _INC_SETJMP
7#define _INC_SETJMP
8
9#include <crtdefs.h>
10
11#pragma pack(push,_CRT_PACKING)
12
13#ifndef NULL
14#ifdef __cplusplus
15#ifndef _WIN64
16#define NULL 0
17#else
18#define NULL 0LL
19#endif /* W64 */
20#else
21#define NULL ((void *)0)
22#endif
23#endif
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
29#if (defined(_X86_) && !defined(__x86_64))
30
31#define _JBLEN 16
32#define _JBTYPE int
33
34 typedef struct __JUMP_BUFFER {
35 unsigned long Ebp;
36 unsigned long Ebx;
37 unsigned long Edi;
38 unsigned long Esi;
39 unsigned long Esp;
40 unsigned long Eip;
41 unsigned long Registration;
42 unsigned long TryLevel;
43 unsigned long Cookie;
44 unsigned long UnwindFunc;
45 unsigned long UnwindData[6];
46 } _JUMP_BUFFER;
47
48#elif defined(__ia64__)
49
50 typedef _CRT_ALIGN(16) struct _SETJMP_FLOAT128 {
51 __MINGW_EXTENSION __int64 LowPart;
52 __MINGW_EXTENSION __int64 HighPart;
53 } SETJMP_FLOAT128;
54
55#define _JBLEN 33
56 typedef SETJMP_FLOAT128 _JBTYPE;
57
58 typedef struct __JUMP_BUFFER {
59
60 unsigned long iAReserved[6];
61
62 unsigned long Registration;
63 unsigned long TryLevel;
64 unsigned long Cookie;
65 unsigned long UnwindFunc;
66
67 unsigned long UnwindData[6];
68
69 SETJMP_FLOAT128 FltS0;
70 SETJMP_FLOAT128 FltS1;
71 SETJMP_FLOAT128 FltS2;
72 SETJMP_FLOAT128 FltS3;
73 SETJMP_FLOAT128 FltS4;
74 SETJMP_FLOAT128 FltS5;
75 SETJMP_FLOAT128 FltS6;
76 SETJMP_FLOAT128 FltS7;
77 SETJMP_FLOAT128 FltS8;
78 SETJMP_FLOAT128 FltS9;
79 SETJMP_FLOAT128 FltS10;
80 SETJMP_FLOAT128 FltS11;
81 SETJMP_FLOAT128 FltS12;
82 SETJMP_FLOAT128 FltS13;
83 SETJMP_FLOAT128 FltS14;
84 SETJMP_FLOAT128 FltS15;
85 SETJMP_FLOAT128 FltS16;
86 SETJMP_FLOAT128 FltS17;
87 SETJMP_FLOAT128 FltS18;
88 SETJMP_FLOAT128 FltS19;
89 __MINGW_EXTENSION __int64 FPSR;
90 __MINGW_EXTENSION __int64 StIIP;
91 __MINGW_EXTENSION __int64 BrS0;
92 __MINGW_EXTENSION __int64 BrS1;
93 __MINGW_EXTENSION __int64 BrS2;
94 __MINGW_EXTENSION __int64 BrS3;
95 __MINGW_EXTENSION __int64 BrS4;
96 __MINGW_EXTENSION __int64 IntS0;
97 __MINGW_EXTENSION __int64 IntS1;
98 __MINGW_EXTENSION __int64 IntS2;
99 __MINGW_EXTENSION __int64 IntS3;
100 __MINGW_EXTENSION __int64 RsBSP;
101 __MINGW_EXTENSION __int64 RsPFS;
102 __MINGW_EXTENSION __int64 ApUNAT;
103 __MINGW_EXTENSION __int64 ApLC;
104 __MINGW_EXTENSION __int64 IntSp;
105 __MINGW_EXTENSION __int64 IntNats;
106 __MINGW_EXTENSION __int64 Preds;
107
108 } _JUMP_BUFFER;
109
110#elif defined(__x86_64)
111
112 typedef _CRT_ALIGN(16) struct _SETJMP_FLOAT128 {
113 __MINGW_EXTENSION unsigned __int64 Part[2];
114 } SETJMP_FLOAT128;
115
116#define _JBLEN 16
117 typedef SETJMP_FLOAT128 _JBTYPE;
118
119 typedef struct _JUMP_BUFFER {
120 __MINGW_EXTENSION unsigned __int64 Frame;
121 __MINGW_EXTENSION unsigned __int64 Rbx;
122 __MINGW_EXTENSION unsigned __int64 Rsp;
123 __MINGW_EXTENSION unsigned __int64 Rbp;
124 __MINGW_EXTENSION unsigned __int64 Rsi;
125 __MINGW_EXTENSION unsigned __int64 Rdi;
126 __MINGW_EXTENSION unsigned __int64 R12;
127 __MINGW_EXTENSION unsigned __int64 R13;
128 __MINGW_EXTENSION unsigned __int64 R14;
129 __MINGW_EXTENSION unsigned __int64 R15;
130 __MINGW_EXTENSION unsigned __int64 Rip;
131 unsigned long MxCsr;
132 unsigned short FpCsr;
133 unsigned short Spare;
134 SETJMP_FLOAT128 Xmm6;
135 SETJMP_FLOAT128 Xmm7;
136 SETJMP_FLOAT128 Xmm8;
137 SETJMP_FLOAT128 Xmm9;
138 SETJMP_FLOAT128 Xmm10;
139 SETJMP_FLOAT128 Xmm11;
140 SETJMP_FLOAT128 Xmm12;
141 SETJMP_FLOAT128 Xmm13;
142 SETJMP_FLOAT128 Xmm14;
143 SETJMP_FLOAT128 Xmm15;
144 } _JUMP_BUFFER;
145
146#elif defined(_ARM_)
147
148#define _JBLEN 28
149#define _JBTYPE int
150
151 typedef struct __JUMP_BUFFER {
152 unsigned long Frame;
153 unsigned long R4;
154 unsigned long R5;
155 unsigned long R6;
156 unsigned long R7;
157 unsigned long R8;
158 unsigned long R9;
159 unsigned long R10;
160 unsigned long R11;
161 unsigned long Sp;
162 unsigned long Pc;
163 unsigned long Fpscr;
164 unsigned long long D[8];
165 } _JUMP_BUFFER;
166
167#elif defined(_ARM64_)
168
169#define _JBLEN 24
170#define _JBTYPE unsigned __int64
171
172 typedef struct __JUMP_BUFFER {
173 unsigned __int64 Frame;
174 unsigned __int64 Reserved;
175 unsigned __int64 X19;
176 unsigned __int64 X20;
177 unsigned __int64 X21;
178 unsigned __int64 X22;
179 unsigned __int64 X23;
180 unsigned __int64 X24;
181 unsigned __int64 X25;
182 unsigned __int64 X26;
183 unsigned __int64 X27;
184 unsigned __int64 X28;
185 unsigned __int64 Fp;
186 unsigned __int64 Lr;
187 unsigned __int64 Sp;
188 unsigned long Fpcr;
189 unsigned long Fpsr;
190 double D[8];
191 } _JUMP_BUFFER;
192
193#else
194
195#define _JBLEN 1
196#define _JBTYPE int
197
198#endif
199
200#ifndef _JMP_BUF_DEFINED
201 typedef _JBTYPE jmp_buf[_JBLEN];
202#define _JMP_BUF_DEFINED
203#endif
204
205_CRTIMP __MINGW_ATTRIB_NORETURN __attribute__ ((__nothrow__)) void __cdecl longjmp(jmp_buf _Buf,int _Value);
206
207void * __cdecl __attribute__ ((__nothrow__)) mingw_getsp (void);
208
209#pragma push_macro("__has_builtin")
210#ifndef __has_builtin
211 #define __has_builtin(x) 0
212#endif
213
214#if !defined(USE_NO_MINGW_SETJMP_TWO_ARGS)
215# ifdef _UCRT
216# ifdef _WIN64
217# define _setjmp __intrinsic_setjmpex
218# else
219# define _setjmp __intrinsic_setjmp
220# endif
221# elif defined(__aarch64__)
222 /* ARM64 msvcrt.dll lacks _setjmp, only has _setjmpex. */
223# define _setjmp _setjmpex
224# endif
225# ifndef _INC_SETJMPEX
226# if defined(_X86_) || defined(__i386__)
227# define setjmp(BUF) _setjmp3((BUF), NULL)
228# elif defined(_ARM_) || defined(__arm__) || ((defined(_ARM64_) || defined(__aarch64__)) && (!defined(__SEH__) || !__has_builtin(__builtin_sponentry)))
229# define setjmp(BUF) __mingw_setjmp((BUF))
230# define longjmp __mingw_longjmp
231 int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) __mingw_setjmp(jmp_buf _Buf);
232 __MINGW_ATTRIB_NORETURN __attribute__ ((__nothrow__)) void __mingw_longjmp(jmp_buf _Buf,int _Value);
233# elif defined(__SEH__)
234# if defined(__aarch64__) || defined(_ARM64_)
235# define setjmp(BUF) _setjmp((BUF), __builtin_sponentry())
236# elif (__MINGW_GCC_VERSION < 40702) && !defined(__clang__)
237# define setjmp(BUF) _setjmp((BUF), mingw_getsp())
238# else
239# define setjmp(BUF) _setjmp((BUF), __builtin_frame_address (0))
240# endif
241# else
242# define setjmp(BUF) _setjmp((BUF), NULL)
243# endif
244 int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) _setjmp(jmp_buf _Buf, void *_Ctx);
245 int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) _setjmp3(jmp_buf _Buf, void *_Ctx);
246# else
247# undef setjmp
248# ifdef __SEH__
249# if (__MINGW_GCC_VERSION < 40702) && !defined(__clang__)
250# define setjmp(BUF) _setjmpex((BUF), mingw_getsp())
251# define setjmpex(BUF) _setjmpex((BUF), mingw_getsp())
252# else
253# define setjmp(BUF) _setjmpex((BUF), __builtin_frame_address (0))
254# define setjmpex(BUF) _setjmpex((BUF), __builtin_frame_address (0))
255# endif
256# else
257# define setjmp(BUF) _setjmpex((BUF), NULL)
258# define setjmpex(BUF) _setjmpex((BUF), NULL)
259# endif
260 int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) _setjmpex(jmp_buf _Buf,void *_Ctx);
261# endif
262
263#else
264
265# if !defined(_INC_SETJMPEX)
266# define setjmp _setjmp
267# endif
268
269 int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) setjmp(jmp_buf _Buf);
270#endif
271
272#pragma pop_macro("__has_builtin")
273
274#ifdef __cplusplus
275}
276#endif
277
278#pragma pack(pop)
279#endif
Note: See TracBrowser for help on using the repository browser.