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