aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/corpus/corpus.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/corpus/corpus.go')
-rw-r--r--pkg/corpus/corpus.go7
1 files changed, 7 insertions, 0 deletions
diff --git a/pkg/corpus/corpus.go b/pkg/corpus/corpus.go
index e6569dbc6..d57b5fd25 100644
--- a/pkg/corpus/corpus.go
+++ b/pkg/corpus/corpus.go
@@ -98,6 +98,7 @@ type Item struct {
Call int
Prog *prog.Prog
HasAny bool // whether the prog contains squashed arguments
+ ExecLast int64
Signal signal.Signal
StableSignal signal.Signal
Cover []uint64
@@ -106,6 +107,8 @@ type Item struct {
areas map[*focusAreaState]struct{}
}
+const maxExecs int64 = 5
+
func (item Item) StringCall() string {
return item.Prog.CallName(item.Call)
}
@@ -155,6 +158,7 @@ func (corpus *Corpus) Save(inp NewInput) {
Prog: old.Prog,
Call: old.Call,
HasAny: old.HasAny,
+ ExecLast: old.ExecLast,
Signal: newSignal,
StableSignal: newStableSignal,
Cover: newCover.Serialize(),
@@ -171,6 +175,7 @@ func (corpus *Corpus) Save(inp NewInput) {
Call: inp.Call,
Prog: inp.Prog,
HasAny: inp.Prog.ContainsAny(),
+ ExecLast: maxExecs,
Signal: inp.Signal,
StableSignal: inp.StableSignal,
Cover: inp.Cover,
@@ -181,6 +186,8 @@ func (corpus *Corpus) Save(inp NewInput) {
corpus.progsMap[sig] = newItem
corpus.applyFocusAreas(newItem, newItem.Cover)
corpus.saveProgram(inp.Prog, newItem.StableSignal)
+ corpus.modifyPriority(inp.Prog, newItem.Signal, newItem.ExecLast)
+ // TODO do same thing with Focus Areas
corpus.signal.Merge(inp.Signal)
newCover := corpus.cover.MergeDiff(inp.Cover)