Index: compiler-rt/lib/tsan/CMakeLists.txt =================================================================== --- compiler-rt/lib/tsan/CMakeLists.txt +++ compiler-rt/lib/tsan/CMakeLists.txt @@ -1,7 +1,5 @@ # Build for the ThreadSanitizer runtime support library. -include_directories(..) - set(TSAN_CFLAGS ${SANITIZER_COMMON_CFLAGS}) # SANITIZER_COMMON_CFLAGS contains -fPIC, but it's performance-critical for # TSan runtime to be built with -fPIE to reduce the number of register spills. @@ -17,287 +15,8 @@ list(APPEND TSAN_CFLAGS -DTSAN_DEBUG_OUTPUT=2) endif() -set(TSAN_RTL_CFLAGS ${TSAN_CFLAGS}) -append_list_if(COMPILER_RT_HAS_MSSE4_2_FLAG -msse4.2 TSAN_RTL_CFLAGS) -append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=530 - TSAN_RTL_CFLAGS) -append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors - TSAN_RTL_CFLAGS) - -set(TSAN_RTL_DYNAMIC_CFLAGS ${TSAN_RTL_CFLAGS}) -list(REMOVE_ITEM TSAN_RTL_DYNAMIC_CFLAGS -fPIE) - -set(TSAN_DYNAMIC_LINK_LIBS ${SANITIZER_CXX_ABI_LIBRARIES} ${SANITIZER_COMMON_LINK_LIBS}) - -append_list_if(COMPILER_RT_HAS_LIBDL dl TSAN_DYNAMIC_LINK_LIBS) -append_list_if(COMPILER_RT_HAS_LIBM m TSAN_DYNAMIC_LINK_LIBS) -append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread TSAN_DYNAMIC_LINK_LIBS) - -set(TSAN_SOURCES - rtl/tsan_clock.cpp - rtl/tsan_debugging.cpp - rtl/tsan_external.cpp - rtl/tsan_fd.cpp - rtl/tsan_flags.cpp - rtl/tsan_ignoreset.cpp - rtl/tsan_interceptors_posix.cpp - rtl/tsan_interface.cpp - rtl/tsan_interface_ann.cpp - rtl/tsan_interface_atomic.cpp - rtl/tsan_interface_java.cpp - rtl/tsan_malloc_mac.cpp - rtl/tsan_md5.cpp - rtl/tsan_mman.cpp - rtl/tsan_mutexset.cpp - rtl/tsan_report.cpp - rtl/tsan_rtl.cpp - rtl/tsan_rtl_access.cpp - rtl/tsan_rtl_mutex.cpp - rtl/tsan_rtl_proc.cpp - rtl/tsan_rtl_report.cpp - rtl/tsan_rtl_thread.cpp - rtl/tsan_stack_trace.cpp - rtl/tsan_suppressions.cpp - rtl/tsan_symbolize.cpp - rtl/tsan_sync.cpp - rtl/tsan_vector_clock.cpp - ) - -set(TSAN_CXX_SOURCES - rtl/tsan_new_delete.cpp - ) - -set(TSAN_PREINIT_SOURCES - rtl/tsan_preinit.cpp - ) - -if(APPLE) - list(APPEND TSAN_SOURCES - rtl/tsan_interceptors_mac.cpp - rtl/tsan_interceptors_mach_vm.cpp - rtl/tsan_platform_mac.cpp - rtl/tsan_platform_posix.cpp - ) -elseif(UNIX) - # Assume Linux - list(APPEND TSAN_SOURCES - rtl/tsan_platform_linux.cpp - rtl/tsan_platform_posix.cpp - ) -endif() - -if(COMPILER_RT_INTERCEPT_LIBDISPATCH) - list(APPEND TSAN_SOURCES - rtl/tsan_interceptors_libdispatch.cpp - ) - list(APPEND TSAN_RTL_CFLAGS ${COMPILER_RT_LIBDISPATCH_CFLAGS}) -endif() - -set(TSAN_HEADERS - rtl/tsan_clock.h - rtl/tsan_defs.h - rtl/tsan_dense_alloc.h - rtl/tsan_fd.h - rtl/tsan_flags.h - rtl/tsan_flags.inc - rtl/tsan_ignoreset.h - rtl/tsan_ilist.h - rtl/tsan_interceptors.h - rtl/tsan_interface.h - rtl/tsan_interface.inc - rtl/tsan_interface_ann.h - rtl/tsan_interface_java.h - rtl/tsan_mman.h - rtl/tsan_mutexset.h - rtl/tsan_platform.h - rtl/tsan_ppc_regs.h - rtl/tsan_report.h - rtl/tsan_rtl.h - rtl/tsan_shadow.h - rtl/tsan_stack_trace.h - rtl/tsan_suppressions.h - rtl/tsan_symbolize.h - rtl/tsan_sync.h - rtl/tsan_trace.h - rtl/tsan_update_shadow_word.inc - rtl/tsan_vector_clock.h - ) - -set(TSAN_RUNTIME_LIBRARIES) -add_compiler_rt_component(tsan) - -if("${CMAKE_C_FLAGS}" MATCHES "-Wno-(error=)?unused-command-line-argument") - set(EXTRA_CFLAGS "-Wno-error=unused-command-line-argument ${EXTRA_CFLAGS}") -endif() - -if(APPLE) - # Ideally we would check the SDK version for the actual platform we are - # building for here. To make our lifes easier we assume the host SDK setup is - # sane and use the macOS SDK version as a proxy for aligned SDKs. - find_darwin_sdk_version(macosx_sdk_version "macosx") - if ("${macosx_sdk_version}" VERSION_LESS 10.12) - message(FATAL_ERROR "Building the TSan runtime requires at least macOS SDK 10.12 (or aligned SDK on other platforms)") - endif() - - add_asm_sources(TSAN_ASM_SOURCES - rtl/tsan_rtl_amd64.S - rtl/tsan_rtl_aarch64.S - ) - - set(TSAN_LINK_LIBS ${SANITIZER_COMMON_LINK_LIBS}) - - add_weak_symbols("ubsan" WEAK_SYMBOL_LINK_FLAGS) - add_weak_symbols("sanitizer_common" WEAK_SYMBOL_LINK_FLAGS) - - add_compiler_rt_runtime(clang_rt.tsan - SHARED - OS ${TSAN_SUPPORTED_OS} - ARCHS ${TSAN_SUPPORTED_ARCH} - SOURCES ${TSAN_SOURCES} ${TSAN_CXX_SOURCES} ${TSAN_ASM_SOURCES} - ADDITIONAL_HEADERS ${TSAN_HEADERS} - OBJECT_LIBS RTInterception - RTSanitizerCommon - RTSanitizerCommonLibc - RTSanitizerCommonCoverage - RTSanitizerCommonSymbolizer - RTUbsan - CFLAGS ${TSAN_RTL_CFLAGS} - LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} - LINK_LIBS ${TSAN_LINK_LIBS} objc - PARENT_TARGET tsan) - add_compiler_rt_object_libraries(RTTsan_dynamic - OS ${TSAN_SUPPORTED_OS} - ARCHS ${TSAN_SUPPORTED_ARCH} - SOURCES ${TSAN_SOURCES} ${TSAN_CXX_SOURCES} ${TSAN_ASM_SOURCES} - ADDITIONAL_HEADERS ${TSAN_HEADERS} - CFLAGS ${TSAN_RTL_CFLAGS}) - - # Build and check Go runtime. - set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/go/buildgo.sh) - add_custom_target(GotsanRuntimeCheck - COMMAND env "CC=${CMAKE_C_COMPILER} ${OSX_SYSROOT_FLAG}" - EXTRA_CFLAGS=${EXTRA_CFLAGS} - IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT} - DEPENDS tsan ${BUILDGO_SCRIPT} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/go - COMMENT "Checking TSan Go runtime..." - VERBATIM) - set_target_properties(GotsanRuntimeCheck PROPERTIES FOLDER "Compiler-RT Misc") -else() - foreach(arch ${TSAN_SUPPORTED_ARCH}) - if(arch STREQUAL "x86_64") - add_asm_sources(TSAN_ASM_SOURCES - rtl/tsan_rtl_amd64.S - ) - # Sanity check for Go runtime. - set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/go/buildgo.sh) - add_custom_target(GotsanRuntimeCheck - COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}" - EXTRA_CFLAGS=${EXTRA_CFLAGS} - IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT} - DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/go - COMMENT "Checking TSan Go runtime..." - VERBATIM) - elseif(arch STREQUAL "aarch64") - add_asm_sources(TSAN_ASM_SOURCES - rtl/tsan_rtl_aarch64.S - ) - # Sanity check for Go runtime. - set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/go/buildgo.sh) - add_custom_target(GotsanRuntimeCheck - COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}" - EXTRA_CFLAGS=${EXTRA_CFLAGS} - IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT} - DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/go - COMMENT "Checking TSan Go runtime..." - VERBATIM) - elseif(arch MATCHES "powerpc64|powerpc64le") - add_asm_sources(TSAN_ASM_SOURCES - rtl/tsan_rtl_ppc64.S - ) - # Sanity check for Go runtime. - set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/go/buildgo.sh) - add_custom_target(GotsanRuntimeCheck - COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}" - EXTRA_CFLAGS=${EXTRA_CFLAGS} - IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT} - DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/go - COMMENT "Checking TSan Go runtime..." - VERBATIM) - elseif(arch MATCHES "mips64|mips64le") - add_asm_sources(TSAN_ASM_SOURCES - rtl/tsan_rtl_mips64.S - ) - elseif(arch MATCHES "s390x") - add_asm_sources(TSAN_ASM_SOURCES - rtl/tsan_rtl_s390x.S - ) - # Sanity check for Go runtime. - set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/go/buildgo.sh) - add_custom_target(GotsanRuntimeCheck - COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}" - EXTRA_CFLAGS=${EXTRA_CFLAGS} - IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT} - DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/go - COMMENT "Checking TSan Go runtime..." - VERBATIM) - else() - set(TSAN_ASM_SOURCES) - endif() - add_compiler_rt_runtime(clang_rt.tsan - STATIC - ARCHS ${arch} - SOURCES ${TSAN_SOURCES} ${TSAN_ASM_SOURCES} ${TSAN_PREINIT_SOURCES} - $ - $ - $ - $ - $ - $ - ADDITIONAL_HEADERS ${TSAN_HEADERS} - CFLAGS ${TSAN_RTL_CFLAGS} - PARENT_TARGET tsan) - add_compiler_rt_runtime(clang_rt.tsan_cxx - STATIC - ARCHS ${arch} - SOURCES ${TSAN_CXX_SOURCES} - $ - ADDITIONAL_HEADERS ${TSAN_HEADERS} - CFLAGS ${TSAN_RTL_CFLAGS} - PARENT_TARGET tsan) - list(APPEND TSAN_RUNTIME_LIBRARIES clang_rt.tsan-${arch} - clang_rt.tsan_cxx-${arch}) - add_compiler_rt_runtime(clang_rt.tsan - SHARED - ARCHS ${arch} - SOURCES ${TSAN_SOURCES} ${TSAN_ASM_SOURCES} - $ - $ - $ - $ - $ - $ - ADDITIONAL_HEADERS ${TSAN_HEADERS} - CFLAGS ${TSAN_RTL_DYNAMIC_CFLAGS} - LINK_LIBS ${TSAN_DYNAMIC_LINK_LIBS} - LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS} - PARENT_TARGET tsan) - add_sanitizer_rt_symbols(clang_rt.tsan - ARCHS ${arch} - EXTRA rtl/tsan.syms.extra) - add_sanitizer_rt_symbols(clang_rt.tsan_cxx - ARCHS ${arch} - EXTRA rtl/tsan.syms.extra) - add_dependencies(tsan clang_rt.tsan-${arch} - clang_rt.tsan_cxx-${arch} - clang_rt.tsan-${arch}-symbols - clang_rt.tsan_cxx-${arch}-symbols) - endforeach() -endif() +# Add the actual runtime library. +add_subdirectory(rtl) # Build libcxx instrumented with TSan. if(COMPILER_RT_LIBCXX_PATH AND Index: compiler-rt/lib/tsan/rtl/CMakeLists.txt =================================================================== --- /dev/null +++ compiler-rt/lib/tsan/rtl/CMakeLists.txt @@ -0,0 +1,285 @@ +include_directories(../..) + +set(TSAN_RTL_CFLAGS ${TSAN_CFLAGS}) +append_list_if(COMPILER_RT_HAS_MSSE4_2_FLAG -msse4.2 TSAN_RTL_CFLAGS) +append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=530 + TSAN_RTL_CFLAGS) +append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors + TSAN_RTL_CFLAGS) + +set(TSAN_RTL_DYNAMIC_CFLAGS ${TSAN_RTL_CFLAGS}) +list(REMOVE_ITEM TSAN_RTL_DYNAMIC_CFLAGS -fPIE) + +set(TSAN_DYNAMIC_LINK_LIBS ${SANITIZER_CXX_ABI_LIBRARIES} ${SANITIZER_COMMON_LINK_LIBS}) + +append_list_if(COMPILER_RT_HAS_LIBDL dl TSAN_DYNAMIC_LINK_LIBS) +append_list_if(COMPILER_RT_HAS_LIBM m TSAN_DYNAMIC_LINK_LIBS) +append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread TSAN_DYNAMIC_LINK_LIBS) + +set(TSAN_SOURCES + tsan_clock.cpp + tsan_debugging.cpp + tsan_external.cpp + tsan_fd.cpp + tsan_flags.cpp + tsan_ignoreset.cpp + tsan_interceptors_posix.cpp + tsan_interface.cpp + tsan_interface_ann.cpp + tsan_interface_atomic.cpp + tsan_interface_java.cpp + tsan_malloc_mac.cpp + tsan_md5.cpp + tsan_mman.cpp + tsan_mutexset.cpp + tsan_report.cpp + tsan_rtl.cpp + tsan_rtl_access.cpp + tsan_rtl_mutex.cpp + tsan_rtl_proc.cpp + tsan_rtl_report.cpp + tsan_rtl_thread.cpp + tsan_stack_trace.cpp + tsan_suppressions.cpp + tsan_symbolize.cpp + tsan_sync.cpp + tsan_vector_clock.cpp + ) + +set(TSAN_CXX_SOURCES + tsan_new_delete.cpp + ) + +set(TSAN_PREINIT_SOURCES + tsan_preinit.cpp + ) + +if(APPLE) + list(APPEND TSAN_SOURCES + tsan_interceptors_mac.cpp + tsan_interceptors_mach_vm.cpp + tsan_platform_mac.cpp + tsan_platform_posix.cpp + ) +elseif(UNIX) + # Assume Linux + list(APPEND TSAN_SOURCES + tsan_platform_linux.cpp + tsan_platform_posix.cpp + ) +endif() + +if(COMPILER_RT_INTERCEPT_LIBDISPATCH) + list(APPEND TSAN_SOURCES + tsan_interceptors_libdispatch.cpp + ) + list(APPEND TSAN_RTL_CFLAGS ${COMPILER_RT_LIBDISPATCH_CFLAGS}) +endif() + +set(TSAN_HEADERS + tsan_clock.h + tsan_defs.h + tsan_dense_alloc.h + tsan_fd.h + tsan_flags.h + tsan_flags.inc + tsan_ignoreset.h + tsan_ilist.h + tsan_interceptors.h + tsan_interface.h + tsan_interface.inc + tsan_interface_ann.h + tsan_interface_java.h + tsan_mman.h + tsan_mutexset.h + tsan_platform.h + tsan_ppc_regs.h + tsan_report.h + tsan_rtl.h + tsan_shadow.h + tsan_stack_trace.h + tsan_suppressions.h + tsan_symbolize.h + tsan_sync.h + tsan_trace.h + tsan_update_shadow_word.inc + tsan_vector_clock.h + ) + +set(TSAN_RUNTIME_LIBRARIES) +add_compiler_rt_component(tsan) + +if("${CMAKE_C_FLAGS}" MATCHES "-Wno-(error=)?unused-command-line-argument") + set(EXTRA_CFLAGS "-Wno-error=unused-command-line-argument ${EXTRA_CFLAGS}") +endif() + +if(APPLE) + # Ideally we would check the SDK version for the actual platform we are + # building for here. To make our lifes easier we assume the host SDK setup is + # sane and use the macOS SDK version as a proxy for aligned SDKs. + find_darwin_sdk_version(macosx_sdk_version "macosx") + if ("${macosx_sdk_version}" VERSION_LESS 10.12) + message(FATAL_ERROR "Building the TSan runtime requires at least macOS SDK 10.12 (or aligned SDK on other platforms)") + endif() + + add_asm_sources(TSAN_ASM_SOURCES + tsan_rtl_amd64.S + tsan_rtl_aarch64.S + ) + + set(TSAN_LINK_LIBS ${SANITIZER_COMMON_LINK_LIBS}) + + add_weak_symbols("ubsan" WEAK_SYMBOL_LINK_FLAGS) + add_weak_symbols("sanitizer_common" WEAK_SYMBOL_LINK_FLAGS) + + add_compiler_rt_runtime(clang_rt.tsan + SHARED + OS ${TSAN_SUPPORTED_OS} + ARCHS ${TSAN_SUPPORTED_ARCH} + SOURCES ${TSAN_SOURCES} ${TSAN_CXX_SOURCES} ${TSAN_ASM_SOURCES} + ADDITIONAL_HEADERS ${TSAN_HEADERS} + OBJECT_LIBS RTInterception + RTSanitizerCommon + RTSanitizerCommonLibc + RTSanitizerCommonCoverage + RTSanitizerCommonSymbolizer + RTUbsan + CFLAGS ${TSAN_RTL_CFLAGS} + LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} + LINK_LIBS ${TSAN_LINK_LIBS} objc + PARENT_TARGET tsan) + add_compiler_rt_object_libraries(RTTsan_dynamic + OS ${TSAN_SUPPORTED_OS} + ARCHS ${TSAN_SUPPORTED_ARCH} + SOURCES ${TSAN_SOURCES} ${TSAN_CXX_SOURCES} ${TSAN_ASM_SOURCES} + ADDITIONAL_HEADERS ${TSAN_HEADERS} + CFLAGS ${TSAN_RTL_CFLAGS}) + + # Build and check Go runtime. + set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/../go/buildgo.sh) + add_custom_target(GotsanRuntimeCheck + COMMAND env "CC=${CMAKE_C_COMPILER} ${OSX_SYSROOT_FLAG}" + EXTRA_CFLAGS=${EXTRA_CFLAGS} + IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT} + DEPENDS tsan ${BUILDGO_SCRIPT} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../go + COMMENT "Checking TSan Go runtime..." + VERBATIM) + set_target_properties(GotsanRuntimeCheck PROPERTIES FOLDER "Compiler-RT Misc") +else() + foreach(arch ${TSAN_SUPPORTED_ARCH}) + if(arch STREQUAL "x86_64") + add_asm_sources(TSAN_ASM_SOURCES + tsan_rtl_amd64.S + ) + # Sanity check for Go runtime. + set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/../go/buildgo.sh) + add_custom_target(GotsanRuntimeCheck + COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}" + EXTRA_CFLAGS=${EXTRA_CFLAGS} + IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT} + DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../go + COMMENT "Checking TSan Go runtime..." + VERBATIM) + elseif(arch STREQUAL "aarch64") + add_asm_sources(TSAN_ASM_SOURCES + tsan_rtl_aarch64.S + ) + # Sanity check for Go runtime. + set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/../go/buildgo.sh) + add_custom_target(GotsanRuntimeCheck + COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}" + EXTRA_CFLAGS=${EXTRA_CFLAGS} + IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT} + DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../go + COMMENT "Checking TSan Go runtime..." + VERBATIM) + elseif(arch MATCHES "powerpc64|powerpc64le") + add_asm_sources(TSAN_ASM_SOURCES + tsan_rtl_ppc64.S + ) + # Sanity check for Go runtime. + set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/../go/buildgo.sh) + add_custom_target(GotsanRuntimeCheck + COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}" + EXTRA_CFLAGS=${EXTRA_CFLAGS} + IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT} + DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../go + COMMENT "Checking TSan Go runtime..." + VERBATIM) + elseif(arch MATCHES "mips64|mips64le") + add_asm_sources(TSAN_ASM_SOURCES + tsan_rtl_mips64.S + ) + elseif(arch MATCHES "s390x") + add_asm_sources(TSAN_ASM_SOURCES + tsan_rtl_s390x.S + ) + # Sanity check for Go runtime. + set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/../go/buildgo.sh) + add_custom_target(GotsanRuntimeCheck + COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}" + EXTRA_CFLAGS=${EXTRA_CFLAGS} + IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT} + DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../go + COMMENT "Checking TSan Go runtime..." + VERBATIM) + else() + set(TSAN_ASM_SOURCES) + endif() + add_compiler_rt_runtime(clang_rt.tsan + STATIC + ARCHS ${arch} + SOURCES ${TSAN_SOURCES} ${TSAN_ASM_SOURCES} ${TSAN_PREINIT_SOURCES} + $ + $ + $ + $ + $ + $ + ADDITIONAL_HEADERS ${TSAN_HEADERS} + CFLAGS ${TSAN_RTL_CFLAGS} + PARENT_TARGET tsan) + add_compiler_rt_runtime(clang_rt.tsan_cxx + STATIC + ARCHS ${arch} + SOURCES ${TSAN_CXX_SOURCES} + $ + ADDITIONAL_HEADERS ${TSAN_HEADERS} + CFLAGS ${TSAN_RTL_CFLAGS} + PARENT_TARGET tsan) + list(APPEND TSAN_RUNTIME_LIBRARIES clang_rt.tsan-${arch} + clang_rt.tsan_cxx-${arch}) + add_compiler_rt_runtime(clang_rt.tsan + SHARED + ARCHS ${arch} + SOURCES ${TSAN_SOURCES} ${TSAN_ASM_SOURCES} + $ + $ + $ + $ + $ + $ + ADDITIONAL_HEADERS ${TSAN_HEADERS} + CFLAGS ${TSAN_RTL_DYNAMIC_CFLAGS} + LINK_LIBS ${TSAN_DYNAMIC_LINK_LIBS} + LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS} + PARENT_TARGET tsan) + add_sanitizer_rt_symbols(clang_rt.tsan + ARCHS ${arch} + EXTRA tsan.syms.extra) + add_sanitizer_rt_symbols(clang_rt.tsan_cxx + ARCHS ${arch} + EXTRA tsan.syms.extra) + add_dependencies(tsan clang_rt.tsan-${arch} + clang_rt.tsan_cxx-${arch} + clang_rt.tsan-${arch}-symbols + clang_rt.tsan_cxx-${arch}-symbols) + endforeach() +endif() + + Index: llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn =================================================================== --- llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn +++ llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn @@ -15,7 +15,7 @@ "//compiler-rt/lib/builtins", ] if (current_cpu == "x64" || current_cpu == "arm64") { - deps += [ "//compiler-rt/lib/tsan" ] + deps += [ "//compiler-rt/lib/tsan/rtl" ] } } } Index: llvm/utils/gn/secondary/compiler-rt/lib/tsan/rtl/BUILD.gn =================================================================== --- llvm/utils/gn/secondary/compiler-rt/lib/tsan/rtl/BUILD.gn +++ llvm/utils/gn/secondary/compiler-rt/lib/tsan/rtl/BUILD.gn @@ -3,7 +3,7 @@ source_set("cxx_sources") { configs -= [ "//llvm/utils/gn/build:llvm_code" ] configs += [ "//llvm/utils/gn/build:crt_code" ] - sources = [ "rtl/tsan_new_delete.cpp" ] + sources = [ "tsan_new_delete.cpp" ] } if (current_os == "mac") { @@ -12,7 +12,7 @@ tsan_target_type = "static_library" } -target(tsan_target_type, "tsan") { +target(tsan_target_type, "rtl") { configs -= [ "//llvm/utils/gn/build:llvm_code" ] configs += [ "//llvm/utils/gn/build:crt_code" ] @@ -46,88 +46,88 @@ cflags = [ "-fPIE" ] sources = [ - "rtl/tsan_clock.cpp", - "rtl/tsan_clock.h", - "rtl/tsan_debugging.cpp", - "rtl/tsan_defs.h", - "rtl/tsan_dense_alloc.h", - "rtl/tsan_external.cpp", - "rtl/tsan_fd.cpp", - "rtl/tsan_fd.h", - "rtl/tsan_flags.cpp", - "rtl/tsan_flags.h", - "rtl/tsan_flags.inc", - "rtl/tsan_ignoreset.cpp", - "rtl/tsan_ignoreset.h", - "rtl/tsan_ilist.h", - "rtl/tsan_interceptors.h", - "rtl/tsan_interceptors_posix.cpp", - "rtl/tsan_interface.cpp", - "rtl/tsan_interface.h", - "rtl/tsan_interface.inc", - "rtl/tsan_interface_ann.cpp", - "rtl/tsan_interface_ann.h", - "rtl/tsan_interface_atomic.cpp", - "rtl/tsan_interface_java.cpp", - "rtl/tsan_interface_java.h", - "rtl/tsan_malloc_mac.cpp", - "rtl/tsan_md5.cpp", - "rtl/tsan_mman.cpp", - "rtl/tsan_mman.h", - "rtl/tsan_mutexset.cpp", - "rtl/tsan_mutexset.h", - "rtl/tsan_platform.h", - "rtl/tsan_ppc_regs.h", - "rtl/tsan_preinit.cpp", - "rtl/tsan_report.cpp", - "rtl/tsan_report.h", - "rtl/tsan_rtl.cpp", - "rtl/tsan_rtl.h", - "rtl/tsan_rtl_access.cpp", - "rtl/tsan_rtl_mutex.cpp", - "rtl/tsan_rtl_proc.cpp", - "rtl/tsan_rtl_report.cpp", - "rtl/tsan_rtl_thread.cpp", - "rtl/tsan_shadow.h", - "rtl/tsan_stack_trace.cpp", - "rtl/tsan_stack_trace.h", - "rtl/tsan_suppressions.cpp", - "rtl/tsan_suppressions.h", - "rtl/tsan_symbolize.cpp", - "rtl/tsan_symbolize.h", - "rtl/tsan_sync.cpp", - "rtl/tsan_sync.h", - "rtl/tsan_trace.h", - "rtl/tsan_update_shadow_word.inc", - "rtl/tsan_vector_clock.cpp", - "rtl/tsan_vector_clock.h", + "tsan_clock.cpp", + "tsan_clock.h", + "tsan_debugging.cpp", + "tsan_defs.h", + "tsan_dense_alloc.h", + "tsan_external.cpp", + "tsan_fd.cpp", + "tsan_fd.h", + "tsan_flags.cpp", + "tsan_flags.h", + "tsan_flags.inc", + "tsan_ignoreset.cpp", + "tsan_ignoreset.h", + "tsan_ilist.h", + "tsan_interceptors.h", + "tsan_interceptors_posix.cpp", + "tsan_interface.cpp", + "tsan_interface.h", + "tsan_interface.inc", + "tsan_interface_ann.cpp", + "tsan_interface_ann.h", + "tsan_interface_atomic.cpp", + "tsan_interface_java.cpp", + "tsan_interface_java.h", + "tsan_malloc_mac.cpp", + "tsan_md5.cpp", + "tsan_mman.cpp", + "tsan_mman.h", + "tsan_mutexset.cpp", + "tsan_mutexset.h", + "tsan_platform.h", + "tsan_ppc_regs.h", + "tsan_preinit.cpp", + "tsan_report.cpp", + "tsan_report.h", + "tsan_rtl.cpp", + "tsan_rtl.h", + "tsan_rtl_access.cpp", + "tsan_rtl_mutex.cpp", + "tsan_rtl_proc.cpp", + "tsan_rtl_report.cpp", + "tsan_rtl_thread.cpp", + "tsan_shadow.h", + "tsan_stack_trace.cpp", + "tsan_stack_trace.h", + "tsan_suppressions.cpp", + "tsan_suppressions.h", + "tsan_symbolize.cpp", + "tsan_symbolize.h", + "tsan_sync.cpp", + "tsan_sync.h", + "tsan_trace.h", + "tsan_update_shadow_word.inc", + "tsan_vector_clock.cpp", + "tsan_vector_clock.h", ] if (target_os == "mac") { sources += [ - "rtl/tsan_interceptors_libdispatch.cpp", - "rtl/tsan_interceptors_mac.cpp", - "rtl/tsan_interceptors_mach_vm.cpp", - "rtl/tsan_platform_mac.cpp", - "rtl/tsan_platform_posix.cpp", + "tsan_interceptors_libdispatch.cpp", + "tsan_interceptors_mac.cpp", + "tsan_interceptors_mach_vm.cpp", + "tsan_platform_mac.cpp", + "tsan_platform_posix.cpp", ] cflags += [ "-fblocks" ] } else { # Assume Linux sources += [ - "rtl/tsan_platform_linux.cpp", - "rtl/tsan_platform_posix.cpp", + "tsan_platform_linux.cpp", + "tsan_platform_posix.cpp", ] } if (target_cpu == "x64") { - sources += [ "rtl/tsan_rtl_amd64.S" ] + sources += [ "tsan_rtl_amd64.S" ] } else if (target_cpu == "arm64") { - sources += [ "rtl/tsan_rtl_aarch64.S" ] + sources += [ "tsan_rtl_aarch64.S" ] } else if (target_cpu == "powerpc64") { - sources += [ "rtl/tsan_rtl_ppc64.S" ] + sources += [ "tsan_rtl_ppc64.S" ] } else if (target_cpu == "mips64") { - sources += [ "rtl/tsan_rtl_mips64.S" ] + sources += [ "tsan_rtl_mips64.S" ] } else if (target_cpu == "s390x") { - sources += [ "rtl/tsan_rtl_s390x.S" ] + sources += [ "tsan_rtl_s390x.S" ] } # To be able to include sanitizer_common.