| // Copyright 2012 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package dwarf_test |
| |
| import ( |
| . "debug/dwarf" |
| "path/filepath" |
| "testing" |
| ) |
| |
| type lineTest struct { |
| pc uint64 |
| file string |
| line int |
| } |
| |
| var elfLineTests = [...]lineTest{ |
| {0x4004c4, "typedef.c", 83}, |
| {0x4004c8, "typedef.c", 84}, |
| {0x4004ca, "typedef.c", 84}, |
| {0x4003e0, "", 0}, |
| } |
| |
| var machoLineTests = [...]lineTest{ |
| {0x0, "typedef.c", 83}, |
| } |
| |
| func TestLineElf(t *testing.T) { |
| testLine(t, elfData(t, "testdata/typedef.elf"), elfLineTests[:], "elf") |
| } |
| |
| func TestLineMachO(t *testing.T) { |
| testLine(t, machoData(t, "testdata/typedef.macho"), machoLineTests[:], "macho") |
| } |
| |
| func testLine(t *testing.T, d *Data, tests []lineTest, kind string) { |
| for _, v := range tests { |
| file, line, err := d.FileLine(v.pc) |
| if err != nil { |
| t.Errorf("%s: %v", kind, err) |
| continue |
| } |
| if file != "" { |
| file = filepath.Base(file) |
| } |
| if file != v.file || line != v.line { |
| t.Errorf("%s: for %d have %q:%d want %q:%d", |
| kind, v.pc, file, line, v.file, v.line) |
| } |
| } |
| } |