mirror of
https://github.com/golang/go
synced 2024-09-18 15:32:18 +00:00
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 <austin@google.com>
This commit is contained in:
parent
b97e40fc30
commit
e609bd373f
|
@ -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 {
|
||||
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 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
|
||||
}
|
||||
}
|
||||
}
|
||||
t.Fatalf("did not find file:line for %#x (main.main)", addr)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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-")
|
||||
|
|
Loading…
Reference in a new issue