Skip to content

Commit

Permalink
[LibFuzzer] Allow LibFuzzer to be built in modes other than RELEASE.
Browse files Browse the repository at this point in the history
Previously the flags were only being set correctly when the
build type was "Release". Now the build should work properly
for all the supported build types. When building libFuzzer
the optimization level respects whatever is used for the
rest of LLVM but for the LibFuzzer tests we force -O0.

Differential Revision: http://reviews.llvm.org/D20558

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270912 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
delcypher committed May 26, 2016
1 parent 429d7a4 commit b82cddc
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 14 deletions.
4 changes: 2 additions & 2 deletions lib/Fuzzer/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
set(LIBFUZZER_FLAGS_BASE "${CMAKE_CXX_FLAGS_RELEASE}")
set(LIBFUZZER_FLAGS_BASE "${CMAKE_CXX_FLAGS}")
# Disable the coverage and sanitizer instrumentation for the fuzzer itself.
set(CMAKE_CXX_FLAGS_RELEASE "${LIBFUZZER_FLAGS_BASE} -O2 -fno-sanitize=all -fno-sanitize-coverage=edge,trace-cmp,indirect-calls,8bit-counters -Werror")
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 )
add_library(LLVMFuzzerNoMainObjects OBJECT
FuzzerCrossOver.cpp
Expand Down
29 changes: 26 additions & 3 deletions lib/Fuzzer/test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,31 @@
# Build all these tests with -O0, otherwise optimizations may merge some
# basic blocks and we'll fail to discover the targets.
# Also enable the coverage instrumentation back (it is disabled
# for the Fuzzer lib)
set(CMAKE_CXX_FLAGS_RELEASE "${LIBFUZZER_FLAGS_BASE} -O0 -fsanitize-coverage=edge,indirect-calls")
# We change the flags for every build type because we might be doing
# a multi-configuration build (e.g. Xcode) where CMAKE_BUILD_TYPE doesn't
# mean anything.
set(variables_to_filter
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_MINSIZEREL
LIBFUZZER_FLAGS_BASE
)
foreach (VARNAME ${variables_to_filter})
string(REPLACE " " ";" BUILD_FLAGS_AS_LIST "${${VARNAME}}")
set(new_flags "")
foreach (flag ${BUILD_FLAGS_AS_LIST})
# NOTE: Use of XX here is to avoid a CMake warning due to CMP0054
if (NOT ("XX${flag}" MATCHES "XX-O[0123s]"))
set(new_flags "${new_flags} ${flag}")
else()
set(new_flags "${new_flags} -O0")
endif()
endforeach()
set(${VARNAME} "${new_flags}")
endforeach()

# Enable the coverage instrumentation (it is disabled for the Fuzzer lib).
set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fsanitize-coverage=edge,indirect-calls")

set(DFSanTests
MemcmpTest
Expand Down
4 changes: 2 additions & 2 deletions lib/Fuzzer/test/dfsan/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# These tests depend on both coverage and dfsan instrumentation.

set(CMAKE_CXX_FLAGS_RELEASE
"${LIBFUZZER_FLAGS_BASE} -O0 -fno-sanitize=all -fsanitize=dataflow")
set(CMAKE_CXX_FLAGS
"${LIBFUZZER_FLAGS_BASE} -fno-sanitize=all -fsanitize=dataflow")

foreach(Test ${DFSanTests})
add_executable(LLVMFuzzer-${Test}-DFSan
Expand Down
2 changes: 1 addition & 1 deletion lib/Fuzzer/test/trace-bb/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# These tests are not instrumented with coverage.

set(CMAKE_CXX_FLAGS_RELEASE
set(CMAKE_CXX_FLAGS
"${LIBFUZZER_FLAGS_BASE} -fsanitize-coverage=edge,trace-bb")

foreach(Test ${TraceBBTests})
Expand Down
4 changes: 2 additions & 2 deletions lib/Fuzzer/test/trace-pc/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# These tests are not instrumented with coverage.

set(CMAKE_CXX_FLAGS_RELEASE
"${LIBFUZZER_FLAGS_BASE} -O0 -fno-sanitize-coverage=8bit-counters -fsanitize-coverage=trace-pc")
set(CMAKE_CXX_FLAGS
"${LIBFUZZER_FLAGS_BASE} -fno-sanitize-coverage=8bit-counters -fsanitize-coverage=trace-pc")

foreach(Test ${TracePCTests})
add_executable(LLVMFuzzer-${Test}-TracePC
Expand Down
4 changes: 2 additions & 2 deletions lib/Fuzzer/test/ubsan/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# These tests are instrumented with ubsan in non-recovery mode.

set(CMAKE_CXX_FLAGS_RELEASE
"${LIBFUZZER_FLAGS_BASE} -O0 -fsanitize=undefined -fno-sanitize-recover=all")
set(CMAKE_CXX_FLAGS
"${LIBFUZZER_FLAGS_BASE} -fsanitize=undefined -fno-sanitize-recover=all")

foreach(Test ${UbsanTests})
add_executable(LLVMFuzzer-${Test}-Ubsan
Expand Down
4 changes: 2 additions & 2 deletions lib/Fuzzer/test/uninstrumented/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# These tests are not instrumented with coverage.

set(CMAKE_CXX_FLAGS_RELEASE
"${LIBFUZZER_FLAGS_BASE} -O0 -fno-sanitize=all -fno-sanitize-coverage=edge,trace-cmp,indirect-calls,8bit-counters")
set(CMAKE_CXX_FLAGS
"${LIBFUZZER_FLAGS_BASE} -fno-sanitize=all -fno-sanitize-coverage=edge,trace-cmp,indirect-calls,8bit-counters")

foreach(Test ${UninstrumentedTests})
add_executable(LLVMFuzzer-${Test}-Uninstrumented
Expand Down

0 comments on commit b82cddc

Please sign in to comment.