1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef __UML_LONGJMP_H 3*4882a593Smuzhiyun #define __UML_LONGJMP_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <sysdep/archsetjmp.h> 6*4882a593Smuzhiyun #include <os.h> 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun extern int setjmp(jmp_buf); 9*4882a593Smuzhiyun extern void longjmp(jmp_buf, int); 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #define UML_LONGJMP(buf, val) do { \ 12*4882a593Smuzhiyun longjmp(*buf, val); \ 13*4882a593Smuzhiyun } while(0) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define UML_SETJMP(buf) ({ \ 16*4882a593Smuzhiyun int n; \ 17*4882a593Smuzhiyun volatile int enable; \ 18*4882a593Smuzhiyun enable = get_signals(); \ 19*4882a593Smuzhiyun n = setjmp(*buf); \ 20*4882a593Smuzhiyun if(n != 0) \ 21*4882a593Smuzhiyun set_signals_trace(enable); \ 22*4882a593Smuzhiyun n; }) 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #endif 25