Home | History | Annotate | Download | only in runtime
      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,$104
     20 	// Preserve callee-save registers.
     21 	MOVW    R4, 12(R13)
     22 	MOVW    R5, 16(R13)
     23 	MOVW    R6, 20(R13)
     24 	MOVW    R7, 24(R13)
     25 	MOVW    R8, 28(R13)
     26 	MOVW    R11, 32(R13)
     27 
     28 	MOVD	F8, (32+8*1)(R13)
     29 	MOVD	F9, (32+8*2)(R13)
     30 	MOVD	F10, (32+8*3)(R13)
     31 	MOVD	F11, (32+8*4)(R13)
     32 	MOVD	F12, (32+8*5)(R13)
     33 	MOVD	F13, (32+8*6)(R13)
     34 	MOVD	F14, (32+8*7)(R13)
     35 	MOVD	F15, (32+8*8)(R13)
     36 
     37 	MOVW  R0, _rt0_arm_darwin_lib_argc<>(SB)
     38 	MOVW  R1, _rt0_arm_darwin_lib_argv<>(SB)
     39 
     40 	// Synchronous initialization.
     41 	MOVW	$runtimelibpreinit(SB), R3
     42 	CALL	(R3)
     43 
     44 	// Create a new thread to do the runtime initialization and return.
     45 	MOVW  _cgo_sys_thread_create(SB), R3
     46 	CMP   $0, R3
     47 	B.EQ  nocgo
     48 	MOVW  $_rt0_arm_darwin_lib_go(SB), R0
     49 	MOVW  $0, R1
     50 	BL    (R3)
     51 	B rr
     52 nocgo:
     53 	MOVW  $0x400000, R0
     54 	MOVW  R0, (R13) // stacksize
     55 	MOVW  $_rt0_arm_darwin_lib_go(SB), R0
     56 	MOVW  R0, 4(R13) // fn
     57 	MOVW  $0, R0
     58 	MOVW  R0, 8(R13) // fnarg
     59 	MOVW  $runtimenewosproc0(SB), R3
     60 	BL    (R3)
     61 rr:
     62 	// Restore callee-save registers and return.
     63 	MOVW    12(R13), R4
     64 	MOVW    16(R13), R5
     65 	MOVW    20(R13), R6
     66 	MOVW    24(R13), R7
     67 	MOVW    28(R13), R8
     68 	MOVW    32(R13), R11
     69 	MOVD	(32+8*1)(R13), F8
     70 	MOVD	(32+8*2)(R13), F9
     71 	MOVD	(32+8*3)(R13), F10
     72 	MOVD	(32+8*4)(R13), F11
     73 	MOVD	(32+8*5)(R13), F12
     74 	MOVD	(32+8*6)(R13), F13
     75 	MOVD	(32+8*7)(R13), F14
     76 	MOVD	(32+8*8)(R13), F15
     77 	RET
     78 
     79 
     80 TEXT _rt0_arm_darwin_lib_go(SB),NOSPLIT,$0
     81 	MOVW  _rt0_arm_darwin_lib_argc<>(SB), R0
     82 	MOVW  _rt0_arm_darwin_lib_argv<>(SB), R1
     83 	MOVW  R0,  (R13)
     84 	MOVW  R1, 4(R13)
     85 	MOVW  $runtimert0_go(SB), R4
     86 	B     (R4)
     87 
     88 DATA  _rt0_arm_darwin_lib_argc<>(SB)/4, $0
     89 GLOBL _rt0_arm_darwin_lib_argc<>(SB),NOPTR, $4
     90 DATA  _rt0_arm_darwin_lib_argv<>(SB)/4, $0
     91 GLOBL _rt0_arm_darwin_lib_argv<>(SB),NOPTR, $4
     92 
     93 TEXT main(SB),NOSPLIT,$-8
     94 	// save argc and argv onto stack
     95 	MOVM.DB.W [R0-R1], (R13)
     96 	MOVW	$runtimert0_go(SB), R4
     97 	B		(R4)
     98