#ifndef _SETJMP_H #define _SETJMP_H 1 // https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/setjmp.h.html #include __BEGIN_DECLS #if defined(__x86_64__) #define _JMP_BUF_REGS 8 // rsp, rip, rbx, rbp, r12-r15 #elif defined(__i686__) #define _JMP_BUF_REGS 6 // esp, eip, ebx, ebp, edi, esi #endif typedef long jmp_buf[_JMP_BUF_REGS]; typedef long sigjmp_buf[_JMP_BUF_REGS + 1 + (sizeof(long long) / sizeof(long))]; #define _longjmp longjmp void longjmp(jmp_buf env, int val); void siglongjmp(sigjmp_buf env, int val); #define _setjmp setjmp int setjmp(jmp_buf env); int sigsetjmp(sigjmp_buf env, int savemask); __END_DECLS #endif