aboutsummaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/fuchsia/fidlgen/main.go2
-rw-r--r--sys/linux/init.go4
-rw-r--r--sys/linux/init_test.go3
-rw-r--r--sys/openbsd/init_test.go3
-rw-r--r--sys/syz-extract/extract.go24
-rw-r--r--sys/syz-extract/linux.go4
-rw-r--r--sys/syz-sysgen/sysgen.go4
-rw-r--r--sys/targets/targets.go139
8 files changed, 107 insertions, 76 deletions
diff --git a/sys/fuchsia/fidlgen/main.go b/sys/fuchsia/fidlgen/main.go
index 8c48ac312..b4942a08d 100644
--- a/sys/fuchsia/fidlgen/main.go
+++ b/sys/fuchsia/fidlgen/main.go
@@ -19,7 +19,7 @@ import (
func main() {
targetArch := os.Getenv("TARGETARCH")
- target := targets.Get("fuchsia", targetArch)
+ target := targets.Get(targets.Fuchsia, targetArch)
if target == nil {
failf("unknown TARGETARCH %s", targetArch)
}
diff --git a/sys/linux/init.go b/sys/linux/init.go
index 928ba17e5..a18fa99c4 100644
--- a/sys/linux/init.go
+++ b/sys/linux/init.go
@@ -79,11 +79,11 @@ func InitTarget(target *prog.Target) {
}
switch target.Arch {
- case "amd64":
+ case targets.AMD64:
target.SpecialPointers = []uint64{
0xffffffff81000000, // kernel text
}
- case "386", "arm64", "arm", "ppc64le", "mips64le", "s390x", "riscv64":
+ case targets.I386, targets.ARM64, targets.ARM, targets.PPC64LE, targets.MIPS64LE, targets.S390x, targets.RiscV64:
default:
panic("unknown arch")
}
diff --git a/sys/linux/init_test.go b/sys/linux/init_test.go
index df0622ba3..201ce762b 100644
--- a/sys/linux/init_test.go
+++ b/sys/linux/init_test.go
@@ -8,10 +8,11 @@ import (
"github.com/google/syzkaller/prog"
_ "github.com/google/syzkaller/sys/linux/gen"
+ "github.com/google/syzkaller/sys/targets"
)
func TestNeutralize(t *testing.T) {
- prog.TestDeserializeHelper(t, "linux", "amd64", nil, []prog.DeserializeTest{
+ prog.TestDeserializeHelper(t, targets.Linux, targets.AMD64, nil, []prog.DeserializeTest{
{
In: `syslog(0x10000000006, 0x0, 0x0)`,
Out: `syslog(0x9, 0x0, 0x0)`,
diff --git a/sys/openbsd/init_test.go b/sys/openbsd/init_test.go
index 7f3d9a489..3a6c2c14c 100644
--- a/sys/openbsd/init_test.go
+++ b/sys/openbsd/init_test.go
@@ -8,10 +8,11 @@ import (
"github.com/google/syzkaller/prog"
_ "github.com/google/syzkaller/sys/openbsd/gen"
+ "github.com/google/syzkaller/sys/targets"
)
func TestNeutralize(t *testing.T) {
- prog.TestDeserializeHelper(t, "openbsd", "amd64", nil, []prog.DeserializeTest{
+ prog.TestDeserializeHelper(t, targets.OpenBSD, targets.AMD64, nil, []prog.DeserializeTest{
{
In: `chflagsat(0x0, 0x0, 0x60004, 0x0)`,
Out: `chflagsat(0x0, 0x0, 0x0, 0x0)`,
diff --git a/sys/syz-extract/extract.go b/sys/syz-extract/extract.go
index 10b8b6541..a1ddaa86c 100644
--- a/sys/syz-extract/extract.go
+++ b/sys/syz-extract/extract.go
@@ -57,15 +57,15 @@ type Extractor interface {
}
var extractors = map[string]Extractor{
- "akaros": new(akaros),
- "linux": new(linux),
- "freebsd": new(freebsd),
- "netbsd": new(netbsd),
- "openbsd": new(openbsd),
- "android": new(linux),
- "fuchsia": new(fuchsia),
- "windows": new(windows),
- "trusty": new(trusty),
+ targets.Akaros: new(akaros),
+ targets.Linux: new(linux),
+ targets.FreeBSD: new(freebsd),
+ targets.NetBSD: new(netbsd),
+ targets.OpenBSD: new(openbsd),
+ "android": new(linux),
+ targets.Fuchsia: new(fuchsia),
+ targets.Windows: new(windows),
+ targets.Trusty: new(trusty),
}
func main() {
@@ -243,7 +243,7 @@ func archFileList(os, arch string, files []string) (string, []string, []string,
android := false
if os == "android" {
android = true
- os = "linux"
+ os = targets.Linux
}
var arches []string
if arch != "" {
@@ -253,7 +253,7 @@ func archFileList(os, arch string, files []string) (string, []string, []string,
arches = append(arches, arch)
}
if android {
- arches = []string{"386", "amd64", "arm", "arm64"}
+ arches = []string{targets.I386, targets.AMD64, targets.ARM, targets.ARM64}
}
sort.Strings(arches)
}
@@ -278,7 +278,7 @@ func archFileList(os, arch string, files []string) (string, []string, []string,
}
for _, f := range matches {
f = filepath.Base(f)
- if manualFiles[f] || os == "linux" && android != androidFiles[f] {
+ if manualFiles[f] || os == targets.Linux && android != androidFiles[f] {
continue
}
files = append(files, f)
diff --git a/sys/syz-extract/linux.go b/sys/syz-extract/linux.go
index 05789ef55..47e5d20e6 100644
--- a/sys/syz-extract/linux.go
+++ b/sys/syz-extract/linux.go
@@ -12,6 +12,7 @@ import (
"github.com/google/syzkaller/pkg/compiler"
"github.com/google/syzkaller/pkg/osutil"
+ "github.com/google/syzkaller/sys/targets"
)
type linux struct{}
@@ -134,7 +135,8 @@ func (*linux) prepareArch(arch *Arch) error {
}
func (*linux) processFile(arch *Arch, info *compiler.ConstInfo) (map[string]uint64, map[string]bool, error) {
- if strings.HasSuffix(info.File, "_kvm.txt") && (arch.target.Arch == "arm" || arch.target.Arch == "riscv64") {
+ if strings.HasSuffix(info.File, "_kvm.txt") &&
+ (arch.target.Arch == targets.ARM || arch.target.Arch == targets.RiscV64) {
// Hack: KVM is not supported on ARM anymore. We may want some more official support
// for marking descriptions arch-specific, but so far this combination is the only
// one. For riscv64, KVM is not supported yet but might be in the future.
diff --git a/sys/syz-sysgen/sysgen.go b/sys/syz-sysgen/sysgen.go
index 8dfedb6a2..62f36c3d3 100644
--- a/sys/syz-sysgen/sysgen.go
+++ b/sys/syz-sysgen/sysgen.go
@@ -115,7 +115,7 @@ func main() {
}
consts := constFile.Arch(job.Target.Arch)
top := descriptions
- if OS == "linux" && (job.Target.Arch == "arm" || job.Target.Arch == "riscv64") {
+ if OS == targets.Linux && (job.Target.Arch == targets.ARM || job.Target.Arch == targets.RiscV64) {
// Hack: KVM is not supported on ARM anymore. On riscv64 it
// is not supported yet but might be in the future.
// Note: syz-extract also ignores this file for arm and
@@ -125,7 +125,7 @@ func main() {
return !strings.HasSuffix(pos.File, "_kvm.txt")
})
}
- if OS == "test" {
+ if OS == targets.TestOS {
constInfo := compiler.ExtractConsts(top, job.Target, eh)
compiler.FabricateSyscallConsts(job.Target, constInfo, consts)
}
diff --git a/sys/targets/targets.go b/sys/targets/targets.go
index 28ee5b376..ff218aa6c 100644
--- a/sys/targets/targets.go
+++ b/sys/targets/targets.go
@@ -78,6 +78,31 @@ type osCommon struct {
cflags []string
}
+const (
+ Akaros = "akaros"
+ FreeBSD = "freebsd"
+ Fuchsia = "fuchsia"
+ Linux = "linux"
+ NetBSD = "netbsd"
+ OpenBSD = "openbsd"
+ TestOS = "test"
+ Trusty = "trusty"
+ Windows = "windows"
+
+ AMD64 = "amd64"
+ ARM64 = "arm64"
+ ARM = "arm"
+ I386 = "386"
+ MIPS64LE = "mips64le"
+ PPC64LE = "ppc64le"
+ S390x = "s390x"
+ RiscV64 = "riscv64"
+ TestArch64 = "64"
+ TestArch64Fork = "64_fork"
+ TestArch32Shmem = "32_shmem"
+ TestArch32ForkShmem = "32_fork_shmem"
+)
+
func Get(OS, arch string) *Target {
return GetEx(OS, arch, useClang)
}
@@ -103,8 +128,8 @@ func GetEx(OS, arch string, clang bool) *Target {
// nolint: lll
var List = map[string]map[string]*Target{
- "test": {
- "64": {
+ TestOS: {
+ TestArch64: {
PtrSize: 8,
PageSize: 4 << 10,
// Compile with -no-pie due to issues with ASan + ASLR on ppc64le.
@@ -116,7 +141,7 @@ var List = map[string]map[string]*Target{
ExecutorUsesForkServer: false,
},
},
- "64_fork": {
+ TestArch64Fork: {
PtrSize: 8,
PageSize: 8 << 10,
// Compile with -no-pie due to issues with ASan + ASLR on ppc64le.
@@ -128,7 +153,7 @@ var List = map[string]map[string]*Target{
ExecutorUsesForkServer: true,
},
},
- "32_shmem": {
+ TestArch32Shmem: {
PtrSize: 4,
PageSize: 8 << 10,
Int64Alignment: 4,
@@ -141,7 +166,7 @@ var List = map[string]map[string]*Target{
ExecutorUsesForkServer: false,
},
},
- "32_fork_shmem": {
+ TestArch32ForkShmem: {
PtrSize: 4,
PageSize: 4 << 10,
CFlags: []string{"-m32", "-static"},
@@ -155,8 +180,8 @@ var List = map[string]map[string]*Target{
},
},
},
- "linux": {
- "amd64": {
+ Linux: {
+ AMD64: {
PtrSize: 8,
PageSize: 4 << 10,
LittleEndian: true,
@@ -170,8 +195,8 @@ var List = map[string]map[string]*Target{
return nr >= 313
},
},
- "386": {
- VMArch: "amd64",
+ I386: {
+ VMArch: AMD64,
PtrSize: 4,
PageSize: 4 << 10,
Int64Alignment: 4,
@@ -181,7 +206,7 @@ var List = map[string]map[string]*Target{
KernelArch: "i386",
KernelHeaderArch: "x86",
},
- "arm64": {
+ ARM64: {
PtrSize: 8,
PageSize: 4 << 10,
LittleEndian: true,
@@ -189,8 +214,8 @@ var List = map[string]map[string]*Target{
KernelArch: "arm64",
KernelHeaderArch: "arm64",
},
- "arm": {
- VMArch: "arm64",
+ ARM: {
+ VMArch: ARM64,
PtrSize: 4,
PageSize: 4 << 10,
LittleEndian: true,
@@ -199,8 +224,7 @@ var List = map[string]map[string]*Target{
KernelArch: "arm",
KernelHeaderArch: "arm",
},
- "mips64le": {
- VMArch: "mips64le",
+ MIPS64LE: {
PtrSize: 8,
PageSize: 4 << 10,
LittleEndian: true,
@@ -209,7 +233,7 @@ var List = map[string]map[string]*Target{
KernelArch: "mips",
KernelHeaderArch: "mips",
},
- "ppc64le": {
+ PPC64LE: {
PtrSize: 8,
PageSize: 64 << 10,
LittleEndian: true,
@@ -218,7 +242,7 @@ var List = map[string]map[string]*Target{
KernelArch: "powerpc",
KernelHeaderArch: "powerpc",
},
- "s390x": {
+ S390x: {
PtrSize: 8,
PageSize: 4 << 10,
DataOffset: 0xfffff000,
@@ -234,7 +258,7 @@ var List = map[string]map[string]*Target{
"mmap": "mmap",
},
},
- "riscv64": {
+ RiscV64: {
PtrSize: 8,
PageSize: 4 << 10,
LittleEndian: true,
@@ -243,8 +267,8 @@ var List = map[string]map[string]*Target{
KernelHeaderArch: "riscv",
},
},
- "freebsd": {
- "amd64": {
+ FreeBSD: {
+ AMD64: {
PtrSize: 8,
PageSize: 4 << 10,
LittleEndian: true,
@@ -252,8 +276,8 @@ var List = map[string]map[string]*Target{
CFlags: []string{"-m64"},
NeedSyscallDefine: dontNeedSyscallDefine,
},
- "386": {
- VMArch: "amd64",
+ I386: {
+ VMArch: AMD64,
PtrSize: 4,
PageSize: 4 << 10,
// The default DataOffset doesn't work with 32-bit
@@ -266,8 +290,8 @@ var List = map[string]map[string]*Target{
NeedSyscallDefine: dontNeedSyscallDefine,
},
},
- "netbsd": {
- "amd64": {
+ NetBSD: {
+ AMD64: {
PtrSize: 8,
PageSize: 4 << 10,
LittleEndian: true,
@@ -279,8 +303,8 @@ var List = map[string]map[string]*Target{
CCompiler: sourceDirVar + "/tools/bin/x86_64--netbsd-g++",
},
},
- "openbsd": {
- "amd64": {
+ OpenBSD: {
+ AMD64: {
PtrSize: 8,
PageSize: 4 << 10,
LittleEndian: true,
@@ -313,8 +337,8 @@ var List = map[string]map[string]*Target{
},
},
},
- "fuchsia": {
- "amd64": {
+ Fuchsia: {
+ AMD64: {
PtrSize: 8,
PageSize: 4 << 10,
LittleEndian: true,
@@ -323,26 +347,26 @@ var List = map[string]map[string]*Target{
Objdump: sourceDirVar + "/prebuilt/third_party/clang/linux-x64/bin/llvm-objdump",
CFlags: fuchsiaCFlags("x64", "x86_64"),
},
- "arm64": {
+ ARM64: {
PtrSize: 8,
PageSize: 4 << 10,
LittleEndian: true,
- KernelHeaderArch: "arm64",
+ KernelHeaderArch: ARM64,
CCompiler: sourceDirVar + "/prebuilt/third_party/clang/linux-x64/bin/clang",
Objdump: sourceDirVar + "/prebuilt/third_party/clang/linux-x64/bin/llvm-objdump",
- CFlags: fuchsiaCFlags("arm64", "aarch64"),
+ CFlags: fuchsiaCFlags(ARM64, "aarch64"),
},
},
- "windows": {
- "amd64": {
+ Windows: {
+ AMD64: {
PtrSize: 8,
// TODO(dvyukov): what should we do about 4k vs 64k?
PageSize: 4 << 10,
LittleEndian: true,
},
},
- "akaros": {
- "amd64": {
+ Akaros: {
+ AMD64: {
PtrSize: 8,
PageSize: 4 << 10,
LittleEndian: true,
@@ -354,8 +378,8 @@ var List = map[string]map[string]*Target{
},
},
},
- "trusty": {
- "arm": {
+ Trusty: {
+ ARM: {
PtrSize: 4,
PageSize: 4 << 10,
LittleEndian: true,
@@ -365,7 +389,7 @@ var List = map[string]map[string]*Target{
}
var oses = map[string]osCommon{
- "linux": {
+ Linux: {
SyscallNumbers: true,
SyscallPrefix: "__NR_",
ExecutorUsesShmem: true,
@@ -373,7 +397,7 @@ var oses = map[string]osCommon{
KernelObject: "vmlinux",
cflags: []string{"-static"},
},
- "freebsd": {
+ FreeBSD: {
SyscallNumbers: true,
Int64SyscallArgs: true,
SyscallPrefix: "SYS_",
@@ -383,15 +407,15 @@ var oses = map[string]osCommon{
CPP: "g++",
cflags: []string{"-static", "-lc++"},
},
- "netbsd": {
- BuildOS: "linux",
+ NetBSD: {
+ BuildOS: Linux,
SyscallNumbers: true,
SyscallPrefix: "SYS_",
ExecutorUsesShmem: true,
ExecutorUsesForkServer: true,
KernelObject: "netbsd.gdb",
},
- "openbsd": {
+ OpenBSD: {
SyscallNumbers: true,
SyscallPrefix: "SYS_",
ExecutorUsesShmem: true,
@@ -399,8 +423,8 @@ var oses = map[string]osCommon{
KernelObject: "bsd.gdb",
CPP: "ecpp",
},
- "fuchsia": {
- BuildOS: "linux",
+ Fuchsia: {
+ BuildOS: Linux,
SyscallNumbers: false,
ExecutorUsesShmem: false,
ExecutorUsesForkServer: false,
@@ -408,15 +432,15 @@ var oses = map[string]osCommon{
SyzExecutorCmd: "syz-executor",
KernelObject: "zircon.elf",
},
- "windows": {
+ Windows: {
SyscallNumbers: false,
ExecutorUsesShmem: false,
ExecutorUsesForkServer: false,
ExeExtension: ".exe",
KernelObject: "vmlinux",
},
- "akaros": {
- BuildOS: "linux",
+ Akaros: {
+ BuildOS: Linux,
SyscallNumbers: true,
SyscallPrefix: "SYS_",
ExecutorUsesShmem: false,
@@ -424,7 +448,7 @@ var oses = map[string]osCommon{
HostFuzzer: true,
KernelObject: "akaros-kernel-64b",
},
- "trusty": {
+ Trusty: {
SyscallNumbers: true,
Int64SyscallArgs: true,
SyscallPrefix: "__NR_",
@@ -479,14 +503,14 @@ func init() {
goarch := runtime.GOARCH
goos := runtime.GOOS
if goos == "android" {
- goos = "linux"
+ goos = Linux
}
- for _, target := range List["test"] {
+ for _, target := range List[TestOS] {
if List[goos] != nil {
if host := List[goos][goarch]; host != nil {
target.CCompiler = host.CCompiler
target.CPP = host.CPP
- if goos == "freebsd" {
+ if goos == FreeBSD {
// For some configurations -no-pie is passed to the compiler,
// which is not used by clang.
// Ensure clang does not complain about it.
@@ -498,18 +522,18 @@ func init() {
// In ESA/390 mode, the CPU is able to address only 31bit of memory but
// arithmetic operations are still 32bit
// Fix cflags by replacing compiler's -m32 option with -m31
- if goarch == "s390x" {
+ if goarch == S390x {
for i := range target.CFlags {
target.CFlags[i] = strings.Replace(target.CFlags[i], "-m32", "-m31", -1)
}
}
}
- if target.PtrSize == 4 && goos == "freebsd" && goarch == "amd64" {
+ if target.PtrSize == 4 && goos == FreeBSD && goarch == AMD64 {
// A hack to let 32-bit "test" target tests run on FreeBSD:
// freebsd/386 requires a non-default DataOffset to avoid
// clobbering mappings created by the C runtime. Since that is the
// only target with this constraint, just special-case it for now.
- target.DataOffset = List[goos]["386"].DataOffset
+ target.DataOffset = List[goos][I386].DataOffset
}
}
target.BuildOS = goos
@@ -524,6 +548,9 @@ func initTarget(target *Target, OS, arch string) {
target.initOther = new(sync.Once)
target.OS = OS
target.Arch = arch
+ if target.KernelArch == "" {
+ target.KernelArch = target.Arch
+ }
if target.NeedSyscallDefine == nil {
target.NeedSyscallDefine = needSyscallDefine
}
@@ -543,7 +570,7 @@ func initTarget(target *Target, OS, arch string) {
for i := range target.CFlags {
target.replaceSourceDir(&target.CFlags[i], sourceDir)
}
- if OS == "linux" && arch == runtime.GOARCH {
+ if OS == Linux && arch == runtime.GOARCH {
// Don't use cross-compiler for native compilation, there are cases when this does not work:
// https://github.com/google/syzkaller/pull/619
// https://github.com/google/syzkaller/issues/387
@@ -573,8 +600,8 @@ func initTarget(target *Target, OS, arch string) {
for _, flags := range [][]string{commonCFlags, target.osCommon.cflags} {
target.CFlags = append(target.CFlags, flags...)
}
- if OS == "test" {
- if runtime.GOARCH != "s390x" {
+ if OS == TestOS {
+ if runtime.GOARCH != S390x {
target.LittleEndian = true
} else {
target.LittleEndian = false