| Index: lib/Bitcode/NaCl/TestUtils/NaClFuzz.cpp
|
| diff --git a/lib/Bitcode/NaCl/TestUtils/NaClFuzz.cpp b/lib/Bitcode/NaCl/TestUtils/NaClFuzz.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7967f848dc375b243619a8124db19e35caf20051
|
| --- /dev/null
|
| +++ b/lib/Bitcode/NaCl/TestUtils/NaClFuzz.cpp
|
| @@ -0,0 +1,59 @@
|
| +//===- NaClFuzz.h - Fuzz PNaCl bitcode records ------------------*- C++ -*-===//
|
| +//
|
| +// The LLVM Compiler Infrastructure
|
| +//
|
| +// This file is distributed under the University of Illinois Open Source
|
| +// License. See LICENSE.TXT for details.
|
| +//
|
| +//===----------------------------------------------------------------------===//
|
| +//
|
| +// This file implements a basic fuzzer for a list of PNaCl bitcode records.
|
| +
|
| +#include "llvm/ADT/STLExtras.h"
|
| +#include "llvm/Bitcode/NaCl/NaClFuzz.h"
|
| +#include "llvm/Support/Format.h"
|
| +
|
| +#include <array>
|
| +#include <cmath>
|
| +#include <cstdlib>
|
| +#include <map>
|
| +#include <set>
|
| +
|
| +
|
| +using namespace llvm;
|
| +using namespace naclfuzz;
|
| +
|
| +namespace {
|
| +
|
| +// Names for edit actions.
|
| +const char *ActionNameArray[] = {
|
| + "Insert",
|
| + "Mutate",
|
| + "Remove",
|
| + "Replace",
|
| + "Swap"
|
| +};
|
| +
|
| +} // end of namespace naclfuzz
|
| +
|
| +namespace naclfuzz {
|
| +
|
| +const char *RecordFuzzer::actionName(EditAction Action) {
|
| + return Action < array_lengthof(ActionNameArray)
|
| + ? ActionNameArray[Action] : "???";
|
| +}
|
| +
|
| +RecordFuzzer::RecordFuzzer(NaClMungedBitcode &Bitcode)
|
| + : Bitcode(Bitcode) {
|
| + if (Bitcode.getBaseRecords().empty())
|
| + report_fatal_error(
|
| + "Sorry, the fuzzer doesn't know how to fuzz an empty record list");
|
| +}
|
| +
|
| +RecordFuzzer::~RecordFuzzer() {}
|
| +
|
| +void RecordFuzzer::clear() {
|
| + Bitcode.removeEdits();
|
| +}
|
| +
|
| +} // end of namespace naclfuzz
|
|
|