1*6777b538SAndroid Build Coastguard Worker // Copyright 2017 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef TESTING_LIBFUZZER_LIBFUZZER_EXPORTS_H_ 6*6777b538SAndroid Build Coastguard Worker #define TESTING_LIBFUZZER_LIBFUZZER_EXPORTS_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h" 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker // On macOS, the linker may strip symbols for functions that are not reachable 11*6777b538SAndroid Build Coastguard Worker // by the program entrypoint. Several libFuzzer functions are resolved via 12*6777b538SAndroid Build Coastguard Worker // dlsym at runtime and therefore may be dead-stripped as a result. Including 13*6777b538SAndroid Build Coastguard Worker // this header in the fuzzer's implementation file will ensure that all the 14*6777b538SAndroid Build Coastguard Worker // symbols are kept and exported. 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_MAC) 17*6777b538SAndroid Build Coastguard Worker #define EXPORT_FUZZER_FUNCTION \ 18*6777b538SAndroid Build Coastguard Worker __attribute__((used)) __attribute__((visibility("default"))) 19*6777b538SAndroid Build Coastguard Worker #else 20*6777b538SAndroid Build Coastguard Worker #define EXPORT_FUZZER_FUNCTION 21*6777b538SAndroid Build Coastguard Worker #endif 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker extern "C" { 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker EXPORT_FUZZER_FUNCTION int LLVMFuzzerInitialize(int* argc, char*** argv); 26*6777b538SAndroid Build Coastguard Worker EXPORT_FUZZER_FUNCTION int LLVMFuzzerTestOneInput(const uint8_t* data, 27*6777b538SAndroid Build Coastguard Worker size_t size); 28*6777b538SAndroid Build Coastguard Worker EXPORT_FUZZER_FUNCTION size_t LLVMFuzzerCustomMutator(uint8_t* data, 29*6777b538SAndroid Build Coastguard Worker size_t size, 30*6777b538SAndroid Build Coastguard Worker size_t max_size, 31*6777b538SAndroid Build Coastguard Worker unsigned int seed); 32*6777b538SAndroid Build Coastguard Worker EXPORT_FUZZER_FUNCTION size_t LLVMFuzzerCustomCrossOver(const uint8_t* data1, 33*6777b538SAndroid Build Coastguard Worker size_t size1, 34*6777b538SAndroid Build Coastguard Worker const uint8_t* data2, 35*6777b538SAndroid Build Coastguard Worker size_t size2, 36*6777b538SAndroid Build Coastguard Worker uint8_t* out, 37*6777b538SAndroid Build Coastguard Worker size_t max_out_size, 38*6777b538SAndroid Build Coastguard Worker unsigned int seed); 39*6777b538SAndroid Build Coastguard Worker EXPORT_FUZZER_FUNCTION size_t LLVMFuzzerMutate(uint8_t* data, 40*6777b538SAndroid Build Coastguard Worker size_t size, 41*6777b538SAndroid Build Coastguard Worker size_t max_size); 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker } // extern "C" 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker #undef EXPORT_FUZZER_FUNCTION 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker #endif // TESTING_LIBFUZZER_LIBFUZZER_EXPORTS_H_ 48