1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| // Copyright 2015 syzkaller project authors. All rights reserved.
| // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
|
| package prog
|
| import (
| "math/rand"
| )
|
| // Generate generates a random program of length ~ncalls.
| // calls is a set of allowed syscalls, if nil all syscalls are used.
| func (target *Target) Generate(rs rand.Source, ncalls int, ct *ChoiceTable) *Prog {
| p := &Prog{
| Target: target,
| }
| r := newRand(target, rs)
| s := newState(target, ct)
| for len(p.Calls) < ncalls {
| calls := r.generateCall(s, p)
| for _, c := range calls {
| s.analyze(c)
| p.Calls = append(p.Calls, c)
| }
| }
| p.debugValidate()
| return p
| }
|
|