Fix stack_trace_compressor builds for Clang < 6.0

Summary:
Clang 4.* doesn't supply -fsanitize=fuzzer, and Clang 5.* doesn't supply
-fsanitize=fuzzer-no-link. Generally, in LLVM, fuzz targets are added through
the add_llvm_fuzzer build rule, which can't be used in compiler-rt (as it has
to be able to be standalone built).

Instead of adding tooling to add a dummy main (which kind of defeats the
purpose of these fuzz targets), we instead build the fuzz target only when the
Clang version is >= 6.*.

Reviewers: tejohnson

Subscribers: mgorny, #sanitizers, llvm-commits

Tags: #sanitizers, #llvm

Differential Revision: https://reviews.llvm.org/D66682

llvm-svn: 369823
This commit is contained in:
Mitch Phillips 2019-08-23 23:13:18 +00:00
parent eb8ea5e2f1
commit 05bc1468c2
1 changed files with 9 additions and 3 deletions

View File

@ -99,9 +99,15 @@ if (COMPILER_RT_HAS_GWP_ASAN)
ADDITIONAL_HEADERS ${GWP_ASAN_BACKTRACE_HEADERS}
CFLAGS ${GWP_ASAN_CFLAGS} ${SANITIZER_COMMON_CFLAGS})
# Build the stack trace compressor fuzzer.
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND
COMPILER_RT_BUILD_LIBFUZZER)
# Build the stack trace compressor fuzzer. Note that clang versions 4.* did
# not have -fsanitize=fuzzer, and Clang versions 5.* didn't have
# -fsanitize=fuzzer-no-link. In general, the way we build fuzz targets in LLVM
# core is to link it against a dummy main when DLLVM_USE_SANITIZE_COVERAGE
# isn't specified. Instead, here we only build fuzz targets if clang version
# is >= 6.0.
if (COMPILER_RT_BUILD_LIBFUZZER AND
"${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND
CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
add_executable(stack_trace_compressor_fuzzer
stack_trace_compressor_fuzzer.cpp
${GWP_ASAN_SOURCES}