@@ -523,9 +523,9 @@ ALWAYS_INLINE USED void UnalignedMemoryAccess(ThreadState* thr, uptr pc,
523
523
}
524
524
525
525
void ShadowSet (RawShadow* p, RawShadow* end, RawShadow v) {
526
- DCHECK_LE (p, end);
526
+ DCHECK_LT (p, end);
527
527
DCHECK (IsShadowMem (p));
528
- DCHECK (p == end || IsShadowMem (end - 1 ));
528
+ DCHECK (IsShadowMem (end - 1 ));
529
529
UNUSED const uptr kAlign = kShadowCnt * kShadowSize ;
530
530
DCHECK_EQ (reinterpret_cast <uptr>(p) % kAlign , 0 );
531
531
DCHECK_EQ (reinterpret_cast <uptr>(end) % kAlign , 0 );
@@ -569,6 +569,7 @@ static void MemoryRangeSet(uptr addr, uptr size, RawShadow val) {
569
569
RawShadow* mid1 =
570
570
Min (end, reinterpret_cast <RawShadow*>(RoundUp (
571
571
reinterpret_cast <uptr>(begin) + kPageSize / 2 , kPageSize )));
572
+ // begin must < mid1
572
573
ShadowSet (begin, mid1, val);
573
574
// Reset middle part.
574
575
RawShadow* mid2 = RoundDown (end, kPageSize );
@@ -577,7 +578,10 @@ static void MemoryRangeSet(uptr addr, uptr size, RawShadow val) {
577
578
Die ();
578
579
}
579
580
// Set the ending.
580
- ShadowSet (mid2, end, val);
581
+ if (mid2 < end)
582
+ ShadowSet (mid2, end, val);
583
+ else
584
+ DCHECK_EQ (mid2, end);
581
585
}
582
586
583
587
void MemoryResetRange (ThreadState* thr, uptr pc, uptr addr, uptr size) {
0 commit comments