Skip to content

Commit 9d7de04

Browse files
committed
runtime: fix 9-arg syscall on darwin/amd64
The last 3 arguments need to be passed on the stack, not registers. Fixes #71302 Change-Id: Ib1155ad1a805957fad3d9594c93981a558755591 Reviewed-on: https://go-review.googlesource.com/c/go/+/665435 Reviewed-by: Michael Pratt <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Keith Randall <[email protected]>
1 parent 2c9689a commit 9d7de04

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

src/runtime/sys_darwin_amd64.s

+7-4
Original file line numberDiff line numberDiff line change
@@ -745,23 +745,26 @@ ok:
745745
//
746746
// syscall9 expects a 32-bit result and tests for 32-bit -1
747747
// to decide there was an error.
748-
TEXT runtime·syscall9(SB),NOSPLIT,$16
748+
TEXT runtime·syscall9(SB),NOSPLIT,$32
749749
MOVQ (0*8)(DI), R13// fn
750750
MOVQ (2*8)(DI), SI // a2
751751
MOVQ (3*8)(DI), DX // a3
752752
MOVQ (4*8)(DI), CX // a4
753753
MOVQ (5*8)(DI), R8 // a5
754754
MOVQ (6*8)(DI), R9 // a6
755755
MOVQ (7*8)(DI), R10 // a7
756+
MOVQ R10, 0(SP)
756757
MOVQ (8*8)(DI), R11 // a8
758+
MOVQ R11, 8(SP)
757759
MOVQ (9*8)(DI), R12 // a9
758-
MOVQ DI, (SP)
760+
MOVQ R12, 16(SP)
761+
MOVQ DI, 24(SP)
759762
MOVQ (1*8)(DI), DI // a1
760763
XORL AX, AX // vararg: say "no float args"
761764

762765
CALL R13
763766

764-
MOVQ (SP), DI
767+
MOVQ 24(SP), DI
765768
MOVQ AX, (10*8)(DI) // r1
766769
MOVQ DX, (11*8)(DI) // r2
767770

@@ -770,7 +773,7 @@ TEXT runtime·syscall9(SB),NOSPLIT,$16
770773

771774
CALL libc_error(SB)
772775
MOVLQSX (AX), AX
773-
MOVQ (SP), DI
776+
MOVQ 24(SP), DI
774777
MOVQ AX, (12*8)(DI) // err
775778

776779
ok:

0 commit comments

Comments
 (0)