github.com/mdempsky/go@v0.0.0-20151201204031-5dd372bd1e70/src/runtime/rt0_darwin_arm.s (about) 1 // Copyright 2014 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_arm_darwin(SB),7,$-4 8 // prepare arguments for main (_rt0_go) 9 MOVW (R13), R0 // argc 10 MOVW $4(R13), R1 // argv 11 MOVW $main(SB), R4 12 B (R4) 13 14 // When linking with -buildmode=c-archive or -buildmode=c-shared, 15 // this symbol is called from a global initialization function. 16 // 17 // Note that all currently shipping darwin/arm platforms require 18 // cgo and do not support c-shared. 19 TEXT _rt0_arm_darwin_lib(SB),NOSPLIT,$0 20 // R11 is REGTMP, reserved for liblink. It is used below to 21 // move R0/R1 into globals. However in the darwin ARMv7 calling 22 // convention, it is a callee-saved register. So we save it to a 23 // temporary register. 24 MOVW R11, R2 25 MOVW R0, _rt0_arm_darwin_lib_argc<>(SB) 26 MOVW R1, _rt0_arm_darwin_lib_argv<>(SB) 27 28 // Create a new thread to do the runtime initialization and return. 29 MOVW _cgo_sys_thread_create(SB), R3 30 CMP $0, R3 31 B.EQ nocgo 32 MOVW $_rt0_arm_darwin_lib_go(SB), R0 33 MOVW $0, R1 34 MOVW R2, R11 35 BL (R3) 36 RET 37 nocgo: 38 MOVW $0x400000, R0 39 MOVW R0, (R13) // stacksize 40 MOVW $_rt0_arm_darwin_lib_go(SB), R0 41 MOVW R0, 4(R13) // fn 42 MOVW $0, R0 43 MOVW R0, 8(R13) // fnarg 44 MOVW $runtime·newosproc0(SB), R3 45 MOVW R2, R11 46 BL (R3) 47 RET 48 49 TEXT _rt0_arm_darwin_lib_go(SB),NOSPLIT,$0 50 MOVW _rt0_arm_darwin_lib_argc<>(SB), R0 51 MOVW _rt0_arm_darwin_lib_argv<>(SB), R1 52 MOVW R0, (R13) 53 MOVW R1, 4(R13) 54 MOVW $runtime·rt0_go(SB), R4 55 B (R4) 56 57 DATA _rt0_arm_darwin_lib_argc<>(SB)/4, $0 58 GLOBL _rt0_arm_darwin_lib_argc<>(SB),NOPTR, $4 59 DATA _rt0_arm_darwin_lib_argv<>(SB)/4, $0 60 GLOBL _rt0_arm_darwin_lib_argv<>(SB),NOPTR, $4 61 62 TEXT main(SB),NOSPLIT,$-8 63 // save argc and argv onto stack 64 MOVM.DB.W [R0-R1], (R13) 65 MOVW $runtime·rt0_go(SB), R4 66 B (R4)