proggenskip(g, g.pos, s.Value-g.pos)
g.pos = s.Value
- // The test for names beginning with . here is meant
- // to keep .dynamic and .dynsym from turning up as
- // conservative symbols. They should be marked SELFSECT
- // and not SDATA, but sometimes that doesn't happen.
- // Leave debugging the SDATA issue for the Go rewrite.
-
- if s.Gotype == nil && s.Size >= int64(Thearch.Ptrsize) && s.Name[0] != '.' {
+ if s.Gotype == nil && s.Size >= int64(Thearch.Ptrsize) {
Diag("missing Go type information for global symbol: %s size %d", s.Name, int(s.Size))
return
}
// to force a link of foo.so.
havedynamic = 1
- adddynlib(lib)
+ if HEADTYPE == obj.Hdarwin {
+ Machoadddynlib(lib)
+ } else {
+ dynlib = append(dynlib, lib)
+ }
continue
}
var seenlib = make(map[string]bool)
func adddynlib(lib string) {
- if seenlib[lib] {
+ if seenlib[lib] || Linkmode == LinkExternal {
return
}
seenlib[lib] = true
Addstring(s, "")
}
Elfwritedynent(Linklookup(Ctxt, ".dynamic", 0), DT_NEEDED, uint64(Addstring(s, lib)))
- } else if HEADTYPE == obj.Hdarwin {
- Machoadddynlib(lib)
} else {
Diag("adddynlib: unsupported binary format")
}
}
func Adddynsym(ctxt *Link, s *LSym) {
- if s.Dynid >= 0 {
+ if s.Dynid >= 0 || Linkmode == LinkExternal {
return
}
return
}
- for i := 0; i < len(dynexp); i++ {
- Adddynsym(Ctxt, dynexp[i])
+ for _, exp := range dynexp {
+ Adddynsym(Ctxt, exp)
+ }
+ for _, lib := range dynlib {
+ adddynlib(lib)
}
}