mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
8b5c81728c
The motivation for this change is to fix linking issues on OSX. However this only partially fixes linking issues (the uninstrumented tests and a few others won't succesfully link yet). This change introduces a struct of function pointers (``fuzzer::ExternalFuntions``) which when initialised will point to the optional functions if they are available. Currently these ``LLVMFuzzerInitialize`` and ``LLVMFuzzerCustomMutator`` functions. Two implementations of ``fuzzer::ExternalFunctions`` constructor are provided one for Linux and one for OSX. The OSX implementation uses ``dlsym()`` because the prior implementation using weak symbols does not work unless the additional flags are passed to the linker. The Linux implementation continues to use weak symbols because the ``dlsym()`` approach does not work unless additional flags are passed to the linker. Differential Revision: http://reviews.llvm.org/D20741 llvm-svn: 271491
38 lines
1.2 KiB
CMake
38 lines
1.2 KiB
CMake
set(LIBFUZZER_FLAGS_BASE "${CMAKE_CXX_FLAGS}")
|
|
# Disable the coverage and sanitizer instrumentation for the fuzzer itself.
|
|
set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fno-sanitize=all -fno-sanitize-coverage=edge,trace-cmp,indirect-calls,8bit-counters -Werror")
|
|
if( LLVM_USE_SANITIZE_COVERAGE )
|
|
if(NOT "${LLVM_USE_SANITIZER}" STREQUAL "Address")
|
|
message(FATAL_ERROR
|
|
"LibFuzzer and its tests require LLVM_USE_SANITIZER=Address and "
|
|
"LLVM_USE_SANITIZE_COVERAGE=YES to be set."
|
|
)
|
|
endif()
|
|
add_library(LLVMFuzzerNoMainObjects OBJECT
|
|
FuzzerCrossOver.cpp
|
|
FuzzerTraceState.cpp
|
|
FuzzerDriver.cpp
|
|
FuzzerExtFunctionsDlsym.cpp
|
|
FuzzerExtFunctionsWeak.cpp
|
|
FuzzerIO.cpp
|
|
FuzzerLoop.cpp
|
|
FuzzerMutate.cpp
|
|
FuzzerSHA1.cpp
|
|
FuzzerTracePC.cpp
|
|
FuzzerUtil.cpp
|
|
)
|
|
add_library(LLVMFuzzerNoMain STATIC
|
|
$<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
|
|
)
|
|
target_link_libraries(LLVMFuzzerNoMain ${PTHREAD_LIB})
|
|
add_library(LLVMFuzzer STATIC
|
|
FuzzerMain.cpp
|
|
$<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
|
|
)
|
|
target_link_libraries(LLVMFuzzer ${PTHREAD_LIB})
|
|
|
|
if( LLVM_INCLUDE_TESTS )
|
|
add_subdirectory(test)
|
|
endif()
|
|
endif()
|