diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2022-03-23 16:16:33 +0000 |
|---|---|---|
| committer | Aleksandr Nogikh <wp32pw@gmail.com> | 2022-03-28 12:03:35 +0200 |
| commit | ee339263ba6b1a08006ea3e8e1862e15181a640d (patch) | |
| tree | 29862861fc231b07aded7c6bf45e5cde45711d16 /pkg | |
| parent | cdcc8b96dd9215a47ce5ce1074567a1be93eda5f (diff) | |
syz-manager: display raw coverage
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/cover/html.go | 46 | ||||
| -rw-r--r-- | pkg/cover/report.go | 23 | ||||
| -rw-r--r-- | pkg/cover/report_test.go | 2 |
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 } |
