blob: 59733d3ff60fe05d1ba4cb474549587f3bb730c4 [file] [log] [blame]
Shenghou Ma56e8f8e2014-12-26 01:07:10 -05001// 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
7TEXT _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
David Crawshaw6e3a6c42015-04-10 13:07:04 -040014// 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.
Elias Naurea4b7852016-03-12 12:13:11 +010019TEXT _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
David Crawshaw6e3a6c42015-04-10 13:07:04 -040028 MOVW R0, _rt0_arm_darwin_lib_argc<>(SB)
29 MOVW R1, _rt0_arm_darwin_lib_argv<>(SB)
30
Ian Lance Taylor21b4f232015-12-26 09:51:59 -080031 // Synchronous initialization.
32 MOVW $runtime·libpreinit(SB), R3
33 CALL (R3)
34
David Crawshaw6e3a6c42015-04-10 13:07:04 -040035 // Create a new thread to do the runtime initialization and return.
David Crawshawfb302702015-09-15 13:40:24 -040036 MOVW _cgo_sys_thread_create(SB), R3
37 CMP $0, R3
David Crawshaw6e3a6c42015-04-10 13:07:04 -040038 B.EQ nocgo
39 MOVW $_rt0_arm_darwin_lib_go(SB), R0
40 MOVW $0, R1
David Crawshawfb302702015-09-15 13:40:24 -040041 BL (R3)
Elias Naurea4b7852016-03-12 12:13:11 +010042 B rr
David Crawshaw6e3a6c42015-04-10 13:07:04 -040043nocgo:
44 MOVW $0x400000, R0
David Crawshawfb302702015-09-15 13:40:24 -040045 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
David Crawshawfb302702015-09-15 13:40:24 -040051 BL (R3)
Elias Naurea4b7852016-03-12 12:13:11 +010052rr:
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
David Crawshaw6e3a6c42015-04-10 13:07:04 -040060 RET
61
Elias Naurea4b7852016-03-12 12:13:11 +010062
David Crawshaw6e3a6c42015-04-10 13:07:04 -040063TEXT _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
71DATA _rt0_arm_darwin_lib_argc<>(SB)/4, $0
72GLOBL _rt0_arm_darwin_lib_argc<>(SB),NOPTR, $4
73DATA _rt0_arm_darwin_lib_argv<>(SB)/4, $0
74GLOBL _rt0_arm_darwin_lib_argv<>(SB),NOPTR, $4
75
Shenghou Ma56e8f8e2014-12-26 01:07:10 -050076TEXT 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)