summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWalter Lee <waltl@google.com>2017-11-13 14:02:27 +0000
committerWalter Lee <waltl@google.com>2017-11-13 14:02:27 +0000
commitf8005d62ca3331389e2bb9489710e177ba94da74 (patch)
tree4b23b3724779ccbb9a6618bf2c6119d308215a84
parent1ad28c758255a9594220c5210bbc6fed26e6da07 (diff)
[asan] Add CMake hook to override shadow scale in compiler_rt
Allow user to override shadow scale in compiler_rt by passing -DCOMPILER_RT_ASAN_SHADOW_SCALE=n to CMake. Propagate the override shadow scale value via a compiler define to compiler-rt and asan tests. Tests will use the define to partially disable unsupported tests. Set "-mllvm -asan-mapping-scale=<n>" for compiler_rt tests. Differential Revision: https://reviews.llvm.org/D39469 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@318038 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--CMakeLists.txt19
-rw-r--r--lib/asan/CMakeLists.txt1
-rw-r--r--lib/asan/asan_mapping.h4
-rw-r--r--lib/asan/tests/CMakeLists.txt2
-rw-r--r--test/lit.common.cfg4
-rw-r--r--test/lit.common.configured.in1
6 files changed, 31 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index adb40f292..efb14b1e8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -43,6 +43,25 @@ mark_as_advanced(COMPILER_RT_BUILD_PROFILE)
option(COMPILER_RT_BUILD_XRAY_NO_PREINIT "Build xray with no preinit patching" OFF)
mark_as_advanced(COMPILER_RT_BUILD_XRAY_NO_PREINIT)
+set(COMPILER_RT_ASAN_SHADOW_SCALE ""
+ CACHE STRING "Override the shadow scale to be used in ASan runtime")
+
+if (NOT COMPILER_RT_ASAN_SHADOW_SCALE STREQUAL "")
+ # Check that the shadow scale value is valid.
+ if (NOT (COMPILER_RT_ASAN_SHADOW_SCALE GREATER -1 AND
+ COMPILER_RT_ASAN_SHADOW_SCALE LESS 8))
+ message(FATAL_ERROR "
+ Invalid ASan Shadow Scale '${COMPILER_RT_ASAN_SHADOW_SCALE}'.")
+ endif()
+
+ set(COMPILER_RT_ASAN_SHADOW_SCALE_LLVM_FLAG
+ -mllvm -asan-mapping-scale=${COMPILER_RT_ASAN_SHADOW_SCALE})
+ set(COMPILER_RT_ASAN_SHADOW_SCALE_DEFINITION
+ ASAN_SHADOW_SCALE=${COMPILER_RT_ASAN_SHADOW_SCALE})
+ set(COMPILER_RT_ASAN_SHADOW_SCALE_FLAG
+ -D${COMPILER_RT_ASAN_SHADOW_SCALE_DEFINITION})
+endif()
+
set(COMPILER_RT_BAREMETAL_BUILD OFF CACHE BOOLEAN
"Build for a bare-metal target.")
diff --git a/lib/asan/CMakeLists.txt b/lib/asan/CMakeLists.txt
index 9291e7109..da82e485b 100644
--- a/lib/asan/CMakeLists.txt
+++ b/lib/asan/CMakeLists.txt
@@ -40,6 +40,7 @@ set(ASAN_PREINIT_SOURCES
include_directories(..)
set(ASAN_CFLAGS ${SANITIZER_COMMON_CFLAGS})
+set(ASAN_COMMON_DEFINITIONS ${COMPILER_RT_ASAN_SHADOW_SCALE_DEFINITION})
append_rtti_flag(OFF ASAN_CFLAGS)
diff --git a/lib/asan/asan_mapping.h b/lib/asan/asan_mapping.h
index febe090e2..c1e965c7a 100644
--- a/lib/asan/asan_mapping.h
+++ b/lib/asan/asan_mapping.h
@@ -131,7 +131,11 @@
// || `[0x30000000, 0x35ffffff]` || LowShadow ||
// || `[0x00000000, 0x2fffffff]` || LowMem ||
+#if defined(ASAN_SHADOW_SCALE)
+static const u64 kDefaultShadowScale = ASAN_SHADOW_SCALE;
+#else
static const u64 kDefaultShadowScale = 3;
+#endif
static const u64 kDefaultShadowSentinel = ~(uptr)0;
static const u64 kDefaultShadowOffset32 = 1ULL << 29; // 0x20000000
static const u64 kDefaultShadowOffset64 = 1ULL << 44;
diff --git a/lib/asan/tests/CMakeLists.txt b/lib/asan/tests/CMakeLists.txt
index 40732080f..67a8fafab 100644
--- a/lib/asan/tests/CMakeLists.txt
+++ b/lib/asan/tests/CMakeLists.txt
@@ -23,6 +23,7 @@ set(ASAN_UNITTEST_HEADERS
set(ASAN_UNITTEST_COMMON_CFLAGS
${COMPILER_RT_UNITTEST_CFLAGS}
${COMPILER_RT_GTEST_CFLAGS}
+ ${COMPILER_RT_ASAN_SHADOW_SCALE_LLVM_FLAG}
-I${COMPILER_RT_SOURCE_DIR}/include
-I${COMPILER_RT_SOURCE_DIR}/lib
-I${COMPILER_RT_SOURCE_DIR}/lib/asan
@@ -52,6 +53,7 @@ list(APPEND ASAN_UNITTEST_COMMON_LINK_FLAGS -g)
# Use -D instead of definitions to please custom compile command.
list(APPEND ASAN_UNITTEST_COMMON_CFLAGS
+ ${COMPILER_RT_ASAN_SHADOW_SCALE_FLAG}
-DASAN_HAS_BLACKLIST=1
-DASAN_HAS_EXCEPTIONS=1
-DASAN_UAR=0)
diff --git a/test/lit.common.cfg b/test/lit.common.cfg
index af4bf007c..4b33bb033 100644
--- a/test/lit.common.cfg
+++ b/test/lit.common.cfg
@@ -46,6 +46,10 @@ else:
# Add compiler ID to the list of available features.
config.available_features.add(compiler_id)
+# If needed, add cflag for shadow scale.
+if config.asan_shadow_scale != '':
+ config.target_cflags += " -mllvm -asan-mapping-scale=" + config.asan_shadow_scale
+
# BFD linker in 64-bit android toolchains fails to find libm.so, which is a
# transitive shared library dependency (via asan runtime).
if config.android:
diff --git a/test/lit.common.configured.in b/test/lit.common.configured.in
index c39a2e4af..e2da4cc9b 100644
--- a/test/lit.common.configured.in
+++ b/test/lit.common.configured.in
@@ -25,6 +25,7 @@ set_default("python_executable", "@PYTHON_EXECUTABLE@")
set_default("compiler_rt_debug", @COMPILER_RT_DEBUG_PYBOOL@)
set_default("compiler_rt_libdir", "@COMPILER_RT_RESOLVED_LIBRARY_OUTPUT_DIR@")
set_default("emulator", "@COMPILER_RT_EMULATOR@")
+set_default("asan_shadow_scale", "@COMPILER_RT_ASAN_SHADOW_SCALE@")
set_default("ios", False)
set_default("iossim", False)
set_default("sanitizer_can_use_cxxabi", @SANITIZER_CAN_USE_CXXABI_PYBOOL@)