From e609bd373fc9909758b6f4d2403c155e6cf55e23 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 7 Dec 2018 15:00:49 -0800 Subject: [PATCH] cmd/link: use SeekPC in testDWARF This makes the tests slightly faster, though the bulk of the time is still spent building the test programs. Also run some tests in parallel. Updates #26470 Change-Id: Ia5ec2b99831d69c426b43dbab80613aa03e705f5 Reviewed-on: https://go-review.googlesource.com/c/153258 Reviewed-by: Austin Clements --- src/cmd/link/dwarf_test.go | 53 ++++++++++++-------------------------- src/cmd/link/link_test.go | 4 +++ 2 files changed, 21 insertions(+), 36 deletions(-) diff --git a/src/cmd/link/dwarf_test.go b/src/cmd/link/dwarf_test.go index 2c01456f6b..710457aeb9 100644 --- a/src/cmd/link/dwarf_test.go +++ b/src/cmd/link/dwarf_test.go @@ -8,7 +8,6 @@ import ( "cmd/internal/objfile" "debug/dwarf" "internal/testenv" - "io" "io/ioutil" "os" "os/exec" @@ -46,6 +45,8 @@ func testDWARF(t *testing.T, buildmode string, expectDWARF bool, env ...string) for _, prog := range []string{"testprog", "testprogcgo"} { t.Run(prog, func(t *testing.T) { + t.Parallel() + exe := filepath.Join(tmpDir, prog+".exe") dir := "../../runtime/testdata/" + prog cmd := exec.Command(testenv.GoToolPath(t), "build", "-o", exe) @@ -109,43 +110,23 @@ func testDWARF(t *testing.T, buildmode string, expectDWARF bool, env ...string) wantFile := path.Join(prog, "main.go") wantLine := 24 r := d.Reader() + entry, err := r.SeekPC(addr) + if err != nil { + t.Fatal(err) + } + lr, err := d.LineReader(entry) + if err != nil { + t.Fatal(err) + } var line dwarf.LineEntry - for { - cu, err := r.Next() - if err != nil { - t.Fatal(err) - } - if cu == nil { - break - } - if cu.Tag != dwarf.TagCompileUnit { - r.SkipChildren() - continue - } - if cu.Val(dwarf.AttrStmtList) == nil { - continue - } - lr, err := d.LineReader(cu) - if err != nil { - t.Fatal(err) - } - for { - err := lr.Next(&line) - if err == io.EOF { - break - } - if err != nil { - t.Fatal(err) - } - if line.Address == addr { - if !strings.HasSuffix(line.File.Name, wantFile) || line.Line != wantLine { - t.Errorf("%#x is %s:%d, want %s:%d", addr, line.File.Name, line.Line, filepath.Join("...", wantFile), wantLine) - } - return - } - } + if err := lr.SeekPC(addr, &line); err == dwarf.ErrUnknownPC { + t.Fatalf("did not find file:line for %#x (main.main)", addr) + } else if err != nil { + t.Fatal(err) + } + if !strings.HasSuffix(line.File.Name, wantFile) || line.Line != wantLine { + t.Errorf("%#x is %s:%d, want %s:%d", addr, line.File.Name, line.Line, filepath.Join("...", wantFile), wantLine) } - t.Fatalf("did not find file:line for %#x (main.main)", addr) }) } } diff --git a/src/cmd/link/link_test.go b/src/cmd/link/link_test.go index 74238a2000..5200c3a6f0 100644 --- a/src/cmd/link/link_test.go +++ b/src/cmd/link/link_test.go @@ -39,6 +39,8 @@ func TestLargeSymName(t *testing.T) { } func TestIssue21703(t *testing.T) { + t.Parallel() + testenv.MustHaveGoBuild(t) const source = ` @@ -78,6 +80,8 @@ func main() {} // to, for example, save facts produced by a modular static analysis // such as golang.org/x/tools/go/analysis. func TestIssue28429(t *testing.T) { + t.Parallel() + testenv.MustHaveGoBuild(t) tmpdir, err := ioutil.TempDir("", "issue28429-") -- 2.50.0