2018-06-03 20:10:22 +00:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
2018-05-16 15:42:22 +00:00
|
|
|
/*
|
|
|
|
* (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];
|
|
|
|
|
2018-06-22 12:44:12 +00:00
|
|
|
/*
|
|
|
|
* We have to directly link with the system versions of
|
|
|
|
* setjmp/longjmp, because setjmp must not return as otherwise
|
|
|
|
* the stack may become invalid.
|
|
|
|
*/
|
2018-05-16 15:42:22 +00:00
|
|
|
int setjmp(jmp_buf jmp);
|
|
|
|
__noreturn void longjmp(jmp_buf jmp, int ret);
|
|
|
|
|
|
|
|
#endif /* _SETJMP_H_ */
|