|  | // Copyright 2009 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | #include "textflag.h" | 
|  |  | 
|  | TEXT _rt0_amd64_linux(SB),NOSPLIT,$-8 | 
|  | LEAQ	8(SP), SI // argv | 
|  | MOVQ	0(SP), DI // argc | 
|  | MOVQ	$main(SB), AX | 
|  | JMP	AX | 
|  |  | 
|  | // When building with -buildmode=c-shared, this symbol is called when the shared | 
|  | // library is loaded. | 
|  | // Note: This function calls external C code, which might required 16-byte stack | 
|  | // alignment after cmd/internal/obj applies its transformations. | 
|  | TEXT _rt0_amd64_linux_lib(SB),NOSPLIT,$0x50 | 
|  | MOVQ	SP, AX | 
|  | ANDQ	$-16, SP | 
|  | MOVQ	BX, 0x10(SP) | 
|  | MOVQ	BP, 0x18(SP) | 
|  | MOVQ	R12, 0x20(SP) | 
|  | MOVQ	R13, 0x28(SP) | 
|  | MOVQ	R14, 0x30(SP) | 
|  | MOVQ	R15, 0x38(SP) | 
|  | MOVQ	AX, 0x40(SP) | 
|  |  | 
|  | MOVQ	DI, _rt0_amd64_linux_lib_argc<>(SB) | 
|  | MOVQ	SI, _rt0_amd64_linux_lib_argv<>(SB) | 
|  |  | 
|  | // Synchronous initialization. | 
|  | MOVQ	$runtime·libpreinit(SB), AX | 
|  | CALL	AX | 
|  |  | 
|  | // Create a new thread to do the runtime initialization and return. | 
|  | MOVQ	_cgo_sys_thread_create(SB), AX | 
|  | TESTQ	AX, AX | 
|  | JZ	nocgo | 
|  | MOVQ	$_rt0_amd64_linux_lib_go(SB), DI | 
|  | MOVQ	$0, SI | 
|  | CALL	AX | 
|  | JMP	restore | 
|  |  | 
|  | nocgo: | 
|  | MOVQ	$8388608, 0(SP)                    // stacksize | 
|  | MOVQ	$_rt0_amd64_linux_lib_go(SB), AX | 
|  | MOVQ	AX, 8(SP)                          // fn | 
|  | MOVQ	$runtime·newosproc0(SB), AX | 
|  | CALL	AX | 
|  |  | 
|  | restore: | 
|  | MOVQ	0x10(SP), BX | 
|  | MOVQ	0x18(SP), BP | 
|  | MOVQ	0x20(SP), R12 | 
|  | MOVQ	0x28(SP), R13 | 
|  | MOVQ	0x30(SP), R14 | 
|  | MOVQ	0x38(SP), R15 | 
|  | MOVQ	0x40(SP), SP | 
|  | RET | 
|  |  | 
|  | TEXT _rt0_amd64_linux_lib_go(SB),NOSPLIT,$0 | 
|  | MOVQ	_rt0_amd64_linux_lib_argc<>(SB), DI | 
|  | MOVQ	_rt0_amd64_linux_lib_argv<>(SB), SI | 
|  | MOVQ	$runtime·rt0_go(SB), AX | 
|  | JMP	AX | 
|  |  | 
|  | DATA _rt0_amd64_linux_lib_argc<>(SB)/8, $0 | 
|  | GLOBL _rt0_amd64_linux_lib_argc<>(SB),NOPTR, $8 | 
|  | DATA _rt0_amd64_linux_lib_argv<>(SB)/8, $0 | 
|  | GLOBL _rt0_amd64_linux_lib_argv<>(SB),NOPTR, $8 | 
|  |  | 
|  | TEXT main(SB),NOSPLIT,$-8 | 
|  | MOVQ	$runtime·rt0_go(SB), AX | 
|  | JMP	AX |