]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: correct vdsoSP on S390X
authorCherry Mui <cherryyz@google.com>
Thu, 3 Jul 2025 03:26:44 +0000 (23:26 -0400)
committerCherry Mui <cherryyz@google.com>
Fri, 4 Jul 2025 01:43:56 +0000 (18:43 -0700)
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>

src/runtime/sys_linux_s390x.s

index 2f9d4beda82f64382956dbd5691f4ed8e0e7bf1f..a3472a4508720b473017b35c38104bb6391066fa 100644 (file)
@@ -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)