summaryrefslogtreecommitdiff
path: root/include/arch/aarch64/setjmp.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/arch/aarch64/setjmp.h')
-rw-r--r--include/arch/aarch64/setjmp.h38
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 */