github.com/mdempsky/go@v0.0.0-20151201204031-5dd372bd1e70/src/runtime/rt0_linux_amd64.s (about)

     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_linux(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 building with -buildmode=c-shared, this symbol is called when the shared
    14  // library is loaded.
    15  TEXT _rt0_amd64_linux_lib(SB),NOSPLIT,$0x48
    16  	MOVQ	BX, 0x10(SP)
    17  	MOVQ	BP, 0x18(SP)
    18  	MOVQ	R12, 0x20(SP)
    19  	MOVQ	R13, 0x28(SP)
    20  	MOVQ	R14, 0x30(SP)
    21  	MOVQ	R15, 0x38(SP)
    22  
    23  	MOVQ	DI, _rt0_amd64_linux_lib_argc<>(SB)
    24  	MOVQ	SI, _rt0_amd64_linux_lib_argv<>(SB)
    25  
    26  	// Create a new thread to do the runtime initialization and return.
    27  	MOVQ	_cgo_sys_thread_create(SB), AX
    28  	TESTQ	AX, AX
    29  	JZ	nocgo
    30  	MOVQ	$_rt0_amd64_linux_lib_go(SB), DI
    31  	MOVQ	$0, SI
    32  	CALL	AX
    33  	JMP	restore
    34  
    35  nocgo:
    36  	MOVQ	$8388608, 0(SP)                    // stacksize
    37  	MOVQ	$_rt0_amd64_linux_lib_go(SB), AX
    38  	MOVQ	AX, 8(SP)                          // fn
    39  	MOVQ	$runtime·newosproc0(SB), AX
    40  	CALL	AX
    41  
    42  restore:
    43  	MOVQ	0x10(SP), BX
    44  	MOVQ	0x18(SP), BP
    45  	MOVQ	0x20(SP), R12
    46  	MOVQ	0x28(SP), R13
    47  	MOVQ	0x30(SP), R14
    48  	MOVQ	0x38(SP), R15
    49  	RET
    50  
    51  TEXT _rt0_amd64_linux_lib_go(SB),NOSPLIT,$0
    52  	MOVQ	_rt0_amd64_linux_lib_argc<>(SB), DI
    53  	MOVQ	_rt0_amd64_linux_lib_argv<>(SB), SI
    54  	MOVQ	$runtime·rt0_go(SB), AX
    55  	JMP	AX
    56  
    57  DATA _rt0_amd64_linux_lib_argc<>(SB)/8, $0
    58  GLOBL _rt0_amd64_linux_lib_argc<>(SB),NOPTR, $8
    59  DATA _rt0_amd64_linux_lib_argv<>(SB)/8, $0
    60  GLOBL _rt0_amd64_linux_lib_argv<>(SB),NOPTR, $8
    61  
    62  TEXT main(SB),NOSPLIT,$-8
    63  	MOVQ	$runtime·rt0_go(SB), AX
    64  	JMP	AX