diff --git a/compiler-rt/lib/asan/asan_allocator.h b/compiler-rt/lib/asan/asan_allocator.h index 247d8bb77c984..7dfb055c4f4b7 100644 --- a/compiler-rt/lib/asan/asan_allocator.h +++ b/compiler-rt/lib/asan/asan_allocator.h @@ -198,7 +198,11 @@ const uptr kAllocatorSpace = ~(uptr)0; # endif // SANITIZER_APPLE # if defined(__powerpc64__) +# if SANITIZER_AIX +const uptr kAllocatorSize = 1ULL << 38; // 256G. +# else const uptr kAllocatorSize = 0x20000000000ULL; // 2T. +# endif typedef DefaultSizeClassMap SizeClassMap; # elif defined(__aarch64__) && SANITIZER_ANDROID // Android needs to support 39, 42 and 48 bit VMA. diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h b/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h index 602b197c42ae3..0faf9b3c151a4 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h @@ -288,6 +288,7 @@ class SizeClassAllocator32 { uptr ComputeRegionId(uptr mem) const { if (SANITIZER_SIGN_EXTENDED_ADDRESSES) mem &= (kSpaceSize - 1); + mem -= kSpaceBeg; const uptr res = mem >> kRegionSizeLog; CHECK_LT(res, kNumPossibleRegions); return res; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h index 196c0a988478e..71bc80e87e3f7 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h @@ -319,7 +319,11 @@ #endif // The first address that can be returned by mmap. -#define SANITIZER_MMAP_BEGIN 0 +#if SANITIZER_AIX && SANITIZER_WORDSIZE == 64 +# define SANITIZER_MMAP_BEGIN 0x0a00000000000000ULL +#else +# define SANITIZER_MMAP_BEGIN 0 +#endif // The range of addresses which can be returned my mmap. // FIXME: this value should be different on different platforms. Larger values