From ac040bb3def51ecf81966d7801521b5a59fac0db Mon Sep 17 00:00:00 2001 From: Patrick Meyer Date: Thu, 6 May 2021 23:08:43 +0200 Subject: sys/syz-extract: initial darwin support --- sys/sys.go | 1 + sys/syz-extract/darwin.go | 51 ++++++++++++++++++++++++++++++++++++++++++++++ sys/syz-extract/extract.go | 1 + 3 files changed, 53 insertions(+) create mode 100644 sys/syz-extract/darwin.go (limited to 'sys') diff --git a/sys/sys.go b/sys/sys.go index 2c3d169d5..b0ae67839 100644 --- a/sys/sys.go +++ b/sys/sys.go @@ -6,6 +6,7 @@ package sys import ( // Import all targets, so that users only need to import sys. _ "github.com/google/syzkaller/sys/akaros/gen" + _ "github.com/google/syzkaller/sys/darwin/gen" _ "github.com/google/syzkaller/sys/freebsd/gen" _ "github.com/google/syzkaller/sys/fuchsia/gen" _ "github.com/google/syzkaller/sys/linux/gen" diff --git a/sys/syz-extract/darwin.go b/sys/syz-extract/darwin.go new file mode 100644 index 000000000..c6d694696 --- /dev/null +++ b/sys/syz-extract/darwin.go @@ -0,0 +1,51 @@ +// Copyright 2021 syzkaller project authors. All rights reserved. +// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. + +package main + +import ( + "fmt" + "path/filepath" + "strings" + + "github.com/google/syzkaller/pkg/compiler" +) + +type darwin struct{} + +func (*darwin) prepare(sourcedir string, build bool, arches []*Arch) error { + if sourcedir == "" { + return fmt.Errorf("provide path to kernel checkout via -sourcedir flag (or make extract SOURCEDIR)") + } + return nil +} + +func (*darwin) prepareArch(arch *Arch) error { + return nil +} + +func (*darwin) processFile(arch *Arch, info *compiler.ConstInfo) (map[string]uint64, map[string]bool, error) { + args := []string{ + "-nostdinc", + "-I", filepath.Join(arch.sourceDir, "bsd"), + "-I", filepath.Join(arch.sourceDir, "bsd", "sys"), + "-I", filepath.Join(arch.sourceDir, "osfmk"), + } + for _, incdir := range info.Incdirs { + args = append(args, "-I"+filepath.Join(arch.sourceDir, incdir)) + } + fmt.Printf("dirs: %v", arch.includeDirs) + if arch.includeDirs != "" { + for _, dir := range strings.Split(arch.includeDirs, ",") { + args = append(args, "-I"+dir) + } + } + // TODO(HerrSpace): investigate use of bsd/kern/syscalls.master and + // osfmk/mach/mach_traps.h here. + params := &extractParams{ + AddSource: "#include ", + DeclarePrintf: true, + TargetEndian: arch.target.HostEndian, + } + return extract(info, "clang", args, params) +} diff --git a/sys/syz-extract/extract.go b/sys/syz-extract/extract.go index 00ab16cd8..24ea5f725 100644 --- a/sys/syz-extract/extract.go +++ b/sys/syz-extract/extract.go @@ -61,6 +61,7 @@ var extractors = map[string]Extractor{ targets.Akaros: new(akaros), targets.Linux: new(linux), targets.FreeBSD: new(freebsd), + targets.Darwin: new(darwin), targets.NetBSD: new(netbsd), targets.OpenBSD: new(openbsd), "android": new(linux), -- cgit mrf-deployment