Lines Matching +full:x +full:- +full:origin

1 //===-- msan_poisoning.cpp --------------------------------------*- C++ -*-===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
11 //===----------------------------------------------------------------------===//
49 // Copy left unaligned origin if that memory is poisoned. in CopyOrigin()
51 u32 o = GetOriginIfPoisoned((uptr)src, beg + 4 - d); in CopyOrigin()
60 // If both ends fall into the same 4-byte slot, we are done. in CopyOrigin()
63 // Copy right unaligned origin if that memory is poisoned. in CopyOrigin()
65 u32 o = GetOriginIfPoisoned((uptr)src + (end - d), (d + size) - end); in CopyOrigin()
79 u32 *src_end = (u32 *)MEM_TO_ORIGIN(s + (end - beg)); in CopyOrigin()
93 end - beg); in CopyOrigin()
106 // Copy right unaligned origin if that memory is poisoned. in ReverseCopyOrigin()
108 u32 o = GetOriginIfPoisoned((uptr)src + (end - d), (d + size) - end); in ReverseCopyOrigin()
122 u32 *src = (u32 *)MEM_TO_ORIGIN(s + end - beg - 4); in ReverseCopyOrigin()
123 u32 *src_s = (u32 *)MEM_TO_SHADOW(s + end - beg - 4); in ReverseCopyOrigin()
125 u32 *dst = (u32 *)MEM_TO_ORIGIN(end - 4); in ReverseCopyOrigin()
128 for (; src >= src_begin; --src, --src_s, --dst) { in ReverseCopyOrigin()
139 ((void *)MEM_TO_ORIGIN(beg), (void *)MEM_TO_ORIGIN(s), end - beg - 4); in ReverseCopyOrigin()
143 // Copy left unaligned origin if that memory is poisoned. in ReverseCopyOrigin()
145 u32 o = GetOriginIfPoisoned((uptr)src, beg + 4 - d); in ReverseCopyOrigin()
156 // If destination origin range overlaps with source origin range, move in MoveOrigin()
184 // Because origin's range is slightly larger than app range, memcpy may also in CopyShadowAndOrigin()
185 // cause overlapped origin ranges. in CopyShadowAndOrigin()
202 shadow_end - shadow_beg < common_flags()->clear_shadow_mmap_threshold) { in SetShadow()
203 REAL(memset)((void *)shadow_beg, value, shadow_end - shadow_beg); in SetShadow()
209 REAL(memset)((void *)shadow_beg, 0, shadow_end - shadow_beg); in SetShadow()
212 REAL(memset)((void *)shadow_beg, 0, page_beg - shadow_beg); in SetShadow()
215 REAL(memset)((void *)page_end, 0, shadow_end - page_end); in SetShadow()
217 if (!MmapFixedSuperNoReserve(page_beg, page_end - page_beg)) in SetShadow()
221 // No need to set origin for zero shadow, but we can release pages. in SetShadow()
223 if (!MmapFixedSuperNoReserve(origin_beg, page_end - page_beg)) in SetShadow()
230 void SetOrigin(const void *dst, uptr size, u32 origin) { in SetOrigin() argument
231 // Origin mapping is 4 bytes per 4 bytes of application memory. in SetOrigin()
234 uptr x = MEM_TO_ORIGIN((uptr)dst); in SetOrigin() local
235 uptr beg = x & ~3UL; // align down. in SetOrigin()
236 uptr end = (x + size + 3) & ~3UL; // align up. in SetOrigin()
237 u64 origin64 = ((u64)origin << 32) | origin; in SetOrigin()
238 // This is like memset, but the value is 32-bit. We unroll by 2 to write in SetOrigin()
239 // 64 bits at once. May want to unroll further to get 128-bit stores. in SetOrigin()
241 *(u32 *)beg = origin; in SetOrigin()
245 if (end & 7ULL) *(u32 *)(end - 4) = origin; in SetOrigin()
249 SetShadow(dst, size, (u8)-1); in PoisonMemory()
253 if (t && t->InSignalHandler()) in PoisonMemory()
255 Origin o = Origin::CreateHeapOrigin(stack); in PoisonMemory()