| 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 |
| 26 |
extern "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 |
|
| 207 |
void * __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 |