This is required to make cgo export work on Darwin. Note that
this corrects the stack alignment when calling initcgo to that
required by gcc on amd64.
R=rsc
CC=golang-dev
https://golang.org/cl/907041
MOVQ 0(DI), AX // argc
LEAQ 8(DI), BX // argv
SUBQ $(4*8+7), SP // 2args 2auto
- ANDQ $~7, SP
+ ANDQ $~15, SP
MOVQ AX, 16(SP)
MOVQ BX, 24(SP)
+ // if there is an initcgo, call it.
+ MOVQ initcgo(SB), AX
+ TESTQ AX, AX
+ JZ 2(PC)
+ CALL AX
+
// set the per-goroutine and per-mach registers
LEAQ m0(SB), m
LEAQ g0(SB), g
MOVQ sp+0(FP), AX
RET
+GLOBL initcgo(SB), $8
GLOBL libcgo_set_scheduler(SB), $8
// Darwin and Linux use the same linkage to main
TEXT _rt0_amd64_linux(SB),7,$-8
- MOVQ initcgo(SB), AX
- TESTQ AX, AX
- JZ 2(PC)
- CALL AX
-
MOVQ $_rt0_amd64(SB), AX
MOVQ SP, DI
JMP AX
-
-GLOBL initcgo(SB), $8