mirror of
https://github.com/golang/go
synced 2024-09-18 15:32:18 +00:00
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:
parent
ef92828bb9
commit
78070ec3d4
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue