aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAlexander Graf2018-06-22 14:44:12 +0200
committerAlexander Graf2018-09-23 21:55:30 +0200
commit3fcb7147584f8cf5128e1c5eb6b7e49dd86a5473 (patch)
treecfb9d1d68617f94ae1ff2f17c949fc6498689695 /include
parentaaace4b0860fbe22b2b08f761b3c6ea12af94d5e (diff)
sandbox: Fix setjmp/longjmp
In sandbox, longjmp returns to itself in an endless loop because os_longjmp() calls into longjmp() which is provided by U-Boot which again calls os_longjmp(). Setjmp on the other hand must not return because otherwise the return freees up stack elements that we need during longjmp(). The only straight forward fix that doesn't involve nasty hacks I could find is to directly link against the system setjmp/longjmp implementations. That means we just provide the compiler with hints that the symbol will be available and actually fill them out with versions from libc. This approach should be reasonably platform agnostic Signed-off-by: Alexander Graf <agraf@suse.de> Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'include')
-rw-r--r--include/os.h21
1 files changed, 0 insertions, 21 deletions
diff --git a/include/os.h b/include/os.h
index e850f879ec3..5c797212c25 100644
--- a/include/os.h
+++ b/include/os.h
@@ -331,27 +331,6 @@ 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);
-
-/**
* os_abort() - Raise SIGABRT to exit sandbox (e.g. to debugger)
*/
void os_abort(void);