/* SPDX-License-Identifier: GPL-2.0+ */ | |
/* | |
* (C) 2018 Google, Inc | |
* Written by Simon Glass <sjg@chromium.org> | |
*/ | |
#ifndef _SETJMP_H_ | |
#define _SETJMP_H_ | |
struct jmp_buf_data { | |
/* | |
* We're not sure how long this should be: | |
* | |
* amd64: 200 bytes | |
* arm64: 392 bytes | |
* armhf: 392 bytes | |
* | |
* So allow space for all of those, plus some extra. | |
* We don't need to worry about 16-byte alignment, since this does not | |
* run on Windows. | |
*/ | |
ulong data[128]; | |
}; | |
typedef struct jmp_buf_data jmp_buf[1]; | |
/* | |
* We have to directly link with the system versions of | |
* setjmp/longjmp, because setjmp must not return as otherwise | |
* the stack may become invalid. | |
*/ | |
int setjmp(jmp_buf jmp); | |
__noreturn void longjmp(jmp_buf jmp, int ret); | |
#endif /* _SETJMP_H_ */ |