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 <drchase@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
Cherry Mui 2025-07-02 23:26:44 -04:00
parent dd687c3860
commit 6c3b5a2798

View file

@ -226,7 +226,7 @@ TEXT runtime·walltime(SB),NOSPLIT,$32-12
MOVD R4, 24(R15) MOVD R4, 24(R15)
MOVD R14, R8 // Backup return address 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 R8, m_vdsoPC(R6)
MOVD R4, m_vdsoSP(R6) MOVD R4, m_vdsoSP(R6)
@ -312,7 +312,7 @@ TEXT runtime·nanotime1(SB),NOSPLIT,$32-8
MOVD R4, 24(R15) MOVD R4, 24(R15)
MOVD R14, R8 // Backup return address 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 R8, m_vdsoPC(R6)
MOVD R4, m_vdsoSP(R6) MOVD R4, m_vdsoSP(R6)