diff options
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/fuchsia/fidlgen/main.go | 69 | ||||
| -rw-r--r-- | sys/fuchsia/layout/fidl_mappings.go | 78 | ||||
| -rw-r--r-- | sys/syz-extract/fuchsia.go | 6 |
3 files changed, 93 insertions, 60 deletions
diff --git a/sys/fuchsia/fidlgen/main.go b/sys/fuchsia/fidlgen/main.go index 8a88e5007..139d6461d 100644 --- a/sys/fuchsia/fidlgen/main.go +++ b/sys/fuchsia/fidlgen/main.go @@ -13,28 +13,10 @@ import ( "github.com/google/syzkaller/pkg/ast" "github.com/google/syzkaller/pkg/compiler" "github.com/google/syzkaller/pkg/osutil" + "github.com/google/syzkaller/sys/fuchsia/layout" "github.com/google/syzkaller/sys/targets" ) -var layerToLibs = map[string][]string{ - "zircon": { - "fuchsia-mem", - "fuchsia-cobalt", - "fuchsia-ldsvc", - "fuchsia-process", - "fuchsia-io", - "fuchsia-net", - "fuchsia-net-stack", - "fuchsia-hardware-ethernet", - }, - "garnet": { - "fuchsia.devicesettings", - "fuchsia.timezone", - "fuchsia.power", - "fuchsia.scpi", - }, -} - func main() { targetArch := os.Getenv("TARGETARCH") target := targets.Get("fuchsia", targetArch) @@ -60,46 +42,17 @@ func main() { } var newFiles []string + for _, fidlLib := range layout.AllFidlLibraries { + jsonPath := filepath.Join(sourceDir, "out", arch, fidlLib.PathToJSONIr()) + txtPathBase := strings.Replace(strings.Join(fidlLib.FqName, "_"), "^fuchsia", "fidl", 1) - for layer := range layerToLibs { - var jsonPathBase string - if layer == "garnet" { - jsonPathBase = filepath.Join( - sourceDir, - "out", - arch, - "fidling/gen/sdk/fidl", - ) - } else { - jsonPathBase = filepath.Join( - sourceDir, - "out", - arch, - "fidling/gen", - layer, - "public/fidl", - ) - } - - for _, lib := range layerToLibs[layer] { - jsonPath := filepath.Join( - jsonPathBase, - lib, - fmt.Sprintf("%s.fidl.json", lib), - ) + txtPath := fidlgen( + fidlgenPath, + jsonPath, + txtPathBase, + ) - txtPathBase := lib - txtPathBase = strings.Replace(txtPathBase, "fuchsia.", "fidl_", 1) - txtPathBase = strings.Replace(txtPathBase, "fuchsia-", "fidl_", 1) - - txtPath := fidlgen( - fidlgenPath, - jsonPath, - txtPathBase, - ) - - newFiles = append(newFiles, txtPath) - } + newFiles = append(newFiles, txtPath) } var errorPos ast.Pos @@ -157,7 +110,7 @@ func fidlgen(fidlgenPath string, jsonPath string, txtPathBase string) string { failf("fidlgen failed: %v", err) } - return fmt.Sprintf("%s.txt", txtPathBase) + return fmt.Sprintf("%s.syz.txt", txtPathBase) } func failf(msg string, args ...interface{}) { diff --git a/sys/fuchsia/layout/fidl_mappings.go b/sys/fuchsia/layout/fidl_mappings.go new file mode 100644 index 000000000..dd5e3c678 --- /dev/null +++ b/sys/fuchsia/layout/fidl_mappings.go @@ -0,0 +1,78 @@ +// Copyright 2019 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 layout + +import ( + "fmt" + "path/filepath" + "strings" +) + +// layer indicates at which layer a FidlLibrary lives in the Fuchsia build +// system. +type layer int + +const ( + _ layer = iota + zircon + garnet +) + +// FidlLibrary describes a FIDL library. It captures required details such as +// build location, header generation, etc. +type FidlLibrary struct { + layer layer + + // FqName stores the fully-qualified name of the library in parts, e.g. + // the `fuchsia.mem` library is `fuchsia`, `mem`. + FqName []string +} + +// AllFidlLibraries lists all FIDL libraries. +var AllFidlLibraries = []FidlLibrary{ + {zircon, []string{"fuchsia", "mem"}}, + {zircon, []string{"fuchsia", "cobalt"}}, + {zircon, []string{"fuchsia", "ldsvc"}}, + {zircon, []string{"fuchsia", "process"}}, + {zircon, []string{"fuchsia", "io"}}, + {zircon, []string{"fuchsia", "net"}}, + {zircon, []string{"fuchsia", "net", "stack"}}, + {zircon, []string{"fuchsia", "hardware", "ethernet"}}, + {garnet, []string{"fuchsia", "devicesettings"}}, + {garnet, []string{"fuchsia", "timezone"}}, + {garnet, []string{"fuchsia", "power"}}, + {garnet, []string{"fuchsia", "scpi"}}, +} + +func (fidlLib FidlLibrary) dirName() string { + switch fidlLib.layer { + case zircon: + return strings.Join(fidlLib.FqName, "-") + case garnet: + return strings.Join(fidlLib.FqName, ".") + default: + panic(fmt.Sprintf("unknown layer %v", fidlLib.layer)) + } +} + +// PathToJSONIr provides the path to the JSON IR, relative to the out/<arch> +// directory. +func (fidlLib FidlLibrary) PathToJSONIr() string { + return filepath.Join( + fidlLib.PathToCompiledDir(), + fmt.Sprintf("%s.fidl.json", fidlLib.dirName())) +} + +// PathToCompiledDir provides the path to compiled headers, relative to the +// out/<arch> directory. +func (fidlLib FidlLibrary) PathToCompiledDir() string { + switch fidlLib.layer { + case zircon: + return filepath.Join("fidling", "gen", "zircon", "public", "fidl", fidlLib.dirName()) + case garnet: + return filepath.Join("fidling", "gen", "sdk", "fidl", fidlLib.dirName()) + default: + panic(fmt.Sprintf("unknown layer %v", fidlLib.layer)) + } +} diff --git a/sys/syz-extract/fuchsia.go b/sys/syz-extract/fuchsia.go index 2784a1b11..9ec5e117d 100644 --- a/sys/syz-extract/fuchsia.go +++ b/sys/syz-extract/fuchsia.go @@ -8,6 +8,7 @@ import ( "path/filepath" "github.com/google/syzkaller/pkg/compiler" + "github.com/google/syzkaller/sys/fuchsia/layout" ) type fuchsia struct{} @@ -30,8 +31,9 @@ func (*fuchsia) processFile(arch *Arch, info *compiler.ConstInfo) (map[string]ui includeDir := filepath.Join(dir, "out", headerArch, "sdk", "exported", "zircon_sysroot", "arch", headerArch, "sysroot", "include") args := []string{"-fmessage-length=0", "-I" + includeDir} - fidlingDir := filepath.Join(dir, "out", headerArch, "fidling", "gen") - args = append(args, "-I"+fidlingDir) + for _, fidlLib := range layout.AllFidlLibraries { + args = append(args, "-I"+filepath.Join(dir, "out", headerArch, fidlLib.PathToCompiledDir())) + } for _, incdir := range info.Incdirs { args = append(args, "-I"+filepath.Join(dir, incdir)) } |
