Skip to content
This repository has been archived by the owner on May 2, 2018. It is now read-only.

Commit

Permalink
cmd/objdump: fix dissasembly of Plan 9 object files
Browse files Browse the repository at this point in the history
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
  • Loading branch information
ality authored and 0intro committed May 21, 2014
1 parent cab5440 commit eb34288
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
4 changes: 0 additions & 4 deletions src/cmd/objdump/objdump_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
15 changes: 15 additions & 0 deletions src/cmd/objdump/plan9obj.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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) {
Expand Down

0 comments on commit eb34288

Please sign in to comment.