diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2015-10-19 14:00:20 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2015-10-20 15:46:04 +0200 |
| commit | 74f5340ea65df34599f489dcff2e9a881a03a50b (patch) | |
| tree | 8187bc69b6b003bb0ce772c77d0304f3d4575698 | |
| parent | 30c9c31819063079e276dc166ba6c09018940229 (diff) | |
allow to run local vm without coverage
| -rw-r--r-- | fuzzer/fuzzer.go | 19 | ||||
| -rw-r--r-- | manager/main.go | 1 | ||||
| -rw-r--r-- | vm/local/local.go | 5 | ||||
| -rw-r--r-- | vm/vm.go | 1 |
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 @@ -16,6 +16,7 @@ type Config struct { ManagerPort int Params []byte EnabledSyscalls string + NoCover bool } type ctorFunc func(cfg *Config, index int) (Instance, error) |
