Skip to content
Snippets Groups Projects
  • Alexander Graf's avatar
    3fcb7147
    sandbox: Fix setjmp/longjmp · 3fcb7147
    Alexander Graf authored
    
    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: default avatarAlexander Graf <agraf@suse.de>
    Reviewed-by: default avatarSimon Glass <sjg@chromium.org>
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    3fcb7147
    History
    sandbox: Fix setjmp/longjmp
    Alexander Graf authored
    
    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: default avatarAlexander Graf <agraf@suse.de>
    Reviewed-by: default avatarSimon Glass <sjg@chromium.org>
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
setjmp.h 773 B