diff options
| author | Taras Madan <tarasmadan@google.com> | 2025-03-27 10:34:07 +0100 |
|---|---|---|
| committer | Taras Madan <tarasmadan@google.com> | 2025-03-27 10:07:16 +0000 |
| commit | c66ac62e1284de84775ccf0edf94f224db8b4509 (patch) | |
| tree | 885bf4ba80bcd8b722ea76c2dd530a48b380c985 /pkg/cover | |
| parent | b181c36d588da8d6007a23c0ad7305893758cec5 (diff) | |
pkg: use kernelDir instead of 3 parameters
It allows to reduce parameters count for some functions.
Diffstat (limited to 'pkg/cover')
| -rw-r--r-- | pkg/cover/backend/backend.go | 10 | ||||
| -rw-r--r-- | pkg/cover/backend/dwarf.go | 39 | ||||
| -rw-r--r-- | pkg/cover/backend/elf.go | 6 | ||||
| -rw-r--r-- | pkg/cover/backend/gvisor.go | 7 | ||||
| -rw-r--r-- | pkg/cover/backend/mach-o.go | 7 | ||||
| -rw-r--r-- | pkg/cover/report.go | 3 |
6 files changed, 33 insertions, 39 deletions
diff --git a/pkg/cover/backend/backend.go b/pkg/cover/backend/backend.go index 7e8e7f8b8..119c8f369 100644 --- a/pkg/cover/backend/backend.go +++ b/pkg/cover/backend/backend.go @@ -66,16 +66,16 @@ type SecRange struct { const LineEnd = 1 << 30 -func Make(target *targets.Target, vm, objDir, srcDir, buildDir string, splitBuild bool, +func Make(target *targets.Target, vm string, kernelDirs *mgrconfig.KernelDirs, splitBuild bool, moduleObj []string, modules []*vminfo.KernelModule) (*Impl, error) { - if objDir == "" { + if kernelDirs.Obj == "" { return nil, fmt.Errorf("kernel obj directory is not specified") } if target.OS == targets.Darwin { - return makeMachO(target, objDir, srcDir, buildDir, moduleObj, modules) + return makeMachO(target, kernelDirs, moduleObj, modules) } if vm == targets.GVisor { - return makeGvisor(target, objDir, srcDir, buildDir, modules) + return makeGvisor(target, kernelDirs, modules) } var delimiters []string if splitBuild { @@ -84,7 +84,7 @@ func Make(target *targets.Target, vm, objDir, srcDir, buildDir string, splitBuil // details. delimiters = []string{"/aosp/", "/private/"} } - return makeELF(target, objDir, srcDir, buildDir, delimiters, moduleObj, modules) + return makeELF(target, kernelDirs, delimiters, moduleObj, modules) } func GetPCBase(cfg *mgrconfig.Config) (uint64, error) { diff --git a/pkg/cover/backend/dwarf.go b/pkg/cover/backend/dwarf.go index 7be2832d3..2ace50ce6 100644 --- a/pkg/cover/backend/dwarf.go +++ b/pkg/cover/backend/dwarf.go @@ -19,6 +19,7 @@ import ( "strings" "github.com/google/syzkaller/pkg/log" + "github.com/google/syzkaller/pkg/mgrconfig" "github.com/google/syzkaller/pkg/osutil" "github.com/google/syzkaller/pkg/symbolizer" "github.com/google/syzkaller/pkg/vminfo" @@ -27,9 +28,7 @@ import ( type dwarfParams struct { target *targets.Target - objDir string - srcDir string - buildDir string + kernelDirs *mgrconfig.KernelDirs splitBuildDelimiters []string moduleObj []string hostModules []*vminfo.KernelModule @@ -139,9 +138,7 @@ func processModule(params *dwarfParams, module *vminfo.KernelModule, info *symbo func makeDWARFUnsafe(params *dwarfParams) (*Impl, error) { target := params.target - objDir := params.objDir - srcDir := params.srcDir - buildDir := params.buildDir + kernelDirs := params.kernelDirs splitBuildDelimiters := params.splitBuildDelimiters modules := params.hostModules @@ -231,7 +228,7 @@ func makeDWARFUnsafe(params *dwarfParams) (*Impl, error) { continue // drop the unit } // TODO: objDir won't work for out-of-tree modules. - unit.Name, unit.Path = CleanPath(unit.Name, objDir, srcDir, buildDir, splitBuildDelimiters) + unit.Name, unit.Path = CleanPath(unit.Name, kernelDirs, splitBuildDelimiters) allUnits[nunit] = unit nunit++ } @@ -244,7 +241,7 @@ func makeDWARFUnsafe(params *dwarfParams) (*Impl, error) { Units: allUnits, Symbols: allSymbols, Symbolize: func(pcs map[*vminfo.KernelModule][]uint64) ([]*Frame, error) { - return symbolize(target, &interner, objDir, srcDir, buildDir, splitBuildDelimiters, pcs) + return symbolize(target, &interner, kernelDirs, splitBuildDelimiters, pcs) }, CallbackPoints: allCoverPoints[0], PreciseCoverage: preciseCoverage, @@ -401,7 +398,7 @@ func readTextRanges(debugInfo *dwarf.Data, module *vminfo.KernelModule, pcFix pc return ranges, units, nil } -func symbolizeModule(target *targets.Target, interner *symbolizer.Interner, objDir, srcDir, buildDir string, +func symbolizeModule(target *targets.Target, interner *symbolizer.Interner, kernelDirs *mgrconfig.KernelDirs, splitBuildDelimiters []string, mod *vminfo.KernelModule, pcs []uint64) ([]*Frame, error) { procs := min(runtime.GOMAXPROCS(0)/2, len(pcs)/1000) const ( @@ -453,7 +450,7 @@ func symbolizeModule(target *targets.Target, interner *symbolizer.Interner, objD err0 = res.err } for _, frame := range res.frames { - name, path := CleanPath(frame.File, objDir, srcDir, buildDir, splitBuildDelimiters) + name, path := CleanPath(frame.File, kernelDirs, splitBuildDelimiters) pc := frame.PC if mod.Name != "" { pc = frame.PC + mod.Addr @@ -480,7 +477,7 @@ func symbolizeModule(target *targets.Target, interner *symbolizer.Interner, objD return frames, nil } -func symbolize(target *targets.Target, interner *symbolizer.Interner, objDir, srcDir, buildDir string, +func symbolize(target *targets.Target, interner *symbolizer.Interner, kernelDirs *mgrconfig.KernelDirs, splitBuildDelimiters []string, pcs map[*vminfo.KernelModule][]uint64) ([]*Frame, error) { var frames []*Frame type frameResult struct { @@ -490,7 +487,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 *vminfo.KernelModule, pcs []uint64) { - frames, err := symbolizeModule(target, interner, objDir, srcDir, buildDir, splitBuildDelimiters, mod, pcs) + frames, err := symbolizeModule(target, interner, kernelDirs, splitBuildDelimiters, mod, pcs) frameC <- frameResult{frames: frames, err: err} }(mod, pcs1) } @@ -585,27 +582,27 @@ func cleanPathAndroid(path, srcDir string, delimiters []string, existFn func(str return "", "" } -func CleanPath(path, objDir, srcDir, buildDir string, splitBuildDelimiters []string) (string, string) { +func CleanPath(path string, kernelDirs *mgrconfig.KernelDirs, splitBuildDelimiters []string) (string, string) { filename := "" path = filepath.Clean(path) - aname, apath := cleanPathAndroid(path, srcDir, splitBuildDelimiters, osutil.IsExist) + aname, apath := cleanPathAndroid(path, kernelDirs.Src, splitBuildDelimiters, osutil.IsExist) if aname != "" { return aname, apath } absPath := osutil.Abs(path) switch { - case strings.HasPrefix(absPath, objDir): + case strings.HasPrefix(absPath, kernelDirs.Obj): // Assume the file was built there. - path = strings.TrimPrefix(absPath, objDir) - filename = filepath.Join(objDir, path) - case strings.HasPrefix(absPath, buildDir): + path = strings.TrimPrefix(absPath, kernelDirs.Obj) + filename = filepath.Join(kernelDirs.Obj, path) + case strings.HasPrefix(absPath, kernelDirs.BuildSrc): // Assume the file was moved from buildDir to srcDir. - path = strings.TrimPrefix(absPath, buildDir) - filename = filepath.Join(srcDir, path) + path = strings.TrimPrefix(absPath, kernelDirs.BuildSrc) + filename = filepath.Join(kernelDirs.Src, path) default: // Assume this is relative path. - filename = filepath.Join(srcDir, path) + filename = filepath.Join(kernelDirs.Src, path) } return strings.TrimLeft(filepath.Clean(path), "/\\"), filename } diff --git a/pkg/cover/backend/elf.go b/pkg/cover/backend/elf.go index 5073c5603..88b8302c4 100644 --- a/pkg/cover/backend/elf.go +++ b/pkg/cover/backend/elf.go @@ -17,13 +17,11 @@ import ( "github.com/google/syzkaller/sys/targets" ) -func makeELF(target *targets.Target, objDir, srcDir, buildDir string, splitBuildDelimiters, moduleObj []string, +func makeELF(target *targets.Target, kernelDirs *mgrconfig.KernelDirs, splitBuildDelimiters, moduleObj []string, hostModules []*vminfo.KernelModule) (*Impl, error) { return makeDWARF(&dwarfParams{ target: target, - objDir: objDir, - srcDir: srcDir, - buildDir: buildDir, + kernelDirs: kernelDirs, splitBuildDelimiters: splitBuildDelimiters, moduleObj: moduleObj, hostModules: hostModules, diff --git a/pkg/cover/backend/gvisor.go b/pkg/cover/backend/gvisor.go index fb188e784..bb404d0cc 100644 --- a/pkg/cover/backend/gvisor.go +++ b/pkg/cover/backend/gvisor.go @@ -10,22 +10,23 @@ import ( "regexp" "strconv" + "github.com/google/syzkaller/pkg/mgrconfig" "github.com/google/syzkaller/pkg/osutil" "github.com/google/syzkaller/pkg/vminfo" "github.com/google/syzkaller/sys/targets" ) -func makeGvisor(target *targets.Target, objDir, srcDir, buildDir string, modules []*vminfo.KernelModule) (*Impl, +func makeGvisor(target *targets.Target, kernelDirs *mgrconfig.KernelDirs, modules []*vminfo.KernelModule) (*Impl, error) { if len(modules) != 0 { return nil, fmt.Errorf("gvisor coverage does not support modules") } - bin := filepath.Join(objDir, target.KernelObject) + bin := filepath.Join(kernelDirs.Obj, target.KernelObject) // pkg/build stores runsc as 'vmlinux' (we pretent to be linux), but a local build will have it as 'runsc'. if !osutil.IsExist(bin) { bin = filepath.Join(filepath.Dir(bin), "runsc") } - frames, err := gvisorSymbolize(bin, srcDir) + frames, err := gvisorSymbolize(bin, kernelDirs.Src) if err != nil { return nil, err } diff --git a/pkg/cover/backend/mach-o.go b/pkg/cover/backend/mach-o.go index b2cde9a66..37031cfde 100644 --- a/pkg/cover/backend/mach-o.go +++ b/pkg/cover/backend/mach-o.go @@ -10,17 +10,16 @@ import ( "sort" "strings" + "github.com/google/syzkaller/pkg/mgrconfig" "github.com/google/syzkaller/pkg/vminfo" "github.com/google/syzkaller/sys/targets" ) -func makeMachO(target *targets.Target, objDir, srcDir, buildDir string, +func makeMachO(target *targets.Target, kernelDirs *mgrconfig.KernelDirs, moduleObj []string, hostModules []*vminfo.KernelModule) (*Impl, error) { return makeDWARF(&dwarfParams{ target: target, - objDir: objDir, - srcDir: srcDir, - buildDir: buildDir, + kernelDirs: kernelDirs, moduleObj: moduleObj, hostModules: hostModules, readSymbols: machoReadSymbols, diff --git a/pkg/cover/report.go b/pkg/cover/report.go index 056021739..2db00df6d 100644 --- a/pkg/cover/report.go +++ b/pkg/cover/report.go @@ -34,8 +34,7 @@ func GetPCBase(cfg *mgrconfig.Config) (uint64, error) { } func MakeReportGenerator(cfg *mgrconfig.Config, modules []*vminfo.KernelModule) (*ReportGenerator, error) { - impl, err := backend.Make(cfg.SysTarget, cfg.Type, cfg.KernelObj, - cfg.KernelSrc, cfg.KernelBuildSrc, cfg.AndroidSplitBuild, cfg.ModuleObj, modules) + impl, err := backend.Make(cfg.SysTarget, cfg.Type, cfg.KernelDirs(), cfg.AndroidSplitBuild, cfg.ModuleObj, modules) if err != nil { return nil, err } |
