aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/ld
diff options
context:
space:
mode:
authorShenghou Ma <minux@golang.org>2014-12-05 02:22:20 -0500
committerShenghou Ma <minux@golang.org>2014-12-05 02:22:20 -0500
commit274976f45c9b2c3f9140768b457e9140ea65bfb4 (patch)
tree496ea2a6ddc21090f4dca382021a39eb43b4ac9f /src/cmd/ld
parent6f755f2f8f4665d44745b4065cd54a90eba0bde9 (diff)
downloadgo-274976f45c9b2c3f9140768b457e9140ea65bfb4.tar.xz
[dev.cc] cmd/ld: finalize linkmode before determining whether to import runtime/cgo
Frankly, I don't understand how the current code could possibly work except when every android program is using cgo. Discovered this while working on the iOS port. LGTM=crawshaw, rsc R=rsc, crawshaw CC=golang-codereviews https://golang.org/cl/177470043
Diffstat (limited to 'src/cmd/ld')
-rw-r--r--src/cmd/ld/lib.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/cmd/ld/lib.c b/src/cmd/ld/lib.c
index 64608d226e..925274bfd3 100644
--- a/src/cmd/ld/lib.c
+++ b/src/cmd/ld/lib.c
@@ -202,7 +202,18 @@ loadlib(void)
iscgo |= strcmp(ctxt->library[i].pkg, "runtime/cgo") == 0;
objfile(ctxt->library[i].file, ctxt->library[i].pkg);
}
-
+
+ if(linkmode == LinkAuto) {
+ if(iscgo && externalobj)
+ linkmode = LinkExternal;
+ else
+ linkmode = LinkInternal;
+
+ // Force external linking for android.
+ if(strcmp(goos, "android") == 0)
+ linkmode = LinkExternal;
+ }
+
if(linkmode == LinkExternal && !iscgo) {
// This indicates a user requested -linkmode=external.
// The startup code uses an import of runtime/cgo to decide
@@ -229,17 +240,6 @@ loadlib(void)
}
}
- if(linkmode == LinkAuto) {
- if(iscgo && externalobj)
- linkmode = LinkExternal;
- else
- linkmode = LinkInternal;
-
- // Force external linking for android.
- if(strcmp(goos, "android") == 0)
- linkmode = LinkExternal;
- }
-
if(linkmode == LinkInternal) {
// Drop all the cgo_import_static declarations.
// Turns out we won't be needing them.