diff options
| author | Taras Madan <tarasmadan@google.com> | 2025-02-18 12:02:15 +0100 |
|---|---|---|
| committer | Taras Madan <tarasmadan@google.com> | 2025-02-28 13:35:55 +0000 |
| commit | a32cfd24f5f44c6c4ad9960549b824ee6b5a75f6 (patch) | |
| tree | 77613a238083df3b0c064a5f220ff8835d31c349 /pkg/cover | |
| parent | 17d36e51d0fc3e756c450827100222e1f09eb2f0 (diff) | |
pkg/cover: use frame pointers instead
Diffstat (limited to 'pkg/cover')
| -rw-r--r-- | pkg/cover/backend/backend.go | 4 | ||||
| -rw-r--r-- | pkg/cover/backend/dwarf.go | 14 | ||||
| -rw-r--r-- | pkg/cover/backend/gvisor.go | 16 | ||||
| -rw-r--r-- | pkg/cover/report.go | 2 |
4 files changed, 18 insertions, 18 deletions
diff --git a/pkg/cover/backend/backend.go b/pkg/cover/backend/backend.go index a660d02e4..7e8e7f8b8 100644 --- a/pkg/cover/backend/backend.go +++ b/pkg/cover/backend/backend.go @@ -14,8 +14,8 @@ import ( type Impl struct { Units []*CompileUnit Symbols []*Symbol - Frames []Frame - Symbolize func(pcs map[*vminfo.KernelModule][]uint64) ([]Frame, error) + Frames []*Frame + Symbolize func(pcs map[*vminfo.KernelModule][]uint64) ([]*Frame, error) CallbackPoints []uint64 PreciseCoverage bool } diff --git a/pkg/cover/backend/dwarf.go b/pkg/cover/backend/dwarf.go index 7fc91413f..a6045b91e 100644 --- a/pkg/cover/backend/dwarf.go +++ b/pkg/cover/backend/dwarf.go @@ -243,7 +243,7 @@ func makeDWARFUnsafe(params *dwarfParams) (*Impl, error) { impl := &Impl{ Units: allUnits, Symbols: allSymbols, - Symbolize: func(pcs map[*vminfo.KernelModule][]uint64) ([]Frame, error) { + Symbolize: func(pcs map[*vminfo.KernelModule][]uint64) ([]*Frame, error) { return symbolize(target, &interner, objDir, srcDir, buildDir, splitBuildDelimiters, pcs) }, CallbackPoints: allCoverPoints[0], @@ -402,7 +402,7 @@ func readTextRanges(debugInfo *dwarf.Data, module *vminfo.KernelModule, pcFix pc } func symbolizeModule(target *targets.Target, interner *symbolizer.Interner, objDir, srcDir, buildDir string, - splitBuildDelimiters []string, mod *vminfo.KernelModule, pcs []uint64) ([]Frame, error) { + splitBuildDelimiters []string, mod *vminfo.KernelModule, pcs []uint64) ([]*Frame, error) { procs := min(runtime.GOMAXPROCS(0)/2, len(pcs)/1000) const ( minProcs = 1 @@ -446,7 +446,7 @@ func symbolizeModule(target *targets.Target, interner *symbolizer.Interner, objD } close(pcchan) var err0 error - var frames []Frame + var frames []*Frame for p := 0; p < procs; p++ { res := <-symbolizerC if res.err != nil { @@ -458,7 +458,7 @@ func symbolizeModule(target *targets.Target, interner *symbolizer.Interner, objD if mod.Name != "" { pc = frame.PC + mod.Addr } - frames = append(frames, Frame{ + frames = append(frames, &Frame{ Module: mod, PC: pc, Name: interner.Do(name), @@ -481,10 +481,10 @@ func symbolizeModule(target *targets.Target, interner *symbolizer.Interner, objD } func symbolize(target *targets.Target, interner *symbolizer.Interner, objDir, srcDir, buildDir string, - splitBuildDelimiters []string, pcs map[*vminfo.KernelModule][]uint64) ([]Frame, error) { - var frames []Frame + splitBuildDelimiters []string, pcs map[*vminfo.KernelModule][]uint64) ([]*Frame, error) { + var frames []*Frame type frameResult struct { - frames []Frame + frames []*Frame err error } frameC := make(chan frameResult, len(pcs)) diff --git a/pkg/cover/backend/gvisor.go b/pkg/cover/backend/gvisor.go index 56a36a5dc..fb188e784 100644 --- a/pkg/cover/backend/gvisor.go +++ b/pkg/cover/backend/gvisor.go @@ -54,7 +54,7 @@ func makeGvisor(target *targets.Target, objDir, srcDir, buildDir string, modules return impl, nil } -func gvisorSymbolize(bin, srcDir string) ([]Frame, error) { +func gvisorSymbolize(bin, srcDir string) ([]*Frame, error) { cmd := osutil.Command(bin, "symbolize", "-all") stdout, err := cmd.StdoutPipe() if err != nil { @@ -66,7 +66,7 @@ func gvisorSymbolize(bin, srcDir string) ([]Frame, error) { } defer cmd.Wait() defer cmd.Process.Kill() - var frames []Frame + var frames []*Frame s := bufio.NewScanner(stdout) for s.Scan() { frame, err := gvisorParseLine(s) @@ -93,27 +93,27 @@ func gvisorSymbolize(bin, srcDir string) ([]Frame, error) { return frames, nil } -func gvisorParseLine(s *bufio.Scanner) (Frame, error) { +func gvisorParseLine(s *bufio.Scanner) (*Frame, error) { pc, err := strconv.ParseUint(s.Text(), 0, 64) if err != nil { - return Frame{}, fmt.Errorf("read pc %q, but no line info", pc) + return nil, fmt.Errorf("read pc %q, but no line info", pc) } if !s.Scan() { - return Frame{}, fmt.Errorf("read pc %q, but no line info", pc) + return nil, fmt.Errorf("read pc %q, but no line info", pc) } match := gvisorLineRe.FindStringSubmatch(s.Text()) if match == nil { - return Frame{}, fmt.Errorf("failed to parse line: %q", s.Text()) + return nil, fmt.Errorf("failed to parse line: %q", s.Text()) } var ints [4]int for i := range ints { x, err := strconv.ParseUint(match[i+3], 0, 32) if err != nil { - return Frame{}, fmt.Errorf("failed to parse number %q: %w", match[i+3], err) + return nil, fmt.Errorf("failed to parse number %q: %w", match[i+3], err) } ints[i] = int(x) } - frame := Frame{ + frame := &Frame{ PC: pc, Name: match[2], Range: Range{ diff --git a/pkg/cover/report.go b/pkg/cover/report.go index 7c9b8078b..3802f7b39 100644 --- a/pkg/cover/report.go +++ b/pkg/cover/report.go @@ -108,7 +108,7 @@ func (rg *ReportGenerator) prepareFileMap(progs []Prog, force, debug bool) (file } matchedPC := false for _, frame := range rg.Frames { - f := fileByFrame(files, &frame) + f := fileByFrame(files, frame) ln := f.lines[frame.StartLine] coveredBy := pcToProgs[frame.PC] if len(coveredBy) == 0 { |
