aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2022-03-23 16:16:33 +0000
committerAleksandr Nogikh <wp32pw@gmail.com>2022-03-28 12:03:35 +0200
commitee339263ba6b1a08006ea3e8e1862e15181a640d (patch)
tree29862861fc231b07aded7c6bf45e5cde45711d16 /pkg
parentcdcc8b96dd9215a47ce5ce1074567a1be93eda5f (diff)
syz-manager: display raw coverage
Diffstat (limited to 'pkg')
-rw-r--r--pkg/cover/html.go46
-rw-r--r--pkg/cover/report.go23
-rw-r--r--pkg/cover/report_test.go2
3 files changed, 46 insertions, 25 deletions
diff --git a/pkg/cover/html.go b/pkg/cover/html.go
index 4e6e89cef..98572b7f8 100644
--- a/pkg/cover/html.go
+++ b/pkg/cover/html.go
@@ -63,7 +63,8 @@ func (rg *ReportGenerator) DoHTML(w io.Writer, progs []Prog, coverFilter map[uin
return err
}
d := &templateData{
- Root: new(templateDir),
+ Root: new(templateDir),
+ RawCover: rg.rawCoverEnabled,
}
haveProgs := len(progs) > 1 || progs[0].Data != ""
fileOpenErr := fmt.Errorf("failed to open/locate any source file")
@@ -133,7 +134,10 @@ func (rg *ReportGenerator) DoHTML(w io.Writer, progs []Prog, coverFilter map[uin
return fileOpenErr
}
for _, prog := range progs {
- d.Progs = append(d.Progs, template.HTML(html.EscapeString(prog.Data)))
+ d.Progs = append(d.Progs, templateProg{
+ Sig: prog.Sig,
+ Content: template.HTML(html.EscapeString(prog.Data)),
+ })
}
processDir(d.Root)
@@ -163,19 +167,23 @@ func (rg *ReportGenerator) DoRawCoverFiles(w http.ResponseWriter, progs []Prog,
func (rg *ReportGenerator) DoRawCover(w http.ResponseWriter, progs []Prog, coverFilter map[uint32]uint32) {
progs = fixUpPCs(rg.target.Arch, progs, coverFilter)
var pcs []uint64
- uniquePCs := make(map[uint64]bool)
- for _, prog := range progs {
- for _, pc := range prog.PCs {
- if uniquePCs[pc] {
- continue
+ if len(progs) == 1 && rg.rawCoverEnabled {
+ pcs = append([]uint64{}, progs[0].PCs...)
+ } else {
+ uniquePCs := make(map[uint64]bool)
+ for _, prog := range progs {
+ for _, pc := range prog.PCs {
+ if uniquePCs[pc] {
+ continue
+ }
+ uniquePCs[pc] = true
+ pcs = append(pcs, pc)
}
- uniquePCs[pc] = true
- pcs = append(pcs, pc)
}
+ sort.Slice(pcs, func(i, j int) bool {
+ return pcs[i] < pcs[j]
+ })
}
- sort.Slice(pcs, func(i, j int) bool {
- return pcs[i] < pcs[j]
- })
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
buf := bufio.NewWriter(w)
@@ -718,8 +726,14 @@ func parseFile(fn string) ([][]byte, error) {
type templateData struct {
Root *templateDir
Contents []template.HTML
- Progs []template.HTML
+ Progs []templateProg
Functions []template.HTML
+ RawCover bool
+}
+
+type templateProg struct {
+ Sig string
+ Content template.HTML
}
type templateBase struct {
@@ -852,8 +866,12 @@ var coverTemplate = template.Must(template.New("").Parse(`
{{range $i, $f := .Contents}}
<pre class="file" id="contents_{{$i}}">{{$f}}</pre>
{{end}}
+ {{$base := .}}
{{range $i, $p := .Progs}}
- <pre class="file" id="prog_{{$i}}">{{$p}}</pre>
+ <pre class="file" id="prog_{{$i}}">
+{{if $base.RawCover}}<a href="/debuginput?sig={{$p.Sig}}">[raw coverage]</a><br />{{end}}
+{{$p.Content}}
+</pre>
{{end}}
{{range $i, $p := .Functions}}
<div class="function list" id="function_{{$i}}">{{$p}}</div>
diff --git a/pkg/cover/report.go b/pkg/cover/report.go
index 788603119..3423d9b09 100644
--- a/pkg/cover/report.go
+++ b/pkg/cover/report.go
@@ -14,14 +14,16 @@ import (
)
type ReportGenerator struct {
- target *targets.Target
- srcDir string
- buildDir string
- subsystem []mgrconfig.Subsystem
+ target *targets.Target
+ srcDir string
+ buildDir string
+ subsystem []mgrconfig.Subsystem
+ rawCoverEnabled bool
*backend.Impl
}
type Prog struct {
+ Sig string
Data string
PCs []uint64
}
@@ -29,7 +31,7 @@ type Prog struct {
var RestorePC = backend.RestorePC
func MakeReportGenerator(target *targets.Target, vm, objDir, srcDir, buildDir string, subsystem []mgrconfig.Subsystem,
- moduleObj []string, modules []host.KernelModule) (*ReportGenerator, error) {
+ moduleObj []string, modules []host.KernelModule, rawCover bool) (*ReportGenerator, error) {
impl, err := backend.Make(target, vm, objDir, srcDir, buildDir, moduleObj, modules)
if err != nil {
return nil, err
@@ -39,11 +41,12 @@ func MakeReportGenerator(target *targets.Target, vm, objDir, srcDir, buildDir st
Paths: []string{""},
})
rg := &ReportGenerator{
- target: target,
- srcDir: srcDir,
- buildDir: buildDir,
- subsystem: subsystem,
- Impl: impl,
+ target: target,
+ srcDir: srcDir,
+ buildDir: buildDir,
+ subsystem: subsystem,
+ rawCoverEnabled: rawCover,
+ Impl: impl,
}
return rg, nil
}
diff --git a/pkg/cover/report_test.go b/pkg/cover/report_test.go
index a08fe9d1c..0f44c6e80 100644
--- a/pkg/cover/report_test.go
+++ b/pkg/cover/report_test.go
@@ -260,7 +260,7 @@ func generateReport(t *testing.T, target *targets.Target, test Test) ([]byte, []
},
}
- rg, err := MakeReportGenerator(target, "", dir, dir, dir, subsystem, nil, nil)
+ rg, err := MakeReportGenerator(target, "", dir, dir, dir, subsystem, nil, nil, false)
if err != nil {
return nil, nil, err
}