[PATCH] D29752: [libFuzzer] Export external functions.

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 9 08:57:33 PST 2017


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/ac9d1348/attachment.html>


More information about the llvm-commits mailing list