summaryrefslogtreecommitdiff
path: root/include/os.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 /include/os.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 'include/os.h')
-rw-r--r--include/os.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/include/os.h b/include/os.h
index 64e89a06c9..c8e0f52d30 100644
--- a/include/os.h
+++ b/include/os.h
@@ -330,4 +330,25 @@ int os_spl_to_uboot(const char *fname);
*/
void os_localtime(struct rtc_time *rt);
+/**
+ * os_setjmp() - Call setjmp()
+ *
+ * Call the host system's setjmp() function.
+ *
+ * @jmp: Buffer to store current execution state
+ * @size: Size of buffer
+ * @return normal setjmp() value if OK, -ENOSPC if @size is too small
+ */
+int os_setjmp(ulong *jmp, int size);
+
+/**
+ * os_longjmp() - Call longjmp()
+ *
+ * Call the host system's longjmp() function.
+ *
+ * @jmp: Buffer where previous execution state was stored
+ * @ret: Value to pass to longjmp()
+ */
+void os_longjmp(ulong *jmp, int ret);
+
#endif