summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirill Stoimenov <kstoimenov@google.com>2021-12-07 22:17:58 +0000
committerKirill Stoimenov <kstoimenov@google.com>2021-12-07 22:19:50 +0000
commit36529a28c7af078fc88e7236f9a0856bb6d44396 (patch)
treee2fbb87ed7aaba91f310a3cb76a22119a1b092ce
parente4800fc099ad204f88c432276e6488772042bffc (diff)
downloadllvm-36529a28c7af078fc88e7236f9a0856bb6d44396.tar.gz
Revert "[ASan] Removed ASAN_SHADOW_SCALE."
This reverts commit e4800fc099ad204f88c432276e6488772042bffc. Reviewed By: kstoimenov Differential Revision: https://reviews.llvm.org/D115286
-rw-r--r--compiler-rt/CMakeLists.txt19
-rw-r--r--compiler-rt/lib/asan/asan_mapping.h9
-rw-r--r--compiler-rt/lib/asan/tests/CMakeLists.txt2
-rw-r--r--compiler-rt/lib/asan/tests/asan_interface_test.cpp2
4 files changed, 30 insertions, 2 deletions
diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt
index bcab7e006108..a8c58069ce4e 100644
--- a/compiler-rt/CMakeLists.txt
+++ b/compiler-rt/CMakeLists.txt
@@ -52,6 +52,25 @@ mark_as_advanced(COMPILER_RT_BUILD_ORC)
option(COMPILER_RT_BUILD_GWP_ASAN "Build GWP-ASan, and link it into SCUDO" ON)
mark_as_advanced(COMPILER_RT_BUILD_GWP_ASAN)
+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()
+
if(FUCHSIA)
set(COMPILER_RT_HWASAN_WITH_INTERCEPTORS_DEFAULT OFF)
else()
diff --git a/compiler-rt/lib/asan/asan_mapping.h b/compiler-rt/lib/asan/asan_mapping.h
index 42751390669d..5e73caa61bf9 100644
--- a/compiler-rt/lib/asan/asan_mapping.h
+++ b/compiler-rt/lib/asan/asan_mapping.h
@@ -151,10 +151,15 @@
// || `[0x30000000, 0x35ffffff]` || LowShadow ||
// || `[0x00000000, 0x2fffffff]` || LowMem ||
-#define SHADOW_SCALE 3
-
+#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;
+#define SHADOW_SCALE kDefaultShadowScale
+
#if SANITIZER_FUCHSIA
# define SHADOW_OFFSET_CONST (0)
#elif SANITIZER_WORDSIZE == 32
diff --git a/compiler-rt/lib/asan/tests/CMakeLists.txt b/compiler-rt/lib/asan/tests/CMakeLists.txt
index cc375acf2dfb..1a77d89469b9 100644
--- a/compiler-rt/lib/asan/tests/CMakeLists.txt
+++ b/compiler-rt/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
@@ -51,6 +52,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_IGNORELIST=1
-DASAN_HAS_EXCEPTIONS=1
-DASAN_UAR=0
diff --git a/compiler-rt/lib/asan/tests/asan_interface_test.cpp b/compiler-rt/lib/asan/tests/asan_interface_test.cpp
index 6ea04191d789..47cbf0e8927f 100644
--- a/compiler-rt/lib/asan/tests/asan_interface_test.cpp
+++ b/compiler-rt/lib/asan/tests/asan_interface_test.cpp
@@ -160,6 +160,7 @@ TEST(AddressSanitizerInterface, DeathCallbackTest) {
#define BAD_ACCESS(ptr, offset) \
EXPECT_TRUE(__asan_address_is_poisoned(ptr + offset))
+#if !defined(ASAN_SHADOW_SCALE) || ASAN_SHADOW_SCALE == 3
static const char* kUseAfterPoisonErrorMessage = "use-after-poison";
TEST(AddressSanitizerInterface, SimplePoisonMemoryRegionTest) {
@@ -199,6 +200,7 @@ TEST(AddressSanitizerInterface, OverlappingPoisonMemoryRegionTest) {
BAD_ACCESS(array, 96);
free(array);
}
+#endif // !defined(ASAN_SHADOW_SCALE) || ASAN_SHADOW_SCALE == 3
TEST(AddressSanitizerInterface, PushAndPopWithPoisoningTest) {
// Vector of capacity 20