diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2021-03-16 17:18:58 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2021-03-18 09:17:51 +0100 |
| commit | c86aca3f01de03aaadc6ef5006846bbba1e5a154 (patch) | |
| tree | 3129f6f7c318144ad5c26efcd4ac2d72d44f1bdb /pkg/cover/report.go | |
| parent | 9c04290738141669bf76cc2d861ffd633c90c73c (diff) | |
pkg/cover: use symbols to split PCs by module
We already find symbol for every PC in lazySymbolize.
We can just use that to map PCs to modules instead
of the additional modules sorting/searching.
Diffstat (limited to 'pkg/cover/report.go')
| -rw-r--r-- | pkg/cover/report.go | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/pkg/cover/report.go b/pkg/cover/report.go index 651bc62f2..b622af4a4 100644 --- a/pkg/cover/report.go +++ b/pkg/cover/report.go @@ -110,11 +110,7 @@ func (rg *ReportGenerator) prepareFileMap(progs []Prog) (map[string]*file, error for _, frame := range rg.Frames { f := getFile(files, frame.Name, frame.Path) ln := f.lines[frame.StartLine] - pc := frame.PC - if frame.Module.Name != "" { - pc += frame.Module.Addr - } - coveredBy := progPCs[pc] + coveredBy := progPCs[frame.PC] if len(coveredBy) == 0 { f.uncovered = append(f.uncovered, frame.Range) continue @@ -172,7 +168,7 @@ func (rg *ReportGenerator) lazySymbolize(progs []Prog) error { } symbolize := make(map[*backend.Symbol]bool) uniquePCs := make(map[uint64]bool) - var pcs []uint64 + pcs := make(map[*backend.Module][]uint64) for _, prog := range progs { for _, pc := range prog.PCs { if uniquePCs[pc] { @@ -180,21 +176,16 @@ func (rg *ReportGenerator) lazySymbolize(progs []Prog) error { } uniquePCs[pc] = true sym := rg.findSymbol(pc) - if sym == nil { + if sym == nil || (sym.Symbolized || symbolize[sym]) { continue } - if !sym.Symbolized && !symbolize[sym] { - symbolize[sym] = true - pcs = append(pcs, sym.PCs...) - } + symbolize[sym] = true + pcs[sym.Module] = append(pcs[sym.Module], sym.PCs...) } } if len(uniquePCs) == 0 { return fmt.Errorf("no coverage collected so far") } - if len(pcs) == 0 { - return nil - } frames, err := rg.Symbolize(pcs) if err != nil { return err |
