x/debug: update dwarf tests. Change-Id: I191f4bf193be966673a1b96592fe2b864549dfa8 Reviewed-on: https://go-review.googlesource.com/24244 Reviewed-by: Dave Day <djd@golang.org>
diff --git a/dwarf/frame_test.go b/dwarf/frame_test.go index 6a997a6..2bf41f5 100644 --- a/dwarf/frame_test.go +++ b/dwarf/frame_test.go
@@ -13,6 +13,8 @@ "runtime" "strings" "testing" + + "golang.org/x/debug/dwarf" ) var ( @@ -48,7 +50,7 @@ } // This command builds pcsptest from testdata/pcsptest.go. pcsptestBinary = filepath.Join(pcspTempDir, "pcsptest") - command := fmt.Sprintf("go tool 6g -o %s.6 testdata/pcsptest.go && go tool 6l -H %s -o %s %s.6", + command := fmt.Sprintf("go tool compile -o %s.6 testdata/pcsptest.go && go tool link -H %s -o %s %s.6", pcsptestBinary, runtime.GOOS, pcsptestBinary, pcsptestBinary) cmd := exec.Command("sh", "-c", command) cmd.Stdout = os.Stdout @@ -77,13 +79,17 @@ if err != nil { t.Fatal(err) } - startPC, err := data.LookupFunction("main.test") + entry, err := data.LookupFunction("main.test") if err != nil { t.Fatal("lookup startPC:", err) } - endPC, err := data.LookupFunction("main.afterTest") - if err != nil { - t.Fatal("lookup endPC:", err) + startPC, ok := entry.Val(dwarf.AttrLowpc).(uint64) + if !ok { + t.Fatal(`DWARF data for function "main.test" has no low PC`) + } + endPC, ok := entry.Val(dwarf.AttrHighpc).(uint64) + if !ok { + t.Fatal(`DWARF data for function "main.test" has no high PC`) } const addrSize = 8 // TODO: Assumes amd64.
diff --git a/dwarf/pclntab_test.go b/dwarf/pclntab_test.go index d07e632..31ceb78 100644 --- a/dwarf/pclntab_test.go +++ b/dwarf/pclntab_test.go
@@ -56,7 +56,7 @@ // the resulting binary looks like it was built from pclinetest.s, // but we have renamed it to keep it away from the go tool. pclinetestBinary = filepath.Join(pclineTempDir, "pclinetest") - command := fmt.Sprintf("go tool 6a -o %s.6 ../../gosym/pclinetest.asm && go tool 6l -H %s -E main -o %s %s.6", + command := fmt.Sprintf("go tool asm -o %s.6 ../gosym/pclinetest.asm && go tool link -H %s -E main -o %s %s.6", pclinetestBinary, runtime.GOOS, pclinetestBinary, pclinetestBinary) cmd := exec.Command("sh", "-c", command) cmd.Stdout = os.Stdout @@ -115,20 +115,42 @@ } // Test PCToLine. - // TODO: Do much more than this. - pc, err := data.LookupFunction("linefrompc") + entry, err := data.LookupFunction("linefrompc") if err != nil { t.Fatal(err) } - file, line, err := data.PCToLine(pc) - if err != nil { - t.Fatal(err) + pc, ok := entry.Val(AttrLowpc).(uint64) + if !ok { + t.Fatal(`DWARF data for function "linefrompc" has no PC`) } - // We expect <longpath>/pclinetest.asm, line 13. - if !strings.HasSuffix(file, "/pclinetest.asm") { - t.Errorf("got %s; want %s", file, ".../pclinetest.asm") - } - if line != 13 { - t.Errorf("got %d; want %d", line, 13) + for _, tt := range []struct { + offset, want uint64 + }{ + {0, 2}, + {1, 3}, + {2, 4}, + {3, 4}, + {4, 5}, + {6, 5}, + {7, 6}, + {11, 6}, + {12, 7}, + {19, 7}, + {20, 8}, + {32, 8}, + {33, 9}, + {53, 9}, + {54, 10}, + } { + file, line, err := data.PCToLine(pc + tt.offset) + if err != nil { + t.Fatal(err) + } + if !strings.HasSuffix(file, "/pclinetest.asm") { + t.Errorf("got %s; want %s", file, ".../pclinetest.asm") + } + if line != tt.want { + t.Errorf("line for offset %d: got %d; want %d", tt.offset, line, tt.want) + } } }