Home | History | Annotate | Download | only in runtime
      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 
      7 TEXT _rt0_amd64_darwin(SB),NOSPLIT,$-8
      8 	LEAQ	8(SP), SI // argv
      9 	MOVQ	0(SP), DI // argc
     10 	MOVQ	$main(SB), AX
     11 	JMP	AX
     12 
     13 // When linking with -shared, this symbol is called when the shared library
     14 // is loaded.
     15 TEXT _rt0_amd64_darwin_lib(SB),NOSPLIT,$0x58
     16 	// Align stack. We don't know whether Go is adding a frame pointer here or not.
     17 	MOVQ	SP, R8
     18 	SUBQ	$16, R8
     19 	ANDQ	$~15, R8
     20 	XCHGQ	SP, R8
     21 
     22 	MOVQ	R8, 0x48(SP)
     23 	MOVQ	BX, 0x18(SP)
     24 	MOVQ	BP, 0x20(SP)
     25 	MOVQ	R12, 0x28(SP)
     26 	MOVQ	R13, 0x30(SP)
     27 	MOVQ	R14, 0x38(SP)
     28 	MOVQ	R15, 0x40(SP)
     29 
     30 	MOVQ	DI, _rt0_amd64_darwin_lib_argc<>(SB)
     31 	MOVQ	SI, _rt0_amd64_darwin_lib_argv<>(SB)
     32 
     33 	// Synchronous initialization.
     34 	MOVQ	$runtimelibpreinit(SB), AX
     35 	CALL	AX
     36 
     37 	// Create a new thread to do the runtime initialization and return.
     38 	MOVQ	_cgo_sys_thread_create(SB), AX
     39 	TESTQ	AX, AX
     40 	JZ	nocgo
     41 	MOVQ	$_rt0_amd64_darwin_lib_go(SB), DI
     42 	MOVQ	$0, SI
     43 	CALL	AX
     44 	JMP	restore
     45 
     46 nocgo:
     47 	MOVQ	$8388608, 0(SP)                    // stacksize
     48 	MOVQ	$_rt0_amd64_darwin_lib_go(SB), AX
     49 	MOVQ	AX, 8(SP)                          // fn
     50 	MOVQ	$0, 16(SP)                         // fnarg
     51 	MOVQ	$runtimenewosproc0(SB), AX
     52 	CALL	AX
     53 
     54 restore:
     55 	MOVQ	0x18(SP), BX
     56 	MOVQ	0x20(SP), BP
     57 	MOVQ	0x28(SP), R12
     58 	MOVQ	0x30(SP), R13
     59 	MOVQ	0x38(SP), R14
     60 	MOVQ	0x40(SP), R15
     61 
     62 	MOVQ	0x48(SP), R8
     63 	MOVQ	R8, SP
     64 	RET
     65 
     66 TEXT _rt0_amd64_darwin_lib_go(SB),NOSPLIT,$0
     67 	MOVQ	_rt0_amd64_darwin_lib_argc<>(SB), DI
     68 	MOVQ	_rt0_amd64_darwin_lib_argv<>(SB), SI
     69 	MOVQ	$runtimert0_go(SB), AX
     70 	JMP	AX
     71 
     72 DATA _rt0_amd64_darwin_lib_argc<>(SB)/8, $0
     73 GLOBL _rt0_amd64_darwin_lib_argc<>(SB),NOPTR, $8
     74 DATA _rt0_amd64_darwin_lib_argv<>(SB)/8, $0
     75 GLOBL _rt0_amd64_darwin_lib_argv<>(SB),NOPTR, $8
     76 
     77 TEXT main(SB),NOSPLIT,$-8
     78 	MOVQ	$runtimert0_go(SB), AX
     79 	JMP	AX
     80