Skip to content

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 golang#7947.

LGTM=rsc
R=rsc, 0intro
CC=golang-codereviews
https://golang.org/cl/93520045
  • Loading branch information
ality authored and wheatman committed Jun 20, 2018
1 parent 51a1a3f commit ef03809
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
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
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 ef03809

Please sign in to comment.