diff options
Diffstat (limited to 'include/arch/aarch64/setjmp.h')
-rw-r--r-- | include/arch/aarch64/setjmp.h | 38 |
1 files changed, 6 insertions, 32 deletions
diff --git a/include/arch/aarch64/setjmp.h b/include/arch/aarch64/setjmp.h index bbfe1df4..f7991fdd 100644 --- a/include/arch/aarch64/setjmp.h +++ b/include/arch/aarch64/setjmp.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -14,46 +14,20 @@ #define JMP_CTX_X27 0x40 #define JMP_CTX_X29 0x50 #define JMP_CTX_SP 0x60 -#define JMP_CTX_END 0x70 +#define JMP_CTX_END 0x70 /* Aligned to 16 bytes */ #define JMP_SIZE (JMP_CTX_END >> 3) #ifndef __ASSEMBLY__ +#include <cdefs.h> #include <stdint.h> /* Jump buffer hosting x18 - x30 and sp_el0 registers */ -struct jmpbuf { - uint64_t buf[JMP_SIZE]; -} __aligned(16); +typedef uint64_t jmp_buf[JMP_SIZE] __aligned(16); - -/* - * Set a jump point, and populate the jump buffer with context information so - * that longjmp() can jump later. The caller must adhere to the following - * conditions: - * - * - After calling this function, the stack must not be shrunk. The contents of - * the stack must not be changed either. - * - * - If the caller were to 'return', the buffer must be considered invalid, and - * must not be used with longjmp(). - * - * The caller will observe this function returning at two distinct - * circumstances, each with different return values: - * - * - Zero, when the buffer is setup; - * - * - Non-zero, when a call to longjmp() is made (presumably by one of the - * callee functions) with the same jump buffer. - */ -int setjmp(struct jmpbuf *buf); - -/* - * Reset execution to a jump point, and restore context information according to - * the jump buffer populated by setjmp(). - */ -void longjmp(struct jmpbuf *buf); +int setjmp(jmp_buf env); +__dead2 void longjmp(jmp_buf env, int val); #endif /* __ASSEMBLY__ */ #endif /* SETJMP_H */ |