Index: compiler-rt/lib/msan/msan.h =================================================================== --- compiler-rt/lib/msan/msan.h +++ compiler-rt/lib/msan/msan.h @@ -72,88 +72,48 @@ // - 0x0007f80000000-0x0007fffffffff: 39-bits libraries segments // - 0x002aa00000000-0x002ab00000000: 42-bits PIE program segments // - 0x003ff00000000-0x003ffffffffff: 42-bits libraries segments -// - 0x0aaaaa0000000-0x0aaab00000000: 48-bits PIE program segments -// - 0xffff000000000-0x1000000000000: 48-bits libraries segments -// It is fragmented in multiples segments to increase the memory available -// on 42-bits (12.21% of total VMA available for 42-bits and 13.28 for -// 39 bits). The 48-bits segments only cover the usual PIE/default segments -// plus some more segments (262144GB total, 0.39% total VMA). +// - 0x0aaa000000000-0x0aab000000000: 48-bits PIE program segments +// - 0xff00000000000-0x1000000000000: 48-bits libraries segments +// The 48-bits segments only cover the usual PIE/default segments +// plus some more segments (262144GB total, 0.51% total VMA). const MappingDesc kMemoryLayout[] = { - {0x00000000000ULL, 0x01000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x01000000000ULL, 0x02000000000ULL, MappingDesc::SHADOW, "shadow-2"}, - {0x02000000000ULL, 0x03000000000ULL, MappingDesc::ORIGIN, "origin-2"}, - {0x03000000000ULL, 0x04000000000ULL, MappingDesc::SHADOW, "shadow-1"}, - {0x04000000000ULL, 0x05000000000ULL, MappingDesc::ORIGIN, "origin-1"}, - {0x05000000000ULL, 0x06000000000ULL, MappingDesc::APP, "app-1"}, - {0x06000000000ULL, 0x07000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x07000000000ULL, 0x08000000000ULL, MappingDesc::APP, "app-2"}, - {0x08000000000ULL, 0x09000000000ULL, MappingDesc::INVALID, "invalid"}, - // The mappings below are used only for 42-bits VMA. - {0x09000000000ULL, 0x0A000000000ULL, MappingDesc::SHADOW, "shadow-3"}, - {0x0A000000000ULL, 0x0B000000000ULL, MappingDesc::ORIGIN, "origin-3"}, - {0x0B000000000ULL, 0x0F000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x0F000000000ULL, 0x10000000000ULL, MappingDesc::APP, "app-3"}, - {0x10000000000ULL, 0x11000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x11000000000ULL, 0x12000000000ULL, MappingDesc::APP, "app-4"}, - {0x12000000000ULL, 0x17000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x17000000000ULL, 0x18000000000ULL, MappingDesc::SHADOW, "shadow-4"}, - {0x18000000000ULL, 0x19000000000ULL, MappingDesc::ORIGIN, "origin-4"}, - {0x19000000000ULL, 0x20000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x20000000000ULL, 0x21000000000ULL, MappingDesc::APP, "app-5"}, - {0x21000000000ULL, 0x26000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x26000000000ULL, 0x27000000000ULL, MappingDesc::SHADOW, "shadow-5"}, - {0x27000000000ULL, 0x28000000000ULL, MappingDesc::ORIGIN, "origin-5"}, - {0x28000000000ULL, 0x29000000000ULL, MappingDesc::SHADOW, "shadow-7"}, - {0x29000000000ULL, 0x2A000000000ULL, MappingDesc::ORIGIN, "origin-7"}, - {0x2A000000000ULL, 0x2B000000000ULL, MappingDesc::APP, "app-6"}, - {0x2B000000000ULL, 0x2C000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x2C000000000ULL, 0x2D000000000ULL, MappingDesc::SHADOW, "shadow-6"}, - {0x2D000000000ULL, 0x2E000000000ULL, MappingDesc::ORIGIN, "origin-6"}, - {0x2E000000000ULL, 0x2F000000000ULL, MappingDesc::APP, "app-7"}, - {0x2F000000000ULL, 0x39000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x39000000000ULL, 0x3A000000000ULL, MappingDesc::SHADOW, "shadow-9"}, - {0x3A000000000ULL, 0x3B000000000ULL, MappingDesc::ORIGIN, "origin-9"}, - {0x3B000000000ULL, 0x3C000000000ULL, MappingDesc::APP, "app-8"}, - {0x3C000000000ULL, 0x3D000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x3D000000000ULL, 0x3E000000000ULL, MappingDesc::SHADOW, "shadow-8"}, - {0x3E000000000ULL, 0x3F000000000ULL, MappingDesc::ORIGIN, "origin-8"}, - {0x3F000000000ULL, 0x40000000000ULL, MappingDesc::APP, "app-9"}, - // The mappings below are used only for 48-bits VMA. - // TODO(unknown): 48-bit mapping ony covers the usual PIE, non-PIE - // segments and some more segments totalizing 262144GB of VMA (which cover - // only 0.32% of all 48-bit VMA). Memory availability can be increase by - // adding multiple application segments like 39 and 42 mapping. - {0x0040000000000ULL, 0x0041000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x0041000000000ULL, 0x0042000000000ULL, MappingDesc::APP, "app-10"}, - {0x0042000000000ULL, 0x0047000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x0047000000000ULL, 0x0048000000000ULL, MappingDesc::SHADOW, "shadow-10"}, - {0x0048000000000ULL, 0x0049000000000ULL, MappingDesc::ORIGIN, "origin-10"}, - {0x0049000000000ULL, 0x0050000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x0050000000000ULL, 0x0051000000000ULL, MappingDesc::APP, "app-11"}, - {0x0051000000000ULL, 0x0056000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x0056000000000ULL, 0x0057000000000ULL, MappingDesc::SHADOW, "shadow-11"}, - {0x0057000000000ULL, 0x0058000000000ULL, MappingDesc::ORIGIN, "origin-11"}, - {0x0058000000000ULL, 0x0059000000000ULL, MappingDesc::APP, "app-12"}, - {0x0059000000000ULL, 0x005E000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x005E000000000ULL, 0x005F000000000ULL, MappingDesc::SHADOW, "shadow-12"}, - {0x005F000000000ULL, 0x0060000000000ULL, MappingDesc::ORIGIN, "origin-12"}, - {0x0060000000000ULL, 0x0061000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x0061000000000ULL, 0x0062000000000ULL, MappingDesc::APP, "app-13"}, - {0x0062000000000ULL, 0x0067000000000ULL, MappingDesc::INVALID, "invalid"}, - {0x0067000000000ULL, 0x0068000000000ULL, MappingDesc::SHADOW, "shadow-13"}, - {0x0068000000000ULL, 0x0069000000000ULL, MappingDesc::ORIGIN, "origin-13"}, - {0x0069000000000ULL, 0x0AAAAA0000000ULL, MappingDesc::INVALID, "invalid"}, - {0x0AAAAA0000000ULL, 0x0AAAB00000000ULL, MappingDesc::APP, "app-14"}, - {0x0AAAB00000000ULL, 0x0AACAA0000000ULL, MappingDesc::INVALID, "invalid"}, - {0x0AACAA0000000ULL, 0x0AACB00000000ULL, MappingDesc::SHADOW, "shadow-14"}, - {0x0AACB00000000ULL, 0x0AADAA0000000ULL, MappingDesc::INVALID, "invalid"}, - {0x0AADAA0000000ULL, 0x0AADB00000000ULL, MappingDesc::ORIGIN, "origin-14"}, - {0x0AADB00000000ULL, 0x0FF9F00000000ULL, MappingDesc::INVALID, "invalid"}, - {0x0FF9F00000000ULL, 0x0FFA000000000ULL, MappingDesc::SHADOW, "shadow-15"}, - {0x0FFA000000000ULL, 0x0FFAF00000000ULL, MappingDesc::INVALID, "invalid"}, - {0x0FFAF00000000ULL, 0x0FFB000000000ULL, MappingDesc::ORIGIN, "origin-15"}, - {0x0FFB000000000ULL, 0x0FFFF00000000ULL, MappingDesc::INVALID, "invalid"}, - {0x0FFFF00000000ULL, 0x1000000000000ULL, MappingDesc::APP, "app-15"}, + {0X0000000000000, 0X0001000000000, MappingDesc::INVALID, "invalid"}, + {0X0001000000000, 0X0002000000000, MappingDesc::SHADOW, "shadow-13"}, + {0X0002000000000, 0X0011000000000, MappingDesc::INVALID, "invalid"}, + {0X0011000000000, 0X0012000000000, MappingDesc::ORIGIN, "origin-13"}, + {0X0012000000000, 0X0021000000000, MappingDesc::INVALID, "invalid"}, + {0X0021000000000, 0X0022000000000, MappingDesc::SHADOW, "shadow-10"}, + {0X0022000000000, 0X0030000000000, MappingDesc::INVALID, "invalid"}, + {0X0030000000000, 0X0031000000000, MappingDesc::SHADOW, "shadow-11"}, + {0X0031000000000, 0X0032000000000, MappingDesc::ORIGIN, "origin-10"}, + {0X0032000000000, 0X0038000000000, MappingDesc::INVALID, "invalid"}, + {0X0038000000000, 0X0039000000000, MappingDesc::SHADOW, "shadow-12"}, + {0X0039000000000, 0X0040000000000, MappingDesc::INVALID, "invalid"}, + {0X0040000000000, 0X0041000000000, MappingDesc::ORIGIN, "origin-11"}, + {0X0041000000000, 0X0042000000000, MappingDesc::APP, "app-10"}, + {0X0042000000000, 0X0048000000000, MappingDesc::INVALID, "invalid"}, + {0X0048000000000, 0X0049000000000, MappingDesc::ORIGIN, "origin-12"}, + {0X0049000000000, 0X0050000000000, MappingDesc::INVALID, "invalid"}, + {0X0050000000000, 0X0051000000000, MappingDesc::APP, "app-11"}, + {0X0051000000000, 0X0058000000000, MappingDesc::INVALID, "invalid"}, + {0X0058000000000, 0X0059000000000, MappingDesc::APP, "app-12"}, + {0X0059000000000, 0X0060000000000, MappingDesc::INVALID, "invalid"}, + {0X0060000000000, 0X0060100000000, MappingDesc::SHADOW, "shadow-1"}, + {0X0060100000000, 0X0061000000000, MappingDesc::INVALID, "invalid"}, + {0X0061000000000, 0X0062000000000, MappingDesc::APP, "app-13"}, + {0X0062000000000, 0X0070000000000, MappingDesc::INVALID, "invalid"}, + {0X0070000000000, 0X0070100000000, MappingDesc::ORIGIN, "origin-1"}, + {0X0070100000000, 0X0AAA000000000, MappingDesc::INVALID, "invalid"}, + {0X0AAA000000000, 0X0AAB000000000, MappingDesc::APP, "app-14"}, + {0X0AAB000000000, 0X0ACA000000000, MappingDesc::INVALID, "invalid"}, + {0X0ACA000000000, 0X0ACB000000000, MappingDesc::SHADOW, "shadow-14"}, + {0X0ACB000000000, 0X0ADA000000000, MappingDesc::INVALID, "invalid"}, + {0X0ADA000000000, 0X0ADB000000000, MappingDesc::ORIGIN, "origin-14"}, + {0X0ADB000000000, 0X0F90000000000, MappingDesc::INVALID, "invalid"}, + {0X0F90000000000, 0X0FA0000000000, MappingDesc::SHADOW, "shadow-15"}, + {0X0FA0000000000, 0X0FB0000000000, MappingDesc::ORIGIN, "origin-15"}, + {0X0FB0000000000, 0X0FF0000000000, MappingDesc::INVALID, "invalid"}, + {0X0FF0000000000, 0X1000000000000, MappingDesc::APP, "app-15"}, }; # define MEM_TO_SHADOW(mem) ((uptr)mem ^ 0x6000000000ULL) # define SHADOW_TO_ORIGIN(shadow) (((uptr)(shadow)) + 0x1000000000ULL) Index: llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp =================================================================== --- llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp +++ llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp @@ -436,9 +436,9 @@ // aarch64 Linux static const MemoryMapParams Linux_AArch64_MemoryMapParams = { 0, // AndMask (not used) - 0x06000000000, // XorMask + 0x60000000000, // XorMask 0, // ShadowBase (not used) - 0x01000000000, // OriginBase + 0x10000000000, // OriginBase }; // aarch64 FreeBSD