This is needed for SWIG when linking in internal mode. In
internal mode if a symbol was cgo_import_static we used to
forget that it was also cgo_import_dynamic.
R=rsc, r
CC=golang-dev
https://golang.org/cl/
9080043
s = lookup(local, 0);
if(local != f[1])
free(local);
- if(s->type == 0 || s->type == SXREF) {
+ if(s->type == 0 || s->type == SXREF || s->type == SHOSTOBJ) {
s->dynimplib = lib;
s->extname = remote;
s->dynimpvers = q;
- s->type = SDYNIMPORT;
+ if(s->type != SHOSTOBJ)
+ s->type = SDYNIMPORT;
havedynamic = 1;
}
continue;
// Drop all the cgo_import_static declarations.
// Turns out we won't be needing them.
for(s = allsym; s != S; s = s->allsym)
- if(s->type == SHOSTOBJ)
- s->type = 0;
+ if(s->type == SHOSTOBJ) {
+ // If a symbol was marked both
+ // cgo_import_static and cgo_import_dynamic,
+ // then we want to make it cgo_import_dynamic
+ // now.
+ if(s->extname != nil && s->cgoexport == 0) {
+ s->type = SDYNIMPORT;
+ } else
+ s->type = 0;
+ }
}
// Now that we know the link mode, trim the dynexp list.