diff --git a/CMakeLists.txt b/CMakeLists.txt index fc87578..f13cdc4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,10 @@ target_compile_options(conflict_set PRIVATE -fno-exceptions -fvisibility=hidden) target_link_options(conflict_set PRIVATE -nodefaultlibs -lc -fvisibility=hidden) add_custom_command(TARGET conflict_set POST_BUILD COMMAND ${CMAKE_STRIP} -x $) +if (NOT APPLE) + target_link_options(conflict_set PRIVATE "LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/linker.map") +endif() + include(CTest) # unit test @@ -52,7 +56,7 @@ add_test(NAME conflict_set_cxx_api_test COMMAND conflict_set_cxx_api_test) target_compile_options(conflict_set_cxx_api_test PRIVATE -Wall -Wextra -Wpedantic -Wunreachable-code -Werror) # fuzz test -set(FUZZ_FLAGS "-fsanitize=fuzzer,address,undefined") +set(FUZZ_FLAGS "-fsanitize=fuzzer-no-link,address,undefined") include(CheckCXXCompilerFlag) set(CMAKE_REQUIRED_LINK_OPTIONS ${FUZZ_FLAGS}) check_cxx_compiler_flag(${FUZZ_FLAGS} HAS_LIB_FUZZER) @@ -64,5 +68,5 @@ if (HAS_LIB_FUZZER) target_compile_options(conflict_set_fuzz_test PRIVATE -UNDEBUG) target_compile_options(conflict_set_fuzz_test PRIVATE -Wall -Wextra -Wpedantic -Wunreachable-code) target_compile_options(conflict_set_fuzz_test PRIVATE ${FUZZ_FLAGS}) - target_link_options(conflict_set_fuzz_test PRIVATE ${FUZZ_FLAGS}) + target_link_options(conflict_set_fuzz_test PRIVATE ${FUZZ_FLAGS} -fsanitize=fuzzer) endif() diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 6f5ad9e..4d8a1ac 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -152,7 +152,7 @@ template struct ArenaAlloc { [[nodiscard]] T *allocate(size_t n) { if (n > 0xfffffffffffffffful / sizeof(T)) { // NOLINT - abort(); + __builtin_unreachable(); } return static_cast((void *)new (std::align_val_t(alignof(T)), *arena) @@ -1136,7 +1136,7 @@ __attribute__((__visibility__("default"))) void ConflictSet_destroy(void *cs) { } namespace std { -void __throw_length_error(const char *) { abort(); } +void __throw_length_error(const char *) { __builtin_unreachable(); } } // namespace std namespace { diff --git a/linker.map b/linker.map new file mode 100644 index 0000000..5ed621a --- /dev/null +++ b/linker.map @@ -0,0 +1,7 @@ +{ + global: + *ConflictSet*; + local: + *; +}; +