Index: build/common.gypi |
diff --git a/build/common.gypi b/build/common.gypi |
index 0e9cdea0e66f2aabed661709c88fefc7db7fdf71..3c969be8a4086b48af5db489c506b66ca58a07aa 100644 |
--- a/build/common.gypi |
+++ b/build/common.gypi |
@@ -362,18 +362,23 @@ |
# See https://sites.google.com/a/chromium.org/dev/developers/testing/leaksanitizer |
'lsan%': 0, |
- # Enable building with TSAN (Clang's -fsanitize=thread option). |
+ # Enable building with TSan (Clang's -fsanitize=thread option). |
# -fsanitize=thread only works with clang, but tsan=1 implies clang=1 |
# See http://clang.llvm.org/docs/ThreadSanitizer.html |
'tsan%': 0, |
'tsan_blacklist%': '<(PRODUCT_DIR)/../../tools/valgrind/tsan_v2/ignores.txt', |
- # Enable building with MSAN (Clang's -fsanitize=memory option). |
+ # Enable building with MSan (Clang's -fsanitize=memory option). |
# MemorySanitizer only works with clang, but msan=1 implies clang=1 |
# See http://clang.llvm.org/docs/MemorySanitizer.html |
'msan%': 0, |
'msan_blacklist%': '<(PRODUCT_DIR)/../../tools/msan/blacklist.txt', |
+ # Enable building with UBSan (Clang's -fsanitize=undefined option). |
+ # -fsanitize=undefined only works with clang, but ubsan=1 implies clang=1 |
+ # See http://clang.llvm.org/docs/UsersManual.html |
+ 'ubsan%': 0, |
+ |
# Use the dynamic libraries instrumented by one of the sanitizers |
# instead of the standard system libraries. |
'use_instrumented_libraries%': 0, |
@@ -1042,6 +1047,7 @@ |
'msan_blacklist%': '<(msan_blacklist)', |
'tsan%': '<(tsan)', |
'tsan_blacklist%': '<(tsan_blacklist)', |
+ 'ubsan%': '<(ubsan)', |
'use_instrumented_libraries%': '<(use_instrumented_libraries)', |
'use_custom_libcxx%': '<(use_custom_libcxx)', |
'clang_type_profiler%': '<(clang_type_profiler)', |
@@ -1429,7 +1435,7 @@ |
# compiler_version works with clang. |
# TODO(glider): set clang to 1 earlier for ASan and TSan builds so |
# that it takes effect here. |
- ['clang==0 and asan==0 and lsan==0 and tsan==0 and msan==0', { |
+ ['clang==0 and asan==0 and lsan==0 and tsan==0 and msan==0 and ubsan==0', { |
'binutils_version%': '<!pymod_do_main(compiler_version target assembler)', |
}], |
# On Android we know the binutils version in the toolchain. |
@@ -2018,6 +2024,9 @@ |
'clang%': 1, |
'use_allocator%': 'none', |
}], |
+ ['ubsan==1', { |
+ 'clang%': 1, |
+ }], |
['asan==1 and OS=="mac"', { |
# TODO(glider): we do not strip ASan binaries until the dynamic ASan |
# runtime is fully adopted. See http://crbug.com/242503. |
@@ -3781,7 +3790,7 @@ |
}], |
# Common options for AddressSanitizer, LeakSanitizer, |
# ThreadSanitizer and MemorySanitizer. |
- ['asan==1 or lsan==1 or tsan==1 or msan==1', { |
+ ['asan==1 or lsan==1 or tsan==1 or msan==1 or ubsan==1', { |
'target_conditions': [ |
['_toolset=="target"', { |
'cflags': [ |
@@ -3791,6 +3800,12 @@ |
'cflags!': [ |
'-fomit-frame-pointer', |
], |
+ }], |
+ ], |
+ }], |
+ ['asan==1 or lsan==1 or tsan==1 or msan==1', { |
+ 'target_conditions': [ |
+ ['_toolset=="target"', { |
'ldflags!': [ |
# Functions interposed by the sanitizers can make ld think |
# that some libraries aren't needed when they actually are, |
@@ -3831,6 +3846,23 @@ |
}], |
], |
}], |
+ ['ubsan==1', { |
+ 'target_conditions': [ |
+ ['_toolset=="target"', { |
+ 'cflags': [ |
+ '-fsanitize=undefined', |
+ # -fsanitize=vptr is incompatible with -fno-rtti. |
+ '-fno-sanitize=vptr', |
+ '-w', # http://crbug.com/162783 |
+ ], |
+ 'ldflags': [ |
+ '-fsanitize=undefined', |
+ # -fsanitize=vptr is incompatible with -fno-rtti. |
+ '-fno-sanitize=vptr', |
+ ], |
+ }], |
+ ], |
+ }], |
['asan_coverage!=0', { |
'target_conditions': [ |
['_toolset=="target"', { |