aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2015-10-19 14:00:20 +0200
committerDmitry Vyukov <dvyukov@google.com>2015-10-20 15:46:04 +0200
commit74f5340ea65df34599f489dcff2e9a881a03a50b (patch)
tree8187bc69b6b003bb0ce772c77d0304f3d4575698
parent30c9c31819063079e276dc166ba6c09018940229 (diff)
allow to run local vm without coverage
-rw-r--r--fuzzer/fuzzer.go19
-rw-r--r--manager/main.go1
-rw-r--r--vm/local/local.go5
-rw-r--r--vm/vm.go1
4 files changed, 24 insertions, 2 deletions
diff --git a/fuzzer/fuzzer.go b/fuzzer/fuzzer.go
index 1da15ccfe..e2e09c48f 100644
--- a/fuzzer/fuzzer.go
+++ b/fuzzer/fuzzer.go
@@ -35,6 +35,7 @@ var (
flagStrace = flag.Bool("strace", false, "run executor under strace")
flagSaveProg = flag.Bool("saveprog", false, "save programs into local file before executing")
flagSyscalls = flag.String("calls", "", "comma-delimited list of enabled syscall IDs (empty string for all syscalls)")
+ flagNoCover = flag.Bool("nocover", false, "disable coverage collection/handling")
flagV = flag.Int("v", 0, "verbosity")
)
@@ -101,10 +102,13 @@ func main() {
}
ct = prog.BuildChoiceTable(r.Prios, calls)
- flags := ipc.FlagCover | ipc.FlagDedupCover
+ flags := ipc.FlagThreaded
if *flagStrace {
flags |= ipc.FlagStrace
}
+ if !*flagNoCover {
+ flags |= ipc.FlagCover | ipc.FlagDedupCover
+ }
env, err := ipc.MakeEnv(*flagExecutor, 4*time.Second, flags)
if err != nil {
panic(err)
@@ -141,7 +145,12 @@ func main() {
if err != nil {
panic(err)
}
- execute(env, p)
+ if *flagNoCover {
+ inp := Input{p, 0, nil}
+ corpus = append(corpus, inp)
+ } else {
+ execute(env, p)
+ }
}
if len(r.NewInputs) == 0 && len(r.Candidates) == 0 {
lastPoll = time.Now()
@@ -166,6 +175,9 @@ func main() {
}
func addInput(inp RpcInput) {
+ if *flagNoCover {
+ panic("should not be called when coverage is disabled")
+ }
p, err := prog.Deserialize(inp.Prog)
if err != nil {
panic(err)
@@ -192,6 +204,9 @@ func addInput(inp RpcInput) {
}
func triageInput(env *ipc.Env, inp Input) {
+ if *flagNoCover {
+ panic("should not be called when coverage is disabled")
+ }
call := inp.p.Calls[inp.call].Meta
newCover := cover.Difference(inp.cover, corpusCover[call.CallID])
newCover = cover.Difference(newCover, flakes)
diff --git a/manager/main.go b/manager/main.go
index 716b341a2..bc7d185c2 100644
--- a/manager/main.go
+++ b/manager/main.go
@@ -58,6 +58,7 @@ func main() {
ManagerPort: cfg.Port,
Params: params,
EnabledSyscalls: enabledSyscalls,
+ NoCover: cfg.Nocover,
}
var instances []vm.Instance
for i := 0; i < cfg.Count; i++ {
diff --git a/vm/local/local.go b/vm/local/local.go
index 448d39460..0d4303e89 100644
--- a/vm/local/local.go
+++ b/vm/local/local.go
@@ -25,6 +25,7 @@ type local struct {
syscalls string
id int
mgrPort int
+ nocover bool
}
type params struct {
@@ -60,6 +61,7 @@ func ctor(cfg *vm.Config, index int) (vm.Instance, error) {
params: *p,
workdir: cfg.Workdir,
syscalls: cfg.EnabledSyscalls,
+ nocover: cfg.NoCover,
id: index,
mgrPort: cfg.ManagerPort,
}
@@ -75,6 +77,9 @@ func (loc *local) Run() {
if loc.syscalls != "" {
cmd.Args = append(cmd.Args, "-calls="+loc.syscalls)
}
+ if loc.nocover {
+ cmd.Args = append(cmd.Args, "-nocover")
+ }
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Dir = loc.workdir
diff --git a/vm/vm.go b/vm/vm.go
index ddf4e932c..c49d5b756 100644
--- a/vm/vm.go
+++ b/vm/vm.go
@@ -16,6 +16,7 @@ type Config struct {
ManagerPort int
Params []byte
EnabledSyscalls string
+ NoCover bool
}
type ctorFunc func(cfg *Config, index int) (Instance, error)