diff options
| author | Pimyn Girgis <bemenboshra2001@gmail.com> | 2024-08-06 14:10:45 +0000 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2024-08-12 09:22:32 +0000 |
| commit | 421e1cbedb47cb499201512defc2baf79d7b87f7 (patch) | |
| tree | d3575138e30c98c96e6ecc180b4b06fdcd71fa4b /pkg/mgrconfig | |
| parent | 1fef415f27727712346c8e7ad9c945e74d217b1b (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.go | 3 | ||||
| -rw-r--r-- | pkg/mgrconfig/load.go | 39 |
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) } } |
