https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64435
--- Comment #17 from Jakub Jelinek <jakub at gcc dot gnu.org> --- PPC64 actually supports both 44 and 46 bit address space: uptr GetMaxVirtualAddress() { #if SANITIZER_WORDSIZE == 64 # if defined(__powerpc64__) // 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. // Note that with 'ulimit -s unlimited' the stack is moved away from the top // of the address space, so simply checking the stack address is not enough. // This should (does) work for both PowerPC64 Endian modes. return (1ULL << (MostSignificantSetBitIndex(GET_CURRENT_FRAME()) + 1)) - 1; # elif defined(__aarch64__) return (1ULL << 39) - 1; # elif defined(__mips64) return (1ULL << 40) - 1; # else return (1ULL << 47) - 1; // 0x00007fffffffffffUL; # endif #else // SANITIZER_WORDSIZE == 32 uptr res = (1ULL << 32) - 1; // 0xffffffff; if (!common_flags()->full_address_space) res -= GetKernelAreaSize(); CHECK_LT(reinterpret_cast<uptr>(&res), res); return res; #endif // SANITIZER_WORDSIZE } it is just that aarch64 hardcodes this right now. Suppose doing something like ppc64 does could work.