]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: add isarchive, set by the linker
authorDavid Crawshaw <crawshaw@golang.org>
Thu, 9 Apr 2015 19:09:52 +0000 (15:09 -0400)
committerDavid Crawshaw <crawshaw@golang.org>
Thu, 9 Apr 2015 20:02:02 +0000 (20:02 +0000)
According to Go execution modes, a Go program compiled with
-buildmode=c-archive has a main function, but it is ignored on run.
This gives the runtime the information it needs not to run the main.

I have this working with pending linker changes on darwin/amd64.

Change-Id: I49bd7d65aa619ec847c464a872afa5deea7d4d30
Reviewed-on: https://go-review.googlesource.com/8701
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: David Crawshaw <crawshaw@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/runtime/proc.go
src/runtime/runtime2.go

index e596cab9bd62e5aa3c2bae78d518e017268833a2..7b6183d905d88493633aac987dd82de240578401 100644 (file)
@@ -99,6 +99,11 @@ func main() {
        needUnlock = false
        unlockOSThread()
 
+       if isarchive {
+               // A program compiled with -buildmode=c-archive has a main,
+               // but it is not executed.
+               return
+       }
        main_main()
        if raceenabled {
                racefini()
index 842ebe52f5e823ef126a390e485d4df48a2237ef..1f4f0daec45aa949012e7c126042de751f8963e4 100644 (file)
@@ -621,9 +621,12 @@ var (
        cpuid_ecx         uint32
        cpuid_edx         uint32
        lfenceBeforeRdtsc bool
+)
 
-       // Set by the linker when linking with -shared.
-       islibrary bool
+// Set by the linker so the runtime can determine the buildmode.
+var (
+       islibrary bool // -buildmode=c-shared
+       isarchive bool // -buildmode=c-archive
 )
 
 /*