x86: fix longjmp() implementation
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sat, 1 Oct 2022 13:00:21 +0000 (15:00 +0200)
committerSimon Glass <sjg@chromium.org>
Sat, 29 Oct 2022 13:36:33 +0000 (07:36 -0600)
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@canonical.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
arch/x86/cpu/i386/setjmp.S

index 40b10dc..eceeafa 100644 (file)
@@ -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