Lines Matching refs:DFS

539   DataFlowSanitizer &DFS;  member
574 DFSanFunction(DataFlowSanitizer &DFS, Function *F, bool IsNativeABI) in DFSanFunction()
575 : DFS(DFS), F(F), IA(DFS.getInstrumentedABI()), IsNativeABI(IsNativeABI) { in DFSanFunction()
941 Type *ShadowTy = DFS.getShadowTy(T); in expandFromPrimitiveShadow()
946 if (DFS.isZeroShadow(PrimitiveShadow)) in expandFromPrimitiveShadow()
947 return DFS.getZeroShadow(ShadowTy); in expandFromPrimitiveShadow()
964 return DFS.ZeroPrimitiveShadow; in collapseAggregateShadow()
995 assert(DFS.shouldTrackFieldsAndIndices()); in collapseToPrimitiveShadow()
1610 IRB.CreateICmpNE(PrimitiveShadow, DFSF.DFS.ZeroPrimitiveShadow); in runImpl()
1614 ThenIRB.CreateCall(DFSF.DFS.DFSanNonzeroLabelFn, {}); in runImpl()
1624 Value *Base = IRB.CreatePointerCast(DFS.ArgTLS, DFS.IntptrTy); in getArgTLS()
1626 Base = IRB.CreateAdd(Base, ConstantInt::get(DFS.IntptrTy, ArgOffset)); in getArgTLS()
1627 return IRB.CreateIntToPtr(Base, PointerType::get(DFS.getShadowTy(T), 0), in getArgTLS()
1633 DFS.RetvalTLS, PointerType::get(DFS.getShadowTy(T), 0), "_dfsret"); in getRetvalTLS()
1636 Value *DFSanFunction::getRetvalOriginTLS() { return DFS.RetvalOriginTLS; } in getRetvalOriginTLS()
1639 return IRB.CreateConstGEP2_64(DFS.ArgOriginTLSTy, DFS.ArgOriginTLS, 0, ArgNo, in getArgOriginTLS()
1644 assert(DFS.shouldTrackOrigins()); in getOrigin()
1646 return DFS.ZeroOrigin; in getOrigin()
1651 return DFS.ZeroOrigin; in getOrigin()
1654 if (A->getArgNo() < DFS.NumOfElementsInArgOrgTLS) { in getOrigin()
1658 Origin = IRB.CreateLoad(DFS.OriginTy, ArgOriginPtr); in getOrigin()
1661 Origin = DFS.ZeroOrigin; in getOrigin()
1666 Origin = DFS.ZeroOrigin; in getOrigin()
1671 Origin = DFS.ZeroOrigin; in getOrigin()
1678 if (!DFS.shouldTrackOrigins()) in setOrigin()
1681 assert(Origin->getType() == DFS.OriginTy); in setOrigin()
1695 unsigned Size = DL.getTypeAllocSize(DFS.getShadowTy(&FArg)); in getShadowForTLSArgument()
1709 return IRB.CreateAlignedLoad(DFS.getShadowTy(&FArg), ArgShadowPtr, in getShadowForTLSArgument()
1713 return DFS.getZeroShadow(A); in getShadowForTLSArgument()
1718 return DFS.getZeroShadow(V); in getShadow()
1723 return DFS.getZeroShadow(V); in getShadow()
1734 assert(Shadow->getType() == DFS.PrimitiveShadowTy); in getShadow()
1740 Shadow = DFS.getZeroShadow(V); in getShadow()
1748 assert(DFS.shouldTrackFieldsAndIndices() || in setShadow()
1749 Shadow->getType() == DFS.PrimitiveShadowTy); in setShadow()
1827 if (DFS.isZeroShadow(V1)) in combineShadows()
1829 if (DFS.isZeroShadow(V2)) in combineShadows()
1889 return DFS.getZeroShadow(Inst); in combineOperandShadows()
1910 return DFS.ZeroOrigin; in combineOrigins()
1913 Zero = DFS.ZeroPrimitiveShadow; in combineOrigins()
1929 return Origin ? Origin : DFS.ZeroOrigin; in combineOrigins()
1944 if (!DFSF.DFS.shouldTrackOrigins()) in visitInstOperandOrigins()
1952 return Align(Alignment.value() * DFS.ShadowWidthBytes); in getShadowAlign()
1980 return Alignment < MinOriginAlignment || !DFS.hasLoadSizeForFastPath(Size); in useCallbackLoadLabelAndOrigin()
1994 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins(); in loadShadowFast()
1995 const uint64_t ShadowSize = Size * DFS.ShadowWidthBytes; in loadShadowFast()
2015 ShadowSize == 4 ? Type::getInt32Ty(*DFS.Ctx) : Type::getInt64Ty(*DFS.Ctx); in loadShadowFast()
2023 const uint64_t BytesPerWideShadow = WideShadowBitWidth / DFS.ShadowWidthBits; in loadShadowFast()
2037 Origins.push_back(DFS.loadNextOrigin(Pos, OriginAlign, &OriginAddr)); in loadShadowFast()
2058 ConstantInt::get(DFS.IntptrTy, 1)); in loadShadowFast()
2063 Value *NextOrigin = DFS.loadNextOrigin(Pos, OriginAlign, &OriginAddr); in loadShadowFast()
2067 for (unsigned Width = WideShadowBitWidth / 2; Width >= DFS.ShadowWidthBits; in loadShadowFast()
2072 return {IRB.CreateTrunc(CombinedWideShadow, DFS.PrimitiveShadowTy), in loadShadowFast()
2076 : DFS.ZeroOrigin}; in loadShadowFast()
2081 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins(); in loadShadowOriginSansLoadTracking()
2088 Value *ShadowLI = IRB.CreateLoad(DFS.PrimitiveShadowTy, SI->second); in loadShadowOriginSansLoadTracking()
2092 ? IRB.CreateLoad(DFS.OriginTy, OI->second) in loadShadowOriginSansLoadTracking()
2111 return {DFS.ZeroPrimitiveShadow, in loadShadowOriginSansLoadTracking()
2112 ShouldTrackOrigins ? DFS.ZeroOrigin : nullptr}; in loadShadowOriginSansLoadTracking()
2115 return {DFS.ZeroPrimitiveShadow, in loadShadowOriginSansLoadTracking()
2116 ShouldTrackOrigins ? DFS.ZeroOrigin : nullptr}; in loadShadowOriginSansLoadTracking()
2124 IRB.CreateCall(DFS.DFSanLoadLabelAndOriginFn, in loadShadowOriginSansLoadTracking()
2126 ConstantInt::get(DFS.IntptrTy, Size)}); in loadShadowOriginSansLoadTracking()
2128 return {IRB.CreateTrunc(IRB.CreateLShr(Call, DFS.OriginWidthBits), in loadShadowOriginSansLoadTracking()
2129 DFS.PrimitiveShadowTy), in loadShadowOriginSansLoadTracking()
2130 IRB.CreateTrunc(Call, DFS.OriginTy)}; in loadShadowOriginSansLoadTracking()
2136 DFS.getShadowOriginAddress(Addr, InstAlignment, Pos); in loadShadowOriginSansLoadTracking()
2143 Origin = IRB.CreateAlignedLoad(DFS.OriginTy, OriginAddr, OriginAlign); in loadShadowOriginSansLoadTracking()
2150 LoadInst *LI = new LoadInst(DFS.PrimitiveShadowTy, ShadowAddr, "", Pos); in loadShadowOriginSansLoadTracking()
2156 Value *ShadowAddr1 = IRB.CreateGEP(DFS.PrimitiveShadowTy, ShadowAddr, in loadShadowOriginSansLoadTracking()
2157 ConstantInt::get(DFS.IntptrTy, 1)); in loadShadowOriginSansLoadTracking()
2159 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr, ShadowAlign); in loadShadowOriginSansLoadTracking()
2161 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr1, ShadowAlign); in loadShadowOriginSansLoadTracking()
2165 bool HasSizeForFastPath = DFS.hasLoadSizeForFastPath(Size); in loadShadowOriginSansLoadTracking()
2173 DFS.DFSanUnionLoadFn, {ShadowAddr, ConstantInt::get(DFS.IntptrTy, Size)}); in loadShadowOriginSansLoadTracking()
2185 if (DFS.shouldTrackOrigins()) { in loadShadowOrigin()
2217 DFSF.setShadow(&LI, DFSF.DFS.getZeroShadow(&LI)); in visitLoadInst()
2218 DFSF.setOrigin(&LI, DFSF.DFS.ZeroOrigin); in visitLoadInst()
2236 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitLoadInst()
2249 if (!DFSF.DFS.isZeroShadow(PrimitiveShadow)) in visitLoadInst()
2262 Value *Addr8 = IRB.CreateBitCast(LI.getPointerOperand(), DFSF.DFS.Int8Ptr); in visitLoadInst()
2263 IRB.CreateCall(DFSF.DFS.DFSanLoadCallbackFn, {PrimitiveShadow, Addr8}); in visitLoadInst()
2269 assert(DFS.shouldTrackOrigins()); in updateOriginIfTainted()
2270 return IRB.CreateCall(DFS.DFSanChainOriginIfTaintedFn, {Shadow, Origin}); in updateOriginIfTainted()
2274 if (!DFS.shouldTrackOrigins()) in updateOrigin()
2276 return IRB.CreateCall(DFS.DFSanChainOriginFn, V); in updateOrigin()
2282 unsigned IntptrSize = DL.getTypeStoreSize(DFS.IntptrTy); in originToIntptr()
2286 Origin = IRB.CreateIntCast(Origin, DFS.IntptrTy, /* isSigned */ false); in originToIntptr()
2295 const Align IntptrAlignment = DL.getABITypeAlign(DFS.IntptrTy); in paintOrigin()
2296 unsigned IntptrSize = DL.getTypeStoreSize(DFS.IntptrTy); in paintOrigin()
2305 StoreOriginAddr, PointerType::get(DFS.IntptrTy, 0)); in paintOrigin()
2308 I ? IRB.CreateConstGEP1_32(DFS.IntptrTy, IntptrStoreOriginPtr, I) in paintOrigin()
2318 Value *GEP = I ? IRB.CreateConstGEP1_32(DFS.OriginTy, StoreOriginAddr, I) in paintOrigin()
2351 IRB.CreateCall(DFS.DFSanMaybeStoreOriginFn, in storeOrigin()
2354 ConstantInt::get(DFS.IntptrTy, Size), Origin}); in storeOrigin()
2358 Cmp, &*IRB.GetInsertPoint(), false, DFS.OriginStoreWeights, &DT); in storeOrigin()
2371 IntegerType::get(*DFS.Ctx, Size * DFS.ShadowWidthBits); in storeZeroPrimitiveShadow()
2373 Value *ShadowAddr = DFS.getShadowAddress(Addr, Pos); in storeZeroPrimitiveShadow()
2386 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins() && Origin; in storePrimitiveShadowOrigin()
2396 if (ShouldTrackOrigins && !DFS.isZeroShadow(PrimitiveShadow)) { in storePrimitiveShadowOrigin()
2406 if (DFS.isZeroShadow(PrimitiveShadow)) { in storePrimitiveShadowOrigin()
2414 DFS.getShadowOriginAddress(Addr, InstAlignment, Pos); in storePrimitiveShadowOrigin()
2417 assert(ShadowVecSize * DFS.ShadowWidthBits <= 128 && in storePrimitiveShadowOrigin()
2424 FixedVectorType::get(DFS.PrimitiveShadowTy, ShadowVecSize); in storePrimitiveShadowOrigin()
2429 ConstantInt::get(Type::getInt32Ty(*DFS.Ctx), I)); in storePrimitiveShadowOrigin()
2444 IRB.CreateConstGEP1_32(DFS.PrimitiveShadowTy, ShadowAddr, Offset); in storePrimitiveShadowOrigin()
2489 DFSF.DFS.shouldTrackOrigins() && !SI.isAtomic(); in visitStoreInst()
2494 SI.isAtomic() ? DFSF.DFS.getZeroShadow(Val) : DFSF.getShadow(Val); in visitStoreInst()
2519 Value *Addr8 = IRB.CreateBitCast(SI.getPointerOperand(), DFSF.DFS.Int8Ptr); in visitStoreInst()
2520 IRB.CreateCall(DFSF.DFS.DFSanStoreCallbackFn, {PrimitiveShadow, Addr8}); in visitStoreInst()
2539 DFSF.setShadow(&I, DFSF.DFS.getZeroShadow(&I)); in visitCASOrRMW()
2540 DFSF.setOrigin(&I, DFSF.DFS.ZeroOrigin); in visitCASOrRMW()
2566 if (DFSF.DFS.getInstrumentedABI() == DataFlowSanitizer::IA_TLS) { in visitBitCastInst()
2585 IRB.CreateCall(DFSF.DFS.DFSanCmpCallbackFn, CombinedShadow); in visitCmpInst()
2601 DFSF.setShadow(&LPI, DFSF.DFS.getZeroShadow(&LPI)); in visitLandingPadInst()
2602 DFSF.setOrigin(&LPI, DFSF.DFS.ZeroOrigin); in visitLandingPadInst()
2615 if (DFSF.DFS.shouldTrackOrigins()) in visitGetElementPtrInst()
2632 if (!DFSF.DFS.shouldTrackFieldsAndIndices()) { in visitExtractValueInst()
2646 if (!DFSF.DFS.shouldTrackFieldsAndIndices()) { in visitInsertValueInst()
2675 DFSF.AllocaShadowMap[&I] = IRB.CreateAlloca(DFSF.DFS.PrimitiveShadowTy); in visitAllocaInst()
2676 if (DFSF.DFS.shouldTrackOrigins()) { in visitAllocaInst()
2678 IRB.CreateAlloca(DFSF.DFS.OriginTy, nullptr, "_dfsa"); in visitAllocaInst()
2681 DFSF.setShadow(&I, DFSF.DFS.ZeroPrimitiveShadow); in visitAllocaInst()
2682 DFSF.setOrigin(&I, DFSF.DFS.ZeroOrigin); in visitAllocaInst()
2690 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitSelectInst()
2740 Value *ValOrigin = DFSF.DFS.shouldTrackOrigins() in visitMemSetInst()
2742 : DFSF.DFS.ZeroOrigin; in visitMemSetInst()
2744 DFSF.DFS.DFSanSetLabelFn, in visitMemSetInst()
2746 IRB.CreateBitCast(I.getDest(), Type::getInt8PtrTy(*DFSF.DFS.Ctx)), in visitMemSetInst()
2747 IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)}); in visitMemSetInst()
2755 if (DFSF.DFS.shouldTrackOrigins()) { in visitMemTransferInst()
2757 DFSF.DFS.DFSanMemOriginTransferFn, in visitMemTransferInst()
2760 IRB.CreateIntCast(I.getArgOperand(2), DFSF.DFS.IntptrTy, false)}); in visitMemTransferInst()
2763 Value *RawDestShadow = DFSF.DFS.getShadowAddress(I.getDest(), &I); in visitMemTransferInst()
2764 Value *SrcShadow = DFSF.DFS.getShadowAddress(I.getSource(), &I); in visitMemTransferInst()
2767 DFSF.DFS.ShadowWidthBytes)); in visitMemTransferInst()
2768 Type *Int8Ptr = Type::getInt8PtrTy(*DFSF.DFS.Ctx); in visitMemTransferInst()
2775 MTI->setDestAlignment(I.getDestAlign() * DFSF.DFS.ShadowWidthBytes); in visitMemTransferInst()
2776 MTI->setSourceAlignment(I.getSourceAlign() * DFSF.DFS.ShadowWidthBytes); in visitMemTransferInst()
2778 MTI->setDestAlignment(Align(DFSF.DFS.ShadowWidthBytes)); in visitMemTransferInst()
2779 MTI->setSourceAlignment(Align(DFSF.DFS.ShadowWidthBytes)); in visitMemTransferInst()
2782 IRB.CreateCall(DFSF.DFS.DFSanMemTransferCallbackFn, in visitMemTransferInst()
2784 IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)}); in visitMemTransferInst()
2811 getDataLayout().getTypeAllocSize(DFSF.DFS.getShadowTy(RT)); in visitReturnInst()
2818 if (DFSF.DFS.shouldTrackOrigins()) { in visitReturnInst()
2853 auto *LabelVATy = ArrayType::get(DFSF.DFS.PrimitiveShadowTy, in addShadowArguments()
2872 DFSF.DFS.PrimitiveShadowTy, getDataLayout().getAllocaAddrSpace(), in addShadowArguments()
2893 ArrayType::get(DFSF.DFS.OriginTy, CB.arg_size() - FT->getNumParams()); in addOriginArguments()
2910 DFSF.DFS.OriginTy, getDataLayout().getAllocaAddrSpace(), in addOriginArguments()
2919 switch (DFSF.DFS.getWrapperKind(&F)) { in visitWrappedCallBase()
2922 IRB.CreateCall(DFSF.DFS.DFSanUnimplementedFn, in visitWrappedCallBase()
2924 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitWrappedCallBase()
2925 DFSF.setOrigin(&CB, DFSF.DFS.ZeroOrigin); in visitWrappedCallBase()
2929 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitWrappedCallBase()
2930 DFSF.setOrigin(&CB, DFSF.DFS.ZeroOrigin); in visitWrappedCallBase()
2944 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitWrappedCallBase()
2946 TransformedFunction CustomFn = DFSF.DFS.getCustomFunctionType(FT); in visitWrappedCallBase()
2949 FunctionCallee CustomF = DFSF.DFS.Mod->getOrInsertFunction( in visitWrappedCallBase()
2957 DFSF.DFS.ReadOnlyNoneAttrs); in visitWrappedCallBase()
2975 DFSF.DFS.getOrBuildTrampolineFunction(ParamFT, TName); in visitWrappedCallBase()
2978 IRB.CreateBitCast(*I, Type::getInt8PtrTy(*DFSF.DFS.Ctx))); in visitWrappedCallBase()
3007 DFSF.DFS.PrimitiveShadowTy) in visitWrappedCallBase()
3012 DFSF.DFS.OriginTy) in visitWrappedCallBase()
3020 IRB.CreateLoad(DFSF.DFS.PrimitiveShadowTy, DFSF.LabelReturnAlloca); in visitWrappedCallBase()
3025 IRB.CreateLoad(DFSF.DFS.OriginTy, DFSF.OriginReturnAlloca); in visitWrappedCallBase()
3046 if (F == DFSF.DFS.DFSanVarargWrapperFn.getCallee()->stripPointerCasts()) in visitCallBase()
3050 DFSF.DFS.UnwrappedFnMap.find(CB.getCalledOperand()); in visitCallBase()
3051 if (UnwrappedFnIt != DFSF.DFS.UnwrappedFnMap.end()) in visitCallBase()
3057 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitCallBase()
3059 if (DFSF.DFS.getInstrumentedABI() == DataFlowSanitizer::IA_TLS) { in visitCallBase()
3067 if (I < DFSF.DFS.NumOfElementsInArgOrgTLS && in visitCallBase()
3068 !DFSF.DFS.isZeroShadow(ArgShadow)) in visitCallBase()
3074 DL.getTypeAllocSize(DFSF.DFS.getShadowTy(FT->getParamType(I))); in visitCallBase()
3102 if (DFSF.DFS.getInstrumentedABI() == DataFlowSanitizer::IA_TLS) { in visitCallBase()
3110 unsigned Size = DL.getTypeAllocSize(DFSF.DFS.getShadowTy(&CB)); in visitCallBase()
3113 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB)); in visitCallBase()
3116 DFSF.DFS.getShadowTy(&CB), DFSF.getRetvalTLS(CB.getType(), NextIRB), in visitCallBase()
3125 DFSF.DFS.OriginTy, DFSF.getRetvalOriginTLS(), "_dfsret_o"); in visitCallBase()
3134 if (DFSF.DFS.getInstrumentedABI() == DataFlowSanitizer::IA_Args) { in visitCallBase()
3137 FunctionType *NewFT = DFSF.DFS.getArgsFunctionType(FT); in visitCallBase()
3155 ArrayType::get(DFSF.DFS.PrimitiveShadowTy, VarArgSize); in visitCallBase()
3180 *DFSF.DFS.Ctx, AttributeList::ReturnIndex, in visitCallBase()
3199 Type *ShadowTy = DFSF.DFS.getShadowTy(&PN); in visitPHINode()
3211 if (DFSF.DFS.shouldTrackOrigins()) { in visitPHINode()
3213 PHINode::Create(DFSF.DFS.OriginTy, PN.getNumIncomingValues(), "", &PN); in visitPHINode()
3214 Value *UndefOrigin = UndefValue::get(DFSF.DFS.OriginTy); in visitPHINode()