mirror of
https://github.com/reactos/syzkaller.git
synced 2024-11-27 05:10:43 +00:00
sys: Updating Fuchsia extraction scripts
Consolidating FIDL library build mappings in one place, so that it can be used from extraction, and script invoking fidlgen. This also makes code clearer, and provides a more natural path for evolutions / dealing with oddities. Minor doc update post fx command changes.
This commit is contained in:
parent
13427bd9a9
commit
77beeccbe0
@ -3,18 +3,19 @@
|
||||
For information about checking out and building Fuchsia see
|
||||
[Getting Started](https://fuchsia.googlesource.com/fuchsia/+/master/docs/getting_started.md)
|
||||
and [Soure Code](https://fuchsia.googlesource.com/fuchsia/+/master/docs/development/source_code/README.md).
|
||||
|
||||
You need to build fuchsia for both amd64 and arm64:
|
||||
|
||||
```shell
|
||||
$ fx set core.x64 --build-dir "out/x64" \
|
||||
--args extra_authorized_keys_file=\"//.ssh/authorized_keys\"
|
||||
$ fx full-build
|
||||
$ fx --dir "out/x64" set core.x64
|
||||
$ fx clean-build
|
||||
```
|
||||
|
||||
You need to build fuchsia for both arm64 and amd64:
|
||||
And
|
||||
|
||||
```shell
|
||||
$ fx set core.arm64 --build-dir "out/arm64" \
|
||||
--args extra_authorized_keys_file=\"//.ssh/authorized_keys\"
|
||||
$ fx full-build
|
||||
$ fx --dir "out/arm64" set core.arm64
|
||||
$ fx clean-build
|
||||
```
|
||||
|
||||
Syscall descriptions live in the `sys/fuchsia` folder. To update a syscall, you need to modify the `.txt` file that contains it, make sure your new definition matches the one in zircon's [syscalls.abigen](https://fuchsia.googlesource.com/fuchsia/+/master/zircon/system/public/zircon/syscalls.abigen) file. **If the syscall was used in `executor/common_fuchsia.h`, you need to update the usages there as well**. FIDL definitions do not need manual updating because they are extracted automatically with the commands below.
|
||||
|
@ -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",
|
||||
)
|
||||
}
|
||||
txtPath := fidlgen(
|
||||
fidlgenPath,
|
||||
jsonPath,
|
||||
txtPathBase,
|
||||
)
|
||||
|
||||
for _, lib := range layerToLibs[layer] {
|
||||
jsonPath := filepath.Join(
|
||||
jsonPathBase,
|
||||
lib,
|
||||
fmt.Sprintf("%s.fidl.json", lib),
|
||||
)
|
||||
|
||||
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{}) {
|
||||
|
78
sys/fuchsia/layout/fidl_mappings.go
Normal file
78
sys/fuchsia/layout/fidl_mappings.go
Normal file
@ -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))
|
||||
}
|
||||
}
|
@ -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))
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user