diff options
| author | Michael Tuexen <tuexen@freebsd.org> | 2019-03-15 16:26:08 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2019-05-29 14:58:36 +0200 |
| commit | 59a32682c0fd52c0d7a2cd9db0aac63a9e890825 (patch) | |
| tree | b20ee6689d3ae820f6f83cf3056f4b0cba268fe1 /pkg | |
| parent | 17c2df6f2045331ffd8923c03fb3fa3f1aff7b16 (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.go | 16 |
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) } |
