diff options
Diffstat (limited to 'sys/targets')
| -rw-r--r-- | sys/targets/targets.go | 139 |
1 files changed, 83 insertions, 56 deletions
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 |
