diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2020-12-12 13:52:51 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2020-12-13 18:56:36 +0100 |
| commit | e5cf022016fc2e488a9a7c20e8736e6c47cc1593 (patch) | |
| tree | d6e2afb8a5a11ef4a7a317a4d004803e2a511077 /pkg/cover/backend | |
| parent | 3a7cbae43a7c07056c6f5219bc68613087287333 (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.go | 14 | ||||
| -rw-r--r-- | pkg/cover/backend/elf.go | 15 |
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 { |
