[PATCH] D29752: [libFuzzer] Export external functions.
Marcos Pividori via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 9 10:18:41 PST 2017
Yes, these changes are needed for https://reviews.llvm.org/D29751
Another option is to ensure that all of these tests include the header
`FuzzerInterface.h`. But I think it is better to make the `dllexport`
explicit in the function definition.
Thanks,
Marcos
On Thu, Feb 9, 2017 at 8:57 AM, Zachary Turner <zturner at google.com> wrote:
> The only real issue i see here is that anyone writing a new test will have
> to remember to do this.
>
> On the other hand, I can't think of anything better at the moment
> On Thu, Feb 9, 2017 at 12:05 AM Marcos Pividori via Phabricator <
> reviews at reviews.llvm.org> wrote:
>
>> mpividori created this revision.
>>
>> We need to export external functions so they are found when calling
>> `GetProcAddress()` on Windows.
>>
>>
>> https://reviews.llvm.org/D29752
>>
>> Files:
>> lib/Fuzzer/FuzzerInterface.h
>> lib/Fuzzer/test/BogusInitializeTest.cpp
>> lib/Fuzzer/test/CustomCrossOverTest.cpp
>> lib/Fuzzer/test/CustomMutatorTest.cpp
>> lib/Fuzzer/test/InitializeTest.cpp
>>
>>
>> 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;
>> 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/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/BogusInitializeTest.cpp
>> ===================================================================
>> --- lib/Fuzzer/test/BogusInitializeTest.cpp
>> +++ lib/Fuzzer/test/BogusInitializeTest.cpp
>> @@ -5,6 +5,9 @@
>> #include <stddef.h>
>> #include <stdint.h>
>>
>> +#ifdef _WIN32
>> +__declspec( dllexport )
>> +#endif
>> extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {
>> ***argv = 'X';
>> return 0;
>> 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 <stddef.h>
>> #include <stdint.h>
>>
>> @@ -36,19 +37,22 @@
>> // 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);
>>
>> // Optional user-provided custom cross-over function.
>> // 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,
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170209/dea7025f/attachment.html>
More information about the llvm-commits
mailing list