Skip to content

Commit 8ff45d1

Browse files
randall77cagedmantis
authored andcommitted
[release-branch.go1.23] runtime: fix 9-arg syscall on darwin/amd64
The last 3 arguments need to be passed on the stack, not registers. Fixes #73380 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]> (cherry picked from commit 9d7de04) Reviewed-on: https://go-review.googlesource.com/c/go/+/666015
1 parent 96537d5 commit 8ff45d1

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
@@ -739,23 +739,26 @@ ok:
739739
//
740740
// syscall9 expects a 32-bit result and tests for 32-bit -1
741741
// to decide there was an error.
742-
TEXT runtime·syscall9(SB),NOSPLIT,$16
742+
TEXT runtime·syscall9(SB),NOSPLIT,$32
743743
MOVQ (0*8)(DI), R13// fn
744744
MOVQ (2*8)(DI), SI // a2
745745
MOVQ (3*8)(DI), DX // a3
746746
MOVQ (4*8)(DI), CX // a4
747747
MOVQ (5*8)(DI), R8 // a5
748748
MOVQ (6*8)(DI), R9 // a6
749749
MOVQ (7*8)(DI), R10 // a7
750+
MOVQ R10, 0(SP)
750751
MOVQ (8*8)(DI), R11 // a8
752+
MOVQ R11, 8(SP)
751753
MOVQ (9*8)(DI), R12 // a9
752-
MOVQ DI, (SP)
754+
MOVQ R12, 16(SP)
755+
MOVQ DI, 24(SP)
753756
MOVQ (1*8)(DI), DI // a1
754757
XORL AX, AX // vararg: say "no float args"
755758

756759
CALL R13
757760

758-
MOVQ (SP), DI
761+
MOVQ 24(SP), DI
759762
MOVQ AX, (10*8)(DI) // r1
760763
MOVQ DX, (11*8)(DI) // r2
761764

@@ -764,7 +767,7 @@ TEXT runtime·syscall9(SB),NOSPLIT,$16
764767

765768
CALL libc_error(SB)
766769
MOVLQSX (AX), AX
767-
MOVQ (SP), DI
770+
MOVQ 24(SP), DI
768771
MOVQ AX, (12*8)(DI) // err
769772

770773
ok:

0 commit comments

Comments
 (0)