summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Fuzzer
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Fuzzer')
-rw-r--r--llvm/lib/Fuzzer/FuzzerCorpus.h2
-rw-r--r--llvm/lib/Fuzzer/FuzzerDefs.h58
-rw-r--r--llvm/lib/Fuzzer/FuzzerDictionary.h5
-rw-r--r--llvm/lib/Fuzzer/FuzzerDriver.cpp1
-rw-r--r--llvm/lib/Fuzzer/FuzzerExtFunctionsWeak.cpp1
-rw-r--r--llvm/lib/Fuzzer/FuzzerIO.cpp3
-rw-r--r--llvm/lib/Fuzzer/FuzzerIO.h47
-rw-r--r--llvm/lib/Fuzzer/FuzzerInternal.h1
-rw-r--r--llvm/lib/Fuzzer/FuzzerLoop.cpp7
-rw-r--r--llvm/lib/Fuzzer/FuzzerMutate.cpp3
-rw-r--r--llvm/lib/Fuzzer/FuzzerSHA1.cpp22
-rw-r--r--llvm/lib/Fuzzer/FuzzerSHA1.h31
-rw-r--r--llvm/lib/Fuzzer/FuzzerTracePC.cpp8
-rw-r--r--llvm/lib/Fuzzer/FuzzerTraceState.cpp6
-rw-r--r--llvm/lib/Fuzzer/FuzzerUtil.cpp15
-rw-r--r--llvm/lib/Fuzzer/FuzzerUtil.h65
-rw-r--r--llvm/lib/Fuzzer/FuzzerUtilDarwin.cpp1
-rw-r--r--llvm/lib/Fuzzer/FuzzerUtilLinux.cpp2
18 files changed, 191 insertions, 87 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerCorpus.h b/llvm/lib/Fuzzer/FuzzerCorpus.h
index 355c242e1f4..bbe192f53f8 100644
--- a/llvm/lib/Fuzzer/FuzzerCorpus.h
+++ b/llvm/lib/Fuzzer/FuzzerCorpus.h
@@ -16,7 +16,9 @@
#include <unordered_set>
#include "FuzzerDefs.h"
+#include "FuzzerIO.h"
#include "FuzzerRandom.h"
+#include "FuzzerSHA1.h"
#include "FuzzerTracePC.h"
namespace fuzzer {
diff --git a/llvm/lib/Fuzzer/FuzzerDefs.h b/llvm/lib/Fuzzer/FuzzerDefs.h
index 13aa212c96c..89d675ac1a4 100644
--- a/llvm/lib/Fuzzer/FuzzerDefs.h
+++ b/llvm/lib/Fuzzer/FuzzerDefs.h
@@ -63,64 +63,8 @@ extern ExternalFunctions *EF;
typedef std::vector<uint8_t> Unit;
typedef std::vector<Unit> UnitVector;
typedef int (*UserCallback)(const uint8_t *Data, size_t Size);
-int FuzzerDriver(int *argc, char ***argv, UserCallback Callback);
-
-bool IsFile(const std::string &Path);
-long GetEpoch(const std::string &Path);
-std::string FileToString(const std::string &Path);
-Unit FileToVector(const std::string &Path, size_t MaxSize = 0,
- bool ExitOnError = true);
-void ReadDirToVectorOfUnits(const char *Path, std::vector<Unit> *V,
- long *Epoch, size_t MaxSize, bool ExitOnError);
-void WriteToFile(const Unit &U, const std::string &Path);
-void CopyFileToErr(const std::string &Path);
-void DeleteFile(const std::string &Path);
-// Returns "Dir/FileName" or equivalent for the current OS.
-std::string DirPlusFile(const std::string &DirPath,
- const std::string &FileName);
-
-void DupAndCloseStderr();
-void CloseStdout();
-void Printf(const char *Fmt, ...);
-void PrintHexArray(const Unit &U, const char *PrintAfter = "");
-void PrintHexArray(const uint8_t *Data, size_t Size,
- const char *PrintAfter = "");
-void PrintASCII(const uint8_t *Data, size_t Size, const char *PrintAfter = "");
-void PrintASCII(const Unit &U, const char *PrintAfter = "");
-
-void PrintPC(const char *SymbolizedFMT, const char *FallbackFMT, uintptr_t PC);
-std::string DescribePC(const char *SymbolizedFMT, uintptr_t PC);
-std::string Hash(const Unit &U);
-void SetTimer(int Seconds);
-void SetSigSegvHandler();
-void SetSigBusHandler();
-void SetSigAbrtHandler();
-void SetSigIllHandler();
-void SetSigFpeHandler();
-void SetSigIntHandler();
-void SetSigTermHandler();
-std::string Base64(const Unit &U);
-int ExecuteCommand(const std::string &Command);
-bool ExecuteCommandAndReadOutput(const std::string &Command, std::string *Out);
-
-size_t GetPeakRSSMb();
-
-// Private copy of SHA1 implementation.
-static const int kSHA1NumBytes = 20;
-// Computes SHA1 hash of 'Len' bytes in 'Data', writes kSHA1NumBytes to 'Out'.
-void ComputeSHA1(const uint8_t *Data, size_t Len, uint8_t *Out);
-std::string Sha1ToString(const uint8_t Sha1[kSHA1NumBytes]);
-
-// Changes U to contain only ASCII (isprint+isspace) characters.
-// Returns true iff U has been changed.
-bool ToASCII(uint8_t *Data, size_t Size);
-bool IsASCII(const Unit &U);
-bool IsASCII(const uint8_t *Data, size_t Size);
-
-int NumberOfCpuCores();
-int GetPid();
-void SleepSeconds(int Seconds);
+int FuzzerDriver(int *argc, char ***argv, UserCallback Callback);
struct ScopedDoingMyOwnMemmem {
ScopedDoingMyOwnMemmem();
diff --git a/llvm/lib/Fuzzer/FuzzerDictionary.h b/llvm/lib/Fuzzer/FuzzerDictionary.h
index c009838ced6..b23b4b022e3 100644
--- a/llvm/lib/Fuzzer/FuzzerDictionary.h
+++ b/llvm/lib/Fuzzer/FuzzerDictionary.h
@@ -12,11 +12,12 @@
#ifndef LLVM_FUZZER_DICTIONARY_H
#define LLVM_FUZZER_DICTIONARY_H
+#include "FuzzerDefs.h"
+#include "FuzzerIO.h"
+#include "FuzzerUtil.h"
#include <algorithm>
#include <limits>
-#include "FuzzerDefs.h"
-
namespace fuzzer {
// A simple POD sized array of bytes.
template <size_t kMaxSize> class FixedWord {
diff --git a/llvm/lib/Fuzzer/FuzzerDriver.cpp b/llvm/lib/Fuzzer/FuzzerDriver.cpp
index abf0597e0d3..ab1fdf76ebf 100644
--- a/llvm/lib/Fuzzer/FuzzerDriver.cpp
+++ b/llvm/lib/Fuzzer/FuzzerDriver.cpp
@@ -12,6 +12,7 @@
#include "FuzzerCorpus.h"
#include "FuzzerInterface.h"
#include "FuzzerInternal.h"
+#include "FuzzerIO.h"
#include "FuzzerMutate.h"
#include "FuzzerRandom.h"
diff --git a/llvm/lib/Fuzzer/FuzzerExtFunctionsWeak.cpp b/llvm/lib/Fuzzer/FuzzerExtFunctionsWeak.cpp
index cd4371ad44f..cb3b31105d5 100644
--- a/llvm/lib/Fuzzer/FuzzerExtFunctionsWeak.cpp
+++ b/llvm/lib/Fuzzer/FuzzerExtFunctionsWeak.cpp
@@ -16,6 +16,7 @@
#if LIBFUZZER_LINUX
#include "FuzzerExtFunctions.h"
+#include "FuzzerIO.h"
extern "C" {
// Declare these symbols as weak to allow them to be optionally defined.
diff --git a/llvm/lib/Fuzzer/FuzzerIO.cpp b/llvm/lib/Fuzzer/FuzzerIO.cpp
index a70af886c2b..6cc8a8e0fd5 100644
--- a/llvm/lib/Fuzzer/FuzzerIO.cpp
+++ b/llvm/lib/Fuzzer/FuzzerIO.cpp
@@ -8,8 +8,9 @@
//===----------------------------------------------------------------------===//
// IO functions.
//===----------------------------------------------------------------------===//
-#include "FuzzerExtFunctions.h"
+#include "FuzzerIO.h"
#include "FuzzerDefs.h"
+#include "FuzzerExtFunctions.h"
#include <iterator>
#include <fstream>
#include <dirent.h>
diff --git a/llvm/lib/Fuzzer/FuzzerIO.h b/llvm/lib/Fuzzer/FuzzerIO.h
new file mode 100644
index 00000000000..e3d22ad9c9a
--- /dev/null
+++ b/llvm/lib/Fuzzer/FuzzerIO.h
@@ -0,0 +1,47 @@
+//===- FuzzerIO.h - Internal header for IO utils ----------------*- C++ -* ===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// IO interface.
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_FUZZER_IO_H
+#define LLVM_FUZZER_IO_H
+
+#include "FuzzerDefs.h"
+
+namespace fuzzer {
+
+bool IsFile(const std::string &Path);
+
+long GetEpoch(const std::string &Path);
+
+Unit FileToVector(const std::string &Path, size_t MaxSize = 0,
+ bool ExitOnError = true);
+
+void DeleteFile(const std::string &Path);
+
+std::string FileToString(const std::string &Path);
+
+void CopyFileToErr(const std::string &Path);
+
+void WriteToFile(const Unit &U, const std::string &Path);
+
+void ReadDirToVectorOfUnits(const char *Path, std::vector<Unit> *V,
+ long *Epoch, size_t MaxSize, bool ExitOnError);
+
+// Returns "Dir/FileName" or equivalent for the current OS.
+std::string DirPlusFile(const std::string &DirPath,
+ const std::string &FileName);
+
+void DupAndCloseStderr();
+
+void CloseStdout();
+
+void Printf(const char *Fmt, ...);
+
+} // namespace fuzzer
+#endif // LLVM_FUZZER_IO_H
diff --git a/llvm/lib/Fuzzer/FuzzerInternal.h b/llvm/lib/Fuzzer/FuzzerInternal.h
index 1b491eaafc5..02e806c65a3 100644
--- a/llvm/lib/Fuzzer/FuzzerInternal.h
+++ b/llvm/lib/Fuzzer/FuzzerInternal.h
@@ -23,6 +23,7 @@
#include "FuzzerExtFunctions.h"
#include "FuzzerInterface.h"
#include "FuzzerOptions.h"
+#include "FuzzerSHA1.h"
#include "FuzzerValueBitMap.h"
namespace fuzzer {
diff --git a/llvm/lib/Fuzzer/FuzzerLoop.cpp b/llvm/lib/Fuzzer/FuzzerLoop.cpp
index 0d2a38b6a85..63cb5c8bf1b 100644
--- a/llvm/lib/Fuzzer/FuzzerLoop.cpp
+++ b/llvm/lib/Fuzzer/FuzzerLoop.cpp
@@ -9,16 +9,17 @@
// Fuzzer's main loop.
//===----------------------------------------------------------------------===//
-#include "FuzzerInternal.h"
#include "FuzzerCorpus.h"
+#include "FuzzerInternal.h"
+#include "FuzzerIO.h"
#include "FuzzerMutate.h"
-#include "FuzzerTracePC.h"
#include "FuzzerRandom.h"
+#include "FuzzerTracePC.h"
#include <algorithm>
#include <cstring>
-#include <set>
#include <memory>
+#include <set>
#if defined(__has_include)
#if __has_include(<sanitizer / coverage_interface.h>)
diff --git a/llvm/lib/Fuzzer/FuzzerMutate.cpp b/llvm/lib/Fuzzer/FuzzerMutate.cpp
index 0109f5104fe..eaef1bb494a 100644
--- a/llvm/lib/Fuzzer/FuzzerMutate.cpp
+++ b/llvm/lib/Fuzzer/FuzzerMutate.cpp
@@ -9,11 +9,10 @@
// Mutate a test input.
//===----------------------------------------------------------------------===//
-#include <cstring>
-
#include "FuzzerCorpus.h"
#include "FuzzerDefs.h"
#include "FuzzerExtFunctions.h"
+#include "FuzzerIO.h"
#include "FuzzerMutate.h"
#include "FuzzerOptions.h"
diff --git a/llvm/lib/Fuzzer/FuzzerSHA1.cpp b/llvm/lib/Fuzzer/FuzzerSHA1.cpp
index cab81a404db..d2f8e811bbf 100644
--- a/llvm/lib/Fuzzer/FuzzerSHA1.cpp
+++ b/llvm/lib/Fuzzer/FuzzerSHA1.cpp
@@ -16,12 +16,15 @@
// For the same reason we do not want to depend on SHA1 from LLVM tree.
//===----------------------------------------------------------------------===//
+#include "FuzzerSHA1.h"
#include "FuzzerDefs.h"
/* This code is public-domain - it is based on libcrypt
* placed in the public domain by Wei Dai and other contributors.
*/
+#include <iomanip>
+#include <sstream>
#include <stdint.h>
#include <string.h>
@@ -193,10 +196,27 @@ uint8_t* sha1_result(sha1nfo *s) {
} // namespace; Added for LibFuzzer
+namespace fuzzer {
+
// The rest is added for LibFuzzer
-void fuzzer::ComputeSHA1(const uint8_t *Data, size_t Len, uint8_t *Out) {
+void ComputeSHA1(const uint8_t *Data, size_t Len, uint8_t *Out) {
sha1nfo s;
sha1_init(&s);
sha1_write(&s, (const char*)Data, Len);
memcpy(Out, sha1_result(&s), HASH_LENGTH);
}
+
+std::string Sha1ToString(const uint8_t Sha1[kSHA1NumBytes]) {
+ std::stringstream SS;
+ for (int i = 0; i < kSHA1NumBytes; i++)
+ SS << std::hex << std::setfill('0') << std::setw(2) << (unsigned)Sha1[i];
+ return SS.str();
+}
+
+std::string Hash(const Unit &U) {
+ uint8_t Hash[kSHA1NumBytes];
+ ComputeSHA1(U.data(), U.size(), Hash);
+ return Sha1ToString(Hash);
+}
+
+}
diff --git a/llvm/lib/Fuzzer/FuzzerSHA1.h b/llvm/lib/Fuzzer/FuzzerSHA1.h
new file mode 100644
index 00000000000..b3e6111b474
--- /dev/null
+++ b/llvm/lib/Fuzzer/FuzzerSHA1.h
@@ -0,0 +1,31 @@
+//===- FuzzerSHA1.h - Internal header for the SHA1 utils --------*- C++ -* ===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// SHA1 utils.
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_FUZZER_SHA1_H
+#define LLVM_FUZZER_SHA1_H
+
+#include "FuzzerDefs.h"
+#include <cstddef>
+#include <stdint.h>
+
+namespace fuzzer {
+
+// Private copy of SHA1 implementation.
+static const int kSHA1NumBytes = 20;
+
+// Computes SHA1 hash of 'Len' bytes in 'Data', writes kSHA1NumBytes to 'Out'.
+void ComputeSHA1(const uint8_t *Data, size_t Len, uint8_t *Out);
+
+std::string Sha1ToString(const uint8_t Sha1[kSHA1NumBytes]);
+
+std::string Hash(const Unit &U);
+
+} // namespace fuzzer
+#endif // LLVM_FUZZER_SHA1_H
diff --git a/llvm/lib/Fuzzer/FuzzerTracePC.cpp b/llvm/lib/Fuzzer/FuzzerTracePC.cpp
index f85b150a000..eabf0d087f4 100644
--- a/llvm/lib/Fuzzer/FuzzerTracePC.cpp
+++ b/llvm/lib/Fuzzer/FuzzerTracePC.cpp
@@ -12,16 +12,16 @@
//
//===----------------------------------------------------------------------===//
-#include <map>
-#include <set>
-#include <sstream>
-
#include "FuzzerCorpus.h"
#include "FuzzerDefs.h"
#include "FuzzerDictionary.h"
#include "FuzzerExtFunctions.h"
+#include "FuzzerIO.h"
#include "FuzzerTracePC.h"
#include "FuzzerValueBitMap.h"
+#include <map>
+#include <set>
+#include <sstream>
namespace fuzzer {
diff --git a/llvm/lib/Fuzzer/FuzzerTraceState.cpp b/llvm/lib/Fuzzer/FuzzerTraceState.cpp
index 9cccfcbc26f..a920f57c4e2 100644
--- a/llvm/lib/Fuzzer/FuzzerTraceState.cpp
+++ b/llvm/lib/Fuzzer/FuzzerTraceState.cpp
@@ -9,17 +9,17 @@
// Data tracing.
//===----------------------------------------------------------------------===//
-#include "FuzzerInternal.h"
#include "FuzzerDictionary.h"
+#include "FuzzerInternal.h"
+#include "FuzzerIO.h"
#include "FuzzerMutate.h"
#include "FuzzerRandom.h"
#include "FuzzerTracePC.h"
-
#include <algorithm>
#include <cstring>
-#include <thread>
#include <map>
#include <set>
+#include <thread>
namespace fuzzer {
diff --git a/llvm/lib/Fuzzer/FuzzerUtil.cpp b/llvm/lib/Fuzzer/FuzzerUtil.cpp
index d845333a169..579c4f83a87 100644
--- a/llvm/lib/Fuzzer/FuzzerUtil.cpp
+++ b/llvm/lib/Fuzzer/FuzzerUtil.cpp
@@ -9,7 +9,9 @@
// Misc utils.
//===----------------------------------------------------------------------===//
+#include "FuzzerUtil.h"
#include "FuzzerInternal.h"
+#include "FuzzerIO.h"
#include <sstream>
#include <iomanip>
#include <sys/resource.h>
@@ -60,19 +62,6 @@ void PrintASCII(const Unit &U, const char *PrintAfter) {
PrintASCII(U.data(), U.size(), PrintAfter);
}
-std::string Sha1ToString(const uint8_t Sha1[kSHA1NumBytes]) {
- std::stringstream SS;
- for (int i = 0; i < kSHA1NumBytes; i++)
- SS << std::hex << std::setfill('0') << std::setw(2) << (unsigned)Sha1[i];
- return SS.str();
-}
-
-std::string Hash(const Unit &U) {
- uint8_t Hash[kSHA1NumBytes];
- ComputeSHA1(U.data(), U.size(), Hash);
- return Sha1ToString(Hash);
-}
-
static void AlarmHandler(int, siginfo_t *, void *) {
Fuzzer::StaticAlarmCallback();
}
diff --git a/llvm/lib/Fuzzer/FuzzerUtil.h b/llvm/lib/Fuzzer/FuzzerUtil.h
new file mode 100644
index 00000000000..97271b99307
--- /dev/null
+++ b/llvm/lib/Fuzzer/FuzzerUtil.h
@@ -0,0 +1,65 @@
+//===- FuzzerUtil.h - Internal header for the Fuzzer Utils ------*- C++ -* ===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// Util functions.
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_FUZZER_UTIL_H
+#define LLVM_FUZZER_UTIL_H
+
+#include "FuzzerDefs.h"
+
+namespace fuzzer {
+
+void PrintHexArray(const Unit &U, const char *PrintAfter = "");
+
+void PrintHexArray(const uint8_t *Data, size_t Size,
+ const char *PrintAfter = "");
+
+void PrintASCII(const uint8_t *Data, size_t Size, const char *PrintAfter = "");
+
+void PrintASCII(const Unit &U, const char *PrintAfter = "");
+
+// Changes U to contain only ASCII (isprint+isspace) characters.
+// Returns true iff U has been changed.
+bool ToASCII(uint8_t *Data, size_t Size);
+
+bool IsASCII(const Unit &U);
+
+bool IsASCII(const uint8_t *Data, size_t Size);
+
+std::string Base64(const Unit &U);
+
+void PrintPC(const char *SymbolizedFMT, const char *FallbackFMT, uintptr_t PC);
+
+std::string DescribePC(const char *SymbolizedFMT, uintptr_t PC);
+
+int NumberOfCpuCores();
+
+// Platform specific functions.
+void SetTimer(int Seconds);
+
+void SetSigSegvHandler();
+void SetSigBusHandler();
+void SetSigAbrtHandler();
+void SetSigIllHandler();
+void SetSigFpeHandler();
+void SetSigIntHandler();
+void SetSigTermHandler();
+
+void SleepSeconds(int Seconds);
+
+int GetPid();
+
+size_t GetPeakRSSMb();
+
+bool ExecuteCommandAndReadOutput(const std::string &Command, std::string *Out);
+
+int ExecuteCommand(const std::string &Command);
+
+} // namespace fuzzer
+#endif // LLVM_FUZZER_UTIL_H
diff --git a/llvm/lib/Fuzzer/FuzzerUtilDarwin.cpp b/llvm/lib/Fuzzer/FuzzerUtilDarwin.cpp
index 4c90998c897..62f0f2271fe 100644
--- a/llvm/lib/Fuzzer/FuzzerUtilDarwin.cpp
+++ b/llvm/lib/Fuzzer/FuzzerUtilDarwin.cpp
@@ -10,6 +10,7 @@
//===----------------------------------------------------------------------===//
#include "FuzzerDefs.h"
#if LIBFUZZER_APPLE
+#include "FuzzerIO.h"
#include <mutex>
#include <signal.h>
#include <spawn.h>
diff --git a/llvm/lib/Fuzzer/FuzzerUtilLinux.cpp b/llvm/lib/Fuzzer/FuzzerUtilLinux.cpp
index e63c7d9a07f..060cec04542 100644
--- a/llvm/lib/Fuzzer/FuzzerUtilLinux.cpp
+++ b/llvm/lib/Fuzzer/FuzzerUtilLinux.cpp
@@ -1,4 +1,4 @@
-//===- FuzzerUtilLinux.cpp - Misc utils -----------------------------------===//
+//===- FuzzerUtilLinux.cpp - Misc utils for Linux. ------------------------===//
//
// The LLVM Compiler Infrastructure
//
OpenPOWER on IntegriCloud