diff options
author | Cherry Zhang <cherryyz@google.com> | 2020-04-28 01:08:12 -0400 |
---|---|---|
committer | Cherry Zhang <cherryyz@google.com> | 2020-04-29 18:10:53 +0000 |
commit | 0bbc19760b978ba461ab98872620abc48c1e9ac4 (patch) | |
tree | e21fb6e945eea209c52c9a0b396cc91831c04443 /src/cmd/link/internal/loader/loader.go | |
parent | 65c1805e77137c6165ea3ad49b8528fc08cef1ea (diff) | |
download | go-0bbc19760b978ba461ab98872620abc48c1e9ac4.tar.gz go-0bbc19760b978ba461ab98872620abc48c1e9ac4.zip |
[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 <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
Diffstat (limited to 'src/cmd/link/internal/loader/loader.go')
-rw-r--r-- | src/cmd/link/internal/loader/loader.go | 10 |
1 files changed, 8 insertions, 2 deletions
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 |