1// Copyright 2009 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5#include "textflag.h"
6
7TEXT _rt0_386_darwin(SB),NOSPLIT,$8
8	MOVL	8(SP), AX
9	LEAL	12(SP), BX
10	MOVL	AX, 0(SP)
11	MOVL	BX, 4(SP)
12	CALL	main(SB)
13	INT	$3
14
15// With -buildmode=c-archive, this symbol is called from a global constructor.
16TEXT _rt0_386_darwin_lib(SB),NOSPLIT,$0
17	PUSHL	BP
18	MOVL	SP, BP
19	PUSHL	BX
20	PUSHL	SI
21	PUSHL	DI
22
23	MOVL	8(BP), AX
24	MOVL	AX, _rt0_386_darwin_lib_argc<>(SB)
25	MOVL	12(BP), AX
26	MOVL	AX, _rt0_386_darwin_lib_argv<>(SB)
27
28	// Synchronous initialization.
29	MOVL	$runtime·libpreinit(SB), AX
30	CALL	AX
31
32	SUBL	$12, SP
33
34	// Create a new thread to do the runtime initialization and return.
35	MOVL	_cgo_sys_thread_create(SB), AX
36	TESTL	AX, AX
37	JZ	nocgo
38	MOVL	$_rt0_386_darwin_lib_go(SB), BX
39	MOVL	BX, 0(SP)
40	MOVL	$0, 4(SP)
41	CALL	AX
42	JMP     restore
43
44nocgo:
45	MOVL	$0x800000, 0(SP)               // stacksize = 8192KB
46	MOVL	$_rt0_386_darwin_lib_go(SB), AX
47	MOVL	AX, 4(SP)                      // fn
48	MOVL	$0, 8(SP)                      // fnarg
49	MOVL	$runtime·newosproc0(SB), AX
50	CALL	AX
51
52restore:
53	ADDL	$12, SP
54	POPL	DI
55	POPL	SI
56	POPL	BX
57	POPL	BP
58	RET
59
60TEXT _rt0_386_darwin_lib_go(SB),NOSPLIT,$12
61	MOVL	_rt0_386_darwin_lib_argc<>(SB), AX
62	MOVL	AX, 0(SP)
63	MOVL	_rt0_386_darwin_lib_argv<>(SB), AX
64	MOVL	AX, 4(SP)
65	MOVL	$runtime·rt0_go(SB), AX
66	CALL	AX
67	RET
68
69DATA _rt0_386_darwin_lib_argc<>(SB)/4, $0
70GLOBL _rt0_386_darwin_lib_argc<>(SB),NOPTR, $4
71DATA _rt0_386_darwin_lib_argv<>(SB)/4, $0
72GLOBL _rt0_386_darwin_lib_argv<>(SB),NOPTR, $4
73
74TEXT main(SB),NOSPLIT,$0
75	JMP	runtime·rt0_go(SB)
76