mirror of
https://github.com/golang/go
synced 2024-11-20 01:34:41 -07:00
cmd/ld: always do external link for -linkmode=external
There are tests in run.bash for -linkmode=external. Fixes #5238. R=golang-dev, bradfitz, remyoudompheng, r CC=golang-dev https://golang.org/cl/8716044
This commit is contained in:
parent
813590b145
commit
696901204f
@ -45,6 +45,10 @@ int nlibdir = 0;
|
||||
static int maxlibdir = 0;
|
||||
static int cout = -1;
|
||||
|
||||
// Set if we see an object compiled by the host compiler that is not
|
||||
// from a package that is known to support internal linking mode.
|
||||
static int externalobj = 0;
|
||||
|
||||
static void hostlinksetup(void);
|
||||
|
||||
char* goroot;
|
||||
@ -295,6 +299,19 @@ loadlib(void)
|
||||
loadinternal("math");
|
||||
if(flag_race)
|
||||
loadinternal("runtime/race");
|
||||
if(linkmode == LinkExternal) {
|
||||
// This indicates a user requested -linkmode=external.
|
||||
// The startup code uses an import of runtime/cgo to decide
|
||||
// whether to initialize the TLS. So give it one. This could
|
||||
// be handled differently but it's an unusual case.
|
||||
loadinternal("runtime/cgo");
|
||||
// Pretend that we really imported the package.
|
||||
// This will do no harm if we did in fact import it.
|
||||
s = lookup("go.importpath.runtime/cgo.", 0);
|
||||
s->type = SDATA;
|
||||
s->dupok = 1;
|
||||
s->reachable = 1;
|
||||
}
|
||||
|
||||
for(i=0; i<libraryp; i++) {
|
||||
if(debug['v'])
|
||||
@ -303,13 +320,10 @@ loadlib(void)
|
||||
objfile(library[i].file, library[i].pkg);
|
||||
}
|
||||
|
||||
if(linkmode == LinkExternal && !iscgo)
|
||||
linkmode = LinkInternal;
|
||||
|
||||
// If we got this far in automatic mode, there were no
|
||||
// cgo uses that suggest we need external mode.
|
||||
// Switch to internal.
|
||||
if(linkmode == LinkAuto) {
|
||||
if(iscgo && externalobj)
|
||||
linkmode = LinkExternal;
|
||||
else
|
||||
linkmode = LinkInternal;
|
||||
}
|
||||
|
||||
@ -532,8 +546,8 @@ ldhostobj(void (*ld)(Biobuf*, char*, int64, char*), Biobuf *f, char *pkg, int64
|
||||
}
|
||||
}
|
||||
|
||||
if(!isinternal && linkmode == LinkAuto)
|
||||
linkmode = LinkExternal;
|
||||
if(!isinternal)
|
||||
externalobj = 1;
|
||||
|
||||
if(nhostobj >= mhostobj) {
|
||||
if(mhostobj == 0)
|
||||
|
Loading…
Reference in New Issue
Block a user