aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/bisect/bisect.go3
-rw-r--r--pkg/bisect/bisect_test.go2
-rw-r--r--pkg/build/build.go1
-rw-r--r--pkg/build/linux.go19
-rw-r--r--pkg/instance/instance.go5
-rw-r--r--pkg/vcs/linux.go1
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
}