]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: library entry point for darwin/arm
authorDavid Crawshaw <crawshaw@golang.org>
Fri, 10 Apr 2015 17:07:04 +0000 (13:07 -0400)
committerDavid Crawshaw <crawshaw@golang.org>
Sun, 12 Apr 2015 12:49:49 +0000 (12:49 +0000)
Tested by using -buildmode=c-archive to generate an archive, add it
to an Xcode project and calling a Go function from an iOS app. (I'm
still investigating proper buildmode tests for all.bash.)

Change-Id: I7890df15246df8e90ad27837b8d64ba2cde409fe
Reviewed-on: https://go-review.googlesource.com/8719
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/rt0_darwin_arm.s

index 4d31e3a78a6b313c029c6ea5d2b62fb2de74209b..95a2b179c4424b001b54894ea20dc024519e32a3 100644 (file)
@@ -11,6 +11,47 @@ TEXT _rt0_arm_darwin(SB),7,$-4
        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,$12
+       MOVW  R0, _rt0_arm_darwin_lib_argc<>(SB)
+       MOVW  R1, _rt0_arm_darwin_lib_argv<>(SB)
+
+       // Create a new thread to do the runtime initialization and return.
+       MOVW  _cgo_sys_thread_create(SB), R4
+       CMP   $0, R4
+       B.EQ  nocgo
+       MOVW  $_rt0_arm_darwin_lib_go(SB), R0
+       MOVW  $0, R1
+       BL    (R4)
+       RET
+nocgo:
+       MOVW  $0x400000, R0
+       MOVW  $_rt0_arm_darwin_lib_go(SB), R1
+       MOVW  $0, R2
+       MOVW  R0,  (R13) // stacksize
+       MOVW  R1, 4(R13) // fn
+       MOVW  R2, 8(R13) // fnarg
+       MOVW  $runtime·newosproc0(SB), R4
+       BL    (R4)
+       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)