From: Cherry Mui Date: Thu, 3 Jul 2025 03:26:44 +0000 (-0400) Subject: runtime: correct vdsoSP on S390X X-Git-Tag: go1.25rc3~5^2~51 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6c3b5a2798c83d583cb37dba9f39c47300d19f1f;p=gostls13.git runtime: correct vdsoSP on S390X It should get the caller's SP. The current code gets the address of the first parameter, which is one word above the caller's SP. There is a slot for saving the LR at 0(SP) in the caller's frame. Fixes #62086 (for s390x). Change-Id: Ie8cbfabc8161b98658c884a32e0af72df189ea56 Reviewed-on: https://go-review.googlesource.com/c/go/+/685715 Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI --- diff --git a/src/runtime/sys_linux_s390x.s b/src/runtime/sys_linux_s390x.s index 2f9d4beda8..a3472a4508 100644 --- a/src/runtime/sys_linux_s390x.s +++ b/src/runtime/sys_linux_s390x.s @@ -226,7 +226,7 @@ TEXT runtime·walltime(SB),NOSPLIT,$32-12 MOVD R4, 24(R15) MOVD R14, R8 // Backup return address - MOVD $sec+0(FP), R4 // return parameter caller + MOVD $ret-8(FP), R4 // caller's SP MOVD R8, m_vdsoPC(R6) MOVD R4, m_vdsoSP(R6) @@ -312,7 +312,7 @@ TEXT runtime·nanotime1(SB),NOSPLIT,$32-8 MOVD R4, 24(R15) MOVD R14, R8 // Backup return address - MOVD $ret+0(FP), R4 // caller's SP + MOVD $ret-8(FP), R4 // caller's SP MOVD R8, m_vdsoPC(R6) MOVD R4, m_vdsoSP(R6)