aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/cover/backend
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-12-12 13:52:51 +0100
committerDmitry Vyukov <dvyukov@google.com>2020-12-13 18:56:36 +0100
commite5cf022016fc2e488a9a7c20e8736e6c47cc1593 (patch)
treed6e2afb8a5a11ef4a7a317a4d004803e2a511077 /pkg/cover/backend
parent3a7cbae43a7c07056c6f5219bc68613087287333 (diff)
pkg/cover: support compiler frontend coverage
Currently we only support compiler middle/backenend coverage where we can map coverage points to source line. Support better frontend coverage where coverage points map to source code ranges start line:col - end line:col.
Diffstat (limited to 'pkg/cover/backend')
-rw-r--r--pkg/cover/backend/backend.go14
-rw-r--r--pkg/cover/backend/elf.go15
2 files changed, 24 insertions, 5 deletions
diff --git a/pkg/cover/backend/backend.go b/pkg/cover/backend/backend.go
index 6df629d74..13ae3b400 100644
--- a/pkg/cover/backend/backend.go
+++ b/pkg/cover/backend/backend.go
@@ -6,7 +6,6 @@ package backend
import (
"fmt"
- "github.com/google/syzkaller/pkg/symbolizer"
"github.com/google/syzkaller/sys/targets"
)
@@ -34,10 +33,21 @@ type Symbol struct {
}
type Frame struct {
- symbolizer.Frame
+ PC uint64
+ Name string
Path string
+ Range
+}
+
+type Range struct {
+ StartLine int
+ StartCol int
+ EndLine int
+ EndCol int
}
+const LineEnd = 1 << 30
+
func Make(target *targets.Target, vm, objDir, srcDir, buildDir string) (*Impl, error) {
if objDir == "" {
return nil, fmt.Errorf("kernel obj directory is not specified")
diff --git a/pkg/cover/backend/elf.go b/pkg/cover/backend/elf.go
index 848422c76..12231c2d0 100644
--- a/pkg/cover/backend/elf.go
+++ b/pkg/cover/backend/elf.go
@@ -293,9 +293,18 @@ func symbolize(target *targets.Target, objDir, srcDir, buildDir, obj string, pcs
err0 = res.err
}
for _, frame := range res.frames {
- wrap := Frame{frame, ""}
- wrap.File, wrap.Path = cleanPath(frame.File, objDir, srcDir, buildDir)
- frames = append(frames, wrap)
+ name, path := cleanPath(frame.File, objDir, srcDir, buildDir)
+ frames = append(frames, Frame{
+ PC: frame.PC,
+ Name: name,
+ Path: path,
+ Range: Range{
+ StartLine: frame.Line,
+ StartCol: 0,
+ EndLine: frame.Line,
+ EndCol: LineEnd,
+ },
+ })
}
}
if err0 != nil {