brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.1 KiB · 6e6dfd2 Raw
354 lines · plain
1# Build system for the common Sanitizer runtime support library components.2# These components are shared between AddressSanitizer and ThreadSanitizer.3 4set(SANITIZER_SOURCES_NOTERMINATION5  sanitizer_allocator.cpp6  sanitizer_common.cpp7  sanitizer_deadlock_detector1.cpp8  sanitizer_deadlock_detector2.cpp9  sanitizer_errno.cpp10  sanitizer_file.cpp11  sanitizer_flags.cpp12  sanitizer_flag_parser.cpp13  sanitizer_fuchsia.cpp14  sanitizer_haiku.cpp15  sanitizer_libc.cpp16  sanitizer_libignore.cpp17  sanitizer_linux.cpp18  sanitizer_linux_s390.cpp19  sanitizer_mac.cpp20  sanitizer_mutex.cpp21  sanitizer_netbsd.cpp22  sanitizer_platform_limits_freebsd.cpp23  sanitizer_platform_limits_linux.cpp24  sanitizer_platform_limits_netbsd.cpp25  sanitizer_platform_limits_posix.cpp26  sanitizer_platform_limits_solaris.cpp27  sanitizer_posix.cpp28  sanitizer_printf.cpp29  sanitizer_procmaps_common.cpp30  sanitizer_procmaps_bsd.cpp31  sanitizer_procmaps_fuchsia.cpp32  sanitizer_procmaps_haiku.cpp33  sanitizer_procmaps_linux.cpp34  sanitizer_procmaps_mac.cpp35  sanitizer_procmaps_solaris.cpp36  sanitizer_range.cpp37  sanitizer_solaris.cpp38  sanitizer_stoptheworld_fuchsia.cpp39  sanitizer_stoptheworld_mac.cpp40  sanitizer_stoptheworld_win.cpp41  sanitizer_suppressions.cpp42  sanitizer_tls_get_addr.cpp43  sanitizer_thread_arg_retval.cpp44  sanitizer_thread_registry.cpp45  sanitizer_type_traits.cpp46  sanitizer_win.cpp47  sanitizer_win_interception.cpp48  )49 50set(SANITIZER_SOURCES51  ${SANITIZER_SOURCES_NOTERMINATION}52  sanitizer_termination.cpp53  )54 55# Libc functions stubs. These sources should be linked instead of56# SANITIZER_LIBCDEP_SOURCES when sanitizer_common library must not depend on57# libc.58set(SANITIZER_NOLIBC_SOURCES59  sanitizer_common_nolibc.cpp60  )61 62set(SANITIZER_LIBCDEP_SOURCES63  sanitizer_common_libcdep.cpp64  sanitizer_allocator_checks.cpp65  sanitizer_dl.cpp66  sanitizer_linux_libcdep.cpp67  sanitizer_mac_libcdep.cpp68  sanitizer_posix_libcdep.cpp69  sanitizer_stoptheworld_linux_libcdep.cpp70  sanitizer_stoptheworld_netbsd_libcdep.cpp71  )72 73set(SANITIZER_COVERAGE_SOURCES74  sancov_flags.cpp75  sanitizer_coverage_fuchsia.cpp76  sanitizer_coverage_libcdep_new.cpp77  sanitizer_coverage_win_sections.cpp78  )79 80set(SANITIZER_SYMBOLIZER_SOURCES81  sanitizer_allocator_report.cpp82  sanitizer_chained_origin_depot.cpp83  sanitizer_stack_store.cpp84  sanitizer_stackdepot.cpp85  sanitizer_stacktrace.cpp86  sanitizer_stacktrace_libcdep.cpp87  sanitizer_stacktrace_printer.cpp88  sanitizer_stacktrace_sparc.cpp89  sanitizer_symbolizer.cpp90  sanitizer_symbolizer_libbacktrace.cpp91  sanitizer_symbolizer_libcdep.cpp92  sanitizer_symbolizer_mac.cpp93  sanitizer_symbolizer_markup.cpp94  sanitizer_symbolizer_markup_fuchsia.cpp95  sanitizer_symbolizer_posix_libcdep.cpp96  sanitizer_symbolizer_report.cpp97  sanitizer_symbolizer_report_fuchsia.cpp98  sanitizer_symbolizer_win.cpp99  sanitizer_thread_history.cpp100  sanitizer_unwind_linux_libcdep.cpp101  sanitizer_unwind_fuchsia.cpp102  sanitizer_unwind_win.cpp103  )104 105# Explicitly list all sanitizer_common headers. Not all of these are106# included in sanitizer_common source files, but we need to depend on107# headers when building our custom unit tests.108set(SANITIZER_IMPL_HEADERS109  sancov_flags.h110  sancov_flags.inc111  sanitizer_addrhashmap.h112  sanitizer_allocator.h113  sanitizer_allocator_checks.h114  sanitizer_allocator_combined.h115  sanitizer_allocator_dlsym.h116  sanitizer_allocator_interface.h117  sanitizer_allocator_internal.h118  sanitizer_allocator_local_cache.h119  sanitizer_allocator_primary32.h120  sanitizer_allocator_primary64.h121  sanitizer_allocator_report.h122  sanitizer_allocator_secondary.h123  sanitizer_allocator_size_class_map.h124  sanitizer_allocator_stats.h125  sanitizer_array_ref.h126  sanitizer_asm.h127  sanitizer_atomic.h128  sanitizer_atomic_clang.h129  sanitizer_atomic_msvc.h130  sanitizer_bitvector.h131  sanitizer_bvgraph.h132  sanitizer_chained_origin_depot.h133  sanitizer_common.h134  sanitizer_common_interceptors.inc135  sanitizer_common_interceptors_format.inc136  sanitizer_common_interceptors_ioctl.inc137  sanitizer_common_interceptors_memintrinsics.inc138  sanitizer_common_interface.inc139  sanitizer_common_interface_posix.inc140  sanitizer_common_syscalls.inc141  sanitizer_coverage_interface.inc142  sanitizer_dbghelp.h143  sanitizer_deadlock_detector.h144  sanitizer_deadlock_detector_interface.h145  sanitizer_dense_map.h146  sanitizer_dense_map_info.h147  sanitizer_dl.h148  sanitizer_errno.h149  sanitizer_errno_codes.h150  sanitizer_file.h151  sanitizer_flag_parser.h152  sanitizer_flags.h153  sanitizer_flags.inc154  sanitizer_flat_map.h155  sanitizer_fuchsia.h156  sanitizer_getauxval.h157  sanitizer_hash.h158  sanitizer_interceptors_ioctl_netbsd.inc159  sanitizer_interface_internal.h160  sanitizer_internal_defs.h161  sanitizer_leb128.h162  sanitizer_lfstack.h163  sanitizer_libc.h164  sanitizer_libignore.h165  sanitizer_linux.h166  sanitizer_list.h167  sanitizer_local_address_space_view.h168  sanitizer_lzw.h169  sanitizer_mac.h170  sanitizer_malloc_mac.inc171  sanitizer_mutex.h172  sanitizer_placement_new.h173  sanitizer_platform.h174  sanitizer_platform_interceptors.h175  sanitizer_platform_limits_netbsd.h176  sanitizer_platform_limits_posix.h177  sanitizer_platform_limits_solaris.h178  sanitizer_posix.h179  sanitizer_procmaps.h180  sanitizer_ptrauth.h181  sanitizer_quarantine.h182  sanitizer_range.h183  sanitizer_redefine_builtins.h184  sanitizer_report_decorator.h185  sanitizer_ring_buffer.h186  sanitizer_signal_interceptors.inc187  sanitizer_stack_store.h188  sanitizer_stackdepot.h189  sanitizer_stackdepotbase.h190  sanitizer_stacktrace.h191  sanitizer_stacktrace_printer.h192  sanitizer_stoptheworld.h193  sanitizer_suppressions.h194  sanitizer_symbolizer.h195  sanitizer_symbolizer_markup_constants.h196  sanitizer_symbolizer_internal.h197  sanitizer_symbolizer_libbacktrace.h198  sanitizer_symbolizer_mac.h199  sanitizer_symbolizer_markup.h200  sanitizer_syscall_generic.inc201  sanitizer_syscall_linux_aarch64.inc202  sanitizer_syscall_linux_arm.inc203  sanitizer_syscall_linux_x86_64.inc204  sanitizer_syscall_linux_riscv64.inc205  sanitizer_syscall_linux_loongarch64.inc206  sanitizer_syscalls_netbsd.inc207  sanitizer_thread_registry.h208  sanitizer_thread_safety.h209  sanitizer_tls_get_addr.h210  sanitizer_vector.h211  sanitizer_win.h212  sanitizer_win_defs.h213  sanitizer_win_interception.h214  sanitizer_win_thunk_interception.h215  )216 217if(MSVC)218  # asan on windows only supports the release dll version of the runtimes, in the interest of219  # only having one asan dll to support/test. Having asan statically linked220  # with the runtime might be possible, but it multiplies the number of scenerios to test.221  # the program USING sanitizers can use whatever version of the runtime it wants to.222  set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)223endif()224 225include_directories(..)226 227set(SANITIZER_COMMON_DEFINITIONS228  HAVE_RPC_XDR_H=${HAVE_RPC_XDR_H})229 230# note: L not I, this is nodefaultlibs for msvc231append_list_if(MSVC /Zl SANITIZER_COMMON_CFLAGS)232if(HAIKU)233   list(APPEND SANITIZER_COMMON_CFLAGS -I/system/develop/headers/private -I/system/develop/headers/private/system/arch/x86_64 -I/system/develop/headers/private/system)234endif()235set(SANITIZER_CFLAGS ${SANITIZER_COMMON_CFLAGS})236 237# Too many existing bugs, needs cleanup.238append_list_if(COMPILER_RT_HAS_WNO_FORMAT -Wno-format SANITIZER_CFLAGS)239 240append_rtti_flag(OFF SANITIZER_CFLAGS)241 242append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=570243               SANITIZER_CFLAGS)244append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors245               SANITIZER_CFLAGS)246 247if(APPLE)248  set(OS_OPTION OS ${SANITIZER_COMMON_SUPPORTED_OS})249endif()250 251add_compiler_rt_object_libraries(RTSanitizerCommon252  ${OS_OPTION}253  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}254  SOURCES ${SANITIZER_SOURCES}255  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}256  CFLAGS ${SANITIZER_CFLAGS}257  DEFS ${SANITIZER_COMMON_DEFINITIONS})258add_compiler_rt_object_libraries(RTSanitizerCommonNoTermination259  ${OS_OPTION}260  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}261  SOURCES ${SANITIZER_SOURCES_NOTERMINATION}262  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}263  CFLAGS ${SANITIZER_CFLAGS}264  DEFS ${SANITIZER_COMMON_DEFINITIONS})265add_compiler_rt_object_libraries(RTSanitizerCommonNoLibc266  ${OS_OPTION}267  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}268  SOURCES ${SANITIZER_NOLIBC_SOURCES}269  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}270  CFLAGS ${SANITIZER_CFLAGS}271  DEFS ${SANITIZER_COMMON_DEFINITIONS})272add_compiler_rt_object_libraries(RTSanitizerCommonLibc273  ${OS_OPTION}274  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}275  SOURCES ${SANITIZER_LIBCDEP_SOURCES}276  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}277  CFLAGS ${SANITIZER_CFLAGS}278  DEFS ${SANITIZER_COMMON_DEFINITIONS})279add_compiler_rt_object_libraries(RTSanitizerCommonCoverage280  ${OS_OPTION}281  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}282  SOURCES ${SANITIZER_COVERAGE_SOURCES}283  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}284  CFLAGS ${SANITIZER_CFLAGS}285  DEFS ${SANITIZER_COMMON_DEFINITIONS})286add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizer287  ${OS_OPTION}288  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}289  SOURCES ${SANITIZER_SYMBOLIZER_SOURCES}290  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}291  CFLAGS ${SANITIZER_CFLAGS}292  DEFS ${SANITIZER_COMMON_DEFINITIONS})293 294set(SANITIZER_NO_WEAK_HOOKS_CFLAGS ${SANITIZER_CFLAGS})295list(APPEND SANITIZER_NO_WEAK_HOOKS_CFLAGS "-DSANITIZER_SUPPORTS_WEAK_HOOKS=0")296add_compiler_rt_object_libraries(RTSanitizerCommonNoHooks297  ${OS_OPTION}298  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}299  SOURCES ${SANITIZER_SOURCES}300  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}301  CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS}302  DEFS ${SANITIZER_COMMON_DEFINITIONS})303add_compiler_rt_object_libraries(RTSanitizerCommonLibcNoHooks304  ${OS_OPTION}305  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}306  SOURCES ${SANITIZER_LIBCDEP_SOURCES}307  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}308  CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS}309  DEFS ${SANITIZER_COMMON_DEFINITIONS})310add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizerNoHooks311  ${OS_OPTION}312  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}313  SOURCES ${SANITIZER_SYMBOLIZER_SOURCES}314  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}315  CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS}316  DEFS ${SANITIZER_COMMON_DEFINITIONS})317 318if(WIN32)319  set(RUNTIME_THUNK_CFLAGS -DSANITIZER_DYNAMIC_RUNTIME_THUNK -DSANITIZER_STATIC_RUNTIME_THUNK)320  append_list_if(MSVC /Zl RUNTIME_THUNK_CFLAGS)321  add_compiler_rt_object_libraries(SanitizerRuntimeThunk322    ${SANITIZER_COMMON_SUPPORTED_OS}323    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}324    SOURCES325      sanitizer_win_thunk_interception.cpp326    CFLAGS ${SANITIZER_CFLAGS} ${RUNTIME_THUNK_CFLAGS}327    DEFS ${SANITIZER_COMMON_DEFINITIONS})328 329  add_compiler_rt_object_libraries(SancovRuntimeThunk330    ${SANITIZER_COMMON_SUPPORTED_OS}331    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}332    SOURCES333      sanitizer_coverage_win_runtime_thunk.cpp334      sanitizer_coverage_win_sections.cpp335    CFLAGS ${SANITIZER_CFLAGS} ${RUNTIME_THUNK_CFLAGS}336    DEFS ${SANITIZER_COMMON_DEFINITIONS})337endif()338 339# Unit tests for common sanitizer runtime.340if(COMPILER_RT_INCLUDE_TESTS)341  add_subdirectory(tests)342endif()343 344 345foreach(arch ${SANITIZER_COMMON_SUPPORTED_ARCH})346  # Library implementing InternalSymbolizer. Empty by default.347  add_library(RTSanitizerCommonSymbolizerInternal.${arch}348              OBJECT IMPORTED GLOBAL)349endforeach()350 351if (COMPILER_RT_ENABLE_INTERNAL_SYMBOLIZER)352  add_subdirectory(symbolizer)353endif()354