xref: /openbmc/linux/arch/um/include/shared/longjmp.h (revision c3d5f267)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
28569c914SAl Viro #ifndef __UML_LONGJMP_H
38569c914SAl Viro #define __UML_LONGJMP_H
48569c914SAl Viro 
537185b33SAl Viro #include <sysdep/archsetjmp.h>
637185b33SAl Viro #include <os.h>
78569c914SAl Viro 
8fbb42e7fSJohannes Berg extern int signals_enabled;
98569c914SAl Viro extern int setjmp(jmp_buf);
108569c914SAl Viro extern void longjmp(jmp_buf, int);
118569c914SAl Viro 
128569c914SAl Viro #define UML_LONGJMP(buf, val) do { \
138569c914SAl Viro 	longjmp(*buf, val);	\
148569c914SAl Viro } while(0)
158569c914SAl Viro 
168569c914SAl Viro #define UML_SETJMP(buf) ({				\
17fbb42e7fSJohannes Berg 	int n, enable;					\
18fbb42e7fSJohannes Berg 	enable = *(volatile int *)&signals_enabled;	\
198569c914SAl Viro 	n = setjmp(*buf);				\
208569c914SAl Viro 	if(n != 0)					\
21*c3d5f267SJohannes Berg 		um_set_signals_trace(enable);		\
228569c914SAl Viro 	n; })
238569c914SAl Viro 
248569c914SAl Viro #endif
25