| 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 |