aboutsummaryrefslogtreecommitdiffstats
path: root/tools/syz-kconf/parser.go
diff options
context:
space:
mode:
Diffstat (limited to 'tools/syz-kconf/parser.go')
-rw-r--r--tools/syz-kconf/parser.go20
1 files changed, 14 insertions, 6 deletions
diff --git a/tools/syz-kconf/parser.go b/tools/syz-kconf/parser.go
index 0f7d330a0..6f46151ed 100644
--- a/tools/syz-kconf/parser.go
+++ b/tools/syz-kconf/parser.go
@@ -83,33 +83,41 @@ type rawFile struct {
Config []yaml.Node
}
-func parseMainSpec(file string) ([]*Instance, error) {
+func parseMainSpec(file string) ([]*Instance, []string, error) {
data, err := ioutil.ReadFile(file)
if err != nil {
- return nil, fmt.Errorf("failed to read config file: %v", err)
+ return nil, nil, fmt.Errorf("failed to read config file: %v", err)
}
dec := yaml.NewDecoder(bytes.NewReader(data))
dec.KnownFields(true)
raw := new(rawMain)
if err := dec.Decode(raw); err != nil {
- return nil, fmt.Errorf("failed to parse %v: %v", file, err)
+ return nil, nil, fmt.Errorf("failed to parse %v: %v", file, err)
}
+ var unusedFeatures []string
var instances []*Instance
for _, inst := range raw.Instances {
for name, features := range inst {
+ if name == "_" {
+ unusedFeatures = features
+ continue
+ }
inst, err := parseInstance(name, filepath.Dir(file), features, raw.Includes)
if err != nil {
- return nil, err
+ return nil, nil, err
}
instances = append(instances, inst)
+ if constraintsInclude(features, featBaseline) {
+ continue
+ }
inst, err = parseInstance(name+"-base", filepath.Dir(file), append(features, featBaseline), raw.Includes)
if err != nil {
- return nil, err
+ return nil, nil, err
}
instances = append(instances, inst)
}
}
- return instances, nil
+ return instances, unusedFeatures, nil
}
func parseInstance(name, configDir string, features []string, includes []map[string][]string) (*Instance, error) {