From: Cherry Zhang Date: Tue, 28 Apr 2020 05:08:12 +0000 (-0400) Subject: [dev.link] cmd/link: free compressed symbols after dwarfcompress X-Git-Tag: go1.15beta1~259^2^2~15 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0bbc19760b978ba461ab98872620abc48c1e9ac4;p=gostls13.git [dev.link] cmd/link: free compressed symbols after dwarfcompress Once the symbol is compressed, we will not need the uncompressed symbol content. Free its memory. Linking cmd/compile, name old live-B new live-B delta Dwarfcompress_GC 42.7M ± 0% 37.9M ± 0% -11.31% (p=0.008 n=5+5) Change-Id: Ib6cc73832946d158ff4f5b4f31be9c35ba7cf103 Reviewed-on: https://go-review.googlesource.com/c/go/+/230859 Run-TryBot: Cherry Zhang TryBot-Result: Gobot Gobot Reviewed-by: Than McIntosh Reviewed-by: Jeremy Faller --- diff --git a/src/cmd/link/internal/ld/dwarf2.go b/src/cmd/link/internal/ld/dwarf2.go index 336122800b..79abccfdf3 100644 --- a/src/cmd/link/internal/ld/dwarf2.go +++ b/src/cmd/link/internal/ld/dwarf2.go @@ -149,6 +149,7 @@ func dwarfcompress(ctxt *Link) { // compressed symbols are no longer needed. for _, s := range z.syms { ldr.SetAttrReachable(s, false) + ldr.FreeSym(s) } } } diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go index a6d9417c00..e4b8098a8a 100644 --- a/src/cmd/link/internal/loader/loader.go +++ b/src/cmd/link/internal/loader/loader.go @@ -2054,7 +2054,6 @@ func (l *Loader) LoadFull(arch *sys.Arch, syms *sym.Symbols, needReloc bool) { // be copied in a later loop). toConvert := make([]Sym, 0, len(l.payloads)) for _, i := range l.extReader.syms { - sname := l.RawSymName(i) if !l.attrReachable.Has(i) { continue } @@ -2065,7 +2064,7 @@ func (l *Loader) LoadFull(arch *sys.Arch, syms *sym.Symbols, needReloc bool) { // outer/sub processing below. Note that once we do this, // we'll need to get at the payload for a symbol with direct // reference to l.payloads[] as opposed to calling l.getPayload(). - s := l.allocSym(sname, 0) + s := l.allocSym(pp.name, 0) l.installSym(i, s) toConvert = append(toConvert, i) } @@ -2655,6 +2654,13 @@ func (l *Loader) CreateStaticSym(name string) Sym { return l.newExtSym(name, l.anonVersion) } +func (l *Loader) FreeSym(i Sym) { + if l.IsExternal(i) { + pp := l.getPayload(i) + *pp = extSymPayload{} + } +} + func loadObjFull(l *Loader, r *oReader, needReloc bool) { for i, n := 0, r.NSym()+r.NNonpkgdef(); i < n; i++ { // A symbol may be a dup or overwritten. In this case, its