aboutsummaryrefslogtreecommitdiffstats
path: root/prog/mutation_test.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-02-19 19:35:04 +0100
committerDmitry Vyukov <dvyukov@google.com>2018-02-19 21:48:20 +0100
commit75a7c5e2d1f09a4a58e7e1f1f4ef0b0f55a33413 (patch)
treed44c2457c44b53192005f0b89cd6633a2a2b0ff9 /prog/mutation_test.go
parent90fd6503136121e9494761a460898e83bc0b6b3e (diff)
prog: rework address allocation
1. mmap all memory always, without explicit mmap calls in the program. This makes lots of things much easier and removes lots of code. Makes mmap not a special syscall and allows to fuzz without mmap enabled. 2. Change address assignment algorithm. Current algorithm allocates unmapped addresses too frequently and allows collisions between arguments of a single syscall. The new algorithm analyzes actual allocations in the program and places new arguments at unused locations.
Diffstat (limited to 'prog/mutation_test.go')
-rw-r--r--prog/mutation_test.go20
1 files changed, 19 insertions, 1 deletions
diff --git a/prog/mutation_test.go b/prog/mutation_test.go
index 5c5ac232a..2267dd254 100644
--- a/prog/mutation_test.go
+++ b/prog/mutation_test.go
@@ -135,7 +135,6 @@ mutate5(&(0x7f0000001000)="2e2f66696c653100", 0x22c0)
{`
mutate3(&(0x7f0000000000)=[0x1, 0x1], 0x2)
`, `
-mmap(&(0x7f0000000000/0x1000)=nil, 0x1000)
mutate3(&(0x7f0000000000)=[0x1, 0x1, 0x1], 0x3)
`},
// Mutate size from it's natural value.
@@ -206,3 +205,22 @@ func BenchmarkMutate(b *testing.B) {
}
})
}
+
+func BenchmarkGenerate(b *testing.B) {
+ olddebug := debug
+ debug = false
+ defer func() { debug = olddebug }()
+ target, err := GetTarget("linux", "amd64")
+ if err != nil {
+ b.Fatal(err)
+ }
+ prios := target.CalculatePriorities(nil)
+ ct := target.BuildChoiceTable(prios, nil)
+ const progLen = 30
+ b.RunParallel(func(pb *testing.PB) {
+ rs := rand.NewSource(0)
+ for pb.Next() {
+ target.Generate(rs, progLen, ct)
+ }
+ })
+}