151
151
// || `[0x30000000, 0x35ffffff]` || LowShadow ||
152
152
// || `[0x00000000, 0x2fffffff]` || LowMem ||
153
153
154
- #define SHADOW_SCALE 3
154
+ #define ASAN_SHADOW_SCALE 3
155
155
156
156
static const u64 kDefaultShadowSentinel = ~(uptr)0 ;
157
157
158
158
#if SANITIZER_FUCHSIA
159
- # define SHADOW_OFFSET_CONST (0 )
159
+ # define ASAN_SHADOW_OFFSET_CONST (0 )
160
160
#elif SANITIZER_WORDSIZE == 32
161
161
# if SANITIZER_ANDROID
162
- # define SHADOW_OFFSET_DYNAMIC
162
+ # define ASAN_SHADOW_OFFSET_DYNAMIC
163
163
# elif defined(__mips__)
164
- # define SHADOW_OFFSET_CONST 0x0aaa0000
164
+ # define ASAN_SHADOW_OFFSET_CONST 0x0aaa0000
165
165
# elif SANITIZER_FREEBSD
166
- # define SHADOW_OFFSET_CONST 0x40000000
166
+ # define ASAN_SHADOW_OFFSET_CONST 0x40000000
167
167
# elif SANITIZER_NETBSD
168
- # define SHADOW_OFFSET_CONST 0x40000000
168
+ # define ASAN_SHADOW_OFFSET_CONST 0x40000000
169
169
# elif SANITIZER_WINDOWS
170
- # define SHADOW_OFFSET_CONST 0x30000000
170
+ # define ASAN_SHADOW_OFFSET_CONST 0x30000000
171
171
# elif SANITIZER_IOS
172
- # define SHADOW_OFFSET_DYNAMIC
172
+ # define ASAN_SHADOW_OFFSET_DYNAMIC
173
173
# else
174
- # define SHADOW_OFFSET_CONST 0x20000000
174
+ # define ASAN_SHADOW_OFFSET_CONST 0x20000000
175
175
# endif
176
176
#else
177
177
# if SANITIZER_IOS
178
- # define SHADOW_OFFSET_DYNAMIC
178
+ # define ASAN_SHADOW_OFFSET_DYNAMIC
179
179
# elif SANITIZER_MAC && defined(__aarch64__)
180
- # define SHADOW_OFFSET_DYNAMIC
180
+ # define ASAN_SHADOW_OFFSET_DYNAMIC
181
181
# elif SANITIZER_RISCV64
182
- # define SHADOW_OFFSET_CONST 0x0000000d55550000
182
+ # define ASAN_SHADOW_OFFSET_CONST 0x0000000d55550000
183
183
# elif defined(__aarch64__)
184
- # define SHADOW_OFFSET_CONST 0x0000001000000000
184
+ # define ASAN_SHADOW_OFFSET_CONST 0x0000001000000000
185
185
# elif defined(__powerpc64__)
186
- # define SHADOW_OFFSET_CONST 0x0000100000000000
186
+ # define ASAN_SHADOW_OFFSET_CONST 0x0000100000000000
187
187
# elif defined(__s390x__)
188
- # define SHADOW_OFFSET_CONST 0x0010000000000000
188
+ # define ASAN_SHADOW_OFFSET_CONST 0x0010000000000000
189
189
# elif SANITIZER_FREEBSD
190
- # define SHADOW_OFFSET_CONST 0x0000400000000000
190
+ # define ASAN_SHADOW_OFFSET_CONST 0x0000400000000000
191
191
# elif SANITIZER_NETBSD
192
- # define SHADOW_OFFSET_CONST 0x0000400000000000
192
+ # define ASAN_SHADOW_OFFSET_CONST 0x0000400000000000
193
193
# elif SANITIZER_MAC
194
- # define SHADOW_OFFSET_CONST 0x0000100000000000
194
+ # define ASAN_SHADOW_OFFSET_CONST 0x0000100000000000
195
195
# elif defined(__mips64)
196
- # define SHADOW_OFFSET_CONST 0x0000002000000000
196
+ # define ASAN_SHADOW_OFFSET_CONST 0x0000002000000000
197
197
# elif defined(__sparc__)
198
- # define SHADOW_OFFSET_CONST 0x0000080000000000
198
+ # define ASAN_SHADOW_OFFSET_CONST 0x0000080000000000
199
199
# elif SANITIZER_WINDOWS64
200
- # define SHADOW_OFFSET_DYNAMIC
200
+ # define ASAN_SHADOW_OFFSET_DYNAMIC
201
201
# else
202
- # define SHADOW_OFFSET_CONST 0x000000007FFFFFFF & (~0xFFFULL << SHADOW_SCALE)
202
+ # define ASAN_SHADOW_OFFSET_CONST \
203
+ 0x000000007FFFFFFF & (~0xFFFULL << ASAN_SHADOW_SCALE)
203
204
# endif
204
205
#endif
205
206
206
- #if defined(SHADOW_OFFSET_CONST )
207
- static const u64 kConstShadowOffset = SHADOW_OFFSET_CONST ;
208
- # define SHADOW_OFFSET kConstShadowOffset
209
- #elif defined(SHADOW_OFFSET_DYNAMIC )
210
- # define SHADOW_OFFSET __asan_shadow_memory_dynamic_address
207
+ #if defined(ASAN_SHADOW_OFFSET_CONST )
208
+ static const u64 kConstShadowOffset = ASAN_SHADOW_OFFSET_CONST ;
209
+ # define ASAN_SHADOW_OFFSET kConstShadowOffset
210
+ #elif defined(ASAN_SHADOW_OFFSET_DYNAMIC )
211
+ # define ASAN_SHADOW_OFFSET __asan_shadow_memory_dynamic_address
211
212
#else
212
- # error "SHADOW_OFFSET can't be determined."
213
+ # error "ASAN_SHADOW_OFFSET can't be determined."
213
214
#endif
214
215
215
216
#if SANITIZER_ANDROID && defined(__arm__)
@@ -218,7 +219,7 @@ static const u64 kConstShadowOffset = SHADOW_OFFSET_CONST;
218
219
# define ASAN_PREMAP_SHADOW 0
219
220
#endif
220
221
221
- #define SHADOW_GRANULARITY (1ULL << SHADOW_SCALE )
222
+ #define ASAN_SHADOW_GRANULARITY (1ULL << ASAN_SHADOW_SCALE )
222
223
223
224
#define DO_ASAN_MAPPING_PROFILE 0 // Set to 1 to profile the functions below.
224
225
@@ -252,36 +253,37 @@ extern uptr kHighMemEnd, kMidMemBeg, kMidMemEnd; // Initialized in __asan_init.
252
253
#if defined(__sparc__) && SANITIZER_WORDSIZE == 64
253
254
# include " asan_mapping_sparc64.h"
254
255
#else
255
- #define MEM_TO_SHADOW (mem ) (((mem) >> SHADOW_SCALE) + (SHADOW_OFFSET))
256
+ # define MEM_TO_SHADOW (mem ) \
257
+ (((mem) >> ASAN_SHADOW_SCALE) + (ASAN_SHADOW_OFFSET))
256
258
257
- #define kLowMemBeg 0
258
- #define kLowMemEnd (SHADOW_OFFSET ? SHADOW_OFFSET - 1 : 0 )
259
+ # define kLowMemBeg 0
260
+ # define kLowMemEnd (ASAN_SHADOW_OFFSET ? ASAN_SHADOW_OFFSET - 1 : 0 )
259
261
260
- #define kLowShadowBeg SHADOW_OFFSET
261
- #define kLowShadowEnd MEM_TO_SHADOW (kLowMemEnd )
262
+ # define kLowShadowBeg ASAN_SHADOW_OFFSET
263
+ # define kLowShadowEnd MEM_TO_SHADOW (kLowMemEnd )
262
264
263
- #define kHighMemBeg (MEM_TO_SHADOW(kHighMemEnd ) + 1 )
265
+ # define kHighMemBeg (MEM_TO_SHADOW(kHighMemEnd ) + 1 )
264
266
265
- #define kHighShadowBeg MEM_TO_SHADOW (kHighMemBeg )
266
- #define kHighShadowEnd MEM_TO_SHADOW (kHighMemEnd )
267
+ # define kHighShadowBeg MEM_TO_SHADOW (kHighMemBeg )
268
+ # define kHighShadowEnd MEM_TO_SHADOW (kHighMemEnd )
267
269
268
- # define kMidShadowBeg MEM_TO_SHADOW (kMidMemBeg )
269
- # define kMidShadowEnd MEM_TO_SHADOW (kMidMemEnd )
270
+ # define kMidShadowBeg MEM_TO_SHADOW (kMidMemBeg )
271
+ # define kMidShadowEnd MEM_TO_SHADOW (kMidMemEnd )
270
272
271
273
// With the zero shadow base we can not actually map pages starting from 0.
272
274
// This constant is somewhat arbitrary.
273
- #define kZeroBaseShadowStart 0
274
- #define kZeroBaseMaxShadowStart (1 << 18 )
275
+ # define kZeroBaseShadowStart 0
276
+ # define kZeroBaseMaxShadowStart (1 << 18 )
275
277
276
- #define kShadowGapBeg ( kLowShadowEnd ? kLowShadowEnd + 1 \
277
- : kZeroBaseShadowStart )
278
- #define kShadowGapEnd ((kMidMemBeg ? kMidShadowBeg : kHighShadowBeg ) - 1 )
278
+ # define kShadowGapBeg \
279
+ ( kLowShadowEnd ? kLowShadowEnd + 1 : kZeroBaseShadowStart )
280
+ # define kShadowGapEnd ((kMidMemBeg ? kMidShadowBeg : kHighShadowBeg ) - 1 )
279
281
280
- #define kShadowGap2Beg (kMidMemBeg ? kMidShadowEnd + 1 : 0 )
281
- #define kShadowGap2End (kMidMemBeg ? kMidMemBeg - 1 : 0 )
282
+ # define kShadowGap2Beg (kMidMemBeg ? kMidShadowEnd + 1 : 0 )
283
+ # define kShadowGap2End (kMidMemBeg ? kMidMemBeg - 1 : 0 )
282
284
283
- #define kShadowGap3Beg (kMidMemBeg ? kMidMemEnd + 1 : 0 )
284
- #define kShadowGap3End (kMidMemBeg ? kHighShadowBeg - 1 : 0 )
285
+ # define kShadowGap3Beg (kMidMemBeg ? kMidMemEnd + 1 : 0 )
286
+ # define kShadowGap3End (kMidMemBeg ? kHighShadowBeg - 1 : 0 )
285
287
286
288
namespace __asan {
287
289
@@ -319,13 +321,13 @@ static inline bool AddrIsInShadowGap(uptr a) {
319
321
PROFILE_ASAN_MAPPING ();
320
322
if (kMidMemBeg ) {
321
323
if (a <= kShadowGapEnd )
322
- return SHADOW_OFFSET == 0 || a >= kShadowGapBeg ;
324
+ return ASAN_SHADOW_OFFSET == 0 || a >= kShadowGapBeg ;
323
325
return (a >= kShadowGap2Beg && a <= kShadowGap2End ) ||
324
326
(a >= kShadowGap3Beg && a <= kShadowGap3End );
325
327
}
326
328
// In zero-based shadow mode we treat addresses near zero as addresses
327
329
// in shadow gap as well.
328
- if (SHADOW_OFFSET == 0 )
330
+ if (ASAN_SHADOW_OFFSET == 0 )
329
331
return a <= kShadowGapEnd ;
330
332
return a >= kShadowGapBeg && a <= kShadowGapEnd ;
331
333
}
@@ -336,7 +338,9 @@ static inline bool AddrIsInShadowGap(uptr a) {
336
338
337
339
namespace __asan {
338
340
339
- static inline uptr MemToShadowSize (uptr size) { return size >> SHADOW_SCALE; }
341
+ static inline uptr MemToShadowSize (uptr size) {
342
+ return size >> ASAN_SHADOW_SCALE;
343
+ }
340
344
341
345
static inline bool AddrIsInMem (uptr a) {
342
346
PROFILE_ASAN_MAPPING ();
@@ -357,7 +361,7 @@ static inline bool AddrIsInShadow(uptr a) {
357
361
358
362
static inline bool AddrIsAlignedByGranularity (uptr a) {
359
363
PROFILE_ASAN_MAPPING ();
360
- return (a & (SHADOW_GRANULARITY - 1 )) == 0 ;
364
+ return (a & (ASAN_SHADOW_GRANULARITY - 1 )) == 0 ;
361
365
}
362
366
363
367
static inline bool AddressIsPoisoned (uptr a) {
@@ -366,8 +370,8 @@ static inline bool AddressIsPoisoned(uptr a) {
366
370
u8 *shadow_address = (u8 *)MEM_TO_SHADOW (a);
367
371
s8 shadow_value = *shadow_address;
368
372
if (shadow_value) {
369
- u8 last_accessed_byte = (a & (SHADOW_GRANULARITY - 1 ))
370
- + kAccessSize - 1 ;
373
+ u8 last_accessed_byte =
374
+ (a & (ASAN_SHADOW_GRANULARITY - 1 )) + kAccessSize - 1 ;
371
375
return (last_accessed_byte >= shadow_value);
372
376
}
373
377
return false ;
0 commit comments