diff options
| author | qmuntal <quimmuntal@gmail.com> | 2025-09-10 16:34:22 +0200 |
|---|---|---|
| committer | Quim Muntal <quimmuntal@gmail.com> | 2025-09-12 08:39:47 -0700 |
| commit | 7acb0d044695ca0fbedf94dca7abfdfd991bc69a (patch) | |
| tree | d1b9769bdb0c9eec3b9c028f79bf2dbdc17ca99a /src/runtime/sys_darwin_arm64.s | |
| parent | 60c1ee91834d6c9701c5058830645da6eaa0cee9 (diff) | |
| download | go-7acb0d044695ca0fbedf94dca7abfdfd991bc69a.tar.xz | |
runtime: fix syscall9 on darwin/arm64
The aarch64 ABI says that only the first 8 arguments should be
passed as registers, subsequent arguments should be put on
the stack.
Syscall9 is not putting the 9th argument on the stack, and it should.
The standard library hasn't hit this issue because it uses Syscall9
for functions that only require 7 or 8 parameters.
Change-Id: I1fafca5b16f977ea856e3f08b4ff3d0a2a7a4dfe
Reviewed-on: https://go-review.googlesource.com/c/go/+/702297
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/runtime/sys_darwin_arm64.s')
| -rw-r--r-- | src/runtime/sys_darwin_arm64.s | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/src/runtime/sys_darwin_arm64.s b/src/runtime/sys_darwin_arm64.s index 788fdf87b7..a3901bdb3b 100644 --- a/src/runtime/sys_darwin_arm64.s +++ b/src/runtime/sys_darwin_arm64.s @@ -724,13 +724,9 @@ TEXT runtime·syscall9(SB),NOSPLIT,$0 MOVD 56(R0), R6 // a7 MOVD 64(R0), R7 // a8 MOVD 72(R0), R8 // a9 + MOVD R8, 0(RSP) // the 9th arg and onwards must be passed on the stack MOVD 8(R0), R0 // a1 - // If fn is declared as vararg, we have to pass the vararg arguments on the stack. - // See syscall above. The only function this applies to is openat, for which the 4th - // arg must be on the stack. - MOVD R3, (RSP) - BL (R12) MOVD 8(RSP), R2 // pop structure pointer |
