aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/objfile
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2018-04-13 15:37:37 -0700
committerJosh Bleecher Snyder <josharian@gmail.com>2018-04-13 23:54:05 +0000
commit9137edc986629c18760c4633166b29b556e64567 (patch)
tree641700909f1c6ad878dff56189439a2e00254c1f /src/cmd/internal/objfile
parent983fca55c0c43ef8cc663e3c0770d62032eac495 (diff)
downloadgo-9137edc986629c18760c4633166b29b556e64567.tar.xz
cmd/internal/objfile: reuse tabwriter across symbols when disassembling
Since the tabwriter is flushed at every symbol, it can be re-used with no impact on the output. This cuts allocated space when objdump-ing the compiler by almost 40%, and enables further upcoming improvements. It also speeds up objdump. name old time/op new time/op delta ObjdumpCompile 9.22s ± 3% 8.77s ± 3% -4.79% (p=0.000 n=10+9) Change-Id: Ief114d6c2680a4e762b5f439d3ca8dc7a89b9b27 Reviewed-on: https://go-review.googlesource.com/106978 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/cmd/internal/objfile')
-rw-r--r--src/cmd/internal/objfile/disasm.go2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/cmd/internal/objfile/disasm.go b/src/cmd/internal/objfile/disasm.go
index 40f87e4869..deba727695 100644
--- a/src/cmd/internal/objfile/disasm.go
+++ b/src/cmd/internal/objfile/disasm.go
@@ -197,6 +197,7 @@ func (d *Disasm) Print(w io.Writer, filter *regexp.Regexp, start, end uint64, pr
fc = NewFileCache(8)
}
+ tw := tabwriter.NewWriter(bw, 18, 8, 1, '\t', tabwriter.StripEscape)
for _, sym := range d.syms {
symStart := sym.Addr
symEnd := sym.Addr + uint64(sym.Size)
@@ -215,7 +216,6 @@ func (d *Disasm) Print(w io.Writer, filter *regexp.Regexp, start, end uint64, pr
file, _, _ := d.pcln.PCToLine(sym.Addr)
fmt.Fprintf(bw, "TEXT %s(SB) %s\n", sym.Name, file)
- tw := tabwriter.NewWriter(bw, 18, 8, 1, '\t', tabwriter.StripEscape)
if symEnd > end {
symEnd = end
}