From e5cf022016fc2e488a9a7c20e8736e6c47cc1593 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sat, 12 Dec 2020 13:52:51 +0100 Subject: 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. --- pkg/cover/backend/backend.go | 14 ++++++++++++-- pkg/cover/backend/elf.go | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) (limited to 'pkg/cover/backend') 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 { -- cgit mrf-deployment