syscall, runtime/internal/syscall: always return 0 in r2 on ppc64{,le} linux syscalls

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>
This commit is contained in:
Paul E. Murphy 2022-02-14 17:15:05 -06:00 committed by Paul Murphy
parent ef92828bb9
commit 78070ec3d4
2 changed files with 6 additions and 7 deletions

View 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

View 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