From 0bbc19760b978ba461ab98872620abc48c1e9ac4 Mon Sep 17 00:00:00 2001 From: Cherry Zhang Date: Tue, 28 Apr 2020 01:08:12 -0400 Subject: [PATCH] [dev.link] cmd/link: free compressed symbols after dwarfcompress MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/cmd/link/internal/ld/dwarf2.go | 1 + src/cmd/link/internal/loader/loader.go | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) 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 -- 2.50.0