aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-10-23 22:26:33 +0200
committerTaras Madan <tarasmadan@google.com>2024-10-25 12:08:02 +0000
commit500aee76e6243afdb6c953d37e5f1016f73a04cc (patch)
tree7c09a594fcf5ffca8d3e4c6450a347099c443870 /pkg
parent9a199dec544ca9f1560a7352d0d003cf9206d8c5 (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.go17
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
}