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,8 @@ #include #include +#include "FuzzerInterface.h" + extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { ***argv = 'X'; return 0; Index: lib/Fuzzer/test/InitializeTest.cpp =================================================================== --- lib/Fuzzer/test/InitializeTest.cpp +++ lib/Fuzzer/test/InitializeTest.cpp @@ -9,6 +9,8 @@ #include #include +#include "FuzzerInterface.h" + static char *argv0; extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {