Lines Matching refs:DFS
580 DataFlowSanitizer &DFS; member
616 DFSanFunction(DataFlowSanitizer &DFS, Function *F, bool IsNativeABI, in DFSanFunction()
618 : DFS(DFS), F(F), IsNativeABI(IsNativeABI), in DFSanFunction()
979 Type *ShadowTy = DFS.getShadowTy(T); in expandFromPrimitiveShadow()
984 if (DFS.isZeroShadow(PrimitiveShadow)) in expandFromPrimitiveShadow()
985 return DFS.getZeroShadow(ShadowTy); in expandFromPrimitiveShadow()
1002 return DFS.ZeroPrimitiveShadow; in collapseAggregateShadow()
1053 if (DFS.shouldTrackOrigins()) { in addConditionalCallbacksIfEnabled()
1055 CI = IRB.CreateCall(DFS.DFSanConditionalCallbackOriginFn, in addConditionalCallbacksIfEnabled()
1058 CI = IRB.CreateCall(DFS.DFSanConditionalCallbackFn, {CondShadow}); in addConditionalCallbacksIfEnabled()
1091 if (DFS.shouldTrackOrigins()) { in addReachesFunctionCallbacksIfEnabled()
1094 CB = IRB.CreateCall(DFS.DFSanReachesFunctionCallbackOriginFn, args); in addReachesFunctionCallbacksIfEnabled()
1097 CB = IRB.CreateCall(DFS.DFSanReachesFunctionCallbackFn, args); in addReachesFunctionCallbacksIfEnabled()
1773 IRB.CreateICmpNE(PrimitiveShadow, DFSF.DFS.ZeroPrimitiveShadow); in runImpl()
1777 ThenIRB.CreateCall(DFSF.DFS.DFSanNonzeroLabelFn, {}); in runImpl()
1787 Value *Base = IRB.CreatePointerCast(DFS.ArgTLS, DFS.IntptrTy); in getArgTLS()
1789 Base = IRB.CreateAdd(Base, ConstantInt::get(DFS.IntptrTy, ArgOffset)); in getArgTLS()
1790 return IRB.CreateIntToPtr(Base, PointerType::get(DFS.getShadowTy(T), 0), in getArgTLS()
1796 DFS.RetvalTLS, PointerType::get(DFS.getShadowTy(T), 0), "_dfsret"); in getRetvalTLS()
1799 Value *DFSanFunction::getRetvalOriginTLS() { return DFS.RetvalOriginTLS; } in getRetvalOriginTLS()
1802 return IRB.CreateConstGEP2_64(DFS.ArgOriginTLSTy, DFS.ArgOriginTLS, 0, ArgNo, in getArgOriginTLS()
1807 assert(DFS.shouldTrackOrigins()); in getOrigin()
1809 return DFS.ZeroOrigin; in getOrigin()
1814 return DFS.ZeroOrigin; in getOrigin()
1815 if (A->getArgNo() < DFS.NumOfElementsInArgOrgTLS) { in getOrigin()
1819 Origin = IRB.CreateLoad(DFS.OriginTy, ArgOriginPtr); in getOrigin()
1822 Origin = DFS.ZeroOrigin; in getOrigin()
1825 Origin = DFS.ZeroOrigin; in getOrigin()
1832 if (!DFS.shouldTrackOrigins()) in setOrigin()
1835 assert(Origin->getType() == DFS.OriginTy); in setOrigin()
1849 unsigned Size = DL.getTypeAllocSize(DFS.getShadowTy(&FArg)); in getShadowForTLSArgument()
1863 return IRB.CreateAlignedLoad(DFS.getShadowTy(&FArg), ArgShadowPtr, in getShadowForTLSArgument()
1867 return DFS.getZeroShadow(A); in getShadowForTLSArgument()
1872 return DFS.getZeroShadow(V); in getShadow()
1874 return DFS.getZeroShadow(V); in getShadow()
1879 return DFS.getZeroShadow(V); in getShadow()
1883 Shadow = DFS.getZeroShadow(V); in getShadow()
1968 if (DFS.isZeroShadow(V1)) in combineShadows()
1970 if (DFS.isZeroShadow(V2)) in combineShadows()
2030 return DFS.getZeroShadow(Inst); in combineOperandShadows()
2051 return DFS.ZeroOrigin; in combineOrigins()
2054 Zero = DFS.ZeroPrimitiveShadow; in combineOrigins()
2070 return Origin ? Origin : DFS.ZeroOrigin; in combineOrigins()
2085 if (!DFSF.DFS.shouldTrackOrigins()) in visitInstOperandOrigins()
2093 return Align(Alignment.value() * DFS.ShadowWidthBytes); in getShadowAlign()
2104 return DFS.CombineTaintLookupTableNames.count(GV->getName()); in isLookupTableConstant()
2129 return Alignment < MinOriginAlignment || !DFS.hasLoadSizeForFastPath(Size); in useCallbackLoadLabelAndOrigin()
2143 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins(); in loadShadowFast()
2144 const uint64_t ShadowSize = Size * DFS.ShadowWidthBytes; in loadShadowFast()
2164 ShadowSize == 4 ? Type::getInt32Ty(*DFS.Ctx) : Type::getInt64Ty(*DFS.Ctx); in loadShadowFast()
2171 const uint64_t BytesPerWideShadow = WideShadowBitWidth / DFS.ShadowWidthBits; in loadShadowFast()
2185 Origins.push_back(DFS.loadNextOrigin(Pos, OriginAlign, &OriginAddr)); in loadShadowFast()
2206 ConstantInt::get(DFS.IntptrTy, 1)); in loadShadowFast()
2211 Value *NextOrigin = DFS.loadNextOrigin(Pos, OriginAlign, &OriginAddr); in loadShadowFast()
2215 for (unsigned Width = WideShadowBitWidth / 2; Width >= DFS.ShadowWidthBits; in loadShadowFast()
2220 return {IRB.CreateTrunc(CombinedWideShadow, DFS.PrimitiveShadowTy), in loadShadowFast()
2224 : DFS.ZeroOrigin}; in loadShadowFast()
2229 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins(); in loadShadowOriginSansLoadTracking()
2236 Value *ShadowLI = IRB.CreateLoad(DFS.PrimitiveShadowTy, SI->second); in loadShadowOriginSansLoadTracking()
2240 ? IRB.CreateLoad(DFS.OriginTy, OI->second) in loadShadowOriginSansLoadTracking()
2259 return {DFS.ZeroPrimitiveShadow, in loadShadowOriginSansLoadTracking()
2260 ShouldTrackOrigins ? DFS.ZeroOrigin : nullptr}; in loadShadowOriginSansLoadTracking()
2263 return {DFS.ZeroPrimitiveShadow, in loadShadowOriginSansLoadTracking()
2264 ShouldTrackOrigins ? DFS.ZeroOrigin : nullptr}; in loadShadowOriginSansLoadTracking()
2272 IRB.CreateCall(DFS.DFSanLoadLabelAndOriginFn, in loadShadowOriginSansLoadTracking()
2273 {Addr, ConstantInt::get(DFS.IntptrTy, Size)}); in loadShadowOriginSansLoadTracking()
2275 return {IRB.CreateTrunc(IRB.CreateLShr(Call, DFS.OriginWidthBits), in loadShadowOriginSansLoadTracking()
2276 DFS.PrimitiveShadowTy), in loadShadowOriginSansLoadTracking()
2277 IRB.CreateTrunc(Call, DFS.OriginTy)}; in loadShadowOriginSansLoadTracking()
2283 DFS.getShadowOriginAddress(Addr, InstAlignment, Pos); in loadShadowOriginSansLoadTracking()
2290 Origin = IRB.CreateAlignedLoad(DFS.OriginTy, OriginAddr, OriginAlign); in loadShadowOriginSansLoadTracking()
2297 LoadInst *LI = new LoadInst(DFS.PrimitiveShadowTy, ShadowAddr, "", Pos); in loadShadowOriginSansLoadTracking()
2303 Value *ShadowAddr1 = IRB.CreateGEP(DFS.PrimitiveShadowTy, ShadowAddr, in loadShadowOriginSansLoadTracking()
2304 ConstantInt::get(DFS.IntptrTy, 1)); in loadShadowOriginSansLoadTracking()
2306 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr, ShadowAlign); in loadShadowOriginSansLoadTracking()
2308 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr1, ShadowAlign); in loadShadowOriginSansLoadTracking()
2312 bool HasSizeForFastPath = DFS.hasLoadSizeForFastPath(Size); in loadShadowOriginSansLoadTracking()
2320 DFS.DFSanUnionLoadFn, {ShadowAddr, ConstantInt::get(DFS.IntptrTy, Size)}); in loadShadowOriginSansLoadTracking()
2332 if (DFS.shouldTrackOrigins()) { in loadShadowOrigin()
2387 DFSF.setShadow(&LI, DFSF.DFS.getZeroShadow(&LI)); in visitLoadInst()
2388 DFSF.setOrigin(&LI, DFSF.DFS.ZeroOrigin); in visitLoadInst()
2407 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitLoadInst()
2422 if (!DFSF.DFS.isZeroShadow(PrimitiveShadow)) in visitLoadInst()
2437 IRB.CreateCall(DFSF.DFS.DFSanLoadCallbackFn, {PrimitiveShadow, Addr}); in visitLoadInst()
2447 assert(DFS.shouldTrackOrigins()); in updateOriginIfTainted()
2448 return IRB.CreateCall(DFS.DFSanChainOriginIfTaintedFn, {Shadow, Origin}); in updateOriginIfTainted()
2452 if (!DFS.shouldTrackOrigins()) in updateOrigin()
2454 return IRB.CreateCall(DFS.DFSanChainOriginFn, V); in updateOrigin()
2460 unsigned IntptrSize = DL.getTypeStoreSize(DFS.IntptrTy); in originToIntptr()
2464 Origin = IRB.CreateIntCast(Origin, DFS.IntptrTy, /* isSigned */ false); in originToIntptr()
2473 const Align IntptrAlignment = DL.getABITypeAlign(DFS.IntptrTy); in paintOrigin()
2474 unsigned IntptrSize = DL.getTypeStoreSize(DFS.IntptrTy); in paintOrigin()
2483 StoreOriginAddr, PointerType::get(DFS.IntptrTy, 0)); in paintOrigin()
2486 I ? IRB.CreateConstGEP1_32(DFS.IntptrTy, IntptrStoreOriginPtr, I) in paintOrigin()
2496 Value *GEP = I ? IRB.CreateConstGEP1_32(DFS.OriginTy, StoreOriginAddr, I) in paintOrigin()
2530 DFS.DFSanMaybeStoreOriginFn, in storeOrigin()
2531 {CollapsedShadow, Addr, ConstantInt::get(DFS.IntptrTy, Size), Origin}); in storeOrigin()
2536 Cmp, &*IRB.GetInsertPoint(), false, DFS.OriginStoreWeights, &DTU); in storeOrigin()
2549 IntegerType::get(*DFS.Ctx, Size * DFS.ShadowWidthBits); in storeZeroPrimitiveShadow()
2551 Value *ShadowAddr = DFS.getShadowAddress(Addr, Pos); in storeZeroPrimitiveShadow()
2562 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins() && Origin; in storePrimitiveShadowOrigin()
2572 if (ShouldTrackOrigins && !DFS.isZeroShadow(PrimitiveShadow)) { in storePrimitiveShadowOrigin()
2582 if (DFS.isZeroShadow(PrimitiveShadow)) { in storePrimitiveShadowOrigin()
2590 DFS.getShadowOriginAddress(Addr, InstAlignment, Pos); in storePrimitiveShadowOrigin()
2593 assert(ShadowVecSize * DFS.ShadowWidthBits <= 128 && in storePrimitiveShadowOrigin()
2600 FixedVectorType::get(DFS.PrimitiveShadowTy, ShadowVecSize); in storePrimitiveShadowOrigin()
2605 ConstantInt::get(Type::getInt32Ty(*DFS.Ctx), I)); in storePrimitiveShadowOrigin()
2618 IRB.CreateConstGEP1_32(DFS.PrimitiveShadowTy, ShadowAddr, Offset); in storePrimitiveShadowOrigin()
2663 DFSF.DFS.shouldTrackOrigins() && !SI.isAtomic(); in visitStoreInst()
2668 SI.isAtomic() ? DFSF.DFS.getZeroShadow(Val) : DFSF.getShadow(Val); in visitStoreInst()
2695 IRB.CreateCall(DFSF.DFS.DFSanStoreCallbackFn, {PrimitiveShadow, Addr}); in visitStoreInst()
2715 DFSF.setShadow(&I, DFSF.DFS.getZeroShadow(&I)); in visitCASOrRMW()
2716 DFSF.setOrigin(&I, DFSF.DFS.ZeroOrigin); in visitCASOrRMW()
2759 IRB.CreateCall(DFSF.DFS.DFSanCmpCallbackFn, CombinedShadow); in visitCmpInst()
2776 DFSF.setShadow(&LPI, DFSF.DFS.getZeroShadow(&LPI)); in visitLandingPadInst()
2777 DFSF.setOrigin(&LPI, DFSF.DFS.ZeroOrigin); in visitLandingPadInst()
2792 if (DFSF.DFS.shouldTrackOrigins()) in visitGetElementPtrInst()
2842 DFSF.AllocaShadowMap[&I] = IRB.CreateAlloca(DFSF.DFS.PrimitiveShadowTy); in visitAllocaInst()
2843 if (DFSF.DFS.shouldTrackOrigins()) { in visitAllocaInst()
2845 IRB.CreateAlloca(DFSF.DFS.OriginTy, nullptr, "_dfsa"); in visitAllocaInst()
2848 DFSF.setShadow(&I, DFSF.DFS.ZeroPrimitiveShadow); in visitAllocaInst()
2849 DFSF.setOrigin(&I, DFSF.DFS.ZeroOrigin); in visitAllocaInst()
2857 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitSelectInst()
2909 Value *ValOrigin = DFSF.DFS.shouldTrackOrigins() in visitMemSetInst()
2911 : DFSF.DFS.ZeroOrigin; in visitMemSetInst()
2912 IRB.CreateCall(DFSF.DFS.DFSanSetLabelFn, in visitMemSetInst()
2914 IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)}); in visitMemSetInst()
2922 if (DFSF.DFS.shouldTrackOrigins()) { in visitMemTransferInst()
2924 DFSF.DFS.DFSanMemOriginTransferFn, in visitMemTransferInst()
2926 IRB.CreateIntCast(I.getArgOperand(2), DFSF.DFS.IntptrTy, false)}); in visitMemTransferInst()
2929 Value *DestShadow = DFSF.DFS.getShadowAddress(I.getDest(), &I); in visitMemTransferInst()
2930 Value *SrcShadow = DFSF.DFS.getShadowAddress(I.getSource(), &I); in visitMemTransferInst()
2933 DFSF.DFS.ShadowWidthBytes)); in visitMemTransferInst()
2941 DFSF.DFS.DFSanMemTransferCallbackFn, in visitMemTransferInst()
2942 {DestShadow, IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)}); in visitMemTransferInst()
2977 unsigned Size = getDataLayout().getTypeAllocSize(DFSF.DFS.getShadowTy(RT)); in visitReturnInst()
2983 if (DFSF.DFS.shouldTrackOrigins()) { in visitReturnInst()
3003 auto *LabelVATy = ArrayType::get(DFSF.DFS.PrimitiveShadowTy, in addShadowArguments()
3022 DFSF.DFS.PrimitiveShadowTy, getDataLayout().getAllocaAddrSpace(), in addShadowArguments()
3043 ArrayType::get(DFSF.DFS.OriginTy, CB.arg_size() - FT->getNumParams()); in addOriginArguments()
3060 DFSF.DFS.OriginTy, getDataLayout().getAllocaAddrSpace(), in addOriginArguments()
3069 switch (DFSF.DFS.getWrapperKind(&F)) { in visitWrappedCallBase()
3072 IRB.CreateCall(DFSF.DFS.DFSanUnimplementedFn, in visitWrappedCallBase()
3074 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F); in visitWrappedCallBase()
3075 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitWrappedCallBase()
3076 DFSF.setOrigin(&CB, DFSF.DFS.ZeroOrigin); in visitWrappedCallBase()
3080 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F); in visitWrappedCallBase()
3081 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitWrappedCallBase()
3082 DFSF.setOrigin(&CB, DFSF.DFS.ZeroOrigin); in visitWrappedCallBase()
3086 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F); in visitWrappedCallBase()
3097 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitWrappedCallBase()
3099 TransformedFunction CustomFn = DFSF.DFS.getCustomFunctionType(FT); in visitWrappedCallBase()
3102 FunctionCallee CustomF = DFSF.DFS.Mod->getOrInsertFunction( in visitWrappedCallBase()
3109 CustomFn->removeFnAttrs(DFSF.DFS.ReadOnlyNoneAttrs); in visitWrappedCallBase()
3144 DFSF.DFS.PrimitiveShadowTy) in visitWrappedCallBase()
3149 DFSF.DFS.OriginTy) in visitWrappedCallBase()
3157 IRB.CreateLoad(DFSF.DFS.PrimitiveShadowTy, DFSF.LabelReturnAlloca); in visitWrappedCallBase()
3162 IRB.CreateLoad(DFSF.DFS.OriginTy, DFSF.OriginReturnAlloca); in visitWrappedCallBase()
3214 DFSF.DFS.DFSanMemShadowOriginTransferFn, in visitLibAtomicLoad()
3215 {DstPtr, SrcPtr, NextIRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)}); in visitLibAtomicLoad()
3252 DFSF.DFS.DFSanMemShadowOriginTransferFn, in visitLibAtomicStore()
3253 {DstPtr, SrcPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)}); in visitLibAtomicStore()
3272 DFSF.DFS.DFSanMemShadowOriginTransferFn, in visitLibAtomicExchange()
3273 {DstPtr, TargetPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)}); in visitLibAtomicExchange()
3277 DFSF.DFS.DFSanMemShadowOriginTransferFn, in visitLibAtomicExchange()
3278 {TargetPtr, SrcPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)}); in visitLibAtomicExchange()
3297 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitLibAtomicCompareExchange()
3301 NextIRB.CreateCall(DFSF.DFS.DFSanMemShadowOriginConditionalExchangeFn, in visitLibAtomicCompareExchange()
3304 NextIRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)}); in visitLibAtomicCompareExchange()
3316 if (F == DFSF.DFS.DFSanVarargWrapperFn.getCallee()->stripPointerCasts()) in visitCallBase()
3354 DFSF.DFS.UnwrappedFnMap.find(CB.getCalledOperand()); in visitCallBase()
3355 if (UnwrappedFnIt != DFSF.DFS.UnwrappedFnMap.end()) in visitCallBase()
3361 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitCallBase()
3371 if (I < DFSF.DFS.NumOfElementsInArgOrgTLS && in visitCallBase()
3372 !DFSF.DFS.isZeroShadow(ArgShadow)) in visitCallBase()
3378 DL.getTypeAllocSize(DFSF.DFS.getShadowTy(FT->getParamType(I))); in visitCallBase()
3410 unsigned Size = DL.getTypeAllocSize(DFSF.DFS.getShadowTy(&CB)); in visitCallBase()
3413 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitCallBase()
3416 DFSF.DFS.getShadowTy(&CB), DFSF.getRetvalTLS(CB.getType(), NextIRB), in visitCallBase()
3424 LoadInst *LI = NextIRB.CreateLoad(DFSF.DFS.OriginTy, in visitCallBase()
3435 Type *ShadowTy = DFSF.DFS.getShadowTy(&PN); in visitPHINode()
3447 if (DFSF.DFS.shouldTrackOrigins()) { in visitPHINode()
3449 PHINode::Create(DFSF.DFS.OriginTy, PN.getNumIncomingValues(), "", &PN); in visitPHINode()
3450 Value *UndefOrigin = UndefValue::get(DFSF.DFS.OriginTy); in visitPHINode()