aboutsummaryrefslogtreecommitdiffstats
path: root/tools/syz-query-subsystems/generator.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2023-02-23 19:35:31 +0100
committerAleksandr Nogikh <wp32pw@gmail.com>2023-02-24 10:29:40 +0100
commita26409574da61bf4edfb80f386b572b622453626 (patch)
tree5cbeefa484b15b6e7ac2145e0f287ee2238f2795 /tools/syz-query-subsystems/generator.go
parent0e6628e0d76d6fd6ccb2f4966e144f13fdc68c5c (diff)
tools/syz-query-subsystems: restructure generation
Since all subsystem lists reside in one package, there might be name collisions between global variables. To avoid that, let's move all subsystem variable definitions into a function and call that function in the init() method. Also, adjust variable name generation: don't exclude digits at the beginning of the name, but rather prepend _ in that case.
Diffstat (limited to 'tools/syz-query-subsystems/generator.go')
-rw-r--r--tools/syz-query-subsystems/generator.go37
1 files changed, 28 insertions, 9 deletions
diff --git a/tools/syz-query-subsystems/generator.go b/tools/syz-query-subsystems/generator.go
index 1eb3305bd..9b93a8151 100644
--- a/tools/syz-query-subsystems/generator.go
+++ b/tools/syz-query-subsystems/generator.go
@@ -11,6 +11,7 @@ import (
"sort"
"strings"
"text/template"
+ "unicode"
"github.com/google/syzkaller/pkg/serializer"
"github.com/google/syzkaller/pkg/subsystem"
@@ -20,7 +21,7 @@ func generateSubsystemsFile(name string, list []*subsystem.Subsystem, commitInfo
// Set names first -- we'll need them for filling in the Parents array.
objToName := map[*subsystem.Subsystem]string{}
for _, entry := range list {
- varName := makeVarRegexp.ReplaceAllString(strings.ToLower(entry.Name), "")
+ varName := getVarName(entry)
if varName == "" {
return nil, fmt.Errorf("failed to get a var name for %#v", entry.Name)
}
@@ -73,6 +74,17 @@ func generateSubsystemsFile(name string, list []*subsystem.Subsystem, commitInfo
return format.Source(b.Bytes())
}
+func getVarName(entry *subsystem.Subsystem) string {
+ varName := makeVarRegexp.ReplaceAllString(strings.ToLower(entry.Name), "")
+ if varName == "" {
+ return ""
+ }
+ if unicode.IsDigit(rune(varName[0])) {
+ return "_" + varName
+ }
+ return varName
+}
+
func hierarchyList(list []*subsystem.Subsystem) []string {
children := map[*subsystem.Subsystem][]*subsystem.Subsystem{}
for _, entry := range list {
@@ -96,7 +108,7 @@ func hierarchyList(list []*subsystem.Subsystem) []string {
return ret
}
-var makeVarRegexp = regexp.MustCompile(`[^\w]|^([^a-z]+)`)
+var makeVarRegexp = regexp.MustCompile(`[^\w]|^([^a-z0-9]+)`)
type templateSubsystem struct {
VarName string
@@ -125,7 +137,7 @@ package lists
import . "github.com/google/syzkaller/pkg/subsystem"
func init() {
- RegisterList("{{.Name}}", subsystems)
+ RegisterList("{{.Name}}", subsystems_{{.Name}}())
}
// The subsystem list:
@@ -133,13 +145,14 @@ func init() {
// {{.}}
{{- end}}
-var subsystems = []*Subsystem{
-{{range .List}} {{.VarName}}, {{- end}}
-}
+func subsystems_{{.Name}}() []*Subsystem{
+var {{range $i, $item := .List}}
+{{- if gt $i 0}}, {{end}}
+{{- .VarName}}
+{{- end}} Subsystem
-// Subsystem info.
{{range .List}}
-var {{.VarName}} = &Subsystem{
+{{.VarName}} = Subsystem{
Name: {{.Name}},
{{- if .Syscalls}}
Syscalls: {{.Syscalls}},
@@ -151,9 +164,15 @@ var {{.VarName}} = &Subsystem{
Maintainers: {{.Maintainers}},
{{- end}}
{{- if .Parents}}
- Parents: []*Subsystem{ {{range .Parents}} {{.}}, {{end}} },
+ Parents: []*Subsystem{ {{range .Parents}} &{{.}}, {{end}} },
{{- end}}
PathRules: {{.PathRules}},
}
{{end}}
+
+return []*Subsystem{
+{{range .List}} &{{.VarName}}, {{- end}}
+}
+
+}
`