Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
| 2 | #ifndef __UML_LONGJMP_H |
| 3 | #define __UML_LONGJMP_H |
| 4 | |
| 5 | #include <sysdep/archsetjmp.h> |
| 6 | #include <os.h> |
| 7 | |
| 8 | extern int setjmp(jmp_buf); |
| 9 | extern void longjmp(jmp_buf, int); |
| 10 | |
| 11 | #define UML_LONGJMP(buf, val) do { \ |
| 12 | longjmp(*buf, val); \ |
| 13 | } while(0) |
| 14 | |
| 15 | #define UML_SETJMP(buf) ({ \ |
| 16 | int n; \ |
| 17 | volatile int enable; \ |
| 18 | enable = get_signals(); \ |
| 19 | n = setjmp(*buf); \ |
| 20 | if(n != 0) \ |
David Brazdil | 0f672f6 | 2019-12-10 10:32:29 +0000 | [diff] [blame^] | 21 | set_signals_trace(enable); \ |
Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame] | 22 | n; }) |
| 23 | |
| 24 | #endif |