From: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Date: Sat, 1 Oct 2022 13:00:21 +0000 (+0200)
Subject: x86: fix longjmp() implementation
X-Git-Tag: v2025.01-rc5-pxa1908~1230^2~18
X-Git-Url: http://git.dujemihanovic.xyz/html/static/gitweb.css?a=commitdiff_plain;h=fc872ee84cd5dd3a74bf51ce6519377b0de4940f;p=u-boot.git

x86: fix longjmp() implementation

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>
---

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