diff options
author | Kirill Stoimenov <kstoimenov@google.com> | 2021-12-07 22:17:58 +0000 |
---|---|---|
committer | Kirill Stoimenov <kstoimenov@google.com> | 2021-12-07 22:19:50 +0000 |
commit | 36529a28c7af078fc88e7236f9a0856bb6d44396 (patch) | |
tree | e2fbb87ed7aaba91f310a3cb76a22119a1b092ce | |
parent | e4800fc099ad204f88c432276e6488772042bffc (diff) | |
download | llvm-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.txt | 19 | ||||
-rw-r--r-- | compiler-rt/lib/asan/asan_mapping.h | 9 | ||||
-rw-r--r-- | compiler-rt/lib/asan/tests/CMakeLists.txt | 2 | ||||
-rw-r--r-- | compiler-rt/lib/asan/tests/asan_interface_test.cpp | 2 |
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 |