Index: lib/Fuzzer/FuzzerInterface.h =================================================================== --- lib/Fuzzer/FuzzerInterface.h +++ lib/Fuzzer/FuzzerInterface.h @@ -19,6 +19,7 @@ #ifndef LLVM_FUZZER_INTERFACE_H #define LLVM_FUZZER_INTERFACE_H +#include "FuzzerDefs.h" #include #include @@ -36,12 +37,14 @@ // If provided, this function will be called by libFuzzer once at startup. // It may read and modify argc/argv. // Must return 0. +ATTRIBUTE_INTERFACE int LLVMFuzzerInitialize(int *argc, char ***argv); // Optional user-provided custom mutator. // Mutates raw data in [Data, Data+Size) inplace. // Returns the new size, which is not greater than MaxSize. // Given the same Seed produces the same mutation. +ATTRIBUTE_INTERFACE size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size, size_t MaxSize, unsigned int Seed); @@ -49,6 +52,7 @@ // Combines pieces of Data1 & Data2 together into Out. // Returns the new size, which is not greater than MaxOutSize. // Should produce the same mutation given the same Seed. +ATTRIBUTE_INTERFACE size_t LLVMFuzzerCustomCrossOver(const uint8_t *Data1, size_t Size1, const uint8_t *Data2, size_t Size2, uint8_t *Out, size_t MaxOutSize, Index: lib/Fuzzer/test/BogusInitializeTest.cpp =================================================================== --- lib/Fuzzer/test/BogusInitializeTest.cpp +++ lib/Fuzzer/test/BogusInitializeTest.cpp @@ -5,6 +5,9 @@ #include #include +#ifdef _WIN32 +__declspec( dllexport ) +#endif extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { ***argv = 'X'; return 0; Index: lib/Fuzzer/test/CustomCrossOverTest.cpp =================================================================== --- lib/Fuzzer/test/CustomCrossOverTest.cpp +++ lib/Fuzzer/test/CustomCrossOverTest.cpp @@ -32,6 +32,9 @@ return 0; } +#ifdef _WIN32 +__declspec( dllexport ) +#endif extern "C" size_t LLVMFuzzerCustomCrossOver(const uint8_t *Data1, size_t Size1, const uint8_t *Data2, size_t Size2, uint8_t *Out, size_t MaxOutSize, Index: lib/Fuzzer/test/CustomMutatorTest.cpp =================================================================== --- lib/Fuzzer/test/CustomMutatorTest.cpp +++ lib/Fuzzer/test/CustomMutatorTest.cpp @@ -27,6 +27,9 @@ return 0; } +#ifdef _WIN32 +__declspec( dllexport ) +#endif extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size, size_t MaxSize, unsigned int Seed) { static bool Printed; Index: lib/Fuzzer/test/InitializeTest.cpp =================================================================== --- lib/Fuzzer/test/InitializeTest.cpp +++ lib/Fuzzer/test/InitializeTest.cpp @@ -11,6 +11,9 @@ static char *argv0; +#ifdef _WIN32 +__declspec( dllexport ) +#endif extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { assert(*argc > 0); argv0 = **argv;