diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2020-10-26 10:51:06 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2020-10-26 15:44:28 +0100 |
| commit | e6e35dba937599d098fc034eff2686e5ddc409e9 (patch) | |
| tree | 802be708d0bc84dee01b9285639690a53f1f6f94 /sys | |
| parent | d46bc75207fea1d7671c1277dd660cf1a4d7847b (diff) | |
sys/targets: add OS/Arch name consts
We use strings to identify OS/Arch.
These strings are duplicated throughout the code base massively.
golangci-lint points to possiblity of typos and duplication.
We already had to define these names in pkg/csource
and disable checking for prog package. A future change triggers
such warnings in another package.
Add OS/Arch name consts to sys/targets so that they can be used
to refer to OS/Arch. Use the consts everywhere.
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/fuchsia/fidlgen/main.go | 2 | ||||
| -rw-r--r-- | sys/linux/init.go | 4 | ||||
| -rw-r--r-- | sys/linux/init_test.go | 3 | ||||
| -rw-r--r-- | sys/openbsd/init_test.go | 3 | ||||
| -rw-r--r-- | sys/syz-extract/extract.go | 24 | ||||
| -rw-r--r-- | sys/syz-extract/linux.go | 4 | ||||
| -rw-r--r-- | sys/syz-sysgen/sysgen.go | 4 | ||||
| -rw-r--r-- | sys/targets/targets.go | 139 |
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 |
