diff options
author | Alexey Samsonov <samsonov@google.com> | 2014-04-01 13:16:30 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2014-04-01 13:16:30 +0000 |
commit | d6535ea4c4d49078a93735b315b8518fb692a592 (patch) | |
tree | e114342968d294d188587a94d6dea587a66e3f19 /lib/asan/CMakeLists.txt | |
parent | f9470a30623dab95050c32e10576d706b13675dd (diff) |
[ASan] Optional support for dynamic ASan runtime on Linux.
Based on http://llvm-reviews.chandlerc.com/D3042 by Yuri Gribov!
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@205308 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/asan/CMakeLists.txt')
-rw-r--r-- | lib/asan/CMakeLists.txt | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/lib/asan/CMakeLists.txt b/lib/asan/CMakeLists.txt index d1c0d801c..88647b841 100644 --- a/lib/asan/CMakeLists.txt +++ b/lib/asan/CMakeLists.txt @@ -21,7 +21,6 @@ set(ASAN_SOURCES asan_new_delete.cc asan_poisoning.cc asan_posix.cc - asan_preinit.cc asan_report.cc asan_rtl.cc asan_stack.cc @@ -29,6 +28,9 @@ set(ASAN_SOURCES asan_thread.cc asan_win.cc) +set(ASAN_PREINIT_SOURCES + asan_preinit.cc) + include_directories(..) if(ANDROID) @@ -46,6 +48,17 @@ if(ANDROID) ASAN_LOW_MEMORY=1) endif() +set(ASAN_DYNAMIC_DEFINITIONS + ${ASAN_COMMON_DEFINITIONS} ASAN_DYNAMIC=1) + +set(ASAN_DYNAMIC_CFLAGS ${ASAN_CFLAGS}) +append_if(COMPILER_RT_HAS_FTLS_MODEL_INITIAL_EXEC + -ftls-model=initial-exec ASAN_DYNAMIC_CFLAGS) + +set(ASAN_DYNAMIC_LIBS stdc++ m c) +append_if(COMPILER_RT_HAS_LIBPTHREAD pthread ASAN_DYNAMIC_LIBS) +append_if(COMPILER_RT_HAS_LIBDL dl ASAN_DYNAMIC_LIBS) + if (NOT MSVC) set(ASAN_ASM_SOURCES asan_asm_instrumentation.S) set_source_files_properties(${ASAN_ASM_SOURCES} PROPERTIES LANGUAGE C) @@ -71,6 +84,14 @@ else() add_compiler_rt_object_library(RTAsan ${arch} SOURCES ${ASAN_SOURCES} CFLAGS ${ASAN_CFLAGS} DEFS ${ASAN_COMMON_DEFINITIONS}) + add_compiler_rt_object_library(RTAsan_preinit ${arch} + SOURCES ${ASAN_PREINIT_SOURCES} CFLAGS ${ASAN_CFLAGS} + DEFS ${ASAN_COMMON_DEFINITIONS}) + if (COMPILER_RT_BUILD_SHARED_ASAN) + add_compiler_rt_object_library(RTAsan_dynamic ${arch} + SOURCES ${ASAN_SOURCES} CFLAGS ${ASAN_DYNAMIC_CFLAGS} + DEFS ${ASAN_DYNAMIC_DEFINITIONS}) + endif() endforeach() endif() @@ -103,21 +124,41 @@ elseif(ANDROID) else() # Build separate libraries for each target. foreach(arch ${ASAN_SUPPORTED_ARCH}) - set(ASAN_RUNTIME_OBJECTS - $<TARGET_OBJECTS:RTAsan.${arch}> + set(ASAN_COMMON_RUNTIME_OBJECTS $<TARGET_OBJECTS:RTInterception.${arch}> $<TARGET_OBJECTS:RTSanitizerCommon.${arch}> $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>) if (NOT WIN32) # We can't build Leak Sanitizer on Windows yet. - list(APPEND ASAN_RUNTIME_OBJECTS $<TARGET_OBJECTS:RTLSanCommon.${arch}>) + list(APPEND ASAN_COMMON_RUNTIME_OBJECTS + $<TARGET_OBJECTS:RTLSanCommon.${arch}>) endif() add_compiler_rt_runtime(clang_rt.asan-${arch} ${arch} STATIC - SOURCES ${ASAN_RUNTIME_OBJECTS} + SOURCES $<TARGET_OBJECTS:RTAsan_preinit.${arch}> + $<TARGET_OBJECTS:RTAsan.${arch}> + ${ASAN_COMMON_RUNTIME_OBJECTS} CFLAGS ${ASAN_CFLAGS} DEFS ${ASAN_COMMON_DEFINITIONS}) add_dependencies(asan clang_rt.asan-${arch}) + + if (COMPILER_RT_BUILD_SHARED_ASAN) + add_compiler_rt_runtime(clang_rt.asan-preinit-${arch} ${arch} STATIC + SOURCES $<TARGET_OBJECTS:RTAsan_preinit.${arch}> + CFLAGS ${ASAN_CFLAGS} + DEFS ${ASAN_COMMON_DEFINITIONS}) + add_dependencies(asan clang_rt.asan-preinit-${arch}) + + add_compiler_rt_runtime(clang_rt.asan-dynamic-${arch} ${arch} SHARED + OUTPUT_NAME clang_rt.asan-${arch} + SOURCES $<TARGET_OBJECTS:RTAsan_dynamic.${arch}> + ${ASAN_COMMON_RUNTIME_OBJECTS} + CFLAGS ${ASAN_DYNAMIC_CFLAGS} + DEFS ${ASAN_DYNAMIC_DEFINITIONS}) + target_link_libraries(clang_rt.asan-dynamic-${arch} ${ASAN_DYNAMIC_LIBS}) + add_dependencies(asan clang_rt.asan-dynamic-${arch}) + endif() + if (UNIX AND NOT ${arch} STREQUAL "i386") add_sanitizer_rt_symbols(clang_rt.asan-${arch} asan.syms.extra) add_dependencies(asan clang_rt.asan-${arch}-symbols) |