diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-10-24 18:38:29 +0200 |
|---|---|---|
| committer | Taras Madan <tarasmadan@google.com> | 2024-10-25 12:08:02 +0000 |
| commit | 42a1ab121510d4ace36fddeb7396bdb7f28bd489 (patch) | |
| tree | c0d125be7a5309878ff58cd3d0e1d4a7e4aa3cc9 /pkg/corpus | |
| parent | f63b8696b67a1c47ecd4fced47215acd6805a14a (diff) | |
pkg/corpus: move focus area configuration to the constructor
Set Corpus in HTTPServer dynamically.
Refactor syz-manager and syz-diff accordingly.
Diffstat (limited to 'pkg/corpus')
| -rw-r--r-- | pkg/corpus/corpus.go | 41 | ||||
| -rw-r--r-- | pkg/corpus/prio_test.go | 3 |
2 files changed, 19 insertions, 25 deletions
diff --git a/pkg/corpus/corpus.go b/pkg/corpus/corpus.go index 487457376..99abd8188 100644 --- a/pkg/corpus/corpus.go +++ b/pkg/corpus/corpus.go @@ -50,6 +50,10 @@ func NewCorpus(ctx context.Context) *Corpus { } func NewMonitoredCorpus(ctx context.Context, updates chan<- NewItemEvent) *Corpus { + return NewFocusedCorpus(ctx, updates, nil) +} + +func NewFocusedCorpus(ctx context.Context, updates chan<- NewItemEvent, areas []FocusArea) *Corpus { corpus := &Corpus{ ctx: ctx, progsMap: make(map[string]*Item), @@ -62,6 +66,20 @@ func NewMonitoredCorpus(ctx context.Context, updates chan<- NewItemEvent) *Corpu stat.LenOf(&corpus.signal, &corpus.mu)) corpus.StatCover = stat.New("coverage", "Source coverage in the corpus", stat.Console, stat.Link("/cover"), stat.Prometheus("syz_corpus_cover"), stat.LenOf(&corpus.cover, &corpus.mu)) + for _, area := range areas { + obj := &ProgramsList{} + if len(areas) > 1 && area.Name != "" { + // Only show extra statistics if there's more than one area. + stat.New("corpus ["+area.Name+"]", + fmt.Sprintf("Corpus programs of the focus area %q", area.Name), + stat.Console, stat.Graph("corpus"), + stat.LenOf(&obj.progs, &corpus.mu)) + } + corpus.focusAreas = append(corpus.focusAreas, &focusAreaState{ + FocusArea: area, + ProgramsList: obj, + }) + } return corpus } @@ -106,29 +124,6 @@ type NewItemEvent struct { NewCover []uint64 } -// SetFocusAreas can only be called once on an empty corpus. -func (corpus *Corpus) SetFocusAreas(areas []FocusArea) { - corpus.mu.Lock() - defer corpus.mu.Unlock() - if len(corpus.progsMap) > 0 { - panic("SetFocusAreas() is called on a non-empty corpus") - } - for _, area := range areas { - obj := &ProgramsList{} - if len(areas) > 1 && area.Name != "" { - // Only show extra statistics if there's more than one area. - stat.New("corpus ["+area.Name+"]", - fmt.Sprintf("Corpus programs of the focus area %q", area.Name), - stat.Console, stat.Graph("corpus"), - stat.LenOf(&obj.progs, &corpus.mu)) - } - corpus.focusAreas = append(corpus.focusAreas, &focusAreaState{ - FocusArea: area, - ProgramsList: obj, - }) - } -} - func (corpus *Corpus) Save(inp NewInput) { progData := inp.Prog.Serialize() sig := hash.String(progData) diff --git a/pkg/corpus/prio_test.go b/pkg/corpus/prio_test.go index 6328ba3e5..71507c2b1 100644 --- a/pkg/corpus/prio_test.go +++ b/pkg/corpus/prio_test.go @@ -51,8 +51,7 @@ func TestChooseProgram(t *testing.T) { func TestFocusAreas(t *testing.T) { target := getTarget(t, targets.TestOS, targets.TestArch64) - corpus := NewCorpus(context.Background()) - corpus.SetFocusAreas([]FocusArea{ + corpus := NewFocusedCorpus(context.Background(), nil, []FocusArea{ { CoverPCs: map[uint64]struct{}{ 0: {}, |
