Lines Matching refs:DFS

546   DataFlowSanitizer &DFS;  member
581 DFSanFunction(DataFlowSanitizer &DFS, Function *F, bool IsNativeABI, in DFSanFunction()
583 : DFS(DFS), F(F), IsNativeABI(IsNativeABI), in DFSanFunction()
912 Type *ShadowTy = DFS.getShadowTy(T); in expandFromPrimitiveShadow()
917 if (DFS.isZeroShadow(PrimitiveShadow)) in expandFromPrimitiveShadow()
918 return DFS.getZeroShadow(ShadowTy); in expandFromPrimitiveShadow()
935 return DFS.ZeroPrimitiveShadow; in collapseAggregateShadow()
985 if (DFS.shouldTrackOrigins()) { in addConditionalCallbacksIfEnabled()
987 IRB.CreateCall(DFS.DFSanConditionalCallbackOriginFn, in addConditionalCallbacksIfEnabled()
990 IRB.CreateCall(DFS.DFSanConditionalCallbackFn, {CondShadow}); in addConditionalCallbacksIfEnabled()
1583 IRB.CreateICmpNE(PrimitiveShadow, DFSF.DFS.ZeroPrimitiveShadow); in runImpl()
1587 ThenIRB.CreateCall(DFSF.DFS.DFSanNonzeroLabelFn, {}); in runImpl()
1597 Value *Base = IRB.CreatePointerCast(DFS.ArgTLS, DFS.IntptrTy); in getArgTLS()
1599 Base = IRB.CreateAdd(Base, ConstantInt::get(DFS.IntptrTy, ArgOffset)); in getArgTLS()
1600 return IRB.CreateIntToPtr(Base, PointerType::get(DFS.getShadowTy(T), 0), in getArgTLS()
1606 DFS.RetvalTLS, PointerType::get(DFS.getShadowTy(T), 0), "_dfsret"); in getRetvalTLS()
1609 Value *DFSanFunction::getRetvalOriginTLS() { return DFS.RetvalOriginTLS; } in getRetvalOriginTLS()
1612 return IRB.CreateConstGEP2_64(DFS.ArgOriginTLSTy, DFS.ArgOriginTLS, 0, ArgNo, in getArgOriginTLS()
1617 assert(DFS.shouldTrackOrigins()); in getOrigin()
1619 return DFS.ZeroOrigin; in getOrigin()
1624 return DFS.ZeroOrigin; in getOrigin()
1625 if (A->getArgNo() < DFS.NumOfElementsInArgOrgTLS) { in getOrigin()
1629 Origin = IRB.CreateLoad(DFS.OriginTy, ArgOriginPtr); in getOrigin()
1632 Origin = DFS.ZeroOrigin; in getOrigin()
1635 Origin = DFS.ZeroOrigin; in getOrigin()
1642 if (!DFS.shouldTrackOrigins()) in setOrigin()
1645 assert(Origin->getType() == DFS.OriginTy); in setOrigin()
1659 unsigned Size = DL.getTypeAllocSize(DFS.getShadowTy(&FArg)); in getShadowForTLSArgument()
1673 return IRB.CreateAlignedLoad(DFS.getShadowTy(&FArg), ArgShadowPtr, in getShadowForTLSArgument()
1677 return DFS.getZeroShadow(A); in getShadowForTLSArgument()
1682 return DFS.getZeroShadow(V); in getShadow()
1684 return DFS.getZeroShadow(V); in getShadow()
1689 return DFS.getZeroShadow(V); in getShadow()
1693 Shadow = DFS.getZeroShadow(V); in getShadow()
1778 if (DFS.isZeroShadow(V1)) in combineShadows()
1780 if (DFS.isZeroShadow(V2)) in combineShadows()
1840 return DFS.getZeroShadow(Inst); in combineOperandShadows()
1861 return DFS.ZeroOrigin; in combineOrigins()
1864 Zero = DFS.ZeroPrimitiveShadow; in combineOrigins()
1880 return Origin ? Origin : DFS.ZeroOrigin; in combineOrigins()
1895 if (!DFSF.DFS.shouldTrackOrigins()) in visitInstOperandOrigins()
1903 return Align(Alignment.value() * DFS.ShadowWidthBytes); in getShadowAlign()
1914 return DFS.CombineTaintLookupTableNames.count(GV->getName()); in isLookupTableConstant()
1939 return Alignment < MinOriginAlignment || !DFS.hasLoadSizeForFastPath(Size); in useCallbackLoadLabelAndOrigin()
1953 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins(); in loadShadowFast()
1954 const uint64_t ShadowSize = Size * DFS.ShadowWidthBytes; in loadShadowFast()
1974 ShadowSize == 4 ? Type::getInt32Ty(*DFS.Ctx) : Type::getInt64Ty(*DFS.Ctx); in loadShadowFast()
1982 const uint64_t BytesPerWideShadow = WideShadowBitWidth / DFS.ShadowWidthBits; in loadShadowFast()
1996 Origins.push_back(DFS.loadNextOrigin(Pos, OriginAlign, &OriginAddr)); in loadShadowFast()
2017 ConstantInt::get(DFS.IntptrTy, 1)); in loadShadowFast()
2022 Value *NextOrigin = DFS.loadNextOrigin(Pos, OriginAlign, &OriginAddr); in loadShadowFast()
2026 for (unsigned Width = WideShadowBitWidth / 2; Width >= DFS.ShadowWidthBits; in loadShadowFast()
2031 return {IRB.CreateTrunc(CombinedWideShadow, DFS.PrimitiveShadowTy), in loadShadowFast()
2035 : DFS.ZeroOrigin}; in loadShadowFast()
2040 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins(); in loadShadowOriginSansLoadTracking()
2047 Value *ShadowLI = IRB.CreateLoad(DFS.PrimitiveShadowTy, SI->second); in loadShadowOriginSansLoadTracking()
2051 ? IRB.CreateLoad(DFS.OriginTy, OI->second) in loadShadowOriginSansLoadTracking()
2070 return {DFS.ZeroPrimitiveShadow, in loadShadowOriginSansLoadTracking()
2071 ShouldTrackOrigins ? DFS.ZeroOrigin : nullptr}; in loadShadowOriginSansLoadTracking()
2074 return {DFS.ZeroPrimitiveShadow, in loadShadowOriginSansLoadTracking()
2075 ShouldTrackOrigins ? DFS.ZeroOrigin : nullptr}; in loadShadowOriginSansLoadTracking()
2083 IRB.CreateCall(DFS.DFSanLoadLabelAndOriginFn, in loadShadowOriginSansLoadTracking()
2085 ConstantInt::get(DFS.IntptrTy, Size)}); in loadShadowOriginSansLoadTracking()
2087 return {IRB.CreateTrunc(IRB.CreateLShr(Call, DFS.OriginWidthBits), in loadShadowOriginSansLoadTracking()
2088 DFS.PrimitiveShadowTy), in loadShadowOriginSansLoadTracking()
2089 IRB.CreateTrunc(Call, DFS.OriginTy)}; in loadShadowOriginSansLoadTracking()
2095 DFS.getShadowOriginAddress(Addr, InstAlignment, Pos); in loadShadowOriginSansLoadTracking()
2102 Origin = IRB.CreateAlignedLoad(DFS.OriginTy, OriginAddr, OriginAlign); in loadShadowOriginSansLoadTracking()
2109 LoadInst *LI = new LoadInst(DFS.PrimitiveShadowTy, ShadowAddr, "", Pos); in loadShadowOriginSansLoadTracking()
2115 Value *ShadowAddr1 = IRB.CreateGEP(DFS.PrimitiveShadowTy, ShadowAddr, in loadShadowOriginSansLoadTracking()
2116 ConstantInt::get(DFS.IntptrTy, 1)); in loadShadowOriginSansLoadTracking()
2118 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr, ShadowAlign); in loadShadowOriginSansLoadTracking()
2120 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr1, ShadowAlign); in loadShadowOriginSansLoadTracking()
2124 bool HasSizeForFastPath = DFS.hasLoadSizeForFastPath(Size); in loadShadowOriginSansLoadTracking()
2132 DFS.DFSanUnionLoadFn, {ShadowAddr, ConstantInt::get(DFS.IntptrTy, Size)}); in loadShadowOriginSansLoadTracking()
2144 if (DFS.shouldTrackOrigins()) { in loadShadowOrigin()
2199 DFSF.setShadow(&LI, DFSF.DFS.getZeroShadow(&LI)); in visitLoadInst()
2200 DFSF.setOrigin(&LI, DFSF.DFS.ZeroOrigin); in visitLoadInst()
2218 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitLoadInst()
2233 if (!DFSF.DFS.isZeroShadow(PrimitiveShadow)) in visitLoadInst()
2246 Value *Addr8 = IRB.CreateBitCast(LI.getPointerOperand(), DFSF.DFS.Int8Ptr); in visitLoadInst()
2247 IRB.CreateCall(DFSF.DFS.DFSanLoadCallbackFn, {PrimitiveShadow, Addr8}); in visitLoadInst()
2253 assert(DFS.shouldTrackOrigins()); in updateOriginIfTainted()
2254 return IRB.CreateCall(DFS.DFSanChainOriginIfTaintedFn, {Shadow, Origin}); in updateOriginIfTainted()
2258 if (!DFS.shouldTrackOrigins()) in updateOrigin()
2260 return IRB.CreateCall(DFS.DFSanChainOriginFn, V); in updateOrigin()
2266 unsigned IntptrSize = DL.getTypeStoreSize(DFS.IntptrTy); in originToIntptr()
2270 Origin = IRB.CreateIntCast(Origin, DFS.IntptrTy, /* isSigned */ false); in originToIntptr()
2279 const Align IntptrAlignment = DL.getABITypeAlign(DFS.IntptrTy); in paintOrigin()
2280 unsigned IntptrSize = DL.getTypeStoreSize(DFS.IntptrTy); in paintOrigin()
2289 StoreOriginAddr, PointerType::get(DFS.IntptrTy, 0)); in paintOrigin()
2292 I ? IRB.CreateConstGEP1_32(DFS.IntptrTy, IntptrStoreOriginPtr, I) in paintOrigin()
2302 Value *GEP = I ? IRB.CreateConstGEP1_32(DFS.OriginTy, StoreOriginAddr, I) in paintOrigin()
2335 IRB.CreateCall(DFS.DFSanMaybeStoreOriginFn, in storeOrigin()
2338 ConstantInt::get(DFS.IntptrTy, Size), Origin}); in storeOrigin()
2342 Cmp, &*IRB.GetInsertPoint(), false, DFS.OriginStoreWeights, &DT); in storeOrigin()
2355 IntegerType::get(*DFS.Ctx, Size * DFS.ShadowWidthBits); in storeZeroPrimitiveShadow()
2357 Value *ShadowAddr = DFS.getShadowAddress(Addr, Pos); in storeZeroPrimitiveShadow()
2370 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins() && Origin; in storePrimitiveShadowOrigin()
2380 if (ShouldTrackOrigins && !DFS.isZeroShadow(PrimitiveShadow)) { in storePrimitiveShadowOrigin()
2390 if (DFS.isZeroShadow(PrimitiveShadow)) { in storePrimitiveShadowOrigin()
2398 DFS.getShadowOriginAddress(Addr, InstAlignment, Pos); in storePrimitiveShadowOrigin()
2401 assert(ShadowVecSize * DFS.ShadowWidthBits <= 128 && in storePrimitiveShadowOrigin()
2408 FixedVectorType::get(DFS.PrimitiveShadowTy, ShadowVecSize); in storePrimitiveShadowOrigin()
2413 ConstantInt::get(Type::getInt32Ty(*DFS.Ctx), I)); in storePrimitiveShadowOrigin()
2428 IRB.CreateConstGEP1_32(DFS.PrimitiveShadowTy, ShadowAddr, Offset); in storePrimitiveShadowOrigin()
2473 DFSF.DFS.shouldTrackOrigins() && !SI.isAtomic(); in visitStoreInst()
2478 SI.isAtomic() ? DFSF.DFS.getZeroShadow(Val) : DFSF.getShadow(Val); in visitStoreInst()
2503 Value *Addr8 = IRB.CreateBitCast(SI.getPointerOperand(), DFSF.DFS.Int8Ptr); in visitStoreInst()
2504 IRB.CreateCall(DFSF.DFS.DFSanStoreCallbackFn, {PrimitiveShadow, Addr8}); in visitStoreInst()
2523 DFSF.setShadow(&I, DFSF.DFS.getZeroShadow(&I)); in visitCASOrRMW()
2524 DFSF.setOrigin(&I, DFSF.DFS.ZeroOrigin); in visitCASOrRMW()
2566 IRB.CreateCall(DFSF.DFS.DFSanCmpCallbackFn, CombinedShadow); in visitCmpInst()
2582 DFSF.setShadow(&LPI, DFSF.DFS.getZeroShadow(&LPI)); in visitLandingPadInst()
2583 DFSF.setOrigin(&LPI, DFSF.DFS.ZeroOrigin); in visitLandingPadInst()
2598 if (DFSF.DFS.shouldTrackOrigins()) in visitGetElementPtrInst()
2648 DFSF.AllocaShadowMap[&I] = IRB.CreateAlloca(DFSF.DFS.PrimitiveShadowTy); in visitAllocaInst()
2649 if (DFSF.DFS.shouldTrackOrigins()) { in visitAllocaInst()
2651 IRB.CreateAlloca(DFSF.DFS.OriginTy, nullptr, "_dfsa"); in visitAllocaInst()
2654 DFSF.setShadow(&I, DFSF.DFS.ZeroPrimitiveShadow); in visitAllocaInst()
2655 DFSF.setOrigin(&I, DFSF.DFS.ZeroOrigin); in visitAllocaInst()
2663 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitSelectInst()
2715 Value *ValOrigin = DFSF.DFS.shouldTrackOrigins() in visitMemSetInst()
2717 : DFSF.DFS.ZeroOrigin; in visitMemSetInst()
2719 DFSF.DFS.DFSanSetLabelFn, in visitMemSetInst()
2721 IRB.CreateBitCast(I.getDest(), Type::getInt8PtrTy(*DFSF.DFS.Ctx)), in visitMemSetInst()
2722 IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)}); in visitMemSetInst()
2730 if (DFSF.DFS.shouldTrackOrigins()) { in visitMemTransferInst()
2732 DFSF.DFS.DFSanMemOriginTransferFn, in visitMemTransferInst()
2735 IRB.CreateIntCast(I.getArgOperand(2), DFSF.DFS.IntptrTy, false)}); in visitMemTransferInst()
2738 Value *RawDestShadow = DFSF.DFS.getShadowAddress(I.getDest(), &I); in visitMemTransferInst()
2739 Value *SrcShadow = DFSF.DFS.getShadowAddress(I.getSource(), &I); in visitMemTransferInst()
2742 DFSF.DFS.ShadowWidthBytes)); in visitMemTransferInst()
2743 Type *Int8Ptr = Type::getInt8PtrTy(*DFSF.DFS.Ctx); in visitMemTransferInst()
2752 IRB.CreateCall(DFSF.DFS.DFSanMemTransferCallbackFn, in visitMemTransferInst()
2754 IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)}); in visitMemTransferInst()
2789 unsigned Size = getDataLayout().getTypeAllocSize(DFSF.DFS.getShadowTy(RT)); in visitReturnInst()
2795 if (DFSF.DFS.shouldTrackOrigins()) { in visitReturnInst()
2815 auto *LabelVATy = ArrayType::get(DFSF.DFS.PrimitiveShadowTy, in addShadowArguments()
2834 DFSF.DFS.PrimitiveShadowTy, getDataLayout().getAllocaAddrSpace(), in addShadowArguments()
2855 ArrayType::get(DFSF.DFS.OriginTy, CB.arg_size() - FT->getNumParams()); in addOriginArguments()
2872 DFSF.DFS.OriginTy, getDataLayout().getAllocaAddrSpace(), in addOriginArguments()
2881 switch (DFSF.DFS.getWrapperKind(&F)) { in visitWrappedCallBase()
2884 IRB.CreateCall(DFSF.DFS.DFSanUnimplementedFn, in visitWrappedCallBase()
2886 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F); in visitWrappedCallBase()
2887 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitWrappedCallBase()
2888 DFSF.setOrigin(&CB, DFSF.DFS.ZeroOrigin); in visitWrappedCallBase()
2892 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F); in visitWrappedCallBase()
2893 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitWrappedCallBase()
2894 DFSF.setOrigin(&CB, DFSF.DFS.ZeroOrigin); in visitWrappedCallBase()
2898 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F); in visitWrappedCallBase()
2909 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitWrappedCallBase()
2911 TransformedFunction CustomFn = DFSF.DFS.getCustomFunctionType(FT); in visitWrappedCallBase()
2914 FunctionCallee CustomF = DFSF.DFS.Mod->getOrInsertFunction( in visitWrappedCallBase()
2921 CustomFn->removeFnAttrs(DFSF.DFS.ReadOnlyNoneAttrs); in visitWrappedCallBase()
2956 DFSF.DFS.PrimitiveShadowTy) in visitWrappedCallBase()
2961 DFSF.DFS.OriginTy) in visitWrappedCallBase()
2969 IRB.CreateLoad(DFSF.DFS.PrimitiveShadowTy, DFSF.LabelReturnAlloca); in visitWrappedCallBase()
2974 IRB.CreateLoad(DFSF.DFS.OriginTy, DFSF.OriginReturnAlloca); in visitWrappedCallBase()
2995 if (F == DFSF.DFS.DFSanVarargWrapperFn.getCallee()->stripPointerCasts()) in visitCallBase()
2999 DFSF.DFS.UnwrappedFnMap.find(CB.getCalledOperand()); in visitCallBase()
3000 if (UnwrappedFnIt != DFSF.DFS.UnwrappedFnMap.end()) in visitCallBase()
3006 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitCallBase()
3016 if (I < DFSF.DFS.NumOfElementsInArgOrgTLS && in visitCallBase()
3017 !DFSF.DFS.isZeroShadow(ArgShadow)) in visitCallBase()
3023 DL.getTypeAllocSize(DFSF.DFS.getShadowTy(FT->getParamType(I))); in visitCallBase()
3055 unsigned Size = DL.getTypeAllocSize(DFSF.DFS.getShadowTy(&CB)); in visitCallBase()
3058 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitCallBase()
3061 DFSF.DFS.getShadowTy(&CB), DFSF.getRetvalTLS(CB.getType(), NextIRB), in visitCallBase()
3069 LoadInst *LI = NextIRB.CreateLoad(DFSF.DFS.OriginTy, in visitCallBase()
3078 Type *ShadowTy = DFSF.DFS.getShadowTy(&PN); in visitPHINode()
3090 if (DFSF.DFS.shouldTrackOrigins()) { in visitPHINode()
3092 PHINode::Create(DFSF.DFS.OriginTy, PN.getNumIncomingValues(), "", &PN); in visitPHINode()
3093 Value *UndefOrigin = UndefValue::get(DFSF.DFS.OriginTy); in visitPHINode()