]> Cypherpunks repositories - gostls13.git/commitdiff
syscall, runtime/internal/syscall: always return 0 in r2 on ppc64{,le} linux syscalls
authorPaul E. Murphy <murp@ibm.com>
Mon, 14 Feb 2022 23:15:05 +0000 (17:15 -0600)
committerPaul Murphy <murp@ibm.com>
Thu, 3 Mar 2022 17:28:58 +0000 (17:28 +0000)
Both endians perform syscalls similarly. Only CR0S0 and R3 hold
the resultant status of a syscall. A random value may be stored into
the second return value (r2) result in some cases. Always set it to
zero.

Fixes #51192

Change-Id: Ida6a5692578d2cdadf3099af28478b3bc364f623
Reviewed-on: https://go-review.googlesource.com/c/go/+/385796
Run-TryBot: Paul Murphy <murp@ibm.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
Trust: Paul Murphy <murp@ibm.com>

src/runtime/internal/syscall/asm_linux_ppc64x.s
src/syscall/asm_linux_ppc64x.s

index 8e8463810dcba10889589ae92feaeab640e691e9..8cf8737df884e1ee51bffda4210ebbd0afd82719 100644 (file)
@@ -16,14 +16,13 @@ TEXT ·Syscall6(SB),NOSPLIT,$0-80
        MOVD    a5+40(FP), R7
        MOVD    a6+48(FP), R8
        SYSCALL R9
+       MOVD    R0, r2+64(FP) // r2 is not used. Always set to 0.
        BVC     ok
        MOVD    $-1, R4
        MOVD    R4, r1+56(FP)
-       MOVD    R0, r2+64(FP)
        MOVD    R3, errno+72(FP)
        RET
 ok:
        MOVD    R3, r1+56(FP)
-       MOVD    R4, r2+64(FP)
        MOVD    R0, errno+72(FP)
        RET
index 044a479c00e4883225c18f7161f546498f3d3c09..1f5cb37ffeedabe533b2f0cbefd4c38d8487b7a6 100644 (file)
@@ -30,7 +30,7 @@ TEXT ·Syscall(SB),NOSPLIT,$0-56
        RET
 ok:
        MOVD    R3, r1+32(FP)   // r1
-       MOVD    R4, r2+40(FP)   // r2
+       MOVD    R0, r2+40(FP)   // r2
        MOVD    R0, err+48(FP)  // errno
        BL      runtime·exitsyscall(SB)
        RET
@@ -54,7 +54,7 @@ TEXT ·Syscall6(SB),NOSPLIT,$0-80
        RET
 ok6:
        MOVD    R3, r1+56(FP)   // r1
-       MOVD    R4, r2+64(FP)   // r2
+       MOVD    R0, r2+64(FP)   // r2
        MOVD    R0, err+72(FP)  // errno
        BL      runtime·exitsyscall(SB)
        RET
@@ -76,7 +76,7 @@ TEXT ·RawSyscall(SB),NOSPLIT,$0-56
        RET
 ok1:
        MOVD    R3, r1+32(FP)   // r1
-       MOVD    R4, r2+40(FP)   // r2
+       MOVD    R0, r2+40(FP)   // r2
        MOVD    R0, err+48(FP)  // errno
        RET
 
@@ -97,7 +97,7 @@ TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
        RET
 ok2:
        MOVD    R3, r1+56(FP)   // r1
-       MOVD    R4, r2+64(FP)   // r2
+       MOVD    R0, r2+64(FP)   // r2
        MOVD    R0, err+72(FP)  // errno
        RET
 
@@ -131,5 +131,5 @@ TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
        MOVD    trap+0(FP), R9  // syscall entry
        SYSCALL R9
        MOVD    R3, r1+32(FP)
-       MOVD    R4, r2+40(FP)
+       MOVD    R0, r2+40(FP)
        RET