1*c9945492SAndroid Build Coastguard Worker #ifndef _SETJMP_H 2*c9945492SAndroid Build Coastguard Worker #define _SETJMP_H 3*c9945492SAndroid Build Coastguard Worker 4*c9945492SAndroid Build Coastguard Worker #ifdef __cplusplus 5*c9945492SAndroid Build Coastguard Worker extern "C" { 6*c9945492SAndroid Build Coastguard Worker #endif 7*c9945492SAndroid Build Coastguard Worker 8*c9945492SAndroid Build Coastguard Worker #include <features.h> 9*c9945492SAndroid Build Coastguard Worker 10*c9945492SAndroid Build Coastguard Worker #include <bits/setjmp.h> 11*c9945492SAndroid Build Coastguard Worker 12*c9945492SAndroid Build Coastguard Worker typedef struct __jmp_buf_tag { 13*c9945492SAndroid Build Coastguard Worker __jmp_buf __jb; 14*c9945492SAndroid Build Coastguard Worker unsigned long __fl; 15*c9945492SAndroid Build Coastguard Worker unsigned long __ss[128/sizeof(long)]; 16*c9945492SAndroid Build Coastguard Worker } jmp_buf[1]; 17*c9945492SAndroid Build Coastguard Worker 18*c9945492SAndroid Build Coastguard Worker #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) 19*c9945492SAndroid Build Coastguard Worker #define __setjmp_attr __attribute__((__returns_twice__)) 20*c9945492SAndroid Build Coastguard Worker #else 21*c9945492SAndroid Build Coastguard Worker #define __setjmp_attr 22*c9945492SAndroid Build Coastguard Worker #endif 23*c9945492SAndroid Build Coastguard Worker 24*c9945492SAndroid Build Coastguard Worker #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ 25*c9945492SAndroid Build Coastguard Worker || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ 26*c9945492SAndroid Build Coastguard Worker || defined(_BSD_SOURCE) 27*c9945492SAndroid Build Coastguard Worker typedef jmp_buf sigjmp_buf; 28*c9945492SAndroid Build Coastguard Worker int sigsetjmp (sigjmp_buf, int) __setjmp_attr; 29*c9945492SAndroid Build Coastguard Worker _Noreturn void siglongjmp (sigjmp_buf, int); 30*c9945492SAndroid Build Coastguard Worker #endif 31*c9945492SAndroid Build Coastguard Worker 32*c9945492SAndroid Build Coastguard Worker #if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ 33*c9945492SAndroid Build Coastguard Worker || defined(_BSD_SOURCE) 34*c9945492SAndroid Build Coastguard Worker int _setjmp (jmp_buf) __setjmp_attr; 35*c9945492SAndroid Build Coastguard Worker _Noreturn void _longjmp (jmp_buf, int); 36*c9945492SAndroid Build Coastguard Worker #endif 37*c9945492SAndroid Build Coastguard Worker 38*c9945492SAndroid Build Coastguard Worker int setjmp (jmp_buf) __setjmp_attr; 39*c9945492SAndroid Build Coastguard Worker _Noreturn void longjmp (jmp_buf, int); 40*c9945492SAndroid Build Coastguard Worker 41*c9945492SAndroid Build Coastguard Worker #define setjmp setjmp 42*c9945492SAndroid Build Coastguard Worker 43*c9945492SAndroid Build Coastguard Worker #undef __setjmp_attr 44*c9945492SAndroid Build Coastguard Worker 45*c9945492SAndroid Build Coastguard Worker #ifdef __cplusplus 46*c9945492SAndroid Build Coastguard Worker } 47*c9945492SAndroid Build Coastguard Worker #endif 48*c9945492SAndroid Build Coastguard Worker 49*c9945492SAndroid Build Coastguard Worker #endif 50