The only real issue i see here is that anyone writing a new test will have to remember to do this.<br><br>On the other hand, I can't think of anything better at the moment <br><div class="gmail_quote"><div dir="ltr">On Thu, Feb 9, 2017 at 12:05 AM Marcos Pividori via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">mpividori created this revision.<br class="gmail_msg">
<br class="gmail_msg">
We need to export external functions so they are found when calling `GetProcAddress()` on Windows.<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<a href="https://reviews.llvm.org/D29752" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D29752</a><br class="gmail_msg">
<br class="gmail_msg">
Files:<br class="gmail_msg">
lib/Fuzzer/FuzzerInterface.h<br class="gmail_msg">
lib/Fuzzer/test/BogusInitializeTest.cpp<br class="gmail_msg">
lib/Fuzzer/test/CustomCrossOverTest.cpp<br class="gmail_msg">
lib/Fuzzer/test/CustomMutatorTest.cpp<br class="gmail_msg">
lib/Fuzzer/test/InitializeTest.cpp<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Index: lib/Fuzzer/test/InitializeTest.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/test/InitializeTest.cpp<br class="gmail_msg">
+++ lib/Fuzzer/test/InitializeTest.cpp<br class="gmail_msg">
@@ -11,6 +11,9 @@<br class="gmail_msg">
<br class="gmail_msg">
static char *argv0;<br class="gmail_msg">
<br class="gmail_msg">
+#ifdef _WIN32<br class="gmail_msg">
+__declspec( dllexport )<br class="gmail_msg">
+#endif<br class="gmail_msg">
extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {<br class="gmail_msg">
assert(*argc > 0);<br class="gmail_msg">
argv0 = **argv;<br class="gmail_msg">
Index: lib/Fuzzer/test/CustomMutatorTest.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/test/CustomMutatorTest.cpp<br class="gmail_msg">
+++ lib/Fuzzer/test/CustomMutatorTest.cpp<br class="gmail_msg">
@@ -27,6 +27,9 @@<br class="gmail_msg">
return 0;<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
+#ifdef _WIN32<br class="gmail_msg">
+__declspec( dllexport )<br class="gmail_msg">
+#endif<br class="gmail_msg">
extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size,<br class="gmail_msg">
size_t MaxSize, unsigned int Seed) {<br class="gmail_msg">
static bool Printed;<br class="gmail_msg">
Index: lib/Fuzzer/test/CustomCrossOverTest.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/test/CustomCrossOverTest.cpp<br class="gmail_msg">
+++ lib/Fuzzer/test/CustomCrossOverTest.cpp<br class="gmail_msg">
@@ -32,6 +32,9 @@<br class="gmail_msg">
return 0;<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
+#ifdef _WIN32<br class="gmail_msg">
+__declspec( dllexport )<br class="gmail_msg">
+#endif<br class="gmail_msg">
extern "C" size_t LLVMFuzzerCustomCrossOver(const uint8_t *Data1, size_t Size1,<br class="gmail_msg">
const uint8_t *Data2, size_t Size2,<br class="gmail_msg">
uint8_t *Out, size_t MaxOutSize,<br class="gmail_msg">
Index: lib/Fuzzer/test/BogusInitializeTest.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/test/BogusInitializeTest.cpp<br class="gmail_msg">
+++ lib/Fuzzer/test/BogusInitializeTest.cpp<br class="gmail_msg">
@@ -5,6 +5,9 @@<br class="gmail_msg">
#include <stddef.h><br class="gmail_msg">
#include <stdint.h><br class="gmail_msg">
<br class="gmail_msg">
+#ifdef _WIN32<br class="gmail_msg">
+__declspec( dllexport )<br class="gmail_msg">
+#endif<br class="gmail_msg">
extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {<br class="gmail_msg">
***argv = 'X';<br class="gmail_msg">
return 0;<br class="gmail_msg">
Index: lib/Fuzzer/FuzzerInterface.h<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/FuzzerInterface.h<br class="gmail_msg">
+++ lib/Fuzzer/FuzzerInterface.h<br class="gmail_msg">
@@ -19,6 +19,7 @@<br class="gmail_msg">
#ifndef LLVM_FUZZER_INTERFACE_H<br class="gmail_msg">
#define LLVM_FUZZER_INTERFACE_H<br class="gmail_msg">
<br class="gmail_msg">
+#include "FuzzerDefs.h"<br class="gmail_msg">
#include <stddef.h><br class="gmail_msg">
#include <stdint.h><br class="gmail_msg">
<br class="gmail_msg">
@@ -36,19 +37,22 @@<br class="gmail_msg">
// If provided, this function will be called by libFuzzer once at startup.<br class="gmail_msg">
// It may read and modify argc/argv.<br class="gmail_msg">
// Must return 0.<br class="gmail_msg">
+ATTRIBUTE_INTERFACE<br class="gmail_msg">
int LLVMFuzzerInitialize(int *argc, char ***argv);<br class="gmail_msg">
<br class="gmail_msg">
// Optional user-provided custom mutator.<br class="gmail_msg">
// Mutates raw data in [Data, Data+Size) inplace.<br class="gmail_msg">
// Returns the new size, which is not greater than MaxSize.<br class="gmail_msg">
// Given the same Seed produces the same mutation.<br class="gmail_msg">
+ATTRIBUTE_INTERFACE<br class="gmail_msg">
size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size, size_t MaxSize,<br class="gmail_msg">
unsigned int Seed);<br class="gmail_msg">
<br class="gmail_msg">
// Optional user-provided custom cross-over function.<br class="gmail_msg">
// Combines pieces of Data1 & Data2 together into Out.<br class="gmail_msg">
// Returns the new size, which is not greater than MaxOutSize.<br class="gmail_msg">
// Should produce the same mutation given the same Seed.<br class="gmail_msg">
+ATTRIBUTE_INTERFACE<br class="gmail_msg">
size_t LLVMFuzzerCustomCrossOver(const uint8_t *Data1, size_t Size1,<br class="gmail_msg">
const uint8_t *Data2, size_t Size2,<br class="gmail_msg">
uint8_t *Out, size_t MaxOutSize,<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div>