mirror of
https://github.com/golang/go
synced 2024-11-20 03:34:40 -07:00
b0a85f5d93
This is a practice run for darwin/arm. Similar to the linux/amd64 shared library entry point. With several pending linker changes I am successfully using this to implement -buildmode=c-archive on darwin/amd64 with external linking. The same entry point can be reused to implement -buildmode=c-shared on darwin/amd64, however that will require further ld changes to remove all text relocations. One extra runtime change will follow this. According to the Go execution modes document, -buildmode=c-archive should ignore the Go main function. Right now it is being executed (and the process exits if it doesn't block). I'm still searching for the right way to do this. Change-Id: Id97901ddd4d46970996f222bd79731dabff66a3d Reviewed-on: https://go-review.googlesource.com/8652 Reviewed-by: Ian Lance Taylor <iant@golang.org>
50 lines
1.4 KiB
ArmAsm
50 lines
1.4 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_darwin(SB),NOSPLIT,$-8
|
|
LEAQ 8(SP), SI // argv
|
|
MOVQ 0(SP), DI // argc
|
|
MOVQ $main(SB), AX
|
|
JMP AX
|
|
|
|
// When linking with -shared, this symbol is called when the shared library
|
|
// is loaded.
|
|
TEXT _rt0_amd64_darwin_lib(SB),NOSPLIT,$40
|
|
MOVQ DI, _rt0_amd64_darwin_lib_argc<>(SB)
|
|
MOVQ SI, _rt0_amd64_darwin_lib_argv<>(SB)
|
|
|
|
// 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_darwin_lib_go(SB), DI
|
|
MOVQ $0, SI
|
|
CALL AX
|
|
RET
|
|
nocgo:
|
|
MOVQ $8388608, 0(SP) // stacksize
|
|
MOVQ $_rt0_amd64_darwin_lib_go(SB), AX
|
|
MOVQ AX, 8(SP) // fn
|
|
MOVQ $0, 16(SP) // fnarg
|
|
MOVQ $runtime·newosproc0(SB), AX
|
|
CALL AX
|
|
RET
|
|
|
|
TEXT _rt0_amd64_darwin_lib_go(SB),NOSPLIT,$0
|
|
MOVQ _rt0_amd64_darwin_lib_argc<>(SB), DI
|
|
MOVQ _rt0_amd64_darwin_lib_argv<>(SB), SI
|
|
MOVQ $runtime·rt0_go(SB), AX
|
|
JMP AX
|
|
|
|
DATA _rt0_amd64_darwin_lib_argc<>(SB)/8, $0
|
|
GLOBL _rt0_amd64_darwin_lib_argc<>(SB),NOPTR, $8
|
|
DATA _rt0_amd64_darwin_lib_argv<>(SB)/8, $0
|
|
GLOBL _rt0_amd64_darwin_lib_argv<>(SB),NOPTR, $8
|
|
|
|
TEXT main(SB),NOSPLIT,$-8
|
|
MOVQ $runtime·rt0_go(SB), AX
|
|
JMP AX
|