aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorMichael Tuexen <tuexen@freebsd.org>2019-03-15 16:26:08 +0100
committerDmitry Vyukov <dvyukov@google.com>2019-05-29 14:58:36 +0200
commit59a32682c0fd52c0d7a2cd9db0aac63a9e890825 (patch)
treeb20ee6689d3ae820f6f83cf3056f4b0cba268fe1 /pkg
parent17c2df6f2045331ffd8923c03fb3fa3f1aff7b16 (diff)
pkg/cover: further improve prefix computation
When computing the prefix, take the covered and uncovered PCs into account.
Diffstat (limited to 'pkg')
-rw-r--r--pkg/cover/report.go16
1 files changed, 14 insertions, 2 deletions
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)
}