brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · a6c98c4 Raw
257 lines · plain
1# Build for the undefined behavior sanitizer runtime support library.2 3set(UBSAN_SOURCES4  ubsan_diag.cpp5  ubsan_init.cpp6  ubsan_flags.cpp7  ubsan_handlers.cpp8  ubsan_monitor.cpp9  ubsan_value.cpp10  )11 12set(UBSAN_STANDALONE_SOURCES13  ubsan_diag_standalone.cpp14  ubsan_init_standalone.cpp15  ubsan_signals_standalone.cpp16  )17 18set(UBSAN_CXXABI_SOURCES19  ubsan_handlers_cxx.cpp20  ubsan_type_hash.cpp21  ubsan_type_hash_itanium.cpp22  ubsan_type_hash_win.cpp23 )24 25set(UBSAN_HEADERS26  ubsan_checks.inc27  ubsan_diag.h28  ubsan_flags.h29  ubsan_flags.inc30  ubsan_handlers.h31  ubsan_handlers_cxx.h32  ubsan_init.h33  ubsan_interface.inc34  ubsan_monitor.h35  ubsan_platform.h36  ubsan_signals_standalone.h37  ubsan_type_hash.h38  ubsan_value.h39  )40 41include_directories(..)42 43set(UBSAN_CFLAGS ${SANITIZER_COMMON_CFLAGS})44append_list_if(MSVC /Zl UBSAN_CFLAGS)45append_rtti_flag(OFF UBSAN_CFLAGS)46 47# Too many existing bugs, needs cleanup.48append_list_if(COMPILER_RT_HAS_WNO_FORMAT -Wno-format UBSAN_CFLAGS)49 50set(UBSAN_STANDALONE_CFLAGS ${SANITIZER_COMMON_CFLAGS})51append_rtti_flag(OFF UBSAN_STANDALONE_CFLAGS)52 53set(UBSAN_CXXFLAGS ${SANITIZER_COMMON_CFLAGS})54append_rtti_flag(ON UBSAN_CXXFLAGS)55 56# Silence warnings in system headers with MSVC.57if(NOT CLANG_CL)58  append_list_if(COMPILER_RT_HAS_EXTERNAL_FLAG "/experimental:external;/external:W0;/external:anglebrackets" UBSAN_CXXFLAGS)59endif()60 61set(UBSAN_LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS})62 63set(UBSAN_DYNAMIC_LIBS64  ${COMPILER_RT_UNWINDER_LINK_LIBS}65  ${SANITIZER_CXX_ABI_LIBRARIES}66  ${SANITIZER_COMMON_LINK_LIBS})67 68append_list_if(COMPILER_RT_HAS_LIBDL dl UBSAN_DYNAMIC_LIBS)69append_list_if(COMPILER_RT_HAS_LIBLOG log UBSAN_DYNAMIC_LIBS)70append_list_if(COMPILER_RT_HAS_LIBRT rt UBSAN_DYNAMIC_LIBS)71append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread UBSAN_DYNAMIC_LIBS)72if (COMPILER_RT_ENABLE_INTERNAL_SYMBOLIZER)73  append_list_if(COMPILER_RT_HAS_LIBM m UBSAN_DYNAMIC_LIBS)74endif()75 76add_compiler_rt_component(ubsan)77 78if(APPLE)79  set(UBSAN_COMMON_SOURCES ${UBSAN_SOURCES})80  if(SANITIZER_CAN_USE_CXXABI)81    list(APPEND UBSAN_COMMON_SOURCES ${UBSAN_CXXABI_SOURCES})82  endif()83 84  # Common parts of UBSan runtime.85  add_compiler_rt_object_libraries(RTUbsan86    OS ${SANITIZER_COMMON_SUPPORTED_OS}87    ARCHS ${UBSAN_COMMON_SUPPORTED_ARCH}88    SOURCES ${UBSAN_COMMON_SOURCES}89    ADDITIONAL_HEADERS ${UBSAN_HEADERS}90    CFLAGS ${UBSAN_CXXFLAGS})91 92  if(COMPILER_RT_HAS_UBSAN)93    # Initializer of standalone UBSan runtime.94    add_compiler_rt_object_libraries(RTUbsan_standalone95      OS ${UBSAN_SUPPORTED_OS}96      ARCHS ${UBSAN_SUPPORTED_ARCH}97      SOURCES ${UBSAN_STANDALONE_SOURCES}98      ADDITIONAL_HEADERS ${UBSAN_HEADERS}99      CFLAGS ${UBSAN_STANDALONE_CFLAGS})100 101    add_weak_symbols("ubsan" WEAK_SYMBOL_LINK_FLAGS)102    add_weak_symbols("sanitizer_common" WEAK_SYMBOL_LINK_FLAGS)103 104    add_compiler_rt_runtime(clang_rt.ubsan105      SHARED106      OS ${UBSAN_SUPPORTED_OS}107      ARCHS ${UBSAN_SUPPORTED_ARCH}108      OBJECT_LIBS RTUbsan109                  RTUbsan_standalone110                  RTSanitizerCommon111                  RTSanitizerCommonLibc112                  RTSanitizerCommonCoverage113                  RTSanitizerCommonSymbolizer114                  RTInterception115      LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}116      PARENT_TARGET ubsan)117 118    if (NOT APPLE)119      add_compiler_rt_runtime(clang_rt.ubsan120        STATIC121        OS ${UBSAN_SUPPORTED_OS}122        ARCHS ${UBSAN_SUPPORTED_ARCH}123        OBJECT_LIBS RTUbsan124                    RTUbsan_standalone125                    RTSanitizerCommonNoHooks126                    RTSanitizerCommonLibcNoHooks127                    RTSanitizerCommonCoverage128                    RTSanitizerCommonSymbolizerNoHooks129                    RTInterception130        LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}131        PARENT_TARGET ubsan)132    endif()133  endif()134 135else()136  # Common parts of UBSan runtime.137  add_compiler_rt_object_libraries(RTUbsan138    ARCHS ${UBSAN_COMMON_SUPPORTED_ARCH}139    SOURCES ${UBSAN_SOURCES}140    ADDITIONAL_HEADERS ${UBSAN_HEADERS}141    CFLAGS ${UBSAN_CFLAGS})142 143  if(SANITIZER_CAN_USE_CXXABI)144    # C++-specific parts of UBSan runtime. Requires a C++ ABI library.145    set(UBSAN_CXX_SOURCES ${UBSAN_CXXABI_SOURCES})146  else()147    # Dummy target if we don't have C++ ABI library.148    file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/cxx_dummy.cpp "")149    set(UBSAN_CXX_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/cxx_dummy.cpp)150  endif()151 152  add_compiler_rt_object_libraries(RTUbsan_cxx153    ARCHS ${UBSAN_COMMON_SUPPORTED_ARCH}154    SOURCES ${UBSAN_CXX_SOURCES}155    ADDITIONAL_HEADERS ${UBSAN_HEADERS}156    CFLAGS ${UBSAN_CXXFLAGS})157 158  if (WIN32)159    set(RUNTIME_THUNK_CFLAGS -DSANITIZER_DYNAMIC_RUNTIME_THUNK -DSANITIZER_STATIC_RUNTIME_THUNK)160    add_compiler_rt_object_libraries(UbsanRuntimeThunk161      ${SANITIZER_COMMON_SUPPORTED_OS}162      ARCHS ${UBSAN_SUPPORTED_ARCH}163      SOURCES164        ubsan_win_runtime_thunk.cpp165      CFLAGS ${UBSAN_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS}166      DEFS ${UBSAN_COMMON_DEFINITIONS})167  endif()168 169  if(COMPILER_RT_HAS_UBSAN)170    add_compiler_rt_object_libraries(RTUbsan_standalone171      ARCHS ${UBSAN_SUPPORTED_ARCH}172      SOURCES ${UBSAN_STANDALONE_SOURCES}173      ADDITIONAL_HEADERS ${UBSAN_HEADERS}174      CFLAGS ${UBSAN_STANDALONE_CFLAGS})175 176    # Standalone UBSan runtimes.177    add_compiler_rt_runtime(clang_rt.ubsan_standalone178      STATIC179      ARCHS ${UBSAN_SUPPORTED_ARCH}180      SOURCES181        ubsan_init_standalone_preinit.cpp182      ADDITIONAL_HEADERS ${UBSAN_HEADERS}183      OBJECT_LIBS RTSanitizerCommon184              RTSanitizerCommonLibc185              RTSanitizerCommonCoverage186              RTSanitizerCommonSymbolizer187              RTSanitizerCommonSymbolizerInternal188              RTUbsan189              RTUbsan_standalone190              RTInterception191      CFLAGS ${UBSAN_CFLAGS}192      PARENT_TARGET ubsan)193 194    add_compiler_rt_runtime(clang_rt.ubsan_standalone_cxx195      STATIC196      ARCHS ${UBSAN_SUPPORTED_ARCH}197      OBJECT_LIBS RTUbsan_cxx198      CFLAGS ${UBSAN_CXXFLAGS}199      PARENT_TARGET ubsan)200 201    if (COMPILER_RT_HAS_VERSION_SCRIPT)202      file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp "")203      add_compiler_rt_object_libraries(RTUbsan_dynamic_version_script_dummy204        ARCHS ${UBSAN_SUPPORTED_ARCH}205        SOURCES ${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp206        CFLAGS ${UBSAN_CFLAGS})207 208      foreach(arch ${UBSAN_SUPPORTED_ARCH})209        add_sanitizer_rt_version_list(clang_rt.ubsan_standalone-dynamic-${arch}210                                      LIBS clang_rt.ubsan_standalone-${arch}211                                           clang_rt.ubsan_standalone_cxx-${arch}212                                      EXTRA ubsan.syms.extra)213        set(VERSION_SCRIPT_FLAG214            -Wl,--version-script,${CMAKE_CURRENT_BINARY_DIR}/clang_rt.ubsan_standalone-dynamic-${arch}.vers)215        # The Solaris 11.4 linker supports a subset of GNU ld version scripts,216        # but requires a special option to enable it.217        if (COMPILER_RT_HAS_GNU_VERSION_SCRIPT_COMPAT)218            list(APPEND VERSION_SCRIPT_FLAG -Wl,-z,gnu-version-script-compat)219        endif()220        set_property(SOURCE221          ${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp222          APPEND PROPERTY223          OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/clang_rt.ubsan_standalone-dynamic-${arch}.vers)224 225        add_compiler_rt_runtime(clang_rt.ubsan_standalone226          SHARED227          ARCHS ${arch}228          OBJECT_LIBS RTSanitizerCommon229                RTSanitizerCommonLibc230                RTSanitizerCommonCoverage231                RTSanitizerCommonSymbolizer232                RTSanitizerCommonSymbolizerInternal233                RTUbsan234                RTUbsan_cxx235                RTUbsan_standalone236                RTInterception237                RTUbsan_dynamic_version_script_dummy238          CFLAGS ${UBSAN_CFLAGS}239          LINK_FLAGS ${UBSAN_LINK_FLAGS} ${VERSION_SCRIPT_FLAG}240          LINK_LIBS ${UBSAN_DYNAMIC_LIBS}241          PARENT_TARGET ubsan)242      endforeach()243 244      set(ARCHS_FOR_SYMBOLS ${UBSAN_SUPPORTED_ARCH})245      list(REMOVE_ITEM ARCHS_FOR_SYMBOLS i386)246      add_sanitizer_rt_symbols(clang_rt.ubsan_standalone247        ARCHS ${ARCHS_FOR_SYMBOLS}248        PARENT_TARGET ubsan249        EXTRA ubsan.syms.extra)250      add_sanitizer_rt_symbols(clang_rt.ubsan_standalone_cxx251        ARCHS ${ARCHS_FOR_SYMBOLS}252        PARENT_TARGET ubsan253        EXTRA ubsan.syms.extra)254    endif()255  endif()256endif()257