Lines Matching refs:DFS
582 DataFlowSanitizer &DFS; member
618 DFSanFunction(DataFlowSanitizer &DFS, Function *F, bool IsNativeABI, in DFSanFunction()
620 : DFS(DFS), F(F), IsNativeABI(IsNativeABI), in DFSanFunction()
983 Type *ShadowTy = DFS.getShadowTy(T); in expandFromPrimitiveShadow()
988 if (DFS.isZeroShadow(PrimitiveShadow)) in expandFromPrimitiveShadow()
989 return DFS.getZeroShadow(ShadowTy); in expandFromPrimitiveShadow()
1006 return DFS.ZeroPrimitiveShadow; in collapseAggregateShadow()
1057 if (DFS.shouldTrackOrigins()) { in addConditionalCallbacksIfEnabled()
1059 CI = IRB.CreateCall(DFS.DFSanConditionalCallbackOriginFn, in addConditionalCallbacksIfEnabled()
1062 CI = IRB.CreateCall(DFS.DFSanConditionalCallbackFn, {CondShadow}); in addConditionalCallbacksIfEnabled()
1095 if (DFS.shouldTrackOrigins()) { in addReachesFunctionCallbacksIfEnabled()
1098 CB = IRB.CreateCall(DFS.DFSanReachesFunctionCallbackOriginFn, args); in addReachesFunctionCallbacksIfEnabled()
1101 CB = IRB.CreateCall(DFS.DFSanReachesFunctionCallbackFn, args); in addReachesFunctionCallbacksIfEnabled()
1778 IRB.CreateICmpNE(PrimitiveShadow, DFSF.DFS.ZeroPrimitiveShadow); in runImpl()
1782 ThenIRB.CreateCall(DFSF.DFS.DFSanNonzeroLabelFn, {}); in runImpl()
1792 Value *Base = IRB.CreatePointerCast(DFS.ArgTLS, DFS.IntptrTy); in getArgTLS()
1794 Base = IRB.CreateAdd(Base, ConstantInt::get(DFS.IntptrTy, ArgOffset)); in getArgTLS()
1795 return IRB.CreateIntToPtr(Base, PointerType::get(DFS.getShadowTy(T), 0), in getArgTLS()
1801 DFS.RetvalTLS, PointerType::get(DFS.getShadowTy(T), 0), "_dfsret"); in getRetvalTLS()
1804 Value *DFSanFunction::getRetvalOriginTLS() { return DFS.RetvalOriginTLS; } in getRetvalOriginTLS()
1807 return IRB.CreateConstInBoundsGEP2_64(DFS.ArgOriginTLSTy, DFS.ArgOriginTLS, 0, in getArgOriginTLS()
1812 assert(DFS.shouldTrackOrigins()); in getOrigin()
1814 return DFS.ZeroOrigin; in getOrigin()
1819 return DFS.ZeroOrigin; in getOrigin()
1820 if (A->getArgNo() < DFS.NumOfElementsInArgOrgTLS) { in getOrigin()
1824 Origin = IRB.CreateLoad(DFS.OriginTy, ArgOriginPtr); in getOrigin()
1827 Origin = DFS.ZeroOrigin; in getOrigin()
1830 Origin = DFS.ZeroOrigin; in getOrigin()
1837 if (!DFS.shouldTrackOrigins()) in setOrigin()
1840 assert(Origin->getType() == DFS.OriginTy); in setOrigin()
1854 unsigned Size = DL.getTypeAllocSize(DFS.getShadowTy(&FArg)); in getShadowForTLSArgument()
1868 return IRB.CreateAlignedLoad(DFS.getShadowTy(&FArg), ArgShadowPtr, in getShadowForTLSArgument()
1872 return DFS.getZeroShadow(A); in getShadowForTLSArgument()
1877 return DFS.getZeroShadow(V); in getShadow()
1879 return DFS.getZeroShadow(V); in getShadow()
1884 return DFS.getZeroShadow(V); in getShadow()
1888 Shadow = DFS.getZeroShadow(V); in getShadow()
1976 if (DFS.isZeroShadow(V1)) in combineShadows()
1978 if (DFS.isZeroShadow(V2)) in combineShadows()
2038 return DFS.getZeroShadow(Inst); in combineOperandShadows()
2062 return DFS.ZeroOrigin; in combineOrigins()
2065 Zero = DFS.ZeroPrimitiveShadow; in combineOrigins()
2081 return Origin ? Origin : DFS.ZeroOrigin; in combineOrigins()
2096 if (!DFSF.DFS.shouldTrackOrigins()) in visitInstOperandOrigins()
2104 return Align(Alignment.value() * DFS.ShadowWidthBytes); in getShadowAlign()
2115 return DFS.CombineTaintLookupTableNames.count(GV->getName()); in isLookupTableConstant()
2140 return Alignment < MinOriginAlignment || !DFS.hasLoadSizeForFastPath(Size); in useCallbackLoadLabelAndOrigin()
2155 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins(); in loadShadowFast()
2156 const uint64_t ShadowSize = Size * DFS.ShadowWidthBytes; in loadShadowFast()
2176 ShadowSize == 4 ? Type::getInt32Ty(*DFS.Ctx) : Type::getInt64Ty(*DFS.Ctx); in loadShadowFast()
2183 const uint64_t BytesPerWideShadow = WideShadowBitWidth / DFS.ShadowWidthBits; in loadShadowFast()
2197 Origins.push_back(DFS.loadNextOrigin(Pos, OriginAlign, &OriginAddr)); in loadShadowFast()
2218 ConstantInt::get(DFS.IntptrTy, 1)); in loadShadowFast()
2223 Value *NextOrigin = DFS.loadNextOrigin(Pos, OriginAlign, &OriginAddr); in loadShadowFast()
2227 for (unsigned Width = WideShadowBitWidth / 2; Width >= DFS.ShadowWidthBits; in loadShadowFast()
2232 return {IRB.CreateTrunc(CombinedWideShadow, DFS.PrimitiveShadowTy), in loadShadowFast()
2236 : DFS.ZeroOrigin}; in loadShadowFast()
2241 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins(); in loadShadowOriginSansLoadTracking()
2248 Value *ShadowLI = IRB.CreateLoad(DFS.PrimitiveShadowTy, SI->second); in loadShadowOriginSansLoadTracking()
2252 ? IRB.CreateLoad(DFS.OriginTy, OI->second) in loadShadowOriginSansLoadTracking()
2271 return {DFS.ZeroPrimitiveShadow, in loadShadowOriginSansLoadTracking()
2272 ShouldTrackOrigins ? DFS.ZeroOrigin : nullptr}; in loadShadowOriginSansLoadTracking()
2275 return {DFS.ZeroPrimitiveShadow, in loadShadowOriginSansLoadTracking()
2276 ShouldTrackOrigins ? DFS.ZeroOrigin : nullptr}; in loadShadowOriginSansLoadTracking()
2284 IRB.CreateCall(DFS.DFSanLoadLabelAndOriginFn, in loadShadowOriginSansLoadTracking()
2285 {Addr, ConstantInt::get(DFS.IntptrTy, Size)}); in loadShadowOriginSansLoadTracking()
2287 return {IRB.CreateTrunc(IRB.CreateLShr(Call, DFS.OriginWidthBits), in loadShadowOriginSansLoadTracking()
2288 DFS.PrimitiveShadowTy), in loadShadowOriginSansLoadTracking()
2289 IRB.CreateTrunc(Call, DFS.OriginTy)}; in loadShadowOriginSansLoadTracking()
2295 DFS.getShadowOriginAddress(Addr, InstAlignment, Pos); in loadShadowOriginSansLoadTracking()
2302 Origin = IRB.CreateAlignedLoad(DFS.OriginTy, OriginAddr, OriginAlign); in loadShadowOriginSansLoadTracking()
2309 LoadInst *LI = new LoadInst(DFS.PrimitiveShadowTy, ShadowAddr, "", Pos); in loadShadowOriginSansLoadTracking()
2315 Value *ShadowAddr1 = IRB.CreateGEP(DFS.PrimitiveShadowTy, ShadowAddr, in loadShadowOriginSansLoadTracking()
2316 ConstantInt::get(DFS.IntptrTy, 1)); in loadShadowOriginSansLoadTracking()
2318 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr, ShadowAlign); in loadShadowOriginSansLoadTracking()
2320 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr1, ShadowAlign); in loadShadowOriginSansLoadTracking()
2324 bool HasSizeForFastPath = DFS.hasLoadSizeForFastPath(Size); in loadShadowOriginSansLoadTracking()
2332 DFS.DFSanUnionLoadFn, {ShadowAddr, ConstantInt::get(DFS.IntptrTy, Size)}); in loadShadowOriginSansLoadTracking()
2343 if (DFS.shouldTrackOrigins()) { in loadShadowOrigin()
2398 DFSF.setShadow(&LI, DFSF.DFS.getZeroShadow(&LI)); in visitLoadInst()
2399 DFSF.setOrigin(&LI, DFSF.DFS.ZeroOrigin); in visitLoadInst()
2421 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitLoadInst()
2436 if (!DFSF.DFS.isZeroShadow(PrimitiveShadow)) in visitLoadInst()
2451 IRB.CreateCall(DFSF.DFS.DFSanLoadCallbackFn, {PrimitiveShadow, Addr}); in visitLoadInst()
2461 assert(DFS.shouldTrackOrigins()); in updateOriginIfTainted()
2462 return IRB.CreateCall(DFS.DFSanChainOriginIfTaintedFn, {Shadow, Origin}); in updateOriginIfTainted()
2466 if (!DFS.shouldTrackOrigins()) in updateOrigin()
2468 return IRB.CreateCall(DFS.DFSanChainOriginFn, V); in updateOrigin()
2474 unsigned IntptrSize = DL.getTypeStoreSize(DFS.IntptrTy); in originToIntptr()
2478 Origin = IRB.CreateIntCast(Origin, DFS.IntptrTy, /* isSigned */ false); in originToIntptr()
2487 const Align IntptrAlignment = DL.getABITypeAlign(DFS.IntptrTy); in paintOrigin()
2488 unsigned IntptrSize = DL.getTypeStoreSize(DFS.IntptrTy); in paintOrigin()
2497 StoreOriginAddr, PointerType::get(DFS.IntptrTy, 0)); in paintOrigin()
2500 I ? IRB.CreateConstGEP1_32(DFS.IntptrTy, IntptrStoreOriginPtr, I) in paintOrigin()
2510 Value *GEP = I ? IRB.CreateConstGEP1_32(DFS.OriginTy, StoreOriginAddr, I) in paintOrigin()
2544 DFS.DFSanMaybeStoreOriginFn, in storeOrigin()
2545 {CollapsedShadow, Addr, ConstantInt::get(DFS.IntptrTy, Size), Origin}); in storeOrigin()
2550 Cmp, &*IRB.GetInsertPoint(), false, DFS.OriginStoreWeights, &DTU); in storeOrigin()
2563 IntegerType::get(*DFS.Ctx, Size * DFS.ShadowWidthBits); in storeZeroPrimitiveShadow()
2565 Value *ShadowAddr = DFS.getShadowAddress(Addr, Pos); in storeZeroPrimitiveShadow()
2576 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins() && Origin; in storePrimitiveShadowOrigin()
2586 if (ShouldTrackOrigins && !DFS.isZeroShadow(PrimitiveShadow)) { in storePrimitiveShadowOrigin()
2596 if (DFS.isZeroShadow(PrimitiveShadow)) { in storePrimitiveShadowOrigin()
2604 DFS.getShadowOriginAddress(Addr, InstAlignment, Pos); in storePrimitiveShadowOrigin()
2607 assert(ShadowVecSize * DFS.ShadowWidthBits <= 128 && in storePrimitiveShadowOrigin()
2614 FixedVectorType::get(DFS.PrimitiveShadowTy, ShadowVecSize); in storePrimitiveShadowOrigin()
2619 ConstantInt::get(Type::getInt32Ty(*DFS.Ctx), I)); in storePrimitiveShadowOrigin()
2632 IRB.CreateConstGEP1_32(DFS.PrimitiveShadowTy, ShadowAddr, Offset); in storePrimitiveShadowOrigin()
2677 DFSF.DFS.shouldTrackOrigins() && !SI.isAtomic(); in visitStoreInst()
2682 SI.isAtomic() ? DFSF.DFS.getZeroShadow(Val) : DFSF.getShadow(Val); in visitStoreInst()
2709 IRB.CreateCall(DFSF.DFS.DFSanStoreCallbackFn, {PrimitiveShadow, Addr}); in visitStoreInst()
2729 DFSF.setShadow(&I, DFSF.DFS.getZeroShadow(&I)); in visitCASOrRMW()
2730 DFSF.setOrigin(&I, DFSF.DFS.ZeroOrigin); in visitCASOrRMW()
2773 IRB.CreateCall(DFSF.DFS.DFSanCmpCallbackFn, CombinedShadow); in visitCmpInst()
2790 DFSF.setShadow(&LPI, DFSF.DFS.getZeroShadow(&LPI)); in visitLandingPadInst()
2791 DFSF.setOrigin(&LPI, DFSF.DFS.ZeroOrigin); in visitLandingPadInst()
2806 if (DFSF.DFS.shouldTrackOrigins()) in visitGetElementPtrInst()
2856 DFSF.AllocaShadowMap[&I] = IRB.CreateAlloca(DFSF.DFS.PrimitiveShadowTy); in visitAllocaInst()
2857 if (DFSF.DFS.shouldTrackOrigins()) { in visitAllocaInst()
2859 IRB.CreateAlloca(DFSF.DFS.OriginTy, nullptr, "_dfsa"); in visitAllocaInst()
2862 DFSF.setShadow(&I, DFSF.DFS.ZeroPrimitiveShadow); in visitAllocaInst()
2863 DFSF.setOrigin(&I, DFSF.DFS.ZeroOrigin); in visitAllocaInst()
2871 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitSelectInst()
2923 Value *ValOrigin = DFSF.DFS.shouldTrackOrigins() in visitMemSetInst()
2925 : DFSF.DFS.ZeroOrigin; in visitMemSetInst()
2926 IRB.CreateCall(DFSF.DFS.DFSanSetLabelFn, in visitMemSetInst()
2928 IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)}); in visitMemSetInst()
2936 if (DFSF.DFS.shouldTrackOrigins()) { in visitMemTransferInst()
2938 DFSF.DFS.DFSanMemOriginTransferFn, in visitMemTransferInst()
2940 IRB.CreateIntCast(I.getArgOperand(2), DFSF.DFS.IntptrTy, false)}); in visitMemTransferInst()
2943 Value *DestShadow = DFSF.DFS.getShadowAddress(I.getDest(), I.getIterator()); in visitMemTransferInst()
2944 Value *SrcShadow = DFSF.DFS.getShadowAddress(I.getSource(), I.getIterator()); in visitMemTransferInst()
2947 DFSF.DFS.ShadowWidthBytes)); in visitMemTransferInst()
2955 DFSF.DFS.DFSanMemTransferCallbackFn, in visitMemTransferInst()
2956 {DestShadow, IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)}); in visitMemTransferInst()
2991 unsigned Size = getDataLayout().getTypeAllocSize(DFSF.DFS.getShadowTy(RT)); in visitReturnInst()
2997 if (DFSF.DFS.shouldTrackOrigins()) { in visitReturnInst()
3018 auto *LabelVATy = ArrayType::get(DFSF.DFS.PrimitiveShadowTy, in addShadowArguments()
3038 DFSF.DFS.PrimitiveShadowTy, getDataLayout().getAllocaAddrSpace(), in addShadowArguments()
3059 ArrayType::get(DFSF.DFS.OriginTy, CB.arg_size() - FT->getNumParams()); in addOriginArguments()
3076 DFSF.DFS.OriginTy, getDataLayout().getAllocaAddrSpace(), in addOriginArguments()
3085 switch (DFSF.DFS.getWrapperKind(&F)) { in visitWrappedCallBase()
3088 IRB.CreateCall(DFSF.DFS.DFSanUnimplementedFn, in visitWrappedCallBase()
3090 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F); in visitWrappedCallBase()
3091 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitWrappedCallBase()
3092 DFSF.setOrigin(&CB, DFSF.DFS.ZeroOrigin); in visitWrappedCallBase()
3096 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F); in visitWrappedCallBase()
3097 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitWrappedCallBase()
3098 DFSF.setOrigin(&CB, DFSF.DFS.ZeroOrigin); in visitWrappedCallBase()
3102 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F); in visitWrappedCallBase()
3113 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitWrappedCallBase()
3115 TransformedFunction CustomFn = DFSF.DFS.getCustomFunctionType(FT); in visitWrappedCallBase()
3118 FunctionCallee CustomF = DFSF.DFS.Mod->getOrInsertFunction( in visitWrappedCallBase()
3125 CustomFn->removeFnAttrs(DFSF.DFS.ReadOnlyNoneAttrs); in visitWrappedCallBase()
3160 DFSF.DFS.PrimitiveShadowTy) in visitWrappedCallBase()
3165 DFSF.DFS.OriginTy) in visitWrappedCallBase()
3173 IRB.CreateLoad(DFSF.DFS.PrimitiveShadowTy, DFSF.LabelReturnAlloca); in visitWrappedCallBase()
3179 IRB.CreateLoad(DFSF.DFS.OriginTy, DFSF.OriginReturnAlloca); in visitWrappedCallBase()
3230 DFSF.DFS.DFSanMemShadowOriginTransferFn, in visitLibAtomicLoad()
3231 {DstPtr, SrcPtr, NextIRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)}); in visitLibAtomicLoad()
3267 DFSF.DFS.DFSanMemShadowOriginTransferFn, in visitLibAtomicStore()
3268 {DstPtr, SrcPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)}); in visitLibAtomicStore()
3287 DFSF.DFS.DFSanMemShadowOriginTransferFn, in visitLibAtomicExchange()
3288 {DstPtr, TargetPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)}); in visitLibAtomicExchange()
3292 DFSF.DFS.DFSanMemShadowOriginTransferFn, in visitLibAtomicExchange()
3293 {TargetPtr, SrcPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)}); in visitLibAtomicExchange()
3312 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitLibAtomicCompareExchange()
3316 NextIRB.CreateCall(DFSF.DFS.DFSanMemShadowOriginConditionalExchangeFn, in visitLibAtomicCompareExchange()
3319 NextIRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)}); in visitLibAtomicCompareExchange()
3331 if (F == DFSF.DFS.DFSanVarargWrapperFn.getCallee()->stripPointerCasts()) in visitCallBase()
3369 DFSF.DFS.UnwrappedFnMap.find(CB.getCalledOperand()); in visitCallBase()
3370 if (UnwrappedFnIt != DFSF.DFS.UnwrappedFnMap.end()) in visitCallBase()
3376 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitCallBase()
3386 if (I < DFSF.DFS.NumOfElementsInArgOrgTLS && in visitCallBase()
3387 !DFSF.DFS.isZeroShadow(ArgShadow)) in visitCallBase()
3393 DL.getTypeAllocSize(DFSF.DFS.getShadowTy(FT->getParamType(I))); in visitCallBase()
3425 unsigned Size = DL.getTypeAllocSize(DFSF.DFS.getShadowTy(&CB)); in visitCallBase()
3428 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitCallBase()
3431 DFSF.DFS.getShadowTy(&CB), DFSF.getRetvalTLS(CB.getType(), NextIRB), in visitCallBase()
3439 LoadInst *LI = NextIRB.CreateLoad(DFSF.DFS.OriginTy, in visitCallBase()
3450 Type *ShadowTy = DFSF.DFS.getShadowTy(&PN); in visitPHINode()
3462 if (DFSF.DFS.shouldTrackOrigins()) { in visitPHINode()
3463 OriginPN = PHINode::Create(DFSF.DFS.OriginTy, PN.getNumIncomingValues(), "", in visitPHINode()
3465 Value *UndefOrigin = UndefValue::get(DFSF.DFS.OriginTy); in visitPHINode()