1# Build system for the common Sanitizer runtime support library components. 2# These components are shared between AddressSanitizer and ThreadSanitizer. 3 4set(SANITIZER_SOURCES_NOTERMINATION 5 sanitizer_allocator.cpp 6 sanitizer_common.cpp 7 sanitizer_deadlock_detector1.cpp 8 sanitizer_deadlock_detector2.cpp 9 sanitizer_errno.cpp 10 sanitizer_file.cpp 11 sanitizer_flags.cpp 12 sanitizer_flag_parser.cpp 13 sanitizer_fuchsia.cpp 14 sanitizer_libc.cpp 15 sanitizer_libignore.cpp 16 sanitizer_linux.cpp 17 sanitizer_linux_s390.cpp 18 sanitizer_mac.cpp 19 sanitizer_mutex.cpp 20 sanitizer_netbsd.cpp 21 sanitizer_platform_limits_freebsd.cpp 22 sanitizer_platform_limits_linux.cpp 23 sanitizer_platform_limits_netbsd.cpp 24 sanitizer_platform_limits_posix.cpp 25 sanitizer_platform_limits_solaris.cpp 26 sanitizer_posix.cpp 27 sanitizer_printf.cpp 28 sanitizer_procmaps_common.cpp 29 sanitizer_procmaps_bsd.cpp 30 sanitizer_procmaps_fuchsia.cpp 31 sanitizer_procmaps_linux.cpp 32 sanitizer_procmaps_mac.cpp 33 sanitizer_procmaps_solaris.cpp 34 sanitizer_solaris.cpp 35 sanitizer_stoptheworld_fuchsia.cpp 36 sanitizer_stoptheworld_mac.cpp 37 sanitizer_stoptheworld_win.cpp 38 sanitizer_suppressions.cpp 39 sanitizer_tls_get_addr.cpp 40 sanitizer_thread_registry.cpp 41 sanitizer_type_traits.cpp 42 sanitizer_win.cpp 43 ) 44 45set(SANITIZER_SOURCES 46 ${SANITIZER_SOURCES_NOTERMINATION} 47 sanitizer_termination.cpp 48 ) 49 50# Libc functions stubs. These sources should be linked instead of 51# SANITIZER_LIBCDEP_SOURCES when sanitizer_common library must not depend on 52# libc. 53set(SANITIZER_NOLIBC_SOURCES 54 sanitizer_common_nolibc.cpp 55 ) 56 57set(SANITIZER_LIBCDEP_SOURCES 58 sanitizer_common_libcdep.cpp 59 sanitizer_allocator_checks.cpp 60 sanitizer_linux_libcdep.cpp 61 sanitizer_mac_libcdep.cpp 62 sanitizer_posix_libcdep.cpp 63 sanitizer_stoptheworld_linux_libcdep.cpp 64 sanitizer_stoptheworld_netbsd_libcdep.cpp 65 ) 66 67set(SANITIZER_COVERAGE_SOURCES 68 sancov_flags.cpp 69 sanitizer_coverage_fuchsia.cpp 70 sanitizer_coverage_libcdep_new.cpp 71 sanitizer_coverage_win_sections.cpp 72 ) 73 74set(SANITIZER_SYMBOLIZER_SOURCES 75 sanitizer_allocator_report.cpp 76 sanitizer_chained_origin_depot.cpp 77 sanitizer_stack_store.cpp 78 sanitizer_stackdepot.cpp 79 sanitizer_stacktrace.cpp 80 sanitizer_stacktrace_libcdep.cpp 81 sanitizer_stacktrace_printer.cpp 82 sanitizer_stacktrace_sparc.cpp 83 sanitizer_symbolizer.cpp 84 sanitizer_symbolizer_libbacktrace.cpp 85 sanitizer_symbolizer_libcdep.cpp 86 sanitizer_symbolizer_mac.cpp 87 sanitizer_symbolizer_markup.cpp 88 sanitizer_symbolizer_posix_libcdep.cpp 89 sanitizer_symbolizer_report.cpp 90 sanitizer_symbolizer_win.cpp 91 sanitizer_unwind_linux_libcdep.cpp 92 sanitizer_unwind_win.cpp 93 ) 94 95# Explicitly list all sanitizer_common headers. Not all of these are 96# included in sanitizer_common source files, but we need to depend on 97# headers when building our custom unit tests. 98set(SANITIZER_IMPL_HEADERS 99 sancov_flags.h 100 sancov_flags.inc 101 sanitizer_addrhashmap.h 102 sanitizer_allocator.h 103 sanitizer_allocator_checks.h 104 sanitizer_allocator_combined.h 105 sanitizer_allocator_dlsym.h 106 sanitizer_allocator_interface.h 107 sanitizer_allocator_internal.h 108 sanitizer_allocator_local_cache.h 109 sanitizer_allocator_primary32.h 110 sanitizer_allocator_primary64.h 111 sanitizer_allocator_report.h 112 sanitizer_allocator_secondary.h 113 sanitizer_allocator_size_class_map.h 114 sanitizer_allocator_stats.h 115 sanitizer_asm.h 116 sanitizer_atomic.h 117 sanitizer_atomic_clang.h 118 sanitizer_atomic_clang_mips.h 119 sanitizer_atomic_clang_other.h 120 sanitizer_atomic_clang_x86.h 121 sanitizer_atomic_msvc.h 122 sanitizer_bitvector.h 123 sanitizer_bvgraph.h 124 sanitizer_chained_origin_depot.h 125 sanitizer_common.h 126 sanitizer_common_interceptors.inc 127 sanitizer_common_interceptors_format.inc 128 sanitizer_common_interceptors_ioctl.inc 129 sanitizer_common_interface.inc 130 sanitizer_common_interface_posix.inc 131 sanitizer_common_syscalls.inc 132 sanitizer_coverage_interface.inc 133 sanitizer_dbghelp.h 134 sanitizer_deadlock_detector.h 135 sanitizer_deadlock_detector_interface.h 136 sanitizer_dense_map.h 137 sanitizer_dense_map_info.h 138 sanitizer_errno.h 139 sanitizer_errno_codes.h 140 sanitizer_file.h 141 sanitizer_flag_parser.h 142 sanitizer_flags.h 143 sanitizer_flags.inc 144 sanitizer_flat_map.h 145 sanitizer_freebsd.h 146 sanitizer_fuchsia.h 147 sanitizer_getauxval.h 148 sanitizer_hash.h 149 sanitizer_interceptors_ioctl_netbsd.inc 150 sanitizer_interface_internal.h 151 sanitizer_internal_defs.h 152 sanitizer_leb128.h 153 sanitizer_lfstack.h 154 sanitizer_libc.h 155 sanitizer_libignore.h 156 sanitizer_linux.h 157 sanitizer_list.h 158 sanitizer_local_address_space_view.h 159 sanitizer_lzw.h 160 sanitizer_mac.h 161 sanitizer_malloc_mac.inc 162 sanitizer_mutex.h 163 sanitizer_placement_new.h 164 sanitizer_platform.h 165 sanitizer_platform_interceptors.h 166 sanitizer_platform_limits_netbsd.h 167 sanitizer_platform_limits_posix.h 168 sanitizer_platform_limits_solaris.h 169 sanitizer_posix.h 170 sanitizer_procmaps.h 171 sanitizer_ptrauth.h 172 sanitizer_quarantine.h 173 sanitizer_report_decorator.h 174 sanitizer_ring_buffer.h 175 sanitizer_signal_interceptors.inc 176 sanitizer_stack_store.h 177 sanitizer_stackdepot.h 178 sanitizer_stackdepotbase.h 179 sanitizer_stacktrace.h 180 sanitizer_stacktrace_printer.h 181 sanitizer_stoptheworld.h 182 sanitizer_suppressions.h 183 sanitizer_symbolizer.h 184 sanitizer_symbolizer_fuchsia.h 185 sanitizer_symbolizer_internal.h 186 sanitizer_symbolizer_libbacktrace.h 187 sanitizer_symbolizer_mac.h 188 sanitizer_syscall_generic.inc 189 sanitizer_syscall_linux_aarch64.inc 190 sanitizer_syscall_linux_arm.inc 191 sanitizer_syscall_linux_x86_64.inc 192 sanitizer_syscall_linux_riscv64.inc 193 sanitizer_syscall_linux_loongarch64.inc 194 sanitizer_syscalls_netbsd.inc 195 sanitizer_thread_registry.h 196 sanitizer_thread_safety.h 197 sanitizer_tls_get_addr.h 198 sanitizer_vector.h 199 sanitizer_win.h 200 sanitizer_win_defs.h 201 sanitizer_win_dll_thunk.h 202 sanitizer_win_weak_interception.h 203 ) 204 205include_directories(..) 206 207set(SANITIZER_COMMON_DEFINITIONS 208 HAVE_RPC_XDR_H=${HAVE_RPC_XDR_H}) 209 210set(SANITIZER_CFLAGS ${SANITIZER_COMMON_CFLAGS}) 211 212# Too many existing bugs, needs cleanup. 213append_list_if(COMPILER_RT_HAS_WNO_FORMAT -Wno-format SANITIZER_CFLAGS) 214 215append_rtti_flag(OFF SANITIZER_CFLAGS) 216 217append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=570 218 SANITIZER_CFLAGS) 219append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors 220 SANITIZER_CFLAGS) 221 222if(APPLE) 223 set(OS_OPTION OS ${SANITIZER_COMMON_SUPPORTED_OS}) 224endif() 225 226add_compiler_rt_object_libraries(RTSanitizerCommon 227 ${OS_OPTION} 228 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 229 SOURCES ${SANITIZER_SOURCES} 230 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 231 CFLAGS ${SANITIZER_CFLAGS} 232 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 233add_compiler_rt_object_libraries(RTSanitizerCommonNoTermination 234 ${OS_OPTION} 235 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 236 SOURCES ${SANITIZER_SOURCES_NOTERMINATION} 237 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 238 CFLAGS ${SANITIZER_CFLAGS} 239 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 240add_compiler_rt_object_libraries(RTSanitizerCommonNoLibc 241 ${OS_OPTION} 242 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 243 SOURCES ${SANITIZER_NOLIBC_SOURCES} 244 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 245 CFLAGS ${SANITIZER_CFLAGS} 246 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 247add_compiler_rt_object_libraries(RTSanitizerCommonLibc 248 ${OS_OPTION} 249 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 250 SOURCES ${SANITIZER_LIBCDEP_SOURCES} 251 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 252 CFLAGS ${SANITIZER_CFLAGS} 253 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 254add_compiler_rt_object_libraries(RTSanitizerCommonCoverage 255 ${OS_OPTION} 256 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 257 SOURCES ${SANITIZER_COVERAGE_SOURCES} 258 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 259 CFLAGS ${SANITIZER_CFLAGS} 260 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 261add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizer 262 ${OS_OPTION} 263 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 264 SOURCES ${SANITIZER_SYMBOLIZER_SOURCES} 265 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 266 CFLAGS ${SANITIZER_CFLAGS} 267 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 268 269set(SANITIZER_NO_WEAK_HOOKS_CFLAGS ${SANITIZER_CFLAGS}) 270list(APPEND SANITIZER_NO_WEAK_HOOKS_CFLAGS "-DSANITIZER_SUPPORTS_WEAK_HOOKS=0") 271add_compiler_rt_object_libraries(RTSanitizerCommonNoHooks 272 ${OS_OPTION} 273 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 274 SOURCES ${SANITIZER_SOURCES} 275 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 276 CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} 277 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 278add_compiler_rt_object_libraries(RTSanitizerCommonLibcNoHooks 279 ${OS_OPTION} 280 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 281 SOURCES ${SANITIZER_LIBCDEP_SOURCES} 282 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 283 CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} 284 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 285add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizerNoHooks 286 ${OS_OPTION} 287 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 288 SOURCES ${SANITIZER_SYMBOLIZER_SOURCES} 289 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 290 CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} 291 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 292 293if(WIN32) 294 add_compiler_rt_object_libraries(SanitizerCommonWeakInterception 295 ${SANITIZER_COMMON_SUPPORTED_OS} 296 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 297 SOURCES 298 sanitizer_win_weak_interception.cpp 299 CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DYNAMIC 300 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 301 add_compiler_rt_object_libraries(SancovWeakInterception 302 ${SANITIZER_COMMON_SUPPORTED_OS} 303 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 304 SOURCES 305 sanitizer_coverage_win_weak_interception.cpp 306 CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DYNAMIC 307 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 308 309 add_compiler_rt_object_libraries(SanitizerCommonDllThunk 310 ${SANITIZER_COMMON_SUPPORTED_OS} 311 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 312 SOURCES 313 sanitizer_win_dll_thunk.cpp 314 CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DLL_THUNK 315 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 316 add_compiler_rt_object_libraries(SancovDllThunk 317 ${SANITIZER_COMMON_SUPPORTED_OS} 318 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 319 SOURCES 320 sanitizer_coverage_win_dll_thunk.cpp 321 sanitizer_coverage_win_sections.cpp 322 CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DLL_THUNK 323 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 324 325 set(DYNAMIC_RUNTIME_THUNK_CFLAGS "-DSANITIZER_DYNAMIC_RUNTIME_THUNK") 326 if(MSVC) 327 list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-Zl") 328 elseif(CMAKE_C_COMPILER_ID MATCHES Clang) 329 list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-nodefaultlibs") 330 endif() 331 add_compiler_rt_object_libraries(SanitizerCommonDynamicRuntimeThunk 332 ${SANITIZER_COMMON_SUPPORTED_OS} 333 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 334 SOURCES 335 sanitizer_win_dynamic_runtime_thunk.cpp 336 CFLAGS ${SANITIZER_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS} 337 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 338 add_compiler_rt_object_libraries(SancovDynamicRuntimeThunk 339 ${SANITIZER_COMMON_SUPPORTED_OS} 340 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 341 SOURCES 342 sanitizer_coverage_win_dynamic_runtime_thunk.cpp 343 sanitizer_coverage_win_sections.cpp 344 CFLAGS ${SANITIZER_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS} 345 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 346endif() 347 348# Unit tests for common sanitizer runtime. 349if(COMPILER_RT_INCLUDE_TESTS) 350 add_subdirectory(tests) 351endif() 352