aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/objdump
diff options
context:
space:
mode:
authorAnthony Martin <ality@pbrane.org>2014-05-21 23:24:38 +0200
committerDavid du Colombier <0intro@gmail.com>2014-05-21 23:24:38 +0200
commiteb34288ad17bd624cfb4f40a3ab3095698624d95 (patch)
tree3b7e0670fe00e5f7331f246fa7795ab9a8ef9b8a /src/cmd/objdump
parentcab54408da90caac6e1f1d6eaeb4166eeb98d899 (diff)
downloadgo-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.go4
-rw-r--r--src/cmd/objdump/plan9obj.go15
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) {