diff options
| author | Joey Jiao <quic_jiangenj@quicinc.com> | 2024-05-14 13:31:11 +0800 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2024-06-17 08:56:33 +0000 |
| commit | c1349e08b8ce2abf7e86375364268d8f696d077c (patch) | |
| tree | bbaa470c0f5ac9e0b273c9ee0b0088dedcfe07c1 /pkg | |
| parent | 88722c0f8d981b97d57db71d7bafa3a2db6f2197 (diff) | |
all: use only one KernelModule struct
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/cover/backend/backend.go | 14 | ||||
| -rw-r--r-- | pkg/cover/backend/dwarf.go | 24 | ||||
| -rw-r--r-- | pkg/cover/backend/elf.go | 8 | ||||
| -rw-r--r-- | pkg/cover/backend/mach-o.go | 8 | ||||
| -rw-r--r-- | pkg/cover/backend/modules.go | 11 | ||||
| -rw-r--r-- | pkg/cover/report.go | 2 |
6 files changed, 31 insertions, 36 deletions
diff --git a/pkg/cover/backend/backend.go b/pkg/cover/backend/backend.go index 631201480..fa4b8303a 100644 --- a/pkg/cover/backend/backend.go +++ b/pkg/cover/backend/backend.go @@ -13,26 +13,20 @@ type Impl struct { Units []*CompileUnit Symbols []*Symbol Frames []Frame - Symbolize func(pcs map[*Module][]uint64) ([]Frame, error) + Symbolize func(pcs map[*KernelModule][]uint64) ([]Frame, error) CallbackPoints []uint64 PreciseCoverage bool } -type Module struct { - Name string - Path string - Addr uint64 -} - type CompileUnit struct { ObjectUnit Path string - Module *Module + Module *KernelModule } type Symbol struct { ObjectUnit - Module *Module + Module *KernelModule Unit *CompileUnit Start uint64 End uint64 @@ -47,7 +41,7 @@ type ObjectUnit struct { } type Frame struct { - Module *Module + Module *KernelModule PC uint64 Name string FuncName string diff --git a/pkg/cover/backend/dwarf.go b/pkg/cover/backend/dwarf.go index 5378c1cd7..b01e8a0d1 100644 --- a/pkg/cover/backend/dwarf.go +++ b/pkg/cover/backend/dwarf.go @@ -31,10 +31,10 @@ type dwarfParams struct { splitBuildDelimiters []string moduleObj []string hostModules []KernelModule - readSymbols func(*Module, *symbolInfo) ([]*Symbol, error) - readTextData func(*Module) ([]byte, error) - readModuleCoverPoints func(*targets.Target, *Module, *symbolInfo) ([2][]uint64, error) - readTextRanges func(*Module) ([]pcRange, []*CompileUnit, error) + readSymbols func(*KernelModule, *symbolInfo) ([]*Symbol, error) + readTextData func(*KernelModule) ([]byte, error) + readModuleCoverPoints func(*targets.Target, *KernelModule, *symbolInfo) ([2][]uint64, error) + readTextRanges func(*KernelModule) ([]pcRange, []*CompileUnit, error) getCompilerVersion func(string) string } @@ -104,7 +104,7 @@ type Result struct { Symbols []*Symbol } -func processModule(params *dwarfParams, module *Module, info *symbolInfo, +func processModule(params *dwarfParams, module *KernelModule, info *symbolInfo, target *targets.Target) (*Result, error) { symbols, err := params.readSymbols(module, info) if err != nil { @@ -162,7 +162,7 @@ func makeDWARFUnsafe(params *dwarfParams) (*Impl, error) { } binC := make(chan binResult, len(modules)) for _, module := range modules { - go func(m *Module) { + go func(m *KernelModule) { info := &symbolInfo{ tracePC: make(map[uint64]bool), traceCmp: make(map[uint64]bool), @@ -234,7 +234,7 @@ func makeDWARFUnsafe(params *dwarfParams) (*Impl, error) { impl := &Impl{ Units: allUnits, Symbols: allSymbols, - Symbolize: func(pcs map[*Module][]uint64) ([]Frame, error) { + Symbolize: func(pcs map[*KernelModule][]uint64) ([]Frame, error) { return symbolize(target, &interner, objDir, srcDir, buildDir, splitBuildDelimiters, pcs) }, CallbackPoints: allCoverPoints[0], @@ -342,7 +342,7 @@ type pcRange struct { type pcFixFn = (func([2]uint64) ([2]uint64, bool)) -func readTextRanges(debugInfo *dwarf.Data, module *Module, pcFix pcFixFn) ( +func readTextRanges(debugInfo *dwarf.Data, module *KernelModule, pcFix pcFixFn) ( []pcRange, []*CompileUnit, error) { var ranges []pcRange var units []*CompileUnit @@ -389,7 +389,7 @@ func readTextRanges(debugInfo *dwarf.Data, module *Module, pcFix pcFixFn) ( } func symbolizeModule(target *targets.Target, interner *symbolizer.Interner, objDir, srcDir, buildDir string, - splitBuildDelimiters []string, mod *Module, pcs []uint64) ([]Frame, error) { + splitBuildDelimiters []string, mod *KernelModule, pcs []uint64) ([]Frame, error) { procs := runtime.GOMAXPROCS(0) / 2 if need := len(pcs) / 1000; procs > need { procs = need @@ -470,7 +470,7 @@ 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[*Module][]uint64) ([]Frame, error) { + splitBuildDelimiters []string, pcs map[*KernelModule][]uint64) ([]Frame, error) { var frames []Frame type frameResult struct { frames []Frame @@ -478,7 +478,7 @@ func symbolize(target *targets.Target, interner *symbolizer.Interner, objDir, sr } frameC := make(chan frameResult, len(pcs)) for mod, pcs1 := range pcs { - go func(mod *Module, pcs []uint64) { + go func(mod *KernelModule, pcs []uint64) { frames, err := symbolizeModule(target, interner, objDir, srcDir, buildDir, splitBuildDelimiters, mod, pcs) frameC <- frameResult{frames: frames, err: err} }(mod, pcs1) @@ -602,7 +602,7 @@ func cleanPath(path, objDir, srcDir, buildDir string, splitBuildDelimiters []str // objdump is an old, slow way of finding coverage points. // amd64 uses faster option of parsing binary directly (readCoverPoints). // TODO: use the faster approach for all other arches and drop this. -func objdump(target *targets.Target, mod *Module) ([2][]uint64, error) { +func objdump(target *targets.Target, mod *KernelModule) ([2][]uint64, error) { var pcs [2][]uint64 cmd := osutil.Command(target.Objdump, "-d", "--no-show-raw-insn", mod.Path) stdout, err := cmd.StdoutPipe() diff --git a/pkg/cover/backend/elf.go b/pkg/cover/backend/elf.go index 6d1147c0a..45c841a68 100644 --- a/pkg/cover/backend/elf.go +++ b/pkg/cover/backend/elf.go @@ -57,7 +57,7 @@ func getTraceCallbackType(name string) int { return TraceCbNone } -func elfReadSymbols(module *Module, info *symbolInfo) ([]*Symbol, error) { +func elfReadSymbols(module *KernelModule, info *symbolInfo) ([]*Symbol, error) { file, err := elf.Open(module.Path) if err != nil { return nil, err @@ -108,7 +108,7 @@ func elfReadSymbols(module *Module, info *symbolInfo) ([]*Symbol, error) { return symbols, nil } -func elfReadTextRanges(module *Module) ([]pcRange, []*CompileUnit, error) { +func elfReadTextRanges(module *KernelModule) ([]pcRange, []*CompileUnit, error) { file, err := elf.Open(module.Path) if err != nil { return nil, nil, err @@ -152,7 +152,7 @@ func elfReadTextRanges(module *Module) ([]pcRange, []*CompileUnit, error) { return readTextRanges(debugInfo, module, pcFix) } -func elfReadTextData(module *Module) ([]byte, error) { +func elfReadTextData(module *KernelModule) ([]byte, error) { file, err := elf.Open(module.Path) if err != nil { return nil, err @@ -165,7 +165,7 @@ func elfReadTextData(module *Module) ([]byte, error) { return text.Data() } -func elfReadModuleCoverPoints(target *targets.Target, module *Module, info *symbolInfo) ([2][]uint64, error) { +func elfReadModuleCoverPoints(target *targets.Target, module *KernelModule, info *symbolInfo) ([2][]uint64, error) { var pcs [2][]uint64 file, err := elf.Open(module.Path) if err != nil { diff --git a/pkg/cover/backend/mach-o.go b/pkg/cover/backend/mach-o.go index 0d3546cec..d56cf010f 100644 --- a/pkg/cover/backend/mach-o.go +++ b/pkg/cover/backend/mach-o.go @@ -29,7 +29,7 @@ func makeMachO(target *targets.Target, objDir, srcDir, buildDir string, }) } -func machoReadSymbols(module *Module, info *symbolInfo) ([]*Symbol, error) { +func machoReadSymbols(module *KernelModule, info *symbolInfo) ([]*Symbol, error) { file, err := macho.Open(module.Path) if err != nil { return nil, err @@ -87,7 +87,7 @@ func machoReadSymbols(module *Module, info *symbolInfo) ([]*Symbol, error) { return symbols, nil } -func machoReadTextRanges(module *Module) ([]pcRange, []*CompileUnit, error) { +func machoReadTextRanges(module *KernelModule) ([]pcRange, []*CompileUnit, error) { dir, kernel := filepath.Split(module.Path) dSYMPath := filepath.Join(dir, fmt.Sprintf( "%[1]s.dSYM/Contents/Resources/DWARF/%[1]s", kernel)) @@ -102,7 +102,7 @@ func machoReadTextRanges(module *Module) ([]pcRange, []*CompileUnit, error) { return readTextRanges(debugInfo, module, nil) } -func machoReadTextData(module *Module) ([]byte, error) { +func machoReadTextData(module *KernelModule) ([]byte, error) { file, err := macho.Open(module.Path) if err != nil { return nil, err @@ -114,7 +114,7 @@ func machoReadTextData(module *Module) ([]byte, error) { return text.Data() } -func machoReadModuleCoverPoints(target *targets.Target, module *Module, info *symbolInfo) ([2][]uint64, error) { +func machoReadModuleCoverPoints(target *targets.Target, module *KernelModule, info *symbolInfo) ([2][]uint64, error) { // TODO: Linux/ELF supports module symbols. We should probably also do that // for XNU/Mach-O. To maximize code re-use we already have a lot of the // plumbing for module support. I think we mainly miss an equivalent to diff --git a/pkg/cover/backend/modules.go b/pkg/cover/backend/modules.go index 2d0e3c330..6fe3c6fcc 100644 --- a/pkg/cover/backend/modules.go +++ b/pkg/cover/backend/modules.go @@ -19,12 +19,13 @@ type KernelModule struct { Name string Addr uint64 Size uint64 + Path string } func discoverModules(target *targets.Target, objDir string, moduleObj []string, hostModules []KernelModule) ( - []*Module, error) { - modules := []*Module{ + []*KernelModule, error) { + modules := []*KernelModule{ // A dummy module representing the kernel itself. {Path: filepath.Join(objDir, target.KernelObject)}, } @@ -41,12 +42,12 @@ func discoverModules(target *targets.Target, objDir string, moduleObj []string, return modules, nil } -func discoverModulesLinux(dirs []string, hostModules []KernelModule) ([]*Module, error) { +func discoverModulesLinux(dirs []string, hostModules []KernelModule) ([]*KernelModule, error) { paths, err := locateModules(dirs) if err != nil { return nil, err } - var modules []*Module + var modules []*KernelModule for _, mod := range hostModules { path := paths[mod.Name] if path == "" { @@ -54,7 +55,7 @@ func discoverModulesLinux(dirs []string, hostModules []KernelModule) ([]*Module, continue } log.Logf(0, "module %v -> %v", mod.Name, path) - modules = append(modules, &Module{ + modules = append(modules, &KernelModule{ Name: mod.Name, Addr: mod.Addr, Path: path, diff --git a/pkg/cover/report.go b/pkg/cover/report.go index 06c1e13f5..2e1403cfe 100644 --- a/pkg/cover/report.go +++ b/pkg/cover/report.go @@ -202,7 +202,7 @@ func (rg *ReportGenerator) symbolizePCs(PCs []uint64) error { return nil } symbolize := make(map[*backend.Symbol]bool) - pcs := make(map[*backend.Module][]uint64) + pcs := make(map[*backend.KernelModule][]uint64) for _, pc := range PCs { sym := rg.findSymbol(pc) if sym == nil || sym.Symbolized || symbolize[sym] { |
