diff options
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/bisect/bisect.go | 3 | ||||
| -rw-r--r-- | pkg/bisect/bisect_test.go | 2 | ||||
| -rw-r--r-- | pkg/build/build.go | 1 | ||||
| -rw-r--r-- | pkg/build/linux.go | 19 | ||||
| -rw-r--r-- | pkg/instance/instance.go | 5 | ||||
| -rw-r--r-- | pkg/vcs/linux.go | 1 |
6 files changed, 26 insertions, 5 deletions
diff --git a/pkg/bisect/bisect.go b/pkg/bisect/bisect.go index cf6bae5bc..75b6450d8 100644 --- a/pkg/bisect/bisect.go +++ b/pkg/bisect/bisect.go @@ -22,6 +22,7 @@ type Config struct { Trace io.Writer Fix bool BinDir string + Ccache string DebugDir string Timeout time.Duration Kernel KernelConfig @@ -448,7 +449,7 @@ func (env *env) build() (*vcs.Commit, string, error) { return nil, "", fmt.Errorf("kernel clean failed: %v", err) } kern := &env.cfg.Kernel - _, kernelSign, err := env.inst.BuildKernel(bisectEnv.Compiler, kern.Userspace, + _, kernelSign, err := env.inst.BuildKernel(bisectEnv.Compiler, env.cfg.Ccache, kern.Userspace, kern.Cmdline, kern.Sysctl, bisectEnv.KernelConfig) if kernelSign != "" { env.log("kernel signature: %v", kernelSign) diff --git a/pkg/bisect/bisect_test.go b/pkg/bisect/bisect_test.go index e60da3aed..ee730b724 100644 --- a/pkg/bisect/bisect_test.go +++ b/pkg/bisect/bisect_test.go @@ -32,7 +32,7 @@ func (env *testEnv) BuildSyzkaller(repo, commit string) error { return nil } -func (env *testEnv) BuildKernel(compilerBin, userspaceDir, cmdlineFile, sysctlFile string, +func (env *testEnv) BuildKernel(compilerBin, cCache, userspaceDir, cmdlineFile, sysctlFile string, kernelConfig []byte) (string, string, error) { commit := env.headCommit() configHash := hash.String(kernelConfig) diff --git a/pkg/build/build.go b/pkg/build/build.go index af2aa91a5..348a18555 100644 --- a/pkg/build/build.go +++ b/pkg/build/build.go @@ -26,6 +26,7 @@ type Params struct { KernelDir string OutputDir string Compiler string + Ccache string UserspaceDir string CmdlineFile string SysctlFile string diff --git a/pkg/build/linux.go b/pkg/build/linux.go index 34a980b20..6acf6f347 100644 --- a/pkg/build/linux.go +++ b/pkg/build/linux.go @@ -65,7 +65,24 @@ func (linux) buildKernel(params *Params) error { case "ppc64le": target = "zImage" } - if err := runMake(params.KernelDir, target, "CC="+params.Compiler); err != nil { + + ccParam := params.Compiler + if params.Ccache != "" { + ccParam = params.Ccache + " " + ccParam + // Ensure CONFIG_GCC_PLUGIN_RANDSTRUCT doesn't prevent ccache usage. + // See /Documentation/kbuild/reproducible-builds.rst. + gccPluginsDir := filepath.Join(params.KernelDir, "scripts", "gcc-plugins") + if osutil.IsExist(gccPluginsDir) { + err := osutil.WriteFile(filepath.Join(gccPluginsDir, + "randomize_layout_seed.h"), + []byte("const char *randstruct_seed = "+ + "\"e9db0ca5181da2eedb76eba144df7aba4b7f9359040ee58409765f2bdc4cb3b8\";")) + if err != nil { + return err + } + } + } + if err := runMake(params.KernelDir, target, "CC="+ccParam); err != nil { return err } vmlinux := filepath.Join(params.KernelDir, "vmlinux") diff --git a/pkg/instance/instance.go b/pkg/instance/instance.go index 201c07cf8..b5cbd3bd2 100644 --- a/pkg/instance/instance.go +++ b/pkg/instance/instance.go @@ -29,7 +29,7 @@ import ( type Env interface { BuildSyzkaller(string, string) error - BuildKernel(string, string, string, string, []byte) (string, string, error) + BuildKernel(string, string, string, string, string, []byte) (string, string, error) Test(numVMs int, reproSyz, reproOpts, reproC []byte) ([]error, error) } @@ -94,7 +94,7 @@ func (env *env) BuildSyzkaller(repo, commit string) error { return nil } -func (env *env) BuildKernel(compilerBin, userspaceDir, cmdlineFile, sysctlFile string, kernelConfig []byte) ( +func (env *env) BuildKernel(compilerBin, ccacheBin, userspaceDir, cmdlineFile, sysctlFile string, kernelConfig []byte) ( string, string, error) { imageDir := filepath.Join(env.cfg.Workdir, "image") params := &build.Params{ @@ -104,6 +104,7 @@ func (env *env) BuildKernel(compilerBin, userspaceDir, cmdlineFile, sysctlFile s KernelDir: env.cfg.KernelSrc, OutputDir: imageDir, Compiler: compilerBin, + Ccache: ccacheBin, UserspaceDir: userspaceDir, CmdlineFile: cmdlineFile, SysctlFile: sysctlFile, diff --git a/pkg/vcs/linux.go b/pkg/vcs/linux.go index 069493411..423919ad6 100644 --- a/pkg/vcs/linux.go +++ b/pkg/vcs/linux.go @@ -124,6 +124,7 @@ func (ctx *linux) EnvForCommit(binDir, commit string, kernelConfig []byte) (*Bis return nil, err } } + return env, nil } |
