Author: ericwf Date: Tue Jul 21 19:33:36 2015 New Revision: 242858 URL: http://llvm.org/viewvc/llvm-project?rev=242858&view=rev Log: [libcxx] Add support for sanitizers on OS X.
Summary: This patch adds special configuration logic to find the compiler_rt libraries required by sanitizers on OS X. The supported sanitizers are Address and Undefined. Reviewers: mclow.lists Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D11381 Modified: libcxx/trunk/lib/CMakeLists.txt libcxx/trunk/test/libcxx/test/config.py libcxx/trunk/test/lit.site.cfg.in Modified: libcxx/trunk/lib/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/lib/CMakeLists.txt?rev=242858&r1=242857&r2=242858&view=diff ============================================================================== --- libcxx/trunk/lib/CMakeLists.txt (original) +++ libcxx/trunk/lib/CMakeLists.txt Tue Jul 21 19:33:36 2015 @@ -68,6 +68,32 @@ if (LIBCXX_COVERAGE_LIBRARY) endif() target_link_libraries(cxx ${libraries}) +if (APPLE AND LLVM_USE_SANITIZER) + if ("${LLVM_USE_SANITIZER}" STREQUAL "Address") + set(LIBFILE "libclang_rt.asan_osx_dynamic.dylib") + elseif("${LLVM_USE_SANITIZER}" STREQUAL "Undefined") + set(LIBFILE "libclang_rt.ubsan_osx_dynamic.dylib") + else() + message(WARNING "LLVM_USE_SANITIZER=${LLVM_USE_SANITIZER} is not supported on OS X") + endif() + if (LIBFILE) + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=lib OUTPUT_VARIABLE LIBDIR RESULT_VARIABLE Result) + if (NOT ${Result} EQUAL "0") + message(FATAL "Failed to find library resource directory") + endif() + string(STRIP "${LIBDIR}" LIBDIR) + set(LIBDIR "${LIBDIR}/darwin/") + if (NOT IS_DIRECTORY "${LIBDIR}") + message(FATAL_ERROR "Cannot find compiler-rt directory on OS X required for LLVM_USE_SANITIZER") + endif() + set(LIBCXX_SANITIZER_LIBRARY "${LIBDIR}/${LIBFILE}") + set(LIBCXX_SANITIZER_LIBRARY "${LIBCXX_SANITIZER_LIBRARY}" PARENT_SCOPE) + message(STATUS "Manually linking compiler-rt library: ${LIBCXX_SANITIZER_LIBRARY}") + target_link_libraries(cxx "${LIBCXX_SANITIZER_LIBRARY}") + target_link_libraries(cxx "-Wl,-rpath,${LIBDIR}") + endif() +endif() + # Setup flags. append_if(LIBCXX_COMPILE_FLAGS LIBCXX_HAS_FPIC_FLAG -fPIC) Modified: libcxx/trunk/test/libcxx/test/config.py URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/test/config.py?rev=242858&r1=242857&r2=242858&view=diff ============================================================================== --- libcxx/trunk/test/libcxx/test/config.py (original) +++ libcxx/trunk/test/libcxx/test/config.py Tue Jul 21 19:33:36 2015 @@ -623,6 +623,8 @@ class Configuration(object): '-fno-sanitize-recover'] self.cxx.compile_flags += ['-O3'] self.config.available_features.add('ubsan') + if self.target_info.platform() == 'darwin': + self.config.available_features.add('sanitizer-new-delete') elif san == 'Thread': self.cxx.flags += ['-fsanitize=thread'] self.config.available_features.add('tsan') @@ -630,6 +632,10 @@ class Configuration(object): else: self.lit_config.fatal('unsupported value for ' 'use_sanitizer: {0}'.format(san)) + san_lib = self.get_lit_conf('sanitizer_library') + if san_lib: + self.cxx.link_flags += [ + san_lib, '-Wl,-rpath,%s' % os.path.dirname(san_lib)] def configure_coverage(self): self.generate_coverage = self.get_lit_bool('generate_coverage', False) Modified: libcxx/trunk/test/lit.site.cfg.in URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/lit.site.cfg.in?rev=242858&r1=242857&r2=242858&view=diff ============================================================================== --- libcxx/trunk/test/lit.site.cfg.in (original) +++ libcxx/trunk/test/lit.site.cfg.in Tue Jul 21 19:33:36 2015 @@ -16,6 +16,7 @@ config.enable_thread_unsafe_c_functions config.enable_monotonic_clock = "@LIBCXX_ENABLE_MONOTONIC_CLOCK@" config.cxx_abi = "@LIBCXX_CXX_ABI_LIBNAME@" config.use_sanitizer = "@LLVM_USE_SANITIZER@" +config.sanitizer_library = "@LIBCXX_SANITIZER_LIBRARY@" config.abi_library_path = "@LIBCXX_CXX_ABI_LIBRARY_PATH@" config.configuration_variant = "@LIBCXX_LIT_VARIANT@" config.target_triple = "@LIBCXX_TARGET_TRIPLE@" _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits