[U-Boot] [PATCH v5 04/10] sandbox: Fix setjmp/longjmp

Simon Glass sjg at chromium.org
Fri Jun 22 19:28:54 UTC 2018


Hi Alex,

On 22 June 2018 at 06:44, Alexander Graf <agraf at suse.de> wrote:
> 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 at suse.de>
>
> ---
>
> v4 -> v5:
>
>   - Use system setjmp/longjmp directly from target code
> ---
>  arch/sandbox/cpu/cpu.c            | 12 ------------
>  arch/sandbox/cpu/os.c             | 22 ----------------------
>  arch/sandbox/include/asm/setjmp.h |  5 +++++
>  include/os.h                      | 21 ---------------------
>  4 files changed, 5 insertions(+), 55 deletions(-)

I was wondering if that would work. It seems much better to me.

Reviewed-by: Simon Glass <sjg at chromium.org>

Regards,
Simon


More information about the U-Boot mailing list