diff options
| author | practicalswift <[email protected]> | 2020-06-23 20:05:43 +0000 |
|---|---|---|
| committer | practicalswift <[email protected]> | 2020-06-25 21:03:27 +0000 |
| commit | 1087807b2bc56b9c7e7a5471c83f6ecfae79b048 (patch) | |
| tree | 91d8c1b9b690084d1dd717dc686461aff94237af /src/test/fuzz/fuzz.cpp | |
| parent | Merge #19240: build: macOS toolchain simplification and bump (diff) | |
| download | discoin-1087807b2bc56b9c7e7a5471c83f6ecfae79b048.tar.xz discoin-1087807b2bc56b9c7e7a5471c83f6ecfae79b048.zip | |
tests: Provide main(...) function in fuzzer
Diffstat (limited to 'src/test/fuzz/fuzz.cpp')
| -rw-r--r-- | src/test/fuzz/fuzz.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/test/fuzz/fuzz.cpp b/src/test/fuzz/fuzz.cpp index 82e1d55c0..1e1807d73 100644 --- a/src/test/fuzz/fuzz.cpp +++ b/src/test/fuzz/fuzz.cpp @@ -12,7 +12,16 @@ const std::function<void(const std::string&)> G_TEST_LOG_FUN{}; -#if defined(__AFL_COMPILER) +// Decide if main(...) should be provided: +// * AFL needs main(...) regardless of platform. +// * macOS handles __attribute__((weak)) main(...) poorly when linking +// against libFuzzer. See https://github.com/bitcoin/bitcoin/pull/18008 +// for details. +#if defined(__AFL_COMPILER) || !defined(MAC_OSX) +#define PROVIDE_MAIN_FUNCTION +#endif + +#if defined(PROVIDE_MAIN_FUNCTION) static bool read_stdin(std::vector<uint8_t>& data) { uint8_t buffer[1024]; @@ -44,9 +53,8 @@ extern "C" int LLVMFuzzerInitialize(int* argc, char*** argv) return 0; } -// Generally, the fuzzer will provide main(), except for AFL -#if defined(__AFL_COMPILER) -int main(int argc, char** argv) +#if defined(PROVIDE_MAIN_FUNCTION) +__attribute__((weak)) int main(int argc, char** argv) { initialize(); #ifdef __AFL_INIT |