From 59a32682c0fd52c0d7a2cd9db0aac63a9e890825 Mon Sep 17 00:00:00 2001 From: Michael Tuexen Date: Fri, 15 Mar 2019 16:26:08 +0100 Subject: pkg/cover: further improve prefix computation When computing the prefix, take the covered and uncovered PCs into account. --- pkg/cover/report.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'pkg') diff --git a/pkg/cover/report.go b/pkg/cover/report.go index 0b2600f22..3f00f75da 100644 --- a/pkg/cover/report.go +++ b/pkg/cover/report.go @@ -55,13 +55,14 @@ func MakeReportGenerator(vmlinux, srcDir, arch string) (*ReportGenerator, error) } func (rg *ReportGenerator) Do(w io.Writer, pcs []uint64) error { + var prefix string if len(pcs) == 0 { return fmt.Errorf("no coverage data available") } for i, pc := range pcs { pcs[i] = PreviousInstructionPC(rg.arch, pc) } - covered, _, err := rg.symbolize(pcs) + covered, prefix1, err := rg.symbolize(pcs) if err != nil { return err } @@ -69,10 +70,21 @@ func (rg *ReportGenerator) Do(w io.Writer, pcs []uint64) error { return fmt.Errorf("'%s' does not have debug info (set CONFIG_DEBUG_INFO=y)", rg.vmlinux) } uncoveredPCs := rg.uncoveredPcsInFuncs(pcs) - uncovered, prefix, err := rg.symbolize(uncoveredPCs) + uncovered, prefix2, err := rg.symbolize(uncoveredPCs) if err != nil { return err } + if len(uncoveredPCs) == 0 { + prefix = prefix1 + } else { + i := 0 + for ; i < len(prefix1) && i < len(prefix2); i++ { + if prefix1[i] != prefix2[i] { + break + } + } + prefix = prefix1[:i] + } return rg.generate(w, prefix, covered, uncovered) } -- cgit mrf-deployment