forked from OSchip/llvm-project
[MSAN][MIPS] Changed memory mapping to support pie executable.
Reviewed by eugenis Differential: D22993 llvm-svn: 278793
This commit is contained in:
parent
b143e31164
commit
49307c0297
|
@ -42,15 +42,27 @@ struct MappingDesc {
|
|||
|
||||
#if SANITIZER_LINUX && defined(__mips64)
|
||||
|
||||
// Everything is above 0x00e000000000.
|
||||
// MIPS64 maps:
|
||||
// - 0x0000000000-0x0200000000: Program own segments
|
||||
// - 0xa200000000-0xc000000000: PIE program segments
|
||||
// - 0xe200000000-0xffffffffff: libraries segments.
|
||||
const MappingDesc kMemoryLayout[] = {
|
||||
{0x000000000000ULL, 0x00a000000000ULL, MappingDesc::INVALID, "invalid"},
|
||||
{0x00a000000000ULL, 0x00c000000000ULL, MappingDesc::SHADOW, "shadow"},
|
||||
{0x00c000000000ULL, 0x00e000000000ULL, MappingDesc::ORIGIN, "origin"},
|
||||
{0x00e000000000ULL, 0x010000000000ULL, MappingDesc::APP, "app"}};
|
||||
{0x000000000000ULL, 0x000200000000ULL, MappingDesc::APP, "app-1"},
|
||||
{0x000200000000ULL, 0x002200000000ULL, MappingDesc::INVALID, "invalid"},
|
||||
{0x002200000000ULL, 0x004000000000ULL, MappingDesc::SHADOW, "shadow-2"},
|
||||
{0x004000000000ULL, 0x004200000000ULL, MappingDesc::INVALID, "invalid"},
|
||||
{0x004200000000ULL, 0x006000000000ULL, MappingDesc::ORIGIN, "origin-2"},
|
||||
{0x006000000000ULL, 0x006200000000ULL, MappingDesc::INVALID, "invalid"},
|
||||
{0x006200000000ULL, 0x008000000000ULL, MappingDesc::SHADOW, "shadow-3"},
|
||||
{0x008000000000ULL, 0x008200000000ULL, MappingDesc::SHADOW, "shadow-1"},
|
||||
{0x008200000000ULL, 0x00a000000000ULL, MappingDesc::ORIGIN, "origin-3"},
|
||||
{0x00a000000000ULL, 0x00a200000000ULL, MappingDesc::ORIGIN, "origin-1"},
|
||||
{0x00a200000000ULL, 0x00c000000000ULL, MappingDesc::APP, "app-2"},
|
||||
{0x00c000000000ULL, 0x00e200000000ULL, MappingDesc::INVALID, "invalid"},
|
||||
{0x00e200000000ULL, 0x00ffffffffffULL, MappingDesc::APP, "app-3"}};
|
||||
|
||||
#define MEM_TO_SHADOW(mem) (((uptr)(mem)) & ~0x4000000000ULL)
|
||||
#define SHADOW_TO_ORIGIN(shadow) (((uptr)(shadow)) + 0x002000000000)
|
||||
#define MEM_TO_SHADOW(mem) (((uptr)(mem)) ^ 0x8000000000ULL)
|
||||
#define SHADOW_TO_ORIGIN(shadow) (((uptr)(shadow)) + 0x2000000000ULL)
|
||||
|
||||
#elif SANITIZER_LINUX && defined(__aarch64__)
|
||||
|
||||
|
|
|
@ -19,7 +19,9 @@ bool AddrIsApp(void *p) {
|
|||
(addr >= 0x510000000000ULL && addr < 0x600000000000ULL) ||
|
||||
(addr >= 0x700000000000ULL && addr < 0x800000000000ULL);
|
||||
#elif defined(__mips64)
|
||||
return addr >= 0x00e000000000ULL;
|
||||
return (addr >= 0x0000000000ULL && addr <= 0x0200000000ULL) ||
|
||||
(addr >= 0xa200000000ULL && addr <= 0xc000000000ULL) ||
|
||||
addr >= 0xe200000000ULL;
|
||||
#elif defined(__powerpc64__)
|
||||
return addr < 0x000100000000ULL || addr >= 0x300000000000ULL;
|
||||
#elif defined(__aarch64__)
|
||||
|
|
|
@ -14,7 +14,7 @@ const char *mem_to_shadow(const char *p) {
|
|||
#if defined(__x86_64__)
|
||||
return (char *)((uintptr_t)p ^ 0x500000000000ULL);
|
||||
#elif defined (__mips64)
|
||||
return (char *)((uintptr_t)p & ~0x4000000000ULL);
|
||||
return (char *)((uintptr_t)p ^ 0x8000000000ULL);
|
||||
#elif defined(__powerpc64__)
|
||||
#define LINEARIZE_MEM(mem) \
|
||||
(((uintptr_t)(mem) & ~0x200000000000ULL) ^ 0x100000000000ULL)
|
||||
|
|
Loading…
Reference in New Issue