runtime: add isarchive, set by the linker
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>
diff --git a/src/runtime/proc.go b/src/runtime/proc.go
index e596cab..7b6183d 100644
--- a/src/runtime/proc.go
+++ b/src/runtime/proc.go
@@ -99,6 +99,11 @@
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()
diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go
index 842ebe5..1f4f0da 100644
--- a/src/runtime/runtime2.go
+++ b/src/runtime/runtime2.go
@@ -621,9 +621,12 @@
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
)
/*