aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/mgrconfig
diff options
context:
space:
mode:
authorPimyn Girgis <bemenboshra2001@gmail.com>2024-08-06 14:10:45 +0000
committerDmitry Vyukov <dvyukov@google.com>2024-08-12 09:22:32 +0000
commit421e1cbedb47cb499201512defc2baf79d7b87f7 (patch)
treed3575138e30c98c96e6ecc180b4b06fdcd71fa4b /pkg/mgrconfig
parent1fef415f27727712346c8e7ad9c945e74d217b1b (diff)
pkg/mgrconfig, prog, tools: allow automatically generated or manually written descriptions or both
Add "Auto" type and allow to choose descriptions mode in configurations. Defaults to using manual only.
Diffstat (limited to 'pkg/mgrconfig')
-rw-r--r--pkg/mgrconfig/config.go3
-rw-r--r--pkg/mgrconfig/load.go39
2 files changed, 37 insertions, 5 deletions
diff --git a/pkg/mgrconfig/config.go b/pkg/mgrconfig/config.go
index b4368f6d5..2ea0d8ad9 100644
--- a/pkg/mgrconfig/config.go
+++ b/pkg/mgrconfig/config.go
@@ -232,6 +232,9 @@ type Experimental struct {
// Hash adjacent PCs to form fuzzing feedback signal, otherwise use PCs as signal (default: true).
CoverEdges bool `json:"cover_edges"`
+
+ // Use automatically (auto) generated or manually (manual) written descriptions or any (any) (default: manual)
+ DescriptionsMode string `json:"descriptions_mode"`
}
type Subsystem struct {
diff --git a/pkg/mgrconfig/load.go b/pkg/mgrconfig/load.go
index 6f92a232e..9120dd236 100644
--- a/pkg/mgrconfig/load.go
+++ b/pkg/mgrconfig/load.go
@@ -94,12 +94,32 @@ func defaultValues() *Config {
Procs: 6,
PreserveCorpus: true,
Experimental: Experimental{
- RemoteCover: true,
- CoverEdges: true,
+ RemoteCover: true,
+ CoverEdges: true,
+ DescriptionsMode: manualDescriptions,
},
}
}
+type DescriptionsMode int
+
+const (
+ invalidDescriptions = iota
+ ManualDescriptions
+ AutoDescriptions
+ AnyDescriptions
+)
+
+const manualDescriptions = "manual"
+
+var (
+ strToDescriptionsMode = map[string]DescriptionsMode{
+ manualDescriptions: ManualDescriptions,
+ "auto": AutoDescriptions,
+ "any": AnyDescriptions,
+ }
+)
+
func loadPartial(cfg *Config) (*Config, error) {
var err error
cfg.TargetOS, cfg.TargetVMArch, cfg.TargetArch, err = splitTarget(cfg.RawTarget)
@@ -171,7 +191,8 @@ func Complete(cfg *Config) error {
}
var err error
- cfg.Syscalls, err = ParseEnabledSyscalls(cfg.Target, cfg.EnabledSyscalls, cfg.DisabledSyscalls)
+ cfg.Syscalls, err = ParseEnabledSyscalls(cfg.Target, cfg.EnabledSyscalls, cfg.DisabledSyscalls,
+ strToDescriptionsMode[cfg.Experimental.DescriptionsMode])
if err != nil {
return err
}
@@ -317,7 +338,12 @@ func splitTarget(target string) (string, string, string, error) {
return os, vmarch, arch, nil
}
-func ParseEnabledSyscalls(target *prog.Target, enabled, disabled []string) ([]int, error) {
+func ParseEnabledSyscalls(target *prog.Target, enabled, disabled []string,
+ descriptionsMode DescriptionsMode) ([]int, error) {
+ if descriptionsMode == invalidDescriptions {
+ return nil, fmt.Errorf("config param descriptions_mode must contain one of auto/manual/any")
+ }
+
syscalls := make(map[int]bool)
if len(enabled) != 0 {
for _, c := range enabled {
@@ -337,8 +363,11 @@ func ParseEnabledSyscalls(target *prog.Target, enabled, disabled []string) ([]in
syscalls[call.ID] = true
}
}
+
for call := range syscalls {
- if target.Syscalls[call].Attrs.Disabled {
+ if target.Syscalls[call].Attrs.Disabled ||
+ descriptionsMode == ManualDescriptions && target.Syscalls[call].Attrs.Automatic ||
+ descriptionsMode == AutoDescriptions && !target.Syscalls[call].Attrs.Automatic {
delete(syscalls, call)
}
}