From: Josh Bleecher Snyder Date: Fri, 13 Apr 2018 22:37:37 +0000 (-0700) Subject: cmd/internal/objfile: reuse tabwriter across symbols when disassembling X-Git-Tag: go1.11beta1~830 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9137edc986629c18760c4633166b29b556e64567;p=gostls13.git 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 TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- 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 }