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..4cd984db8164b183a76c4765e3638fb3935e28b0 |
--- /dev/null |
+++ b/lib/Bitcode/NaCl/TestUtils/NaClFuzz.cpp |
@@ -0,0 +1,62 @@ |
+//===- NaClFuzz.h - Fuzz PNaCl bitcode records ----------------------------===// |
jvoung (off chromium)
2015/06/02 16:14:03
NaClFuzz.cpp
Karl
2015/06/02 16:40:23
Done.
|
+// |
+// 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" |
jvoung (off chromium)
2015/06/02 16:14:03
can some of this be trimmed?
Karl
2015/06/02 16:40:23
Done. Removed Format.h
|
+ |
+#include <array> |
+#include <cmath> |
+#include <cstdlib> |
+#include <map> |
jvoung (off chromium)
2015/06/02 16:14:03
where is <map> <set> <cmath> etc. used?
Karl
2015/06/02 16:40:23
Removed all <...> includes.
|
+#include <set> |
+ |
+ |
+using namespace llvm; |
+using namespace naclfuzz; |
jvoung (off chromium)
2015/06/02 16:14:03
Do you really need "using namespace naclfuzz"? Mos
Karl
2015/06/02 16:40:23
Sorry for all the unnecessary boilerplate. Most of
|
+ |
+namespace { |
+ |
+// Names for edit actions. |
+const char *ActionNameArray[] = { |
+ "Insert", |
+ "Mutate", |
+ "Remove", |
+ "Replace", |
+ "Swap" |
+}; |
+ |
+} // end of anonymous namespace |
+ |
+namespace naclfuzz { |
+ |
+const char *RecordFuzzer::actionName(EditAction Action) { |
+ return Action < array_lengthof(ActionNameArray) |
+ ? ActionNameArray[Action] : "???"; |
+} |
+ |
+RecordFuzzer::RecordFuzzer(NaClMungedBitcode &Bitcode, |
+ RandomNumberGenerator &Generator) |
+ : Bitcode(Bitcode), Generator(Generator) { |
+ 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 |