diff options
-rw-r--r-- | lib/asan/asan_mapping.h | 4 | ||||
-rw-r--r-- | lib/asan/asan_report.cc | 4 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_posix.cc | 4 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc | 4 |
4 files changed, 12 insertions, 4 deletions
diff --git a/lib/asan/asan_mapping.h b/lib/asan/asan_mapping.h index 8acc99a1f..68428e1f5 100644 --- a/lib/asan/asan_mapping.h +++ b/lib/asan/asan_mapping.h @@ -87,7 +87,11 @@ static const u64 kDefaultShadowOffset64 = 1ULL << 44; static const u64 kDefaultShort64bitShadowOffset = 0x7FFF8000; // < 2G. static const u64 kAArch64_ShadowOffset64 = 1ULL << 36; static const u64 kMIPS32_ShadowOffset32 = 0x0aaa8000; +#if defined(__powerpc64__) && defined(__BIG_ENDIAN__) static const u64 kPPC64_ShadowOffset64 = 1ULL << 41; +#elif defined(__powerpc64__) && defined(__LITTLE_ENDIAN__) +static const u64 kPPC64_ShadowOffset64 = 1ULL << 43; +#endif static const u64 kFreeBSD_ShadowOffset32 = 1ULL << 30; // 0x40000000 static const u64 kFreeBSD_ShadowOffset64 = 1ULL << 46; // 0x400000000000 diff --git a/lib/asan/asan_report.cc b/lib/asan/asan_report.cc index 7dd1006bf..7e79adb70 100644 --- a/lib/asan/asan_report.cc +++ b/lib/asan/asan_report.cc @@ -437,8 +437,8 @@ bool DescribeAddressIfStack(uptr addr, uptr access_size) { // especially given that the alloca may be from entirely different place // (e.g. use-after-scope, or different thread's stack). StackTrace alloca_stack; -#ifdef __powerpc64__ - // On PowerPC64, the address of a function actually points to a +#if defined(__powerpc64__) and defined(__BIG_ENDIAN__) + // On PowerPC64 ELFv1, the address of a function actually points to a // three-doubleword data structure with the first field containing // the address of the function's code. access.frame_pc = *reinterpret_cast<uptr *>(access.frame_pc); diff --git a/lib/sanitizer_common/sanitizer_posix.cc b/lib/sanitizer_common/sanitizer_posix.cc index 8df1fa72a..c93fbf565 100644 --- a/lib/sanitizer_common/sanitizer_posix.cc +++ b/lib/sanitizer_common/sanitizer_posix.cc @@ -78,13 +78,15 @@ static uptr GetKernelAreaSize() { uptr GetMaxVirtualAddress() { #if SANITIZER_WORDSIZE == 64 -# if defined(__powerpc64__) +# if defined(__powerpc64__) && defined(__BIG_ENDIAN__) // 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. return (1ULL << 44) - 1; // 0x00000fffffffffffUL +# elif defined(__powerpc64__) && defined(__LITTLE_ENDIAN__) + return (1ULL << 46) - 1; // 0x00003fffffffffffUL # elif defined(__aarch64__) return (1ULL << 39) - 1; # else diff --git a/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc b/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc index ec687b04f..dfca52308 100644 --- a/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc +++ b/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc @@ -341,8 +341,10 @@ class LLVMSymbolizerProcess : public SymbolizerProcess { const char* const kSymbolizerArch = "--default-arch=x86_64"; #elif defined(__i386__) const char* const kSymbolizerArch = "--default-arch=i386"; -#elif defined(__powerpc64__) +#elif defined(__powerpc64__) && defined(__BIG_ENDIAN__) const char* const kSymbolizerArch = "--default-arch=powerpc64"; +#elif defined(__powerpc64__) && defined(__LITTLE_ENDIAN__) + const char* const kSymbolizerArch = "--default-arch=powerpc64le"; #else const char* const kSymbolizerArch = "--default-arch=unknown"; #endif |