aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/bisect
diff options
context:
space:
mode:
authorFlorent Revest <revest@chromium.org>2024-10-02 16:02:12 +0200
committerAleksandr Nogikh <nogikh@google.com>2024-10-14 19:43:42 +0000
commit484e362fcff09b8b74162eefd0c3bfd67e829d94 (patch)
tree7db4c1f87a6c37073084a6b806978495297f6d25 /pkg/bisect
parent2e5c6a5c1c62461b69c6f50a123885b9910fce04 (diff)
pkg/build: use the build environment in clean() calls
This unifies the build() and clean() interfaces such that if a custom compiler or make binary is provided in the manager or bisection config, they can be taken into account by the clean() interface.
Diffstat (limited to 'pkg/bisect')
-rw-r--r--pkg/bisect/bisect.go36
-rw-r--r--pkg/bisect/bisect_test.go4
2 files changed, 23 insertions, 17 deletions
diff --git a/pkg/bisect/bisect.go b/pkg/bisect/bisect.go
index 9515126dc..a0dd29bb5 100644
--- a/pkg/bisect/bisect.go
+++ b/pkg/bisect/bisect.go
@@ -101,7 +101,8 @@ type env struct {
// can allows us to.
flaky bool
// A cache of already performed revision tests.
- results map[string]*testResult
+ results map[string]*testResult
+ buildCfg instance.BuildKernelConfig
}
const MaxNumTests = 20 // number of tests we do per commit
@@ -173,6 +174,17 @@ func runImpl(cfg *Config, repo vcs.Repo, inst instance.Env) (*Result, error) {
inst: inst,
startTime: time.Now(),
confidence: 1.0,
+ buildCfg: instance.BuildKernelConfig{
+ CompilerBin: cfg.DefaultCompiler,
+ MakeBin: cfg.Make,
+ LinkerBin: cfg.Linker,
+ CcacheBin: cfg.Ccache,
+ UserspaceDir: cfg.Kernel.Userspace,
+ CmdlineFile: cfg.Kernel.Cmdline,
+ SysctlFile: cfg.Kernel.Sysctl,
+ KernelConfig: cfg.Kernel.Config,
+ BuildCPUs: cfg.BuildCPUs,
+ },
}
head, err := repo.HeadCommit()
if err != nil {
@@ -242,8 +254,7 @@ func (env *env) bisect() (*Result, error) {
}
cfg := env.cfg
- if err := build.Clean(cfg.Manager.TargetOS, cfg.Manager.TargetVMArch,
- cfg.Manager.Type, cfg.Manager.KernelSrc); err != nil {
+ if err := env.inst.CleanKernel(&env.buildCfg); err != nil {
return nil, fmt.Errorf("kernel clean failed: %w", err)
}
env.logf("building syzkaller on %v", cfg.Syzkaller.Commit)
@@ -606,22 +617,13 @@ func (env *env) build() (*vcs.Commit, string, error) {
}
env.logf("testing commit %v %v", current.Hash, env.cfg.CompilerType)
buildStart := time.Now()
- mgr := env.cfg.Manager
- if err := build.Clean(mgr.TargetOS, mgr.TargetVMArch, mgr.Type, mgr.KernelSrc); err != nil {
+ buildCfg := env.buildCfg
+ buildCfg.CompilerBin = bisectEnv.Compiler
+ buildCfg.KernelConfig = bisectEnv.KernelConfig
+ if err := env.inst.CleanKernel(&buildCfg); err != nil {
return current, "", fmt.Errorf("kernel clean failed: %w", err)
}
- kern := &env.cfg.Kernel
- _, imageDetails, err := env.inst.BuildKernel(&instance.BuildKernelConfig{
- CompilerBin: bisectEnv.Compiler,
- MakeBin: env.cfg.Make,
- LinkerBin: env.cfg.Linker,
- CcacheBin: env.cfg.Ccache,
- UserspaceDir: kern.Userspace,
- CmdlineFile: kern.Cmdline,
- SysctlFile: kern.Sysctl,
- KernelConfig: bisectEnv.KernelConfig,
- BuildCPUs: env.cfg.BuildCPUs,
- })
+ _, imageDetails, err := env.inst.BuildKernel(&buildCfg)
if imageDetails.CompilerID != "" {
env.logf("compiler: %v", imageDetails.CompilerID)
}
diff --git a/pkg/bisect/bisect_test.go b/pkg/bisect/bisect_test.go
index cb5e51c5b..6731eb235 100644
--- a/pkg/bisect/bisect_test.go
+++ b/pkg/bisect/bisect_test.go
@@ -35,6 +35,10 @@ func (env *testEnv) BuildSyzkaller(repo, commit string) (string, error) {
return "", nil
}
+func (env *testEnv) CleanKernel(buildCfg *instance.BuildKernelConfig) error {
+ return nil
+}
+
func (env *testEnv) BuildKernel(buildCfg *instance.BuildKernelConfig) (string, build.ImageDetails, error) {
commit := env.headCommit()
configHash := hash.String(buildCfg.KernelConfig)