aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2019-10-22 15:41:03 +0200
committerDmitry Vyukov <dvyukov@google.com>2019-10-22 15:41:03 +0200
commit084e388155d4ea60d54e44b90cd10eef660a5b76 (patch)
tree5a072ff66df7d401257da468a8529b172ab9b285
parenta2bdbd8c37841cc507a2ad59f25d90d6467e5858 (diff)
pkg/vcs: make EnvForCommit return full compiler path
All callers of EnvForCommit need the compiler path, so move this logic into EnvForCommit to avoid duplication. Also simplifies tests because test impl can now return an empty compiler (which should be unused).
-rw-r--r--pkg/bisect/bisect.go7
-rw-r--r--pkg/bisect/bisect_test.go4
-rw-r--r--pkg/build/build.go2
-rw-r--r--pkg/vcs/linux.go4
-rw-r--r--pkg/vcs/testos.go7
-rw-r--r--pkg/vcs/vcs.go2
-rw-r--r--tools/syz-testbuild/testbuild.go6
7 files changed, 12 insertions, 20 deletions
diff --git a/pkg/bisect/bisect.go b/pkg/bisect/bisect.go
index 904be4b53..afe770965 100644
--- a/pkg/bisect/bisect.go
+++ b/pkg/bisect/bisect.go
@@ -259,12 +259,11 @@ func (env *env) test() (vcs.BisectResult, *vcs.Commit, *report.Report, error) {
if err != nil {
return 0, nil, nil, err
}
- bisectEnv, err := env.bisecter.EnvForCommit(current.Hash, cfg.Kernel.Config)
+ bisectEnv, err := env.bisecter.EnvForCommit(cfg.BinDir, current.Hash, cfg.Kernel.Config)
if err != nil {
return 0, nil, nil, err
}
- compiler := filepath.Join(cfg.BinDir, bisectEnv.Compiler, "bin", "gcc")
- compilerID, err := build.CompilerIdentity(compiler)
+ compilerID, err := build.CompilerIdentity(bisectEnv.Compiler)
if err != nil {
return 0, nil, nil, err
}
@@ -274,7 +273,7 @@ func (env *env) test() (vcs.BisectResult, *vcs.Commit, *report.Report, error) {
cfg.Manager.Type, cfg.Manager.KernelSrc); err != nil {
return 0, nil, nil, fmt.Errorf("kernel clean failed: %v", err)
}
- _, err = env.inst.BuildKernel(compiler, cfg.Kernel.Userspace,
+ _, err = env.inst.BuildKernel(bisectEnv.Compiler, cfg.Kernel.Userspace,
cfg.Kernel.Cmdline, cfg.Kernel.Sysctl, bisectEnv.KernelConfig)
env.buildTime += time.Since(buildStart)
if err != nil {
diff --git a/pkg/bisect/bisect_test.go b/pkg/bisect/bisect_test.go
index 472fde289..7a1d02a90 100644
--- a/pkg/bisect/bisect_test.go
+++ b/pkg/bisect/bisect_test.go
@@ -11,7 +11,6 @@ import (
"strconv"
"testing"
- "github.com/google/syzkaller/pkg/build"
"github.com/google/syzkaller/pkg/instance"
"github.com/google/syzkaller/pkg/mgrconfig"
"github.com/google/syzkaller/pkg/report"
@@ -72,9 +71,6 @@ func (env *testEnv) Test(numVMs int, reproSyz, reproOpts, reproC []byte) ([]erro
// commit.
func TestBisectCause(t *testing.T) {
t.Parallel()
- build.CompilerIdentity = func(_ string) (string, error) {
- return "unused-compiler-identity", nil
- }
baseDir, err := ioutil.TempDir("", "syz-git-test")
if err != nil {
t.Fatal(err)
diff --git a/pkg/build/build.go b/pkg/build/build.go
index 7fce681df..d4126b6e6 100644
--- a/pkg/build/build.go
+++ b/pkg/build/build.go
@@ -93,7 +93,7 @@ func getBuilder(targetOS, targetArch, vmType string) (builder, error) {
return nil, fmt.Errorf("unsupported image type %v/%v/%v", targetOS, targetArch, vmType)
}
-var CompilerIdentity = func(compiler string) (string, error) {
+func CompilerIdentity(compiler string) (string, error) {
if compiler == "" {
return "", nil
}
diff --git a/pkg/vcs/linux.go b/pkg/vcs/linux.go
index aaca97fe7..b14b75280 100644
--- a/pkg/vcs/linux.go
+++ b/pkg/vcs/linux.go
@@ -88,7 +88,7 @@ func gitReleaseTagToInt(tag string) uint64 {
return v1*1e6 + v2*1e3 + v3
}
-func (ctx *linux) EnvForCommit(commit string, kernelConfig []byte) (*BisectEnv, error) {
+func (ctx *linux) EnvForCommit(binDir, commit string, kernelConfig []byte) (*BisectEnv, error) {
tagList, err := ctx.previousReleaseTags(commit, true)
if err != nil {
return nil, err
@@ -98,7 +98,7 @@ func (ctx *linux) EnvForCommit(commit string, kernelConfig []byte) (*BisectEnv,
tags[tag] = true
}
env := &BisectEnv{
- Compiler: "gcc-" + linuxCompilerVersion(tags),
+ Compiler: filepath.Join(binDir, "gcc-"+linuxCompilerVersion(tags), "bin", "gcc"),
KernelConfig: linuxDisableConfigs(kernelConfig, tags),
}
// v4.0 doesn't boot with our config nor with defconfig, it halts on an interrupt in x86_64_start_kernel.
diff --git a/pkg/vcs/testos.go b/pkg/vcs/testos.go
index f30dd0799..611937da7 100644
--- a/pkg/vcs/testos.go
+++ b/pkg/vcs/testos.go
@@ -16,8 +16,7 @@ func newTestos(dir string) *testos {
func (ctx *testos) PreviousReleaseTags(commit string) ([]string, error) {
return ctx.git.previousReleaseTags(commit, false)
}
-func (ctx *testos) EnvForCommit(commit string, kernelConfig []byte) (*BisectEnv, error) {
- return &BisectEnv{
- Compiler: "test-compiler-dont-use",
- }, nil
+
+func (ctx *testos) EnvForCommit(binDir, commit string, kernelConfig []byte) (*BisectEnv, error) {
+ return &BisectEnv{}, nil
}
diff --git a/pkg/vcs/vcs.go b/pkg/vcs/vcs.go
index 28264522f..12130d594 100644
--- a/pkg/vcs/vcs.go
+++ b/pkg/vcs/vcs.go
@@ -64,7 +64,7 @@ type Bisecter interface {
// PreviousReleaseTags returns list of preceding release tags that are reachable from the given commit.
PreviousReleaseTags(commit string) ([]string, error)
- EnvForCommit(commit string, kernelConfig []byte) (*BisectEnv, error)
+ EnvForCommit(binDir, commit string, kernelConfig []byte) (*BisectEnv, error)
}
type Commit struct {
diff --git a/tools/syz-testbuild/testbuild.go b/tools/syz-testbuild/testbuild.go
index 120a465c3..7a82ce468 100644
--- a/tools/syz-testbuild/testbuild.go
+++ b/tools/syz-testbuild/testbuild.go
@@ -28,7 +28,6 @@ import (
"io/ioutil"
"log"
"os"
- "path/filepath"
"runtime"
"github.com/google/syzkaller/pkg/build"
@@ -121,16 +120,15 @@ func main() {
}
func test(repo vcs.Repo, bisecter vcs.Bisecter, kernelConfig []byte, env instance.BuilderTester, com *vcs.Commit) {
- bisectEnv, err := bisecter.EnvForCommit(com.Hash, kernelConfig)
+ bisectEnv, err := bisecter.EnvForCommit(*flagBisectBin, com.Hash, kernelConfig)
if err != nil {
fail(err)
}
log.Printf("testing: %v %v using %v", com.Hash, com.Title, bisectEnv.Compiler)
- compiler := filepath.Join(*flagBisectBin, bisectEnv.Compiler, "bin", "gcc")
if err := build.Clean(*flagOS, *flagArch, vmType, *flagKernelSrc); err != nil {
fail(err)
}
- _, err = env.BuildKernel(compiler, *flagUserspace, *flagKernelCmdline, *flagKernelSysctl, bisectEnv.KernelConfig)
+ _, err = env.BuildKernel(bisectEnv.Compiler, *flagUserspace, *flagKernelCmdline, *flagKernelSysctl, bisectEnv.KernelConfig)
if err != nil {
if verr, ok := err.(*osutil.VerboseError); ok {
log.Printf("BUILD BROKEN: %v", verr.Title)