From 8cb7d3dcfcbe11a6d5682743816409d1c8e8f6a0 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Wed, 20 Sep 2017 21:18:36 +0200 Subject: all: initial support for fuchsia Nothing works, but builds. Update #191 --- sys/linux/386.go | 4 +- sys/linux/amd64.go | 4 +- sys/linux/arm.go | 4 +- sys/linux/arm64.go | 4 +- sys/linux/init.go | 161 +++++++++++++-------------------------------------- sys/linux/ppc64le.go | 4 +- 6 files changed, 51 insertions(+), 130 deletions(-) (limited to 'sys/linux') diff --git a/sys/linux/386.go b/sys/linux/386.go index bb166ec6e..431f21d24 100644 --- a/sys/linux/386.go +++ b/sys/linux/386.go @@ -4,7 +4,7 @@ package linux import . "github.com/google/syzkaller/prog" func init() { - initArch(revision_386, syscalls_386, resources_386, structDescs_386, consts_386, "386", 4) + RegisterTarget(&Target{OS: "linux", Arch: "386", Revision: revision_386, PtrSize: 4, Syscalls: syscalls_386, Resources: resources_386, Structs: structDescs_386, Consts: consts_386}, initTarget) } var resources_386 = []*ResourceDesc{ @@ -16734,4 +16734,4 @@ var consts_386 = []ConstValue{ {Name: "__WNOTHREAD", Value: 536870912}, } -const revision_386 = "86d577076d75af98e3c800a3c65bf8e4869e3ea4" +const revision_386 = "7b2f1949d48094cf3369932d0743db166049457b" diff --git a/sys/linux/amd64.go b/sys/linux/amd64.go index f3f058d81..1a43b6760 100644 --- a/sys/linux/amd64.go +++ b/sys/linux/amd64.go @@ -4,7 +4,7 @@ package linux import . "github.com/google/syzkaller/prog" func init() { - initArch(revision_amd64, syscalls_amd64, resources_amd64, structDescs_amd64, consts_amd64, "amd64", 8) + RegisterTarget(&Target{OS: "linux", Arch: "amd64", Revision: revision_amd64, PtrSize: 8, Syscalls: syscalls_amd64, Resources: resources_amd64, Structs: structDescs_amd64, Consts: consts_amd64}, initTarget) } var resources_amd64 = []*ResourceDesc{ @@ -17264,4 +17264,4 @@ var consts_amd64 = []ConstValue{ {Name: "__WNOTHREAD", Value: 536870912}, } -const revision_amd64 = "e482e82186ee2d78bed701630c062b7c5d5b23c6" +const revision_amd64 = "8349df62e623f9c8d8bfaefcc8ba3febf463ce92" diff --git a/sys/linux/arm.go b/sys/linux/arm.go index 0a1509600..5c4fddab6 100644 --- a/sys/linux/arm.go +++ b/sys/linux/arm.go @@ -4,7 +4,7 @@ package linux import . "github.com/google/syzkaller/prog" func init() { - initArch(revision_arm, syscalls_arm, resources_arm, structDescs_arm, consts_arm, "arm", 4) + RegisterTarget(&Target{OS: "linux", Arch: "arm", Revision: revision_arm, PtrSize: 4, Syscalls: syscalls_arm, Resources: resources_arm, Structs: structDescs_arm, Consts: consts_arm}, initTarget) } var resources_arm = []*ResourceDesc{ @@ -16631,4 +16631,4 @@ var consts_arm = []ConstValue{ {Name: "__WNOTHREAD", Value: 536870912}, } -const revision_arm = "41372f11d60aad90c991926434f714d736320cb1" +const revision_arm = "02567c0623e18214f0be8d059aad68c263064645" diff --git a/sys/linux/arm64.go b/sys/linux/arm64.go index 77d20bd0c..39061d67a 100644 --- a/sys/linux/arm64.go +++ b/sys/linux/arm64.go @@ -4,7 +4,7 @@ package linux import . "github.com/google/syzkaller/prog" func init() { - initArch(revision_arm64, syscalls_arm64, resources_arm64, structDescs_arm64, consts_arm64, "arm64", 8) + RegisterTarget(&Target{OS: "linux", Arch: "arm64", Revision: revision_arm64, PtrSize: 8, Syscalls: syscalls_arm64, Resources: resources_arm64, Structs: structDescs_arm64, Consts: consts_arm64}, initTarget) } var resources_arm64 = []*ResourceDesc{ @@ -16641,4 +16641,4 @@ var consts_arm64 = []ConstValue{ {Name: "__WNOTHREAD", Value: 536870912}, } -const revision_arm64 = "3424aa8d1e2be36f2a093d39f49a45b6904827e0" +const revision_arm64 = "0709fe60bdd20ea30d937d14615a40269fadb2b8" diff --git a/sys/linux/init.go b/sys/linux/init.go index 509e2ab04..c727cb5b2 100644 --- a/sys/linux/init.go +++ b/sys/linux/init.go @@ -9,29 +9,48 @@ import ( "github.com/google/syzkaller/prog" ) -func initArch(rev string, syscalls []*prog.Syscall, resources []*prog.ResourceDesc, - structDescs []*prog.KeyedStruct, consts []prog.ConstValue, archName string, ptrSize uint64) { - arch := makeArch(syscalls, resources, structDescs, consts, archName) - target := &prog.Target{ - OS: "linux", - Arch: archName, - Revision: rev, - PtrSize: ptrSize, - PageSize: pageSize, - DataOffset: dataOffset, - Syscalls: syscalls, - Resources: resources, - MmapSyscall: arch.mmapSyscall, - MakeMmap: arch.makeMmap, - AnalyzeMmap: arch.analyzeMmap, - SanitizeCall: arch.sanitizeCall, - SpecialStructs: map[string]func(g *prog.Gen, typ *prog.StructType, old *prog.GroupArg) (prog.Arg, []*prog.Call){ - "timespec": arch.generateTimespec, - "timeval": arch.generateTimespec, - }, - StringDictionary: stringDictionary, +func initTarget(target *prog.Target) { + arch := &arch{ + mmapSyscall: target.SyscallMap["mmap"], + clockGettimeSyscall: target.SyscallMap["clock_gettime"], + PROT_READ: target.ConstMap["PROT_READ"], + PROT_WRITE: target.ConstMap["PROT_WRITE"], + MAP_ANONYMOUS: target.ConstMap["MAP_ANONYMOUS"], + MAP_PRIVATE: target.ConstMap["MAP_PRIVATE"], + MAP_FIXED: target.ConstMap["MAP_FIXED"], + MREMAP_MAYMOVE: target.ConstMap["MREMAP_MAYMOVE"], + MREMAP_FIXED: target.ConstMap["MREMAP_FIXED"], + S_IFREG: target.ConstMap["S_IFREG"], + S_IFCHR: target.ConstMap["S_IFCHR"], + S_IFBLK: target.ConstMap["S_IFBLK"], + S_IFIFO: target.ConstMap["S_IFIFO"], + S_IFSOCK: target.ConstMap["S_IFSOCK"], + SYSLOG_ACTION_CONSOLE_OFF: target.ConstMap["SYSLOG_ACTION_CONSOLE_OFF"], + SYSLOG_ACTION_CONSOLE_ON: target.ConstMap["SYSLOG_ACTION_CONSOLE_ON"], + SYSLOG_ACTION_SIZE_UNREAD: target.ConstMap["SYSLOG_ACTION_SIZE_UNREAD"], + FIFREEZE: target.ConstMap["FIFREEZE"], + FITHAW: target.ConstMap["FITHAW"], + PTRACE_TRACEME: target.ConstMap["PTRACE_TRACEME"], + CLOCK_REALTIME: target.ConstMap["CLOCK_REALTIME"], + } + + target.PageSize = pageSize + target.DataOffset = dataOffset + target.MmapSyscall = arch.mmapSyscall + target.MakeMmap = arch.makeMmap + target.AnalyzeMmap = arch.analyzeMmap + target.SanitizeCall = arch.sanitizeCall + target.SpecialStructs = map[string]func(g *prog.Gen, typ *prog.StructType, old *prog.GroupArg) (prog.Arg, []*prog.Call){ + "timespec": arch.generateTimespec, + "timeval": arch.generateTimespec, + } + target.StringDictionary = stringDictionary + + if target.Arch == runtime.GOARCH { + KCOV_INIT_TRACE = uintptr(target.ConstMap["KCOV_INIT_TRACE"]) + KCOV_ENABLE = uintptr(target.ConstMap["KCOV_ENABLE"]) + KCOV_TRACE_CMP = uintptr(target.ConstMap["KCOV_TRACE_CMP"]) } - prog.RegisterTarget(target) } const ( @@ -263,101 +282,3 @@ func (arch *arch) generateTimespec(g *prog.Gen, typ *prog.StructType, old *prog. } return } - -func makeArch(syscalls []*prog.Syscall, resources []*prog.ResourceDesc, - structDescs []*prog.KeyedStruct, consts []prog.ConstValue, archName string) *arch { - resourceMap := make(map[string]*prog.ResourceDesc) - for _, res := range resources { - resourceMap[res.Name] = res - } - - keyedStructs := make(map[prog.StructKey]*prog.StructDesc) - for _, desc := range structDescs { - keyedStructs[desc.Key] = desc.Desc - } - - arch := &arch{} - for _, c := range syscalls { - prog.ForeachType(c, func(t0 prog.Type) { - switch t := t0.(type) { - case *prog.ResourceType: - t.Desc = resourceMap[t.TypeName] - if t.Desc == nil { - panic("no resource desc") - } - case *prog.StructType: - t.StructDesc = keyedStructs[t.Key] - if t.StructDesc == nil { - panic("no struct desc") - } - case *prog.UnionType: - t.StructDesc = keyedStructs[t.Key] - if t.StructDesc == nil { - panic("no union desc") - } - } - }) - switch c.Name { - case "mmap": - arch.mmapSyscall = c - case "clock_gettime": - arch.clockGettimeSyscall = c - } - } - - for _, c := range consts { - switch c.Name { - case "KCOV_INIT_TRACE": - if archName == runtime.GOARCH { - KCOV_INIT_TRACE = uintptr(c.Value) - } - case "KCOV_ENABLE": - if archName == runtime.GOARCH { - KCOV_ENABLE = uintptr(c.Value) - } - case "KCOV_TRACE_CMP": - if archName == runtime.GOARCH { - KCOV_TRACE_CMP = uintptr(c.Value) - } - case "PROT_READ": - arch.PROT_READ = c.Value - case "PROT_WRITE": - arch.PROT_WRITE = c.Value - case "MAP_ANONYMOUS": - arch.MAP_ANONYMOUS = c.Value - case "MAP_PRIVATE": - arch.MAP_PRIVATE = c.Value - case "MAP_FIXED": - arch.MAP_FIXED = c.Value - case "MREMAP_MAYMOVE": - arch.MREMAP_MAYMOVE = c.Value - case "MREMAP_FIXED": - arch.MREMAP_FIXED = c.Value - case "S_IFREG": - arch.S_IFREG = c.Value - case "S_IFCHR": - arch.S_IFCHR = c.Value - case "S_IFBLK": - arch.S_IFBLK = c.Value - case "S_IFIFO": - arch.S_IFIFO = c.Value - case "S_IFSOCK": - arch.S_IFSOCK = c.Value - case "SYSLOG_ACTION_CONSOLE_OFF": - arch.SYSLOG_ACTION_CONSOLE_OFF = c.Value - case "SYSLOG_ACTION_CONSOLE_ON": - arch.SYSLOG_ACTION_CONSOLE_ON = c.Value - case "SYSLOG_ACTION_SIZE_UNREAD": - arch.SYSLOG_ACTION_SIZE_UNREAD = c.Value - case "FIFREEZE": - arch.FIFREEZE = c.Value - case "FITHAW": - arch.FITHAW = c.Value - case "PTRACE_TRACEME": - arch.PTRACE_TRACEME = c.Value - case "CLOCK_REALTIME": - arch.CLOCK_REALTIME = c.Value - } - } - return arch -} diff --git a/sys/linux/ppc64le.go b/sys/linux/ppc64le.go index 6686885b5..1c02c5a08 100644 --- a/sys/linux/ppc64le.go +++ b/sys/linux/ppc64le.go @@ -4,7 +4,7 @@ package linux import . "github.com/google/syzkaller/prog" func init() { - initArch(revision_ppc64le, syscalls_ppc64le, resources_ppc64le, structDescs_ppc64le, consts_ppc64le, "ppc64le", 8) + RegisterTarget(&Target{OS: "linux", Arch: "ppc64le", Revision: revision_ppc64le, PtrSize: 8, Syscalls: syscalls_ppc64le, Resources: resources_ppc64le, Structs: structDescs_ppc64le, Consts: consts_ppc64le}, initTarget) } var resources_ppc64le = []*ResourceDesc{ @@ -16330,4 +16330,4 @@ var consts_ppc64le = []ConstValue{ {Name: "__WNOTHREAD", Value: 536870912}, } -const revision_ppc64le = "0af6f5872777fdaf20c06a1f982df39659c46b6a" +const revision_ppc64le = "8bfb8686625fa3398eb8d1a5d66834dec0d3fa06" -- cgit mrf-deployment