diff options
| author | Anthony Martin <ality@pbrane.org> | 2014-05-21 23:24:38 +0200 |
|---|---|---|
| committer | David du Colombier <0intro@gmail.com> | 2014-05-21 23:24:38 +0200 |
| commit | eb34288ad17bd624cfb4f40a3ab3095698624d95 (patch) | |
| tree | 3b7e0670fe00e5f7331f246fa7795ab9a8ef9b8a /src/cmd/objdump | |
| parent | cab54408da90caac6e1f1d6eaeb4166eeb98d899 (diff) | |
| download | go-eb34288ad17bd624cfb4f40a3ab3095698624d95.tar.xz | |
cmd/objdump: fix dissasembly of Plan 9 object files
Ignore symbols that aren't text, data, or bss since they cause
problems when dissassembling instructions with small immediate
values.
Before:
build.go:142 0x10ee 83ec50 SUBL $text/template/parse.autotmp_1293(SB), SP
After:
build.go:142 0x10ee 83ec50 SUBL $0x50, SP
Fixes #7947.
LGTM=rsc
R=rsc, 0intro
CC=golang-codereviews
https://golang.org/cl/93520045
Diffstat (limited to 'src/cmd/objdump')
| -rw-r--r-- | src/cmd/objdump/objdump_test.go | 4 | ||||
| -rw-r--r-- | src/cmd/objdump/plan9obj.go | 15 |
2 files changed, 15 insertions, 4 deletions
diff --git a/src/cmd/objdump/objdump_test.go b/src/cmd/objdump/objdump_test.go index 354e5d407a..2c61c484cb 100644 --- a/src/cmd/objdump/objdump_test.go +++ b/src/cmd/objdump/objdump_test.go @@ -155,10 +155,6 @@ var armNeed = []string{ // can handle that one. func TestDisasm(t *testing.T) { - if runtime.GOOS == "plan9" { - t.Skip("skipping test; see http://golang.org/issue/7947") - } - tmp, exe := buildObjdump(t) defer os.RemoveAll(tmp) diff --git a/src/cmd/objdump/plan9obj.go b/src/cmd/objdump/plan9obj.go index 5434f8e440..34462f31c5 100644 --- a/src/cmd/objdump/plan9obj.go +++ b/src/cmd/objdump/plan9obj.go @@ -12,6 +12,15 @@ import ( "sort" ) +var validSymType = map[rune]bool{ + 'T': true, + 't': true, + 'D': true, + 'd': true, + 'B': true, + 'b': true, +} + func plan9Symbols(f *os.File) (syms []Sym, goarch string) { p, err := plan9obj.NewFile(f) if err != nil { @@ -31,11 +40,17 @@ func plan9Symbols(f *os.File) (syms []Sym, goarch string) { // We infer the size of a symbol by looking at where the next symbol begins. var addrs []uint64 for _, s := range plan9Syms { + if !validSymType[s.Type] { + continue + } addrs = append(addrs, s.Value) } sort.Sort(uint64s(addrs)) for _, s := range plan9Syms { + if !validSymType[s.Type] { + continue + } sym := Sym{Addr: s.Value, Name: s.Name, Code: rune(s.Type)} i := sort.Search(len(addrs), func(x int) bool { return addrs[x] > s.Value }) if i < len(addrs) { |
