github.com/riscv/riscv-go@v0.0.0-20200123204226-124ebd6fcc8e/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  // Note: This function calls external C code, which might required 16-byte stack
    16  // alignment after cmd/internal/obj applies its transformations.
    17  TEXT _rt0_amd64_linux_lib(SB),NOSPLIT,$0x50
    18  	MOVQ	SP, AX
    19  	ANDQ	$-16, SP
    20  	MOVQ	BX, 0x10(SP)
    21  	MOVQ	BP, 0x18(SP)
    22  	MOVQ	R12, 0x20(SP)
    23  	MOVQ	R13, 0x28(SP)
    24  	MOVQ	R14, 0x30(SP)
    25  	MOVQ	R15, 0x38(SP)
    26  	MOVQ	AX, 0x40(SP)
    27  
    28  	MOVQ	DI, _rt0_amd64_linux_lib_argc<>(SB)
    29  	MOVQ	SI, _rt0_amd64_linux_lib_argv<>(SB)
    30  
    31  	// Synchronous initialization.
    32  	MOVQ	$runtime·libpreinit(SB), AX
    33  	CALL	AX
    34  
    35  	// Create a new thread to do the runtime initialization and return.
    36  	MOVQ	_cgo_sys_thread_create(SB), AX
    37  	TESTQ	AX, AX
    38  	JZ	nocgo
    39  	MOVQ	$_rt0_amd64_linux_lib_go(SB), DI
    40  	MOVQ	$0, SI
    41  	CALL	AX
    42  	JMP	restore
    43  
    44  nocgo:
    45  	MOVQ	$8388608, 0(SP)                    // stacksize
    46  	MOVQ	$_rt0_amd64_linux_lib_go(SB), AX
    47  	MOVQ	AX, 8(SP)                          // fn
    48  	MOVQ	$runtime·newosproc0(SB), AX
    49  	CALL	AX
    50  
    51  restore:
    52  	MOVQ	0x10(SP), BX
    53  	MOVQ	0x18(SP), BP
    54  	MOVQ	0x20(SP), R12
    55  	MOVQ	0x28(SP), R13
    56  	MOVQ	0x30(SP), R14
    57  	MOVQ	0x38(SP), R15
    58  	MOVQ	0x40(SP), SP
    59  	RET
    60  
    61  TEXT _rt0_amd64_linux_lib_go(SB),NOSPLIT,$0
    62  	MOVQ	_rt0_amd64_linux_lib_argc<>(SB), DI
    63  	MOVQ	_rt0_amd64_linux_lib_argv<>(SB), SI
    64  	MOVQ	$runtime·rt0_go(SB), AX
    65  	JMP	AX
    66  
    67  DATA _rt0_amd64_linux_lib_argc<>(SB)/8, $0
    68  GLOBL _rt0_amd64_linux_lib_argc<>(SB),NOPTR, $8
    69  DATA _rt0_amd64_linux_lib_argv<>(SB)/8, $0
    70  GLOBL _rt0_amd64_linux_lib_argv<>(SB),NOPTR, $8
    71  
    72  TEXT main(SB),NOSPLIT,$-8
    73  	MOVQ	$runtime·rt0_go(SB), AX
    74  	JMP	AX