@@ -523,9 +523,9 @@ ALWAYS_INLINE USED void UnalignedMemoryAccess(ThreadState* thr, uptr pc,
523523}
524524
525525void ShadowSet (RawShadow* p, RawShadow* end, RawShadow v) {
526- DCHECK_LE (p, end);
526+ DCHECK_LT (p, end);
527527 DCHECK (IsShadowMem (p));
528- DCHECK (p == end || IsShadowMem (end - 1 ));
528+ DCHECK (IsShadowMem (end - 1 ));
529529 UNUSED const uptr kAlign = kShadowCnt * kShadowSize ;
530530 DCHECK_EQ (reinterpret_cast <uptr>(p) % kAlign , 0 );
531531 DCHECK_EQ (reinterpret_cast <uptr>(end) % kAlign , 0 );
@@ -569,6 +569,7 @@ static void MemoryRangeSet(uptr addr, uptr size, RawShadow val) {
569569 RawShadow* mid1 =
570570 Min (end, reinterpret_cast <RawShadow*>(RoundUp (
571571 reinterpret_cast <uptr>(begin) + kPageSize / 2 , kPageSize )));
572+ // begin must < mid1
572573 ShadowSet (begin, mid1, val);
573574 // Reset middle part.
574575 RawShadow* mid2 = RoundDown (end, kPageSize );
@@ -577,7 +578,10 @@ static void MemoryRangeSet(uptr addr, uptr size, RawShadow val) {
577578 Die ();
578579 }
579580 // Set the ending.
580- ShadowSet (mid2, end, val);
581+ if (mid2 < end)
582+ ShadowSet (mid2, end, val);
583+ else
584+ DCHECK_EQ (mid2, end);
581585}
582586
583587void MemoryResetRange (ThreadState* thr, uptr pc, uptr addr, uptr size) {
0 commit comments