github.com/miolini/go@v0.0.0-20160405192216-fca68c8cb408/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,$32
    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  	MOVW  R0, _rt0_arm_darwin_lib_argc<>(SB)
    29  	MOVW  R1, _rt0_arm_darwin_lib_argv<>(SB)
    30  
    31  	// Synchronous initialization.
    32  	MOVW	$runtime·libpreinit(SB), R3
    33  	CALL	(R3)
    34  
    35  	// Create a new thread to do the runtime initialization and return.
    36  	MOVW  _cgo_sys_thread_create(SB), R3
    37  	CMP   $0, R3
    38  	B.EQ  nocgo
    39  	MOVW  $_rt0_arm_darwin_lib_go(SB), R0
    40  	MOVW  $0, R1
    41  	BL    (R3)
    42  	B rr
    43  nocgo:
    44  	MOVW  $0x400000, R0
    45  	MOVW  R0, (R13) // stacksize
    46  	MOVW  $_rt0_arm_darwin_lib_go(SB), R0
    47  	MOVW  R0, 4(R13) // fn
    48  	MOVW  $0, R0
    49  	MOVW  R0, 8(R13) // fnarg
    50  	MOVW  $runtime·newosproc0(SB), R3
    51  	BL    (R3)
    52  rr:
    53  	// Restore callee-save registers and return.
    54  	MOVW    12(R13), R4
    55  	MOVW    16(R13), R5
    56  	MOVW    20(R13), R6
    57  	MOVW    24(R13), R7
    58  	MOVW    28(R13), R8
    59  	MOVW    32(R13), R11
    60  	RET
    61  
    62  
    63  TEXT _rt0_arm_darwin_lib_go(SB),NOSPLIT,$0
    64  	MOVW  _rt0_arm_darwin_lib_argc<>(SB), R0
    65  	MOVW  _rt0_arm_darwin_lib_argv<>(SB), R1
    66  	MOVW  R0,  (R13)
    67  	MOVW  R1, 4(R13)
    68  	MOVW  $runtime·rt0_go(SB), R4
    69  	B     (R4)
    70  
    71  DATA  _rt0_arm_darwin_lib_argc<>(SB)/4, $0
    72  GLOBL _rt0_arm_darwin_lib_argc<>(SB),NOPTR, $4
    73  DATA  _rt0_arm_darwin_lib_argv<>(SB)/4, $0
    74  GLOBL _rt0_arm_darwin_lib_argv<>(SB),NOPTR, $4
    75  
    76  TEXT main(SB),NOSPLIT,$-8
    77  	// save argc and argv onto stack
    78  	MOVM.DB.W [R0-R1], (R13)
    79  	MOVW	$runtime·rt0_go(SB), R4
    80  	B		(R4)