@@ -33,12 +33,18 @@ struct MappingDesc {
33
33
uptr start;
34
34
uptr end;
35
35
enum Type {
36
- INVALID, APP, SHADOW, ORIGIN
36
+ INVALID = 1 ,
37
+ ALLOCATOR = 2 ,
38
+ APP = 4 ,
39
+ SHADOW = 8 ,
40
+ ORIGIN = 16 ,
37
41
} type;
38
42
const char *name;
39
43
};
40
44
41
-
45
+ // Note: MappingDesc::ALLOCATOR entries are only used to check for memory
46
+ // layout compatibility. The actual allocation settings are in
47
+ // msan_allocator.cpp, which need to be kept in sync.
42
48
#if SANITIZER_LINUX && defined(__mips64)
43
49
44
50
// MIPS64 maps:
@@ -84,7 +90,8 @@ const MappingDesc kMemoryLayout[] = {
84
90
{0X0B00000000000 , 0X0C00000000000 , MappingDesc::SHADOW, " shadow-10-13" },
85
91
{0X0C00000000000 , 0X0D00000000000 , MappingDesc::INVALID, " invalid" },
86
92
{0X0D00000000000 , 0X0E00000000000 , MappingDesc::ORIGIN, " origin-10-13" },
87
- {0X0E00000000000 , 0X1000000000000 , MappingDesc::APP, " app-15" },
93
+ {0x0E00000000000 , 0x0E40000000000 , MappingDesc::ALLOCATOR, " allocator" },
94
+ {0X0E40000000000 , 0X1000000000000 , MappingDesc::APP, " app-15" },
88
95
};
89
96
# define MEM_TO_SHADOW (mem ) ((uptr)mem ^ 0xB00000000000ULL )
90
97
# define SHADOW_TO_ORIGIN (shadow ) (((uptr)(shadow )) + 0x200000000000ULL )
@@ -106,7 +113,8 @@ const MappingDesc kMemoryLayout[] = {
106
113
{0x510000000000ULL , 0x600000000000ULL , MappingDesc::APP, " app-2" },
107
114
{0x600000000000ULL , 0x610000000000ULL , MappingDesc::ORIGIN, " origin-1" },
108
115
{0x610000000000ULL , 0x700000000000ULL , MappingDesc::INVALID, " invalid" },
109
- {0x700000000000ULL , 0x800000000000ULL , MappingDesc::APP, " app-3" }};
116
+ {0x700000000000ULL , 0x740000000000ULL , MappingDesc::ALLOCATOR, " allocator" },
117
+ {0x740000000000ULL , 0x800000000000ULL , MappingDesc::APP, " app-3" }};
110
118
# define MEM_TO_SHADOW (mem ) (((uptr)(mem)) ^ 0x500000000000ULL )
111
119
# define SHADOW_TO_ORIGIN (shadow ) (((uptr)(shadow )) + 0x100000000000ULL )
112
120
@@ -118,7 +126,8 @@ const MappingDesc kMemoryLayout[] = {
118
126
{0x180200000000ULL , 0x1C0000000000ULL , MappingDesc::INVALID, " invalid" },
119
127
{0x1C0000000000ULL , 0x2C0200000000ULL , MappingDesc::ORIGIN, " origin" },
120
128
{0x2C0200000000ULL , 0x300000000000ULL , MappingDesc::INVALID, " invalid" },
121
- {0x300000000000ULL , 0x800000000000ULL , MappingDesc::APP, " high memory" }};
129
+ {0x300000000000ULL , 0x320000000000ULL , MappingDesc::ALLOCATOR, " allocator" },
130
+ {0x320000000000ULL , 0x800000000000ULL , MappingDesc::APP, " high memory" }};
122
131
123
132
// Various kernels use different low end ranges but we can combine them into one
124
133
// big range. They also use different high end ranges but we can map them all to
@@ -141,7 +150,8 @@ const MappingDesc kMemoryLayout[] = {
141
150
{0x180000000000ULL , 0x1C0000000000ULL , MappingDesc::INVALID, " invalid" },
142
151
{0x1C0000000000ULL , 0x2C0000000000ULL , MappingDesc::ORIGIN, " origin" },
143
152
{0x2C0000000000ULL , 0x440000000000ULL , MappingDesc::INVALID, " invalid" },
144
- {0x440000000000ULL , 0x500000000000ULL , MappingDesc::APP, " high memory" }};
153
+ {0x440000000000ULL , 0x460000000000ULL , MappingDesc::ALLOCATOR, " allocator" },
154
+ {0x460000000000ULL , 0x500000000000ULL , MappingDesc::APP, " high memory" }};
145
155
146
156
#define MEM_TO_SHADOW (mem ) \
147
157
((((uptr)(mem)) & ~0xC00000000000ULL ) + 0x080000000000ULL )
@@ -208,7 +218,8 @@ const MappingDesc kMemoryLayout[] = {
208
218
{0x510000000000ULL , 0x600000000000ULL , MappingDesc::APP, " app-2" },
209
219
{0x600000000000ULL , 0x610000000000ULL , MappingDesc::ORIGIN, " origin-1" },
210
220
{0x610000000000ULL , 0x700000000000ULL , MappingDesc::INVALID, " invalid" },
211
- {0x700000000000ULL , 0x800000000000ULL , MappingDesc::APP, " app-3" }};
221
+ {0x700000000000ULL , 0x740000000000ULL , MappingDesc::ALLOCATOR, " allocator" },
222
+ {0x740000000000ULL , 0x800000000000ULL , MappingDesc::APP, " app-3" }};
212
223
#define MEM_TO_SHADOW (mem ) (((uptr)(mem)) ^ 0x500000000000ULL )
213
224
#define SHADOW_TO_ORIGIN (mem ) (((uptr)(mem)) + 0x100000000000ULL )
214
225
@@ -223,20 +234,22 @@ const uptr kMemoryLayoutSize = sizeof(kMemoryLayout) / sizeof(kMemoryLayout[0]);
223
234
#ifndef __clang__
224
235
__attribute__ ((optimize(" unroll-loops" )))
225
236
#endif
226
- inline bool addr_is_type (uptr addr, MappingDesc::Type mapping_type) {
237
+ inline bool
238
+ addr_is_type (uptr addr, int mapping_types) {
227
239
// It is critical for performance that this loop is unrolled (because then it is
228
240
// simplified into just a few constant comparisons).
229
241
#ifdef __clang__
230
242
#pragma unroll
231
243
#endif
232
244
for (unsigned i = 0 ; i < kMemoryLayoutSize ; ++i)
233
- if (kMemoryLayout [i].type == mapping_type &&
245
+ if (( kMemoryLayout [i].type & mapping_types) &&
234
246
addr >= kMemoryLayout [i].start && addr < kMemoryLayout [i].end )
235
247
return true ;
236
248
return false ;
237
249
}
238
250
239
- #define MEM_IS_APP (mem ) addr_is_type((uptr)(mem), MappingDesc::APP)
251
+ #define MEM_IS_APP (mem ) \
252
+ (addr_is_type((uptr)(mem), MappingDesc::APP | MappingDesc::ALLOCATOR))
240
253
#define MEM_IS_SHADOW (mem ) addr_is_type((uptr)(mem), MappingDesc::SHADOW)
241
254
#define MEM_IS_ORIGIN (mem ) addr_is_type((uptr)(mem), MappingDesc::ORIGIN)
242
255
0 commit comments