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_netbsd.cpp 20 sanitizer_openbsd.cpp 21 sanitizer_persistent_allocator.cpp 22 sanitizer_platform_limits_freebsd.cpp 23 sanitizer_platform_limits_linux.cpp 24 sanitizer_platform_limits_netbsd.cpp 25 sanitizer_platform_limits_openbsd.cpp 26 sanitizer_platform_limits_posix.cpp 27 sanitizer_platform_limits_solaris.cpp 28 sanitizer_posix.cpp 29 sanitizer_printf.cpp 30 sanitizer_procmaps_common.cpp 31 sanitizer_procmaps_bsd.cpp 32 sanitizer_procmaps_fuchsia.cpp 33 sanitizer_procmaps_linux.cpp 34 sanitizer_procmaps_mac.cpp 35 sanitizer_procmaps_solaris.cpp 36 sanitizer_rtems.cpp 37 sanitizer_solaris.cpp 38 sanitizer_stoptheworld_fuchsia.cpp 39 sanitizer_stoptheworld_mac.cpp 40 sanitizer_suppressions.cpp 41 sanitizer_tls_get_addr.cpp 42 sanitizer_thread_registry.cpp 43 sanitizer_type_traits.cpp 44 sanitizer_win.cpp 45 ) 46 47set(SANITIZER_SOURCES 48 ${SANITIZER_SOURCES_NOTERMINATION} 49 sanitizer_termination.cpp 50 ) 51 52# Libc functions stubs. These sources should be linked instead of 53# SANITIZER_LIBCDEP_SOURCES when sanitizer_common library must not depend on 54# libc. 55set(SANITIZER_NOLIBC_SOURCES 56 sanitizer_common_nolibc.cpp 57 ) 58 59set(SANITIZER_LIBCDEP_SOURCES 60 sanitizer_common_libcdep.cpp 61 sanitizer_allocator_checks.cpp 62 sanitizer_linux_libcdep.cpp 63 sanitizer_mac_libcdep.cpp 64 sanitizer_posix_libcdep.cpp 65 sanitizer_stoptheworld_linux_libcdep.cpp 66 sanitizer_stoptheworld_netbsd_libcdep.cpp 67 ) 68 69set(SANITIZER_COVERAGE_SOURCES 70 sancov_flags.cpp 71 sanitizer_coverage_fuchsia.cpp 72 sanitizer_coverage_libcdep_new.cpp 73 sanitizer_coverage_win_sections.cpp 74 ) 75 76set(SANITIZER_SYMBOLIZER_SOURCES 77 sanitizer_allocator_report.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_bytemap.h 104 sanitizer_allocator_checks.h 105 sanitizer_allocator_combined.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_common.h 125 sanitizer_common_interceptors.inc 126 sanitizer_common_interceptors_format.inc 127 sanitizer_common_interceptors_ioctl.inc 128 sanitizer_common_interface.inc 129 sanitizer_common_interface_posix.inc 130 sanitizer_common_syscalls.inc 131 sanitizer_coverage_interface.inc 132 sanitizer_dbghelp.h 133 sanitizer_deadlock_detector.h 134 sanitizer_deadlock_detector_interface.h 135 sanitizer_errno.h 136 sanitizer_errno_codes.h 137 sanitizer_file.h 138 sanitizer_flag_parser.h 139 sanitizer_flags.h 140 sanitizer_flags.inc 141 sanitizer_freebsd.h 142 sanitizer_fuchsia.h 143 sanitizer_getauxval.h 144 sanitizer_hash.h 145 sanitizer_interceptors_ioctl_netbsd.inc 146 sanitizer_interface_internal.h 147 sanitizer_internal_defs.h 148 sanitizer_lfstack.h 149 sanitizer_libc.h 150 sanitizer_libignore.h 151 sanitizer_linux.h 152 sanitizer_list.h 153 sanitizer_local_address_space_view.h 154 sanitizer_mac.h 155 sanitizer_malloc_mac.inc 156 sanitizer_mutex.h 157 sanitizer_persistent_allocator.h 158 sanitizer_placement_new.h 159 sanitizer_platform.h 160 sanitizer_platform_interceptors.h 161 sanitizer_platform_limits_netbsd.h 162 sanitizer_platform_limits_openbsd.h 163 sanitizer_platform_limits_posix.h 164 sanitizer_platform_limits_solaris.h 165 sanitizer_posix.h 166 sanitizer_procmaps.h 167 sanitizer_ptrauth.h 168 sanitizer_quarantine.h 169 sanitizer_report_decorator.h 170 sanitizer_ring_buffer.h 171 sanitizer_rtems.h 172 sanitizer_signal_interceptors.inc 173 sanitizer_stackdepot.h 174 sanitizer_stackdepotbase.h 175 sanitizer_stacktrace.h 176 sanitizer_stacktrace_printer.h 177 sanitizer_stoptheworld.h 178 sanitizer_suppressions.h 179 sanitizer_symbolizer.h 180 sanitizer_symbolizer_fuchsia.h 181 sanitizer_symbolizer_internal.h 182 sanitizer_symbolizer_libbacktrace.h 183 sanitizer_symbolizer_mac.h 184 sanitizer_symbolizer_rtems.h 185 sanitizer_syscall_generic.inc 186 sanitizer_syscall_linux_aarch64.inc 187 sanitizer_syscall_linux_arm.inc 188 sanitizer_syscall_linux_x86_64.inc 189 sanitizer_syscalls_netbsd.inc 190 sanitizer_thread_registry.h 191 sanitizer_tls_get_addr.h 192 sanitizer_vector.h 193 sanitizer_win.h 194 sanitizer_win_defs.h 195 sanitizer_win_dll_thunk.h 196 sanitizer_win_weak_interception.h 197 ) 198 199include_directories(..) 200 201set(SANITIZER_COMMON_DEFINITIONS 202 HAVE_RPC_XDR_H=${HAVE_RPC_XDR_H}) 203 204set(SANITIZER_CFLAGS ${SANITIZER_COMMON_CFLAGS}) 205append_rtti_flag(OFF SANITIZER_CFLAGS) 206 207append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=570 208 SANITIZER_CFLAGS) 209append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors 210 SANITIZER_CFLAGS) 211 212if(APPLE) 213 set(OS_OPTION OS ${SANITIZER_COMMON_SUPPORTED_OS}) 214endif() 215 216add_compiler_rt_object_libraries(RTSanitizerCommon 217 ${OS_OPTION} 218 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 219 SOURCES ${SANITIZER_SOURCES} 220 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 221 CFLAGS ${SANITIZER_CFLAGS} 222 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 223add_compiler_rt_object_libraries(RTSanitizerCommonNoTermination 224 ${OS_OPTION} 225 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 226 SOURCES ${SANITIZER_SOURCES_NOTERMINATION} 227 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 228 CFLAGS ${SANITIZER_CFLAGS} 229 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 230add_compiler_rt_object_libraries(RTSanitizerCommonNoLibc 231 ${OS_OPTION} 232 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 233 SOURCES ${SANITIZER_NOLIBC_SOURCES} 234 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 235 CFLAGS ${SANITIZER_CFLAGS} 236 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 237add_compiler_rt_object_libraries(RTSanitizerCommonLibc 238 ${OS_OPTION} 239 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 240 SOURCES ${SANITIZER_LIBCDEP_SOURCES} 241 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 242 CFLAGS ${SANITIZER_CFLAGS} 243 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 244add_compiler_rt_object_libraries(RTSanitizerCommonCoverage 245 ${OS_OPTION} 246 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 247 SOURCES ${SANITIZER_COVERAGE_SOURCES} 248 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 249 CFLAGS ${SANITIZER_CFLAGS} 250 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 251add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizer 252 ${OS_OPTION} 253 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 254 SOURCES ${SANITIZER_SYMBOLIZER_SOURCES} 255 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 256 CFLAGS ${SANITIZER_CFLAGS} 257 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 258 259set(SANITIZER_NO_WEAK_HOOKS_CFLAGS ${SANITIZER_CFLAGS}) 260list(APPEND SANITIZER_NO_WEAK_HOOKS_CFLAGS "-DSANITIZER_SUPPORTS_WEAK_HOOKS=0") 261add_compiler_rt_object_libraries(RTSanitizerCommonNoHooks 262 ${OS_OPTION} 263 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 264 SOURCES ${SANITIZER_SOURCES} 265 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 266 CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} 267 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 268add_compiler_rt_object_libraries(RTSanitizerCommonLibcNoHooks 269 ${OS_OPTION} 270 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 271 SOURCES ${SANITIZER_LIBCDEP_SOURCES} 272 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 273 CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} 274 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 275add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizerNoHooks 276 ${OS_OPTION} 277 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 278 SOURCES ${SANITIZER_SYMBOLIZER_SOURCES} 279 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 280 CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} 281 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 282 283if(WIN32) 284 add_compiler_rt_object_libraries(SanitizerCommonWeakInterception 285 ${SANITIZER_COMMON_SUPPORTED_OS} 286 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 287 SOURCES sanitizer_win_weak_interception.cpp 288 CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DYNAMIC 289 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 290 add_compiler_rt_object_libraries(SancovWeakInterception 291 ${SANITIZER_COMMON_SUPPORTED_OS} 292 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 293 SOURCES sanitizer_coverage_win_weak_interception.cpp 294 CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DYNAMIC 295 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 296 297 add_compiler_rt_object_libraries(SanitizerCommonDllThunk 298 ${SANITIZER_COMMON_SUPPORTED_OS} 299 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 300 SOURCES sanitizer_win_dll_thunk.cpp 301 CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DLL_THUNK 302 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 303 add_compiler_rt_object_libraries(SancovDllThunk 304 ${SANITIZER_COMMON_SUPPORTED_OS} 305 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 306 SOURCES sanitizer_coverage_win_dll_thunk.cpp 307 sanitizer_coverage_win_sections.cpp 308 CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DLL_THUNK 309 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 310 311 set(DYNAMIC_RUNTIME_THUNK_CFLAGS "-DSANITIZER_DYNAMIC_RUNTIME_THUNK") 312 if(MSVC) 313 list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-Zl") 314 elseif(CMAKE_C_COMPILER_ID MATCHES Clang) 315 list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-nodefaultlibs") 316 endif() 317 add_compiler_rt_object_libraries(SanitizerCommonDynamicRuntimeThunk 318 ${SANITIZER_COMMON_SUPPORTED_OS} 319 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 320 SOURCES sanitizer_win_dynamic_runtime_thunk.cpp 321 CFLAGS ${SANITIZER_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS} 322 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 323 add_compiler_rt_object_libraries(SancovDynamicRuntimeThunk 324 ${SANITIZER_COMMON_SUPPORTED_OS} 325 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 326 SOURCES sanitizer_coverage_win_dynamic_runtime_thunk.cpp 327 sanitizer_coverage_win_sections.cpp 328 CFLAGS ${SANITIZER_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS} 329 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 330endif() 331 332# Unit tests for common sanitizer runtime. 333if(COMPILER_RT_INCLUDE_TESTS) 334 add_subdirectory(tests) 335endif() 336