Index: lib/tsan/rtl/tsan_platform.h =================================================================== --- lib/tsan/rtl/tsan_platform.h +++ lib/tsan/rtl/tsan_platform.h @@ -316,6 +316,38 @@ static const uptr kVdsoBeg = 0x7800000000000000ull; }; +/* +C/C++ on linux/powerpc64 (47-bit VMA) +0000 0000 1000 - 0100 0000 0000: main binary +0100 0000 0000 - 0200 0000 0000: - +0100 0000 0000 - 1000 0000 0000: shadow +1000 0000 0000 - 1000 0000 0000: - +1000 0000 0000 - 2000 0000 0000: metainfo (memory blocks and sync objects) +2000 0000 0000 - 2000 0000 0000: - +2000 0000 0000 - 2200 0000 0000: traces +2200 0000 0000 - 7d00 0000 0000: - +7d00 0000 0000 - 7e00 0000 0000: heap +7e00 0000 0000 - 7e80 0000 0000: - +7e80 0000 0000 - 8000 0000 0000: modules and main thread stack +*/ +struct Mapping47 { + static const uptr kMetaShadowBeg = 0x100000000000ull; + static const uptr kMetaShadowEnd = 0x200000000000ull; + static const uptr kTraceMemBeg = 0x200000000000ull; + static const uptr kTraceMemEnd = 0x220000000000ull; + static const uptr kShadowBeg = 0x010000000000ull; + static const uptr kShadowEnd = 0x100000000000ull; + static const uptr kHeapMemBeg = 0x7d0000000000ull; + static const uptr kHeapMemEnd = 0x7e0000000000ull; + static const uptr kLoAppMemBeg = 0x000000001000ull; + static const uptr kLoAppMemEnd = 0x010000000000ull; + static const uptr kHiAppMemBeg = 0x7e8000000000ull; + static const uptr kHiAppMemEnd = 0x800000000000ull; // 46 bits + static const uptr kAppMemMsk = 0x7c0000000000ull; + static const uptr kAppMemXor = 0x020000000000ull; + static const uptr kVdsoBeg = 0x7800000000000000ull; +}; + // Indicates the runtime will define the memory regions at runtime. #define TSAN_RUNTIME_VMA 1 #endif @@ -442,11 +474,13 @@ DCHECK(0); return 0; #elif defined(__powerpc64__) - if (vmaSize == 44) - return MappingImpl(); - else - return MappingImpl(); + switch (vmaSize) { + case 44: return MappingImpl(); + case 46: return MappingImpl(); + case 47: return MappingImpl(); + } DCHECK(0); + return 0; #else return MappingImpl(); #endif @@ -595,11 +629,13 @@ DCHECK(0); return false; #elif defined(__powerpc64__) - if (vmaSize == 44) - return IsAppMemImpl(mem); - else - return IsAppMemImpl(mem); + switch (vmaSize) { + case 44: return IsAppMemImpl(mem); + case 46: return IsAppMemImpl(mem); + case 47: return IsAppMemImpl(mem); + } DCHECK(0); + return false; #else return IsAppMemImpl(mem); #endif @@ -622,11 +658,13 @@ DCHECK(0); return false; #elif defined(__powerpc64__) - if (vmaSize == 44) - return IsShadowMemImpl(mem); - else - return IsShadowMemImpl(mem); + switch (vmaSize) { + case 44: return IsShadowMemImpl(mem); + case 46: return IsShadowMemImpl(mem); + case 47: return IsShadowMemImpl(mem); + } DCHECK(0); + return false; #else return IsShadowMemImpl(mem); #endif @@ -649,11 +687,13 @@ DCHECK(0); return false; #elif defined(__powerpc64__) - if (vmaSize == 44) - return IsMetaMemImpl(mem); - else - return IsMetaMemImpl(mem); + switch (vmaSize) { + case 44: return IsMetaMemImpl(mem); + case 46: return IsMetaMemImpl(mem); + case 47: return IsMetaMemImpl(mem); + } DCHECK(0); + return false; #else return IsMetaMemImpl(mem); #endif @@ -686,11 +726,13 @@ DCHECK(0); return 0; #elif defined(__powerpc64__) - if (vmaSize == 44) - return MemToShadowImpl(x); - else - return MemToShadowImpl(x); + switch (vmaSize) { + case 44: return MemToShadowImpl(x); + case 46: return MemToShadowImpl(x); + case 47: return MemToShadowImpl(x); + } DCHECK(0); + return 0; #else return MemToShadowImpl(x); #endif @@ -725,11 +767,13 @@ DCHECK(0); return 0; #elif defined(__powerpc64__) - if (vmaSize == 44) - return MemToMetaImpl(x); - else - return MemToMetaImpl(x); + switch (vmaSize) { + case 44: return MemToMetaImpl(x); + case 46: return MemToMetaImpl(x); + case 47: return MemToMetaImpl(x); + } DCHECK(0); + return 0; #else return MemToMetaImpl(x); #endif @@ -777,11 +821,13 @@ DCHECK(0); return 0; #elif defined(__powerpc64__) - if (vmaSize == 44) - return ShadowToMemImpl(s); - else - return ShadowToMemImpl(s); + switch (vmaSize) { + case 44: return ShadowToMemImpl(s); + case 46: return ShadowToMemImpl(s); + case 47: return ShadowToMemImpl(s); + } DCHECK(0); + return 0; #else return ShadowToMemImpl(s); #endif @@ -812,11 +858,13 @@ DCHECK(0); return 0; #elif defined(__powerpc64__) - if (vmaSize == 44) - return GetThreadTraceImpl(tid); - else - return GetThreadTraceImpl(tid); + switch (vmaSize) { + case 44: return GetThreadTraceImpl(tid); + case 46: return GetThreadTraceImpl(tid); + case 47: return GetThreadTraceImpl(tid); + } DCHECK(0); + return 0; #else return GetThreadTraceImpl(tid); #endif @@ -842,11 +890,13 @@ DCHECK(0); return 0; #elif defined(__powerpc64__) - if (vmaSize == 44) - return GetThreadTraceHeaderImpl(tid); - else - return GetThreadTraceHeaderImpl(tid); + switch (vmaSize) { + case 44: return GetThreadTraceHeaderImpl(tid); + case 46: return GetThreadTraceHeaderImpl(tid); + case 47: return GetThreadTraceHeaderImpl(tid); + } DCHECK(0); + return 0; #else return GetThreadTraceHeaderImpl(tid); #endif