aboutsummaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorAlexander Potapenko <glider@google.com>2020-05-14 12:12:53 +0200
committerDmitry Vyukov <dvyukov@google.com>2020-05-15 14:08:01 +0200
commitd7f9fffab3462d2954b61f144f810256ca007e56 (patch)
tree4fb94384f6f056fbeaf739369c0f9d2a9a23134a /sys
parent4da021feb0cab54d87d5b08c41bc3160132e5bb7 (diff)
targets: syz-extract: add Clang support for Linux builds
Allow targets.go use Clang instead of the default Linux compiler by setting the SYZ_CLANG=1 env var. Doing so changes the compiler to "clang" and the linker to "ld.ldd", assuming they are in $PATH, and adds the --target and -ferror-limit CFLAGS. Target also exports KernelCompiler and KernelLinker fields now, which allows overriding the compiler and linker in the kernel make invocation. Signed-off-by: Alexander Potapenko <glider@google.com>
Diffstat (limited to 'sys')
-rw-r--r--sys/syz-extract/linux.go6
-rw-r--r--sys/targets/targets.go12
2 files changed, 18 insertions, 0 deletions
diff --git a/sys/syz-extract/linux.go b/sys/syz-extract/linux.go
index 5eca07daf..29d99d1de 100644
--- a/sys/syz-extract/linux.go
+++ b/sys/syz-extract/linux.go
@@ -96,6 +96,12 @@ func (*linux) prepareArch(arch *Arch) error {
if target.Triple != "" {
makeArgs = append(makeArgs, "CROSS_COMPILE="+target.Triple+"-")
}
+ if target.KernelCompiler != "" {
+ makeArgs = append(makeArgs, "CC="+target.KernelCompiler)
+ }
+ if target.KernelLinker != "" {
+ makeArgs = append(makeArgs, "LD="+target.KernelLinker)
+ }
out, err := osutil.RunCmd(time.Hour, kernelDir, "make", append(makeArgs, "defconfig")...)
if err != nil {
return fmt.Errorf("make defconfig failed: %v\n%s", err, out)
diff --git a/sys/targets/targets.go b/sys/targets/targets.go
index 1395b13ff..0bcba8a21 100644
--- a/sys/targets/targets.go
+++ b/sys/targets/targets.go
@@ -26,6 +26,8 @@ type Target struct {
CFlags []string
Triple string
CCompiler string
+ KernelCompiler string // override CC when running kernel make
+ KernelLinker string // override LD when running kernel make
KernelArch string
KernelHeaderArch string
BrokenCompiler string
@@ -466,6 +468,15 @@ func initTarget(target *Target, OS, arch string) {
target.CCompiler = target.Triple + "-" + target.CCompiler
}
}
+ if useClang {
+ target.CCompiler = "clang"
+ target.KernelCompiler = "clang"
+ target.KernelLinker = "ld.lld"
+ if target.Triple != "" {
+ target.CFlags = append(target.CFlags, "--target="+target.Triple)
+ }
+ target.CFlags = append(target.CFlags, "-ferror-limit=0")
+ }
if target.CPP == "" {
target.CPP = "cpp"
}
@@ -541,6 +552,7 @@ func checkFlagSupported(target *Target, flag string) bool {
}
var runningOnCI = os.Getenv("CI") != ""
+var useClang = os.Getenv("SYZ_CLANG") != ""
// <algorithm> is included by executor, so we test is as well.
const simpleProg = `