]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: use SeekPC in testDWARF
authorIan Lance Taylor <iant@golang.org>
Fri, 7 Dec 2018 23:00:49 +0000 (15:00 -0800)
committerIan Lance Taylor <iant@golang.org>
Tue, 26 Feb 2019 23:41:29 +0000 (23:41 +0000)
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 <austin@google.com>
src/cmd/link/dwarf_test.go
src/cmd/link/link_test.go

index 2c01456f6b0e39f65bfae8bd0fe2e848dbfccd9a..710457aeb9056610f25601955f04cfc505fcdced 100644 (file)
@@ -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)
                })
        }
 }
index 74238a200092449e7eaba67c8a2b9d9c5e807732..5200c3a6f084ca4f7a320eeb6ccb452db01de191 100644 (file)
@@ -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-")