xref: /openbmc/linux/arch/um/include/shared/longjmp.h (revision 37185b33)
18569c914SAl Viro #ifndef __UML_LONGJMP_H
28569c914SAl Viro #define __UML_LONGJMP_H
38569c914SAl Viro 
437185b33SAl Viro #include <sysdep/archsetjmp.h>
537185b33SAl Viro #include <os.h>
68569c914SAl Viro 
78569c914SAl Viro extern int setjmp(jmp_buf);
88569c914SAl Viro extern void longjmp(jmp_buf, int);
98569c914SAl Viro 
108569c914SAl Viro #define UML_LONGJMP(buf, val) do { \
118569c914SAl Viro 	longjmp(*buf, val);	\
128569c914SAl Viro } while(0)
138569c914SAl Viro 
148569c914SAl Viro #define UML_SETJMP(buf) ({ \
158569c914SAl Viro 	int n;	   \
168569c914SAl Viro 	volatile int enable;	\
178569c914SAl Viro 	enable = get_signals(); \
188569c914SAl Viro 	n = setjmp(*buf); \
198569c914SAl Viro 	if(n != 0) \
208569c914SAl Viro 		set_signals(enable); \
218569c914SAl Viro 	n; })
228569c914SAl Viro 
238569c914SAl Viro #endif
24