diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-10-23 22:26:33 +0200 |
|---|---|---|
| committer | Taras Madan <tarasmadan@google.com> | 2024-10-25 12:08:02 +0000 |
| commit | 500aee76e6243afdb6c953d37e5f1016f73a04cc (patch) | |
| tree | 7c09a594fcf5ffca8d3e4c6450a347099c443870 /pkg | |
| parent | 9a199dec544ca9f1560a7352d0d003cf9206d8c5 (diff) | |
pkg/manager: configure coverage filter generation strictness
In some cases, one might want to tolerate non-perfect filters.
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/manager/covfilter.go | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/pkg/manager/covfilter.go b/pkg/manager/covfilter.go index 03f3064af..2b5e3f589 100644 --- a/pkg/manager/covfilter.go +++ b/pkg/manager/covfilter.go @@ -17,7 +17,8 @@ import ( "github.com/google/syzkaller/pkg/mgrconfig" ) -func CoverageFilter(source *ReportGeneratorWrapper, covCfg mgrconfig.CovFilterCfg) (map[uint64]struct{}, error) { +func CoverageFilter(source *ReportGeneratorWrapper, covCfg mgrconfig.CovFilterCfg, + strict bool) (map[uint64]struct{}, error) { if covCfg.Empty() { return nil, nil } @@ -31,7 +32,7 @@ func CoverageFilter(source *ReportGeneratorWrapper, covCfg mgrconfig.CovFilterCf apply(&sym.ObjectUnit) } } - if err := covFilterAddFilter(pcs, covCfg.Functions, foreachSymbol); err != nil { + if err := covFilterAddFilter(pcs, covCfg.Functions, foreachSymbol, strict); err != nil { return nil, err } foreachUnit := func(apply func(*backend.ObjectUnit)) { @@ -39,7 +40,7 @@ func CoverageFilter(source *ReportGeneratorWrapper, covCfg mgrconfig.CovFilterCf apply(&unit.ObjectUnit) } } - if err := covFilterAddFilter(pcs, covCfg.Files, foreachUnit); err != nil { + if err := covFilterAddFilter(pcs, covCfg.Files, foreachUnit, strict); err != nil { return nil, err } if err := covFilterAddRawPCs(pcs, covCfg.RawPCs); err != nil { @@ -49,7 +50,8 @@ func CoverageFilter(source *ReportGeneratorWrapper, covCfg mgrconfig.CovFilterCf return pcs, nil } -func covFilterAddFilter(pcs map[uint64]struct{}, filters []string, foreach func(func(*backend.ObjectUnit))) error { +func covFilterAddFilter(pcs map[uint64]struct{}, filters []string, foreach func(func(*backend.ObjectUnit)), + strict bool) error { res, err := compileRegexps(filters) if err != nil { return err @@ -75,7 +77,7 @@ func covFilterAddFilter(pcs map[uint64]struct{}, filters []string, foreach func( sort.Strings(used[re]) log.Logf(0, "coverage filter: %v: %v", re, used[re]) } - if len(res) != len(used) { + if strict && len(res) != len(used) { return fmt.Errorf("some filters don't match anything") } return nil @@ -134,11 +136,12 @@ type CoverageFilters struct { ExecutorFilter map[uint64]struct{} } -func PrepareCoverageFilters(source *ReportGeneratorWrapper, cfg *mgrconfig.Config) (CoverageFilters, error) { +func PrepareCoverageFilters(source *ReportGeneratorWrapper, cfg *mgrconfig.Config, + strict bool) (CoverageFilters, error) { var ret CoverageFilters needExecutorFilter := len(cfg.Experimental.FocusAreas) > 0 for _, area := range cfg.Experimental.FocusAreas { - pcs, err := CoverageFilter(source, area.Filter) + pcs, err := CoverageFilter(source, area.Filter, strict) if err != nil { return ret, err } |
