[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