aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2024-01-25 11:57:50 +0100
committerTaras Madan <tarasmadan@google.com>2024-01-25 14:09:46 +0000
commit9ade656458416e820337c3ba3d82d5f743cedcad (patch)
tree73fdc7e893579b5403b3105c4c25396e0386ea72 /pkg
parent1e153dc8b31e685ca8495576db4f8c077585e39c (diff)
pkg/cover: fix missing frames and export Inline by /rawcoverfiles
Diffstat (limited to 'pkg')
-rw-r--r--pkg/cover/backend/backend.go1
-rw-r--r--pkg/cover/backend/dwarf.go1
-rw-r--r--pkg/cover/html.go19
-rw-r--r--pkg/cover/report.go9
4 files changed, 15 insertions, 15 deletions
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
}