| // Copyright 2014 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_arm_darwin(SB),7,$-4 | |
| // prepare arguments for main (_rt0_go) | |
| MOVW (R13), R0 // argc | |
| MOVW $4(R13), R1 // argv | |
| MOVW $main(SB), R4 | |
| B (R4) | |
| // When linking with -buildmode=c-archive or -buildmode=c-shared, | |
| // this symbol is called from a global initialization function. | |
| // | |
| // Note that all currently shipping darwin/arm platforms require | |
| // cgo and do not support c-shared. | |
| TEXT _rt0_arm_darwin_lib(SB),NOSPLIT,$32 | |
| // Preserve callee-save registers. | |
| MOVW R4, 12(R13) | |
| MOVW R5, 16(R13) | |
| MOVW R6, 20(R13) | |
| MOVW R7, 24(R13) | |
| MOVW R8, 28(R13) | |
| MOVW R11, 32(R13) | |
| MOVW R0, _rt0_arm_darwin_lib_argc<>(SB) | |
| MOVW R1, _rt0_arm_darwin_lib_argv<>(SB) | |
| // Synchronous initialization. | |
| MOVW $runtime·libpreinit(SB), R3 | |
| CALL (R3) | |
| // Create a new thread to do the runtime initialization and return. | |
| MOVW _cgo_sys_thread_create(SB), R3 | |
| CMP $0, R3 | |
| B.EQ nocgo | |
| MOVW $_rt0_arm_darwin_lib_go(SB), R0 | |
| MOVW $0, R1 | |
| BL (R3) | |
| B rr | |
| nocgo: | |
| MOVW $0x400000, R0 | |
| MOVW R0, (R13) // stacksize | |
| MOVW $_rt0_arm_darwin_lib_go(SB), R0 | |
| MOVW R0, 4(R13) // fn | |
| MOVW $0, R0 | |
| MOVW R0, 8(R13) // fnarg | |
| MOVW $runtime·newosproc0(SB), R3 | |
| BL (R3) | |
| rr: | |
| // Restore callee-save registers and return. | |
| MOVW 12(R13), R4 | |
| MOVW 16(R13), R5 | |
| MOVW 20(R13), R6 | |
| MOVW 24(R13), R7 | |
| MOVW 28(R13), R8 | |
| MOVW 32(R13), R11 | |
| RET | |
| TEXT _rt0_arm_darwin_lib_go(SB),NOSPLIT,$0 | |
| MOVW _rt0_arm_darwin_lib_argc<>(SB), R0 | |
| MOVW _rt0_arm_darwin_lib_argv<>(SB), R1 | |
| MOVW R0, (R13) | |
| MOVW R1, 4(R13) | |
| MOVW $runtime·rt0_go(SB), R4 | |
| B (R4) | |
| DATA _rt0_arm_darwin_lib_argc<>(SB)/4, $0 | |
| GLOBL _rt0_arm_darwin_lib_argc<>(SB),NOPTR, $4 | |
| DATA _rt0_arm_darwin_lib_argv<>(SB)/4, $0 | |
| GLOBL _rt0_arm_darwin_lib_argv<>(SB),NOPTR, $4 | |
| TEXT main(SB),NOSPLIT,$-8 | |
| // save argc and argv onto stack | |
| MOVM.DB.W [R0-R1], (R13) | |
| MOVW $runtime·rt0_go(SB), R4 | |
| B (R4) |