From 9ade656458416e820337c3ba3d82d5f743cedcad Mon Sep 17 00:00:00 2001 From: Taras Madan Date: Thu, 25 Jan 2024 11:57:50 +0100 Subject: pkg/cover: fix missing frames and export Inline by /rawcoverfiles --- pkg/cover/backend/backend.go | 1 + pkg/cover/backend/dwarf.go | 1 + pkg/cover/html.go | 19 +++++++++++++------ pkg/cover/report.go | 9 --------- 4 files changed, 15 insertions(+), 15 deletions(-) (limited to 'pkg') diff --git a/pkg/cover/backend/backend.go b/pkg/cover/backend/backend.go index 3bd95a6fa..4bffcd65a 100644 --- a/pkg/cover/backend/backend.go +++ b/pkg/cover/backend/backend.go @@ -51,6 +51,7 @@ type Frame struct { PC uint64 Name string Path string + Inline bool Range } diff --git a/pkg/cover/backend/dwarf.go b/pkg/cover/backend/dwarf.go index 924ae151a..f69fbd82c 100644 --- a/pkg/cover/backend/dwarf.go +++ b/pkg/cover/backend/dwarf.go @@ -387,6 +387,7 @@ func symbolizeModule(target *targets.Target, objDir, srcDir, buildDir string, PC: frame.PC + mod.Addr, Name: name, Path: path, + Inline: frame.Inline, Range: Range{ StartLine: frame.Line, StartCol: 0, diff --git a/pkg/cover/html.go b/pkg/cover/html.go index 92e5cf2bd..bbfc11536 100644 --- a/pkg/cover/html.go +++ b/pkg/cover/html.go @@ -184,17 +184,24 @@ func (rg *ReportGenerator) DoRawCoverFiles(w http.ResponseWriter, progs []Prog, if err := rg.lazySymbolize(progs); err != nil { return err } - sort.Slice(rg.Frames, func(i, j int) bool { - return rg.Frames[i].PC < rg.Frames[j].PC + + resFrames := rg.Frames + + sort.Slice(resFrames, func(i, j int) bool { + fl, fr := resFrames[i], resFrames[j] + if fl.PC == fr.PC { + return !fl.Inline && fr.Inline // non-inline first + } + return fl.PC < fr.PC }) w.Header().Set("Content-Type", "text/plain; charset=utf-8") buf := bufio.NewWriter(w) - fmt.Fprintf(buf, "PC,Module,Offset,Filename,StartLine,EndLine\n") - for _, frame := range rg.Frames { + fmt.Fprintf(buf, "PC,Module,Offset,Filename,Inline,StartLine,EndLine\n") + for _, frame := range resFrames { offset := frame.PC - frame.Module.Addr - fmt.Fprintf(buf, "0x%x,%v,0x%x,%v,%v,%v\n", - frame.PC, frame.Module.Name, offset, frame.Name, frame.StartLine, frame.EndLine) + fmt.Fprintf(buf, "0x%x,%v,0x%x,%v,%v,%v,%v\n", + frame.PC, frame.Module.Name, offset, frame.Name, frame.Inline, frame.StartLine, frame.EndLine) } buf.Flush() return nil diff --git a/pkg/cover/report.go b/pkg/cover/report.go index d150fcab7..2d1b8bd2e 100644 --- a/pkg/cover/report.go +++ b/pkg/cover/report.go @@ -181,15 +181,6 @@ func (rg *ReportGenerator) lazySymbolize(progs []Prog) error { return err } rg.Frames = append(rg.Frames, frames...) - uniqueFrames := make(map[uint64]bool) - var finalFrames []backend.Frame - for _, frame := range rg.Frames { - if !uniqueFrames[frame.PC] { - uniqueFrames[frame.PC] = true - finalFrames = append(finalFrames, frame) - } - } - rg.Frames = finalFrames for sym := range symbolize { sym.Symbolized = true } -- cgit mrf-deployment