diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2025-04-03 14:35:27 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2025-04-03 13:17:55 +0000 |
| commit | d7ae3a111bd75df44dda69b37da945b50d5133e2 (patch) | |
| tree | 9797c351f3f4d30ae71068ae1447b457506afb7c /pkg/ifuzz/arm64 | |
| parent | 012c639d904cf60a221b8b16833c02eed9b2514e (diff) | |
pkg/ifuzz: fix generate/build
Currently the commands we have in go:generate first create an empty file
and then write final contents. This breaks any parallel builds of the source.
Even running go generate ./... does not work.
Write output files atomically.
Diffstat (limited to 'pkg/ifuzz/arm64')
| -rw-r--r-- | pkg/ifuzz/arm64/arm64.go | 2 | ||||
| -rw-r--r-- | pkg/ifuzz/arm64/gen/gen.go | 14 |
2 files changed, 11 insertions, 5 deletions
diff --git a/pkg/ifuzz/arm64/arm64.go b/pkg/ifuzz/arm64/arm64.go index 3b835566f..a2d326339 100644 --- a/pkg/ifuzz/arm64/arm64.go +++ b/pkg/ifuzz/arm64/arm64.go @@ -1,7 +1,7 @@ // Copyright 2024 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. -//go:generate bash -c "go run gen/gen.go gen/json/arm64.json | gofmt > generated/insns.go" +//go:generate go run gen/gen.go gen/json/arm64.json generated/insns.go // Package arm64 allows to generate and mutate arm64 machine code. package arm64 diff --git a/pkg/ifuzz/arm64/gen/gen.go b/pkg/ifuzz/arm64/gen/gen.go index 659fea202..ef5afbd46 100644 --- a/pkg/ifuzz/arm64/gen/gen.go +++ b/pkg/ifuzz/arm64/gen/gen.go @@ -5,6 +5,7 @@ package main import ( + "bytes" "encoding/json" "fmt" "os" @@ -12,13 +13,14 @@ import ( "strings" "github.com/google/syzkaller/pkg/ifuzz/arm64" + "github.com/google/syzkaller/pkg/osutil" "github.com/google/syzkaller/pkg/serializer" "github.com/google/syzkaller/pkg/tool" ) func main() { - if len(os.Args) != 2 { - tool.Failf("usage: gen arm64.json") + if len(os.Args) != 3 { + tool.Failf("usage: gen arm64.json output.file") } jsonStr, err := os.ReadFile(os.Args[1]) if err != nil { @@ -26,7 +28,8 @@ func main() { } insns := JSONToInsns(jsonStr) - fmt.Printf(`// Code generated by pkg/ifuzz/gen. DO NOT EDIT. + out := new(bytes.Buffer) + fmt.Fprintf(out, `// Code generated by pkg/ifuzz/gen. DO NOT EDIT. // go:build !codeanalysis @@ -42,7 +45,10 @@ func init() { var insns_arm64 = `) - serializer.Write(os.Stdout, insns) + serializer.Write(out, insns) + if err := osutil.WriteFileAtomically(os.Args[2], out.Bytes()); err != nil { + tool.Fail(err) + } fmt.Fprintf(os.Stderr, "handled %v\n", len(insns)) } |
