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 __MINGW_EXTENSION unsigned __int64 Spare; 132 SETJMP_FLOAT128 Xmm6; 133 SETJMP_FLOAT128 Xmm7; 134 SETJMP_FLOAT128 Xmm8; 135 SETJMP_FLOAT128 Xmm9; 136 SETJMP_FLOAT128 Xmm10; 137 SETJMP_FLOAT128 Xmm11; 138 SETJMP_FLOAT128 Xmm12; 139 SETJMP_FLOAT128 Xmm13; 140 SETJMP_FLOAT128 Xmm14; 141 SETJMP_FLOAT128 Xmm15; 142 } _JUMP_BUFFER; 143 144#elif defined(_ARM_) 145 146#define _JBLEN 28 147#define _JBTYPE int 148 149 typedef struct __JUMP_BUFFER { 150 unsigned long Frame; 151 unsigned long R4; 152 unsigned long R5; 153 unsigned long R6; 154 unsigned long R7; 155 unsigned long R8; 156 unsigned long R9; 157 unsigned long R10; 158 unsigned long R11; 159 unsigned long Sp; 160 unsigned long Pc; 161 unsigned long Fpscr; 162 unsigned long long D[8]; 163 } _JUMP_BUFFER; 164 165#endif 166 167#ifndef _JMP_BUF_DEFINED 168 typedef _JBTYPE jmp_buf[_JBLEN]; 169#define _JMP_BUF_DEFINED 170#endif 171 172void * __cdecl __attribute__ ((__nothrow__)) mingw_getsp (void); 173 174#ifndef USE_NO_MINGW_SETJMP_TWO_ARGS 175# ifndef _INC_SETJMPEX 176# ifdef _WIN64 177# if (__MINGW_GCC_VERSION < 40702) 178# define setjmp(BUF) _setjmp((BUF), mingw_getsp()) 179# else 180# define setjmp(BUF) _setjmp((BUF), __builtin_frame_address (0)) 181# endif 182# else 183# define setjmp(BUF) _setjmp3((BUF), NULL) 184# endif 185 int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) _setjmp(jmp_buf _Buf, void *_Ctx); 186 int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) _setjmp3(jmp_buf _Buf, void *_Ctx); 187# else 188# undef setjmp 189# ifdef _WIN64 190# if (__MINGW_GCC_VERSION < 40702) 191# define setjmp(BUF) _setjmpex((BUF), mingw_getsp()) 192# define setjmpex(BUF) _setjmpex((BUF), mingw_getsp()) 193# else 194# define setjmp(BUF) _setjmpex((BUF), __builtin_frame_address (0)) 195# define setjmpex(BUF) _setjmpex((BUF), __builtin_frame_address (0)) 196# endif 197# else 198# define setjmp(BUF) _setjmpex((BUF), NULL) 199# define setjmpex(BUF) _setjmpex((BUF), NULL) 200# endif 201 int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) _setjmpex(jmp_buf _Buf,void *_Ctx); 202# endif 203 204#else 205 206# ifndef _INC_SETJMPEX 207# define setjmp _setjmp 208# endif 209 210 int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) setjmp(jmp_buf _Buf); 211#endif 212 213 __declspec(noreturn) __attribute__ ((__nothrow__)) void __cdecl ms_longjmp(jmp_buf _Buf,int _Value)/* throw(...)*/; 214 __declspec(noreturn) __attribute__ ((__nothrow__)) void __cdecl longjmp(jmp_buf _Buf,int _Value); 215 216#ifdef __cplusplus 217} 218#endif 219 220#pragma pack(pop) 221#endif 222