[libcxx] r281603 - [libcxx] Allow sanitizing libcxx with ASan+UBSan simultaneously
Kuba Brecka via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 15 04:04:54 PDT 2016
Author: kuba.brecka
Date: Thu Sep 15 06:04:53 2016
New Revision: 281603
URL: http://llvm.org/viewvc/llvm-project?rev=281603&view=rev
Log:
[libcxx] Allow sanitizing libcxx with ASan+UBSan simultaneously
Allow building with LLVM_USE_SANITIZER=“Address;Undefined” (and “Undefined;Address”).
Differential Revision: https://reviews.llvm.org/D24569
Modified:
libcxx/trunk/lib/CMakeLists.txt
libcxx/trunk/test/libcxx/test/config.py
Modified: libcxx/trunk/lib/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/lib/CMakeLists.txt?rev=281603&r1=281602&r2=281603&view=diff
==============================================================================
--- libcxx/trunk/lib/CMakeLists.txt (original)
+++ libcxx/trunk/lib/CMakeLists.txt Thu Sep 15 06:04:53 2016
@@ -38,7 +38,9 @@ add_library_flags("${LIBCXX_CXX_ABI_LIBR
add_library_flags_if(LIBCXX_ENABLE_STATIC_ABI_LIBRARY "-Wl,-Bdynamic" "-Wl,--no-whole-archive")
if (APPLE AND LLVM_USE_SANITIZER)
- if ("${LLVM_USE_SANITIZER}" STREQUAL "Address")
+ if (("${LLVM_USE_SANITIZER}" STREQUAL "Address") OR
+ ("${LLVM_USE_SANITIZER}" STREQUAL "Address;Undefined") OR
+ ("${LLVM_USE_SANITIZER}" STREQUAL "Undefined;Address"))
set(LIBFILE "libclang_rt.asan_osx_dynamic.dylib")
elseif("${LLVM_USE_SANITIZER}" STREQUAL "Undefined")
set(LIBFILE "libclang_rt.ubsan_osx_dynamic.dylib")
Modified: libcxx/trunk/test/libcxx/test/config.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/test/config.py?rev=281603&r1=281602&r2=281603&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/test/config.py (original)
+++ libcxx/trunk/test/libcxx/test/config.py Thu Sep 15 06:04:53 2016
@@ -610,9 +610,17 @@ class Configuration(object):
os.pathsep + symbolizer_search_paths)
llvm_symbolizer = lit.util.which('llvm-symbolizer',
symbolizer_search_paths)
+
+ def add_ubsan():
+ self.cxx.flags += ['-fsanitize=undefined',
+ '-fno-sanitize=vptr,function,float-divide-by-zero',
+ '-fno-sanitize-recover=all']
+ self.env['UBSAN_OPTIONS'] = 'print_stacktrace=1'
+ self.config.available_features.add('ubsan')
+
# Setup the sanitizer compile flags
self.cxx.flags += ['-g', '-fno-omit-frame-pointer']
- if san == 'Address':
+ if san == 'Address' or san == 'Address;Undefined' or san == 'Undefined;Address':
self.cxx.flags += ['-fsanitize=address']
if llvm_symbolizer is not None:
self.env['ASAN_SYMBOLIZER_PATH'] = llvm_symbolizer
@@ -622,6 +630,8 @@ class Configuration(object):
self.config.available_features.add('asan')
self.config.available_features.add('sanitizer-new-delete')
self.cxx.compile_flags += ['-O1']
+ if san == 'Address;Undefined' or san == 'Undefined;Address':
+ add_ubsan()
elif san == 'Memory' or san == 'MemoryWithOrigins':
self.cxx.flags += ['-fsanitize=memory']
if san == 'MemoryWithOrigins':
@@ -633,12 +643,8 @@ class Configuration(object):
self.config.available_features.add('sanitizer-new-delete')
self.cxx.compile_flags += ['-O1']
elif san == 'Undefined':
- self.cxx.flags += ['-fsanitize=undefined',
- '-fno-sanitize=vptr,function,float-divide-by-zero',
- '-fno-sanitize-recover=all']
+ add_ubsan()
self.cxx.compile_flags += ['-O2']
- self.env['UBSAN_OPTIONS'] = 'print_stacktrace=1'
- self.config.available_features.add('ubsan')
elif san == 'Thread':
self.cxx.flags += ['-fsanitize=thread']
self.config.available_features.add('tsan')
More information about the cfe-commits
mailing list