summaryrefslogtreecommitdiff
path: root/arch/sandbox/include/asm/setjmp.h
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2018-05-16 09:42:22 -0600
committerAlexander Graf <agraf@suse.de>2018-06-03 15:27:21 +0200
commit30eef21fa041635fb8327ef9001d78cb187c359f (patch)
tree0945455a7afbc64b4636329b50ac62d58db979cb /arch/sandbox/include/asm/setjmp.h
parent0864c565a274ddbc23dda667d71524e7efbbef8f (diff)
sandbox: Add a setjmp() implementation
Add an implementation of setjmp() and longjmp() which rely on the underlying host C library. Since we cannot know how large the jump buffer needs to be, pick something that should be suitable and check it at runtime. At present we need access to the underlying struct as well. Signed-off-by: Simon Glass <sjg@chromium.org> Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'arch/sandbox/include/asm/setjmp.h')
-rw-r--r--arch/sandbox/include/asm/setjmp.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/arch/sandbox/include/asm/setjmp.h b/arch/sandbox/include/asm/setjmp.h
new file mode 100644
index 00000000000..0fb1a11f234
--- /dev/null
+++ b/arch/sandbox/include/asm/setjmp.h
@@ -0,0 +1,30 @@
+// 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];
+
+int setjmp(jmp_buf jmp);
+__noreturn void longjmp(jmp_buf jmp, int ret);
+
+#endif /* _SETJMP_H_ */