| Index: build/common.gypi
|
| diff --git a/build/common.gypi b/build/common.gypi
|
| index aca6efd95a3f06e2727d56d11dff5c612521c6a3..04a5c5af31b64994ac731c019c6dd73a9862b4dc 100644
|
| --- a/build/common.gypi
|
| +++ b/build/common.gypi
|
| @@ -391,6 +391,11 @@
|
| # See http://clang.llvm.org/docs/UsersManual.html
|
| 'ubsan%': 0,
|
|
|
| + # Enable building with UBsan's vptr (Clang's -fsanitize=vptr -fsanitize=null options).
|
| + # -fsanitize=vptr only works with clang, but ubsan_vptr=1 implies clang=1
|
| + 'ubsan_vptr%': 0,
|
| + 'ubsan_vptr_blacklist%': '<(PRODUCT_DIR)/../../tools/ubsan_vptr/blacklist.txt',
|
| +
|
| # Use the dynamic libraries instrumented by one of the sanitizers
|
| # instead of the standard system libraries.
|
| 'use_instrumented_libraries%': 0,
|
| @@ -1066,6 +1071,8 @@
|
| 'tsan%': '<(tsan)',
|
| 'tsan_blacklist%': '<(tsan_blacklist)',
|
| 'ubsan%': '<(ubsan)',
|
| + 'ubsan_vptr%': '<(ubsan_vptr)',
|
| + 'ubsan_vptr_blacklist%': '<(ubsan_vptr_blacklist)',
|
| 'use_instrumented_libraries%': '<(use_instrumented_libraries)',
|
| 'use_custom_libcxx%': '<(use_custom_libcxx)',
|
| 'clang_type_profiler%': '<(clang_type_profiler)',
|
| @@ -1456,7 +1463,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 and ubsan==0', {
|
| + ['clang==0 and asan==0 and lsan==0 and tsan==0 and msan==0 and ubsan==0 and ubsan_vptr==0', {
|
| 'binutils_version%': '<!pymod_do_main(compiler_version target assembler)',
|
| }],
|
| # On Android we know the binutils version in the toolchain.
|
| @@ -1482,7 +1489,7 @@
|
| # platforms except Windows, Mac and iOS.
|
| # TODO(glider): set clang to 1 earlier for ASan and TSan builds so that
|
| # it takes effect here.
|
| - ['os_posix==1 and OS!="mac" and OS!="ios" and clang==0 and asan==0 and lsan==0 and tsan==0 and msan==0', {
|
| + ['os_posix==1 and OS!="mac" and OS!="ios" and clang==0 and asan==0 and lsan==0 and tsan==0 and msan==0 and ubsan_vptr==0', {
|
| 'conditions': [
|
| ['OS=="android"', {
|
| # We directly set the gcc versions since we know what we use.
|
| @@ -2046,7 +2053,6 @@
|
| '<!@(<(DEPTH)/tools/clang/scripts/plugin_flags.sh)'
|
| ],
|
| }],
|
| -
|
| ['asan==1 or msan==1 or lsan==1 or tsan==1', {
|
| 'clang%': 1,
|
| 'use_allocator%': 'none',
|
| @@ -2054,6 +2060,9 @@
|
| ['ubsan==1', {
|
| 'clang%': 1,
|
| }],
|
| + ['ubsan_vptr==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.
|
| @@ -2517,7 +2526,7 @@
|
| 'GCC_GENERATE_DEBUGGING_SYMBOLS': 'NO',
|
| },
|
| 'conditions': [
|
| - ['clang==1 and asan==0 and msan==0 and tsan==0', {
|
| + ['clang==1 and asan==0 and msan==0 and tsan==0 and ubsan_vptr==0', {
|
| # Clang creates chubby debug information, which makes linking very
|
| # slow. For now, don't create debug information with clang. See
|
| # http://crbug.com/70000
|
| @@ -3852,7 +3861,7 @@
|
| }],
|
| # Common options for AddressSanitizer, LeakSanitizer,
|
| # ThreadSanitizer and MemorySanitizer.
|
| - ['asan==1 or lsan==1 or tsan==1 or msan==1 or ubsan==1', {
|
| + ['asan==1 or lsan==1 or tsan==1 or msan==1 or ubsan==1 or ubsan_vptr==1', {
|
| 'target_conditions': [
|
| ['_toolset=="target"', {
|
| 'cflags': [
|
| @@ -3925,6 +3934,30 @@
|
| }],
|
| ],
|
| }],
|
| + ['ubsan_vptr==1', {
|
| + 'target_conditions': [
|
| + ['_toolset=="target"', {
|
| + 'cflags': [
|
| + '-fsanitize=vptr',
|
| + '-fsanitize=null', # Avoid dereferences on null pointer objects.
|
| + '-fsanitize-blacklist=<(ubsan_vptr_blacklist)',
|
| + '-w', # http://crbug.com/162783
|
| + ],
|
| + 'cflags_cc!': [
|
| + '-fno-rtti',
|
| + ],
|
| + 'cflags!': [
|
| + '-fno-rtti',
|
| + ],
|
| + 'ldflags': [
|
| + '-fsanitize=vptr', # -fsanitize=null is not necessary.
|
| + ],
|
| + 'defines': [
|
| + 'UNDEFINED_SANITIZER',
|
| + ],
|
| + }],
|
| + ],
|
| + }],
|
| ['asan_coverage!=0', {
|
| 'target_conditions': [
|
| ['_toolset=="target"', {
|
|
|