| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef TESTING_LIBFUZZER_LIBFUZZER_EXPORTS_H_ |
| #define TESTING_LIBFUZZER_LIBFUZZER_EXPORTS_H_ |
| |
| #include "build/build_config.h" |
| |
| // On macOS, the linker may strip symbols for functions that are not reachable |
| // by the program entrypoint. Several libFuzzer functions are resolved via |
| // dlsym at runtime and therefore may be dead-stripped as a result. Including |
| // this header in the fuzzer's implementation file will ensure that all the |
| // symbols are kept and exported. |
| |
| #if defined(OS_MAC) |
| #define EXPORT_FUZZER_FUNCTION \ |
| __attribute__((used)) __attribute__((visibility("default"))) |
| #else |
| #define EXPORT_FUZZER_FUNCTION |
| #endif |
| |
| extern "C" { |
| |
| EXPORT_FUZZER_FUNCTION int LLVMFuzzerInitialize(int* argc, char*** argv); |
| EXPORT_FUZZER_FUNCTION int LLVMFuzzerTestOneInput(const uint8_t* data, |
| size_t size); |
| EXPORT_FUZZER_FUNCTION size_t LLVMFuzzerCustomMutator(uint8_t* data, |
| size_t size, |
| size_t max_size, |
| unsigned int seed); |
| EXPORT_FUZZER_FUNCTION size_t LLVMFuzzerCustomCrossOver(const uint8_t* data1, |
| size_t size1, |
| const uint8_t* data2, |
| size_t size2, |
| uint8_t* out, |
| size_t max_out_size, |
| unsigned int seed); |
| EXPORT_FUZZER_FUNCTION size_t LLVMFuzzerMutate(uint8_t* data, |
| size_t size, |
| size_t max_size); |
| |
| } // extern "C" |
| |
| #undef EXPORT_FUZZER_FUNCTION |
| |
| #endif // TESTING_LIBFUZZER_LIBFUZZER_EXPORTS_H_ |