]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/objfile: emit trailing tab outside of Disasm.Decode
authorJosh Bleecher Snyder <josharian@gmail.com>
Sat, 14 Apr 2018 16:59:25 +0000 (09:59 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Wed, 18 Apr 2018 18:07:05 +0000 (18:07 +0000)
Disasm.Decode currently always appends a tab to the formatted instruction,
although not to any relocations after it.

Decode has two clients: objdump and pprof.
pprof emits plain text, so it would be better not to have a trailing tab.
objdump wants the trailing tab for text/tabwriter,
but it is easy to add that to the Fprintf call.

Shifting the responsibility for the trailing tab to the caller
simplifies the code, increases correctness, and slightly improves
performance by reducing and coalescing string concatenations.

Change-Id: I0c85518ee185949e385de819e2e703bce757eba9
Reviewed-on: https://go-review.googlesource.com/106983
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/internal/objfile/disasm.go

index deba7276951d02979e4bc8e8a5ebe189a1763550..fce63bfeeae0b931207ffce90b09b16c594a9010 100644 (file)
@@ -253,7 +253,7 @@ func (d *Disasm) Print(w io.Writer, filter *regexp.Regexp, start, end uint64, pr
                                        fmt.Fprintf(tw, "%08x", d.byteOrder.Uint32(code[i+j:]))
                                }
                        }
-                       fmt.Fprintf(tw, "\t%s\n", text)
+                       fmt.Fprintf(tw, "\t%s\t\n", text)
                })
                tw.Flush()
        }
@@ -274,15 +274,10 @@ func (d *Disasm) Decode(start, end uint64, relocs []Reloc, f func(pc, size uint6
                i := pc - d.textStart
                text, size := d.disasm(code[i:], pc, lookup, d.byteOrder)
                file, line, _ := d.pcln.PCToLine(pc)
-               text += "\t"
-               first := true
+               sep := "\t"
                for len(relocs) > 0 && relocs[0].Addr < i+uint64(size) {
-                       if first {
-                               first = false
-                       } else {
-                               text += " "
-                       }
-                       text += relocs[0].Stringer.String(pc - start)
+                       text += sep + relocs[0].Stringer.String(pc-start)
+                       sep = " "
                        relocs = relocs[1:]
                }
                f(pc, uint64(size), file, line, text)