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