mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 18:56:43 +00:00
[RISCV][sanitizer] Fix sanitizer support for different virtual memory layout (#66743)
This PR combines the following reviews from Phabricator: * https://reviews.llvm.org/D139823 * https://reviews.llvm.org/D139827 Other related (and merged) reviews are: * https://reviews.llvm.org/D152895 * https://reviews.llvm.org/D152991 * https://reviews.llvm.org/D152990 --------- Co-authored-by: Kito Cheng <kito.cheng@gmail.com>
This commit is contained in:
parent
c68c289984
commit
da0c8b2755
@ -72,7 +72,10 @@
|
||||
// || `[0x2000000000, 0x23ffffffff]` || LowShadow ||
|
||||
// || `[0x0000000000, 0x1fffffffff]` || LowMem ||
|
||||
//
|
||||
// Default Linux/RISCV64 Sv39 mapping:
|
||||
// Default Linux/RISCV64 Sv39 mapping with SHADOW_OFFSET == 0xd55550000;
|
||||
// (the exact location of SHADOW_OFFSET may vary depending the dynamic probing
|
||||
// by FindDynamicShadowStart).
|
||||
//
|
||||
// || `[0x1555550000, 0x3fffffffff]` || HighMem ||
|
||||
// || `[0x0fffffa000, 0x1555555fff]` || HighShadow ||
|
||||
// || `[0x0effffa000, 0x0fffff9fff]` || ShadowGap ||
|
||||
@ -186,7 +189,7 @@
|
||||
# elif SANITIZER_FREEBSD && defined(__aarch64__)
|
||||
# define ASAN_SHADOW_OFFSET_CONST 0x0000800000000000
|
||||
# elif SANITIZER_RISCV64
|
||||
# define ASAN_SHADOW_OFFSET_CONST 0x0000000d55550000
|
||||
# define ASAN_SHADOW_OFFSET_DYNAMIC
|
||||
# elif defined(__aarch64__)
|
||||
# define ASAN_SHADOW_OFFSET_CONST 0x0000001000000000
|
||||
# elif defined(__powerpc64__)
|
||||
|
@ -1109,7 +1109,8 @@ uptr GetMaxVirtualAddress() {
|
||||
# if SANITIZER_NETBSD && defined(__x86_64__)
|
||||
return 0x7f7ffffff000ULL; // (0x00007f8000000000 - PAGE_SIZE)
|
||||
# elif SANITIZER_WORDSIZE == 64
|
||||
# if defined(__powerpc64__) || defined(__aarch64__) || defined(__loongarch__)
|
||||
# if defined(__powerpc64__) || defined(__aarch64__) || \
|
||||
defined(__loongarch__) || SANITIZER_RISCV64
|
||||
// On PowerPC64 we have two different address space layouts: 44- and 46-bit.
|
||||
// We somehow need to figure out which one we are using now and choose
|
||||
// one of 0x00000fffffffffffUL and 0x00003fffffffffffUL.
|
||||
@ -1118,9 +1119,8 @@ uptr GetMaxVirtualAddress() {
|
||||
// This should (does) work for both PowerPC64 Endian modes.
|
||||
// Similarly, aarch64 has multiple address space layouts: 39, 42 and 47-bit.
|
||||
// loongarch64 also has multiple address space layouts: default is 47-bit.
|
||||
// RISC-V 64 also has multiple address space layouts: 39, 48 and 57-bit.
|
||||
return (1ULL << (MostSignificantSetBitIndex(GET_CURRENT_FRAME()) + 1)) - 1;
|
||||
# elif SANITIZER_RISCV64
|
||||
return (1ULL << 38) - 1;
|
||||
# elif SANITIZER_MIPS64
|
||||
return (1ULL << 40) - 1; // 0x000000ffffffffffUL;
|
||||
# elif defined(__s390x__)
|
||||
|
@ -295,8 +295,8 @@
|
||||
// For such platforms build this code with -DSANITIZER_CAN_USE_ALLOCATOR64=0 or
|
||||
// change the definition of SANITIZER_CAN_USE_ALLOCATOR64 here.
|
||||
#ifndef SANITIZER_CAN_USE_ALLOCATOR64
|
||||
# if (SANITIZER_RISCV64 && !SANITIZER_FUCHSIA) || SANITIZER_IOS || \
|
||||
SANITIZER_DRIVERKIT
|
||||
# if (SANITIZER_RISCV64 && !SANITIZER_FUCHSIA && !SANITIZER_LINUX) || \
|
||||
SANITIZER_IOS || SANITIZER_DRIVERKIT
|
||||
# define SANITIZER_CAN_USE_ALLOCATOR64 0
|
||||
# elif defined(__mips64) || defined(__hexagon__)
|
||||
# define SANITIZER_CAN_USE_ALLOCATOR64 0
|
||||
@ -322,7 +322,7 @@
|
||||
# if SANITIZER_FUCHSIA
|
||||
# define SANITIZER_MMAP_RANGE_SIZE (1ULL << 38)
|
||||
# else
|
||||
# define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 47)
|
||||
# define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 56)
|
||||
# endif
|
||||
#elif defined(__aarch64__)
|
||||
# if SANITIZER_APPLE
|
||||
|
@ -108,7 +108,7 @@ static const uint64_t kMIPS32_ShadowOffset32 = 0x0aaa0000;
|
||||
static const uint64_t kMIPS64_ShadowOffset64 = 1ULL << 37;
|
||||
static const uint64_t kAArch64_ShadowOffset64 = 1ULL << 36;
|
||||
static const uint64_t kLoongArch64_ShadowOffset64 = 1ULL << 46;
|
||||
static const uint64_t kRISCV64_ShadowOffset64 = 0xd55550000;
|
||||
static const uint64_t kRISCV64_ShadowOffset64 = kDynamicShadowSentinel;
|
||||
static const uint64_t kFreeBSD_ShadowOffset32 = 1ULL << 30;
|
||||
static const uint64_t kFreeBSD_ShadowOffset64 = 1ULL << 46;
|
||||
static const uint64_t kFreeBSDAArch64_ShadowOffset64 = 1ULL << 47;
|
||||
|
Loading…
x
Reference in New Issue
Block a user