]> git.baikalelectronics.ru Git - uboot.git/commit
sandbox: Fix setjmp/longjmp
authorAlexander Graf <agraf@suse.de>
Fri, 22 Jun 2018 12:44:12 +0000 (14:44 +0200)
committerAlexander Graf <agraf@suse.de>
Sun, 23 Sep 2018 19:55:30 +0000 (21:55 +0200)
commitabb59947e98b0b4102233b20fd0293647714a8ee
treecfb9d1d68617f94ae1ff2f17c949fc6498689695
parentdc3e8944ea9d375ea0d7fa9cfdec4abbc1af1123
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>
arch/sandbox/cpu/cpu.c
arch/sandbox/cpu/os.c
arch/sandbox/include/asm/setjmp.h
include/os.h