aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/internal
diff options
context:
space:
mode:
authorPaul E. Murphy <murp@ibm.com>2022-02-14 17:15:05 -0600
committerPaul Murphy <murp@ibm.com>2022-03-03 17:28:58 +0000
commit78070ec3d44fdd8e60271abf31f056aeac919cc3 (patch)
treea46c75eac18f0f6daf7604c3f313fd8a554b2bc2 /src/runtime/internal
parentef92828bb9ffd77d6f08e402225557256b11cfad (diff)
downloadgo-78070ec3d44fdd8e60271abf31f056aeac919cc3.tar.xz
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>
Diffstat (limited to 'src/runtime/internal')
-rw-r--r--src/runtime/internal/syscall/asm_linux_ppc64x.s3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/runtime/internal/syscall/asm_linux_ppc64x.s b/src/runtime/internal/syscall/asm_linux_ppc64x.s
index 8e8463810d..8cf8737df8 100644
--- a/src/runtime/internal/syscall/asm_linux_ppc64x.s
+++ b/src/runtime/internal/syscall/asm_linux_ppc64x.s
@@ -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