From: Cherry Zhang Date: Wed, 4 Mar 2020 03:50:34 +0000 (-0500) Subject: [dev.link] cmd/link: don't always load type symbols X-Git-Tag: go1.15beta1~679^2~104 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6ae47d1354d1157bbc9868fc296bfc43ea5b9083;p=gostls13.git [dev.link] cmd/link: don't always load type symbols The type symbols were always loaded in LoadFull, as the old sym.Symbol-based DWARF generation needs them to present. Now we have converted the DWARF type generation pass, which uses the loader symbols directly. No need to load the type symbols if they are not live. This reduces loaded symbols by ~18% for cmd/compile. Change-Id: Ic1f6fcdff845f3c62784d05ad716b1742f249481 Reviewed-on: https://go-review.googlesource.com/c/go/+/222018 Run-TryBot: Cherry Zhang Reviewed-by: Than McIntosh Reviewed-by: Jeremy Faller TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go index 56d13db805..058ef78f76 100644 --- a/src/cmd/link/internal/loader/loader.go +++ b/src/cmd/link/internal/loader/loader.go @@ -1945,9 +1945,8 @@ func loadObjSyms(l *Loader, syms *sym.Symbols, r *oReader) int { if t == 0 { log.Fatalf("missing type for %s in %s", name, r.unit.Lib) } - if !l.attrReachable.Has(gi) && !(t == sym.SRODATA && strings.HasPrefix(name, "type.")) && name != "runtime.addmoduledata" && name != "runtime.lastmoduledatap" { + if !l.attrReachable.Has(gi) && name != "runtime.addmoduledata" && name != "runtime.lastmoduledatap" { // No need to load unreachable symbols. - // XXX some type symbol's content may be needed in DWARF code, but they are not marked. // XXX reference to runtime.addmoduledata may be generated later by the linker in plugin mode. continue }