2014-08-04 23:02:08 +00:00
|
|
|
package frame
|
|
|
|
|
|
|
|
import (
|
|
|
|
"path/filepath"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/derekparker/dbg/dwarf/_helper"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestFDEForPC(t *testing.T) {
|
|
|
|
fde1 := &FrameDescriptionEntry{AddressRange: &addrange{begin: 100, end: 200}}
|
|
|
|
fde2 := &FrameDescriptionEntry{AddressRange: &addrange{begin: 50, end: 99}}
|
|
|
|
fde3 := &FrameDescriptionEntry{AddressRange: &addrange{begin: 0, end: 49}}
|
|
|
|
fde4 := &FrameDescriptionEntry{AddressRange: &addrange{begin: 201, end: 245}}
|
|
|
|
|
|
|
|
tree := NewFrameIndex()
|
|
|
|
tree.Put(fde1)
|
|
|
|
tree.Put(fde2)
|
|
|
|
tree.Put(fde3)
|
|
|
|
tree.Put(fde4)
|
|
|
|
|
2014-08-07 16:03:42 +00:00
|
|
|
node, ok := tree.Find(Addr(35))
|
2014-08-04 23:02:08 +00:00
|
|
|
if !ok {
|
|
|
|
t.Fatal("Could not find FDE")
|
|
|
|
}
|
|
|
|
|
2014-08-07 16:03:42 +00:00
|
|
|
if node != fde3 {
|
2014-08-04 23:02:08 +00:00
|
|
|
t.Fatal("Got incorrect fde")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkFDEForPC(b *testing.B) {
|
|
|
|
var (
|
|
|
|
testfile, _ = filepath.Abs("../../_fixtures/testnextprog")
|
|
|
|
dbframe = dwarfhelper.GrabDebugFrameSection(testfile, b)
|
|
|
|
fdes = Parse(dbframe)
|
|
|
|
gsd = dwarfhelper.GosymData(testfile, b)
|
|
|
|
)
|
|
|
|
|
|
|
|
pc, _, _ := gsd.LineToPC("/usr/local/go/src/pkg/runtime/memmove_amd64.s", 33)
|
|
|
|
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
_, _ = fdes.FDEForPC(pc)
|
|
|
|
}
|
|
|
|
}
|