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