Home | History | Annotate | Download | only in rtl

Lines Matching defs:Shadow

142 const u64 kShadowRodata = (u64)-1;  // .rodata shadow marker
216 friend class Shadow;
224 // Shadow (from most significant bit):
232 class Shadow : public FastState {
234 explicit Shadow(u64 x)
238 explicit Shadow(const FastState &s)
274 static inline bool TidsAreEqual(const Shadow s1, const Shadow s2) {
280 static inline bool Addr0AndSizeAreEqual(const Shadow s1, const Shadow s2) {
285 static inline bool TwoRangesIntersect(Shadow s1, Shadow s2,
303 // (mapped to a single shadow "cell"). Now consider that we write to the bools
305 // W/o offsetting each access will have to scan 4 shadow values at average
306 // to find the corresponding shadow value for the bool.
307 // With offsetting we start scanning shadow with the offset so that
308 // each access hits necessary shadow straight off (at least in an expected
313 // from a single thread won't need to scan all 8 shadow values.
323 // When the memory is freed (or otherwise unaccessible) we write to the shadow
326 // as msb of tid. So any access races with shadow with freed bit set
377 static bool TwoRangesIntersectSLOW(const Shadow s1, const Shadow s2) {
399 // action. It allows to reduce number of shadow state updates.
418 // C/C++ uses embed shadow stack of fixed size.
421 // Go uses satellite shadow stack with dynamic size.
563 void AddMemoryAccess(uptr addr, Shadow s, const StackTrace *stack,
644 u64 *shadow_mem, Shadow cur);