diff options
author | Vitaly Buka <vitalybuka@google.com> | 2017-10-16 16:36:40 -0700 |
---|---|---|
committer | Vitaly Buka <vitalybuka@gmail.com> | 2017-10-16 17:38:24 -0700 |
commit | 7218a158759cc2296927e807eb39c944f26b0c1d (patch) | |
tree | c83a0f51fdf06118eb4d32144450ce59072223f8 | |
parent | e4eae600ef56c295642318dc592fa106a6199a1b (diff) | |
download | libprotobuf-mutator-7218a158759cc2296927e807eb39c944f26b0c1d.tar.gz |
Switch to -fsanitize=fuzzer
Fixes issue #78
-rw-r--r-- | CMakeLists.txt | 42 | ||||
-rw-r--r-- | cmake/external/libfuzzer.cmake | 39 | ||||
-rw-r--r-- | examples/expat/CMakeLists.txt | 2 | ||||
-rw-r--r-- | examples/libfuzzer/CMakeLists.txt | 2 | ||||
-rw-r--r-- | examples/libxml2/CMakeLists.txt | 2 |
5 files changed, 13 insertions, 74 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 81e94f5..8c3aa20 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,6 @@ enable_language(CXX) option(LIB_PROTO_MUTATOR_DOWNLOAD_PROTOBUF "Automatically download working protobuf" OFF) option(LIB_PROTO_MUTATOR_WITH_ASAN "Enable address sanitizer" OFF) -set(LIB_PROTO_MUTATOR_FUZZER_LIBRARIES "" CACHE STRING "Fuzzing engine libs") # External dependencies set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/external) @@ -50,16 +49,12 @@ check_cxx_compiler_flag("-fsanitize=address -fsanitize-address-use-after-scope" LIB_PROTO_MUTATOR_HAS_SANITIZE_SCOPE) unset(CMAKE_REQUIRED_FLAGS) -set(CMAKE_REQUIRED_FLAGS "-fsanitize-coverage=0") -check_cxx_compiler_flag(-fsanitize-coverage= LIB_PROTO_MUTATOR_HAS_NO_COVERAGE) +set(CMAKE_REQUIRED_FLAGS "-fsanitize=fuzzer-no-link") +check_cxx_compiler_flag(-fsanitize=fuzzer-no-link LIB_PROTO_MUTATOR_HAS_SANITIZE_FUZZER) unset(CMAKE_REQUIRED_FLAGS) -set(CMAKE_REQUIRED_FLAGS "-fsanitize-coverage=trace-pc-guard") -check_cxx_compiler_flag(-fsanitize-coverage=trace-pc-guard LIB_PROTO_MUTATOR_HAS_TRACE_PC) -unset(CMAKE_REQUIRED_FLAGS) - -set(CMAKE_REQUIRED_FLAGS "-fsanitize-coverage=trace-cmp") -check_cxx_compiler_flag(-fsanitize-coverage=trace-cmp LIB_PROTO_MUTATOR_HAS_TRACE_CMP) +set(CMAKE_REQUIRED_FLAGS "-fno-sanitize=fuzzer") +check_cxx_compiler_flag(-fno-sanitize=fuzzer LIB_PROTO_MUTATOR_HAS_NO_SANITIZE_FUZZER) unset(CMAKE_REQUIRED_FLAGS) check_cxx_compiler_flag(-Wstring-conversion LIB_PROTO_MUTATOR_HAS_WSTRING_CONVERSION) @@ -78,24 +73,12 @@ if (LIB_PROTO_MUTATOR_WITH_ASAN) endif() endif() -if (LIB_PROTO_MUTATOR_HAS_TRACE_PC) - list(APPEND SANITIZE_COVERAGE_OPTIONS trace-pc-guard) -endif() -if (LIB_PROTO_MUTATOR_HAS_TRACE_CMP) - list(APPEND SANITIZE_COVERAGE_OPTIONS trace-cmp) -endif() - -if (SANITIZE_COVERAGE_OPTIONS) - foreach(OPT ${SANITIZE_COVERAGE_OPTIONS}) - set(FUZZING_FLAGS "${FUZZING_FLAGS},${OPT}") - endforeach() - string(SUBSTRING ${FUZZING_FLAGS} 1 -1 FUZZING_FLAGS) - set(FUZZING_FLAGS "-fsanitize-coverage=${FUZZING_FLAGS}") - set(NO_FUZZING_FLAGS "-fsanitize-coverage=0") +if (LIB_PROTO_MUTATOR_HAS_SANITIZE_FUZZER) + set(FUZZING_FLAGS "-fsanitize=fuzzer-no-link") + set(FUZZING_FLAGS_BINARY "-fsanitize=fuzzer") endif() - -if (LIB_PROTO_MUTATOR_HAS_NO_COVERAGE) - set(NO_FUZZING_FLAGS "-fsanitize-coverage=0") +if (LIB_PROTO_MUTATOR_HAS_SANITIZE_NO_FUZZER) + set(NO_FUZZING_FLAGS "-fno-sanitize=fuzzer") endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_FLAGS}") @@ -128,12 +111,7 @@ add_custom_target(check add_subdirectory(src) -if ("${LIB_PROTO_MUTATOR_FUZZER_LIBRARIES}" STREQUAL "" AND - NOT "${FUZZING_FLAGS}" STREQUAL "") - include(libfuzzer) -endif() - -if (NOT "${LIB_PROTO_MUTATOR_FUZZER_LIBRARIES}" STREQUAL "") +if (NOT "${FUZZING_FLAGS}" STREQUAL "") add_subdirectory(examples EXCLUDE_FROM_ALL) endif() diff --git a/cmake/external/libfuzzer.cmake b/cmake/external/libfuzzer.cmake deleted file mode 100644 index 4eb1f3b..0000000 --- a/cmake/external/libfuzzer.cmake +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 2017 Google Inc. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -set(LIBFUZZER_TARGET external.libfuzzer) -set(LIBFUZZER_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/${LIBFUZZER_TARGET}) - -list(APPEND LIB_PROTO_MUTATOR_FUZZER_LIBRARIES Fuzzer) - -foreach(lib IN LISTS LIB_PROTO_MUTATOR_FUZZER_LIBRARIES) - set(CUR_LIB ${LIBFUZZER_INSTALL_DIR}/src/${LIBFUZZER_TARGET}-build/lib${lib}.a) - list(APPEND LIBFUZZER_BUILD_BYPRODUCTS ${CUR_LIB}) - - add_library(${lib} STATIC IMPORTED) - set_property(TARGET ${lib} PROPERTY IMPORTED_LOCATION ${CUR_LIB}) - add_dependencies(${lib} ${LIBFUZZER_TARGET}) -endforeach(lib) - -include (ExternalProject) -ExternalProject_Add(${LIBFUZZER_TARGET} - PREFIX ${LIBFUZZER_TARGET} - GIT_REPOSITORY https://chromium.googlesource.com/chromium/llvm-project/llvm/lib/Fuzzer - GIT_TAG master - UPDATE_COMMAND "" - CONFIGURE_COMMAND "" - BUILD_COMMAND CXX=${CMAKE_CXX_COMPILER} ${LIBFUZZER_INSTALL_DIR}/src/${LIBFUZZER_TARGET}/build.sh - INSTALL_COMMAND "" - BUILD_BYPRODUCTS ${LIBFUZZER_BUILD_BYPRODUCTS} -) diff --git a/examples/expat/CMakeLists.txt b/examples/expat/CMakeLists.txt index e719d4b..f2031f5 100644 --- a/examples/expat/CMakeLists.txt +++ b/examples/expat/CMakeLists.txt @@ -25,7 +25,7 @@ target_link_libraries(expat_example set_property(TARGET expat_example PROPERTY COMPILE_FLAGS ${FUZZING_FLAGS}) set_property(TARGET expat_example - PROPERTY LINK_FLAGS ${FUZZING_FLAGS}) + PROPERTY LINK_FLAGS ${FUZZING_FLAGS_BINARY}) add_executable(expat_example_test expat_example_test.cc) diff --git a/examples/libfuzzer/CMakeLists.txt b/examples/libfuzzer/CMakeLists.txt index a0f103f..dc39177 100644 --- a/examples/libfuzzer/CMakeLists.txt +++ b/examples/libfuzzer/CMakeLists.txt @@ -38,6 +38,6 @@ foreach(fuzzer libfuzzer_example libfuzzer_bin_example) set_property(TARGET ${fuzzer} PROPERTY COMPILE_FLAGS ${FUZZING_FLAGS}) set_property(TARGET ${fuzzer} - PROPERTY LINK_FLAGS ${FUZZING_FLAGS}) + PROPERTY LINK_FLAGS ${FUZZING_FLAGS_BINARY}) add_dependencies(libfuzzer_example_test ${fuzzer}) endforeach(fuzzer) diff --git a/examples/libxml2/CMakeLists.txt b/examples/libxml2/CMakeLists.txt index f39e35d..cf9f8a2 100644 --- a/examples/libxml2/CMakeLists.txt +++ b/examples/libxml2/CMakeLists.txt @@ -26,7 +26,7 @@ target_link_libraries(libxml2_example set_property(TARGET libxml2_example PROPERTY COMPILE_FLAGS ${FUZZING_FLAGS}) set_property(TARGET libxml2_example - PROPERTY LINK_FLAGS ${FUZZING_FLAGS}) + PROPERTY LINK_FLAGS ${FUZZING_FLAGS_BINARY}) add_executable(libxml2_example_test libxml2_example_test.cc) |