Lines Matching full:shadow
20 /// byte of application memory is backed by two bytes of shadow memory which
32 /// | shadow memory |
37 /// To derive a shadow memory address from an application memory address,
40 /// account for the double byte representation of shadow labels and move the
41 /// address into the shadow memory range. See the function
75 // External symbol to be used when generating the shadow address for
83 // the shadow load to have alignment 16. This flag is disabled by default as
91 // The ABI list files control how shadow parameters are passed. The pass treats
220 /// pass the return value shadow in a register, while WK_Custom uses an
221 /// extra pointer argument to return the shadow. This allows the wrapped
301 Value *Shadow;
320 void setShadow(Instruction *I, Value *Shadow);
325 void storeShadow(Value *Addr, uint64_t Size, uint64_t Align, Value *Shadow,
447 // AArch64 supports multiple VMAs and the shadow mask is set at runtime.
829 // We will not necessarily be able to compute the shadow for every phi node
898 Value *&Shadow = ValShadowMap[V];
899 if (!Shadow) {
910 Shadow = IRB.CreateLoad(getArgTLS(A->getArgNo(), ArgTLSPos));
918 Shadow = &*i;
919 assert(Shadow->getType() == DFS.ShadowTy);
923 NonZeroChecks.push_back(Shadow);
925 Shadow = DFS.ZeroShadow;
928 return Shadow;
931 void DFSanFunction::setShadow(Instruction *I, Value *Shadow) {
933 assert(Shadow->getType() == DFS.ShadowTy);
934 ValShadowMap[I] = Shadow;
986 return CCS.Shadow;
996 CCS.Shadow = Call;
1014 CCS.Shadow = Phi;
1028 ShadowElements[CCS.Shadow] = std::move(UnionElems);
1030 return CCS.Shadow;
1040 Value *Shadow = getShadow(Inst->getOperand(0));
1042 Shadow = combineShadows(Shadow, getShadow(Inst->getOperand(i)), Inst);
1044 return Shadow;
1052 // Generates IR to load shadow corresponding to bytes [Addr, Addr+Size), where
1100 // Fast path for the common case where each byte has identical shadow: load
1101 // shadow 64 bits at a time, fall out to a __dfsan_union_load call if any
1102 // shadow is non-equal.
1156 PHINode *Shadow = PHINode::Create(DFS.ShadowTy, 2, "", &Tail->front());
1157 Shadow->addIncoming(FallbackCall, FallbackBB);
1158 Shadow->addIncoming(TruncShadow, LastBr->getParent());
1159 return Shadow;
1186 Value *Shadow = DFSF.loadShadow(LI.getPointerOperand(), Size, Align, &LI);
1189 Shadow = DFSF.combineShadows(Shadow, PtrShadow, &LI);
1191 if (Shadow != DFSF.DFS.ZeroShadow)
1192 DFSF.NonZeroChecks.push_back(Shadow);
1194 DFSF.setShadow(&LI, Shadow);
1198 Value *Shadow, Instruction *Pos) {
1204 IRB.CreateStore(Shadow, i->second);
1212 if (Shadow == DFS.ZeroShadow) {
1228 ShadowVec, Shadow, ConstantInt::get(Type::getInt32Ty(*DFS.Ctx), i));
1244 IRB.CreateAlignedStore(Shadow, CurShadowAddr, ShadowAlign);
1265 Value* Shadow = DFSF.getShadow(SI.getValueOperand());
1268 Shadow = DFSF.combineShadows(Shadow, PtrShadow, &SI);
1270 DFSF.storeShadow(SI.getPointerOperand(), Size, Align, Shadow, &SI);
1630 // Give the shadow phi node valid predecessors to fool SplitEdge into working.