mirror of
https://github.com/golang/go
synced 2024-11-19 17:04:41 -07:00
26015b9563
Fixes #16618. Change-Id: Iffada12e8672bbdbcf2e787782c497e2c45701b1 Reviewed-on: https://go-review.googlesource.com/25550 Run-TryBot: Minux Ma <minux@golang.org> Reviewed-by: Arjan Van De Ven <arjan.van.de.ven@intel.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
75 lines
1.8 KiB
ArmAsm
75 lines
1.8 KiB
ArmAsm
// 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
|