diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt index a9e8899f8ae0c..1f0f21afbbd6d 100644 --- a/compiler-rt/CMakeLists.txt +++ b/compiler-rt/CMakeLists.txt @@ -290,6 +290,9 @@ option(SANITIZER_USE_STATIC_TEST_CXX "Use static libc++ for tests." ${DEFAULT_SANITIZER_USE_STATIC_TEST_CXX}) pythonize_bool(SANITIZER_USE_STATIC_TEST_CXX) +option(SANITIZER_AARCH64_39BIT_VA + "Configure sanitizer allocator for 39-bit VA kernel." OFF) + set(COMPILER_RT_SUPPORTED_CXX_LIBRARIES none default libcxx) set(COMPILER_RT_CXX_LIBRARY "default" CACHE STRING "Specify C++ library to use. Supported values are ${COMPILER_RT_SUPPORTED_CXX_LIBRARIES}.") if (NOT "${COMPILER_RT_CXX_LIBRARY}" IN_LIST COMPILER_RT_SUPPORTED_CXX_LIBRARIES) @@ -843,6 +846,10 @@ if (SANITIZER_DISABLE_SYMBOLIZER_PATH_SEARCH) add_compile_definitions(SANITIZER_DISABLE_SYMBOLIZER_PATH_SEARCH) endif() +if (SANITIZER_AARCH64_39BIT_VA) + add_compile_definitions(SANITIZER_AARCH64_39BIT_VA) +endif() + add_subdirectory(lib) if(COMPILER_RT_INCLUDE_TESTS) diff --git a/compiler-rt/lib/asan/asan_allocator.h b/compiler-rt/lib/asan/asan_allocator.h index fdf456473fb02..e2ec877696c0a 100644 --- a/compiler-rt/lib/asan/asan_allocator.h +++ b/compiler-rt/lib/asan/asan_allocator.h @@ -200,7 +200,7 @@ const uptr kAllocatorSpace = ~(uptr)0; # if defined(__powerpc64__) const uptr kAllocatorSize = 0x20000000000ULL; // 2T. typedef DefaultSizeClassMap SizeClassMap; -# elif defined(__aarch64__) && SANITIZER_ANDROID +# elif defined(__aarch64__) && (SANITIZER_ANDROID || defined(SANITIZER_AARCH64_39BIT_VA)) // Android needs to support 39, 42 and 48 bit VMA. const uptr kAllocatorSize = 0x2000000000ULL; // 128G. typedef VeryCompactSizeClassMap SizeClassMap; diff --git a/compiler-rt/lib/hwasan/hwasan_allocator.h b/compiler-rt/lib/hwasan/hwasan_allocator.h index 2ada2a0b1851a..94fd7b2f7467b 100644 --- a/compiler-rt/lib/hwasan/hwasan_allocator.h +++ b/compiler-rt/lib/hwasan/hwasan_allocator.h @@ -74,7 +74,7 @@ struct AP64 { #if defined(HWASAN_ALIASING_MODE) static const uptr kSpaceSize = 1ULL << kAddressTagShift; typedef __sanitizer::DefaultSizeClassMap SizeClassMap; -#elif SANITIZER_LINUX && !SANITIZER_ANDROID +#elif SANITIZER_LINUX && !SANITIZER_ANDROID && !defined(SANITIZER_AARCH64_39BIT_VA) static const uptr kSpaceSize = 0x40000000000ULL; // 4T. typedef __sanitizer::DefaultSizeClassMap SizeClassMap; #else