[PATCH 1/2] x86: fix longjmp() implementation

Simon Glass sjg at chromium.org
Mon Oct 3 03:10:36 CEST 2022


On Sat, 1 Oct 2022 at 07:05, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> If longjmp(jmp_buf env, int val) is called with val = 0, the setjmp()
> macro must return 1.
>
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> ---
>  arch/x86/cpu/i386/setjmp.S | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/arch/x86/cpu/i386/setjmp.S b/arch/x86/cpu/i386/setjmp.S
> index 40b10dc8df..eceeafa7c8 100644
> --- a/arch/x86/cpu/i386/setjmp.S
> +++ b/arch/x86/cpu/i386/setjmp.S
> @@ -49,12 +49,17 @@ longjmp:
>         xchgl %eax, %edx
>  #else
>         movl 4(%esp), %edx      /* jmp_ptr address */
> +       movl 8(%esp), %eax      /* Return value */
>  #endif
>         movl (%edx), %ebx
>         movl 4(%edx), %esp
>         movl 8(%edx), %ebp
>         movl 12(%edx), %esi
>         movl 16(%edx), %edi
> +       test %eax, %eax
> +       jnz nz
> +       inc %eax
> +nz:
>         jmp *20(%edx)
>
>         .size longjmp, .-longjmp
> --
> 2.37.2
>

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


More information about the U-Boot mailing list