Lines Matching defs:DFS

582   DataFlowSanitizer &DFS;
618 DFSanFunction(DataFlowSanitizer &DFS, Function *F, bool IsNativeABI,
620 : DFS(DFS), F(F), IsNativeABI(IsNativeABI),
983 Type *ShadowTy = DFS.getShadowTy(T);
988 if (DFS.isZeroShadow(PrimitiveShadow))
989 return DFS.getZeroShadow(ShadowTy);
1006 return DFS.ZeroPrimitiveShadow;
1057 if (DFS.shouldTrackOrigins()) {
1059 CI = IRB.CreateCall(DFS.DFSanConditionalCallbackOriginFn,
1062 CI = IRB.CreateCall(DFS.DFSanConditionalCallbackFn, {CondShadow});
1094 if (DFS.shouldTrackOrigins()) {
1097 CB = IRB.CreateCall(DFS.DFSanReachesFunctionCallbackOriginFn, args);
1100 CB = IRB.CreateCall(DFS.DFSanReachesFunctionCallbackFn, args);
1776 IRB.CreateICmpNE(PrimitiveShadow, DFSF.DFS.ZeroPrimitiveShadow);
1780 ThenIRB.CreateCall(DFSF.DFS.DFSanNonzeroLabelFn, {});
1790 Value *Base = IRB.CreatePointerCast(DFS.ArgTLS, DFS.IntptrTy);
1792 Base = IRB.CreateAdd(Base, ConstantInt::get(DFS.IntptrTy, ArgOffset));
1793 return IRB.CreateIntToPtr(Base, PointerType::get(*DFS.Ctx, 0), "_dfsarg");
1797 return IRB.CreatePointerCast(DFS.RetvalTLS, PointerType::get(*DFS.Ctx, 0),
1801 Value *DFSanFunction::getRetvalOriginTLS() { return DFS.RetvalOriginTLS; }
1804 return IRB.CreateConstInBoundsGEP2_64(DFS.ArgOriginTLSTy, DFS.ArgOriginTLS, 0,
1809 assert(DFS.shouldTrackOrigins());
1811 return DFS.ZeroOrigin;
1816 return DFS.ZeroOrigin;
1817 if (A->getArgNo() < DFS.NumOfElementsInArgOrgTLS) {
1821 Origin = IRB.CreateLoad(DFS.OriginTy, ArgOriginPtr);
1824 Origin = DFS.ZeroOrigin;
1827 Origin = DFS.ZeroOrigin;
1834 if (!DFS.shouldTrackOrigins())
1837 assert(Origin->getType() == DFS.OriginTy);
1851 unsigned Size = DL.getTypeAllocSize(DFS.getShadowTy(&FArg));
1865 return IRB.CreateAlignedLoad(DFS.getShadowTy(&FArg), ArgShadowPtr,
1869 return DFS.getZeroShadow(A);
1874 return DFS.getZeroShadow(V);
1876 return DFS.getZeroShadow(V);
1881 return DFS.getZeroShadow(V);
1885 Shadow = DFS.getZeroShadow(V);
1971 if (DFS.isZeroShadow(V1))
1973 if (DFS.isZeroShadow(V2))
2033 return DFS.getZeroShadow(Inst);
2057 return DFS.ZeroOrigin;
2060 Zero = DFS.ZeroPrimitiveShadow;
2076 return Origin ? Origin : DFS.ZeroOrigin;
2091 if (!DFSF.DFS.shouldTrackOrigins())
2099 return Align(Alignment.value() * DFS.ShadowWidthBytes);
2110 return DFS.CombineTaintLookupTableNames.count(GV->getName());
2135 return Alignment < MinOriginAlignment || !DFS.hasLoadSizeForFastPath(Size);
2150 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins();
2151 const uint64_t ShadowSize = Size * DFS.ShadowWidthBytes;
2171 ShadowSize == 4 ? Type::getInt32Ty(*DFS.Ctx) : Type::getInt64Ty(*DFS.Ctx);
2178 const uint64_t BytesPerWideShadow = WideShadowBitWidth / DFS.ShadowWidthBits;
2192 Origins.push_back(DFS.loadNextOrigin(Pos, OriginAlign, &OriginAddr));
2213 ConstantInt::get(DFS.IntptrTy, 1));
2218 Value *NextOrigin = DFS.loadNextOrigin(Pos, OriginAlign, &OriginAddr);
2222 for (unsigned Width = WideShadowBitWidth / 2; Width >= DFS.ShadowWidthBits;
2227 return {IRB.CreateTrunc(CombinedWideShadow, DFS.PrimitiveShadowTy),
2231 : DFS.ZeroOrigin};
2236 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins();
2243 Value *ShadowLI = IRB.CreateLoad(DFS.PrimitiveShadowTy, SI->second);
2247 ? IRB.CreateLoad(DFS.OriginTy, OI->second)
2266 return {DFS.ZeroPrimitiveShadow,
2267 ShouldTrackOrigins ? DFS.ZeroOrigin : nullptr};
2270 return {DFS.ZeroPrimitiveShadow,
2271 ShouldTrackOrigins ? DFS.ZeroOrigin : nullptr};
2279 IRB.CreateCall(DFS.DFSanLoadLabelAndOriginFn,
2280 {Addr, ConstantInt::get(DFS.IntptrTy, Size)});
2282 return {IRB.CreateTrunc(IRB.CreateLShr(Call, DFS.OriginWidthBits),
2283 DFS.PrimitiveShadowTy),
2284 IRB.CreateTrunc(Call, DFS.OriginTy)};
2290 DFS.getShadowOriginAddress(Addr, InstAlignment, Pos);
2297 Origin = IRB.CreateAlignedLoad(DFS.OriginTy, OriginAddr, OriginAlign);
2304 LoadInst *LI = new LoadInst(DFS.PrimitiveShadowTy, ShadowAddr, "", Pos);
2310 Value *ShadowAddr1 = IRB.CreateGEP(DFS.PrimitiveShadowTy, ShadowAddr,
2311 ConstantInt::get(DFS.IntptrTy, 1));
2313 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr, ShadowAlign);
2315 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr1, ShadowAlign);
2319 bool HasSizeForFastPath = DFS.hasLoadSizeForFastPath(Size);
2327 DFS.DFSanUnionLoadFn, {ShadowAddr, ConstantInt::get(DFS.IntptrTy, Size)});
2338 if (DFS.shouldTrackOrigins()) {
2393 DFSF.setShadow(&LI, DFSF.DFS.getZeroShadow(&LI));
2394 DFSF.setOrigin(&LI, DFSF.DFS.ZeroOrigin);
2416 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins();
2431 if (!DFSF.DFS.isZeroShadow(PrimitiveShadow))
2446 IRB.CreateCall(DFSF.DFS.DFSanLoadCallbackFn, {PrimitiveShadow, Addr});
2456 assert(DFS.shouldTrackOrigins());
2457 return IRB.CreateCall(DFS.DFSanChainOriginIfTaintedFn, {Shadow, Origin});
2461 if (!DFS.shouldTrackOrigins())
2463 return IRB.CreateCall(DFS.DFSanChainOriginFn, V);
2469 unsigned IntptrSize = DL.getTypeStoreSize(DFS.IntptrTy);
2473 Origin = IRB.CreateIntCast(Origin, DFS.IntptrTy, /* isSigned */ false);
2482 const Align IntptrAlignment = DL.getABITypeAlign(DFS.IntptrTy);
2483 unsigned IntptrSize = DL.getTypeStoreSize(DFS.IntptrTy);
2492 IRB.CreatePointerCast(StoreOriginAddr, PointerType::get(*DFS.Ctx, 0));
2495 I ? IRB.CreateConstGEP1_32(DFS.IntptrTy, IntptrStoreOriginPtr, I)
2505 Value *GEP = I ? IRB.CreateConstGEP1_32(DFS.OriginTy, StoreOriginAddr, I)
2539 DFS.DFSanMaybeStoreOriginFn,
2540 {CollapsedShadow, Addr, ConstantInt::get(DFS.IntptrTy, Size), Origin});
2545 Cmp, &*IRB.GetInsertPoint(), false, DFS.OriginStoreWeights, &DTU);
2558 IntegerType::get(*DFS.Ctx, Size * DFS.ShadowWidthBits);
2560 Value *ShadowAddr = DFS.getShadowAddress(Addr, Pos);
2571 const bool ShouldTrackOrigins = DFS.shouldTrackOrigins() && Origin;
2581 if (ShouldTrackOrigins && !DFS.isZeroShadow(PrimitiveShadow)) {
2591 if (DFS.isZeroShadow(PrimitiveShadow)) {
2599 DFS.getShadowOriginAddress(Addr, InstAlignment, Pos);
2602 assert(ShadowVecSize * DFS.ShadowWidthBits <= 128 &&
2609 FixedVectorType::get(DFS.PrimitiveShadowTy, ShadowVecSize);
2614 ConstantInt::get(Type::getInt32Ty(*DFS.Ctx), I));
2627 IRB.CreateConstGEP1_32(DFS.PrimitiveShadowTy, ShadowAddr, Offset);
2672 DFSF.DFS.shouldTrackOrigins() && !SI.isAtomic();
2677 SI.isAtomic() ? DFSF.DFS.getZeroShadow(Val) : DFSF.getShadow(Val);
2704 IRB.CreateCall(DFSF.DFS.DFSanStoreCallbackFn, {PrimitiveShadow, Addr});
2724 DFSF.setShadow(&I, DFSF.DFS.getZeroShadow(&I));
2725 DFSF.setOrigin(&I, DFSF.DFS.ZeroOrigin);
2768 IRB.CreateCall(DFSF.DFS.DFSanCmpCallbackFn, CombinedShadow);
2785 DFSF.setShadow(&LPI, DFSF.DFS.getZeroShadow(&LPI));
2786 DFSF.setOrigin(&LPI, DFSF.DFS.ZeroOrigin);
2801 if (DFSF.DFS.shouldTrackOrigins())
2851 DFSF.AllocaShadowMap[&I] = IRB.CreateAlloca(DFSF.DFS.PrimitiveShadowTy);
2852 if (DFSF.DFS.shouldTrackOrigins()) {
2854 IRB.CreateAlloca(DFSF.DFS.OriginTy, nullptr, "_dfsa");
2857 DFSF.setShadow(&I, DFSF.DFS.ZeroPrimitiveShadow);
2858 DFSF.setOrigin(&I, DFSF.DFS.ZeroOrigin);
2866 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins();
2918 Value *ValOrigin = DFSF.DFS.shouldTrackOrigins()
2920 : DFSF.DFS.ZeroOrigin;
2921 IRB.CreateCall(DFSF.DFS.DFSanSetLabelFn,
2923 IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)});
2931 if (DFSF.DFS.shouldTrackOrigins()) {
2933 DFSF.DFS.DFSanMemOriginTransferFn,
2935 IRB.CreateIntCast(I.getArgOperand(2), DFSF.DFS.IntptrTy, false)});
2938 Value *DestShadow = DFSF.DFS.getShadowAddress(I.getDest(), I.getIterator());
2939 Value *SrcShadow = DFSF.DFS.getShadowAddress(I.getSource(), I.getIterator());
2942 DFSF.DFS.ShadowWidthBytes));
2950 DFSF.DFS.DFSanMemTransferCallbackFn,
2951 {DestShadow, IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)});
2986 unsigned Size = getDataLayout().getTypeAllocSize(DFSF.DFS.getShadowTy(RT));
2992 if (DFSF.DFS.shouldTrackOrigins()) {
3013 auto *LabelVATy = ArrayType::get(DFSF.DFS.PrimitiveShadowTy,
3033 DFSF.DFS.PrimitiveShadowTy, getDataLayout().getAllocaAddrSpace(),
3054 ArrayType::get(DFSF.DFS.OriginTy, CB.arg_size() - FT->getNumParams());
3071 DFSF.DFS.OriginTy, getDataLayout().getAllocaAddrSpace(),
3080 switch (DFSF.DFS.getWrapperKind(&F)) {
3083 IRB.CreateCall(DFSF.DFS.DFSanUnimplementedFn,
3085 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F);
3086 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB));
3087 DFSF.setOrigin(&CB, DFSF.DFS.ZeroOrigin);
3091 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F);
3092 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB));
3093 DFSF.setOrigin(&CB, DFSF.DFS.ZeroOrigin);
3097 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F);
3108 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins();
3110 TransformedFunction CustomFn = DFSF.DFS.getCustomFunctionType(FT);
3113 FunctionCallee CustomF = DFSF.DFS.Mod->getOrInsertFunction(
3120 CustomFn->removeFnAttrs(DFSF.DFS.ReadOnlyNoneAttrs);
3155 DFSF.DFS.PrimitiveShadowTy)
3160 DFSF.DFS.OriginTy)
3168 IRB.CreateLoad(DFSF.DFS.PrimitiveShadowTy, DFSF.LabelReturnAlloca);
3174 IRB.CreateLoad(DFSF.DFS.OriginTy, DFSF.OriginReturnAlloca);
3225 DFSF.DFS.DFSanMemShadowOriginTransferFn,
3226 {DstPtr, SrcPtr, NextIRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)});
3262 DFSF.DFS.DFSanMemShadowOriginTransferFn,
3263 {DstPtr, SrcPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)});
3282 DFSF.DFS.DFSanMemShadowOriginTransferFn,
3283 {DstPtr, TargetPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)});
3287 DFSF.DFS.DFSanMemShadowOriginTransferFn,
3288 {TargetPtr, SrcPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)});
3307 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB));
3311 NextIRB.CreateCall(DFSF.DFS.DFSanMemShadowOriginConditionalExchangeFn,
3314 NextIRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)});
3326 if (F == DFSF.DFS.DFSanVarargWrapperFn.getCallee()->stripPointerCasts())
3364 DFSF.DFS.UnwrappedFnMap.find(CB.getCalledOperand());
3365 if (UnwrappedFnIt != DFSF.DFS.UnwrappedFnMap.end())
3371 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins();
3381 if (I < DFSF.DFS.NumOfElementsInArgOrgTLS &&
3382 !DFSF.DFS.isZeroShadow(ArgShadow))
3388 DL.getTypeAllocSize(DFSF.DFS.getShadowTy(FT->getParamType(I)));
3420 unsigned Size = DL.getTypeAllocSize(DFSF.DFS.getShadowTy(&CB));
3423 DFSF.setShadow(&CB, DFSF.DFS.getZeroShadow(&CB));
3426 DFSF.DFS.getShadowTy(&CB), DFSF.getRetvalTLS(CB.getType(), NextIRB),
3434 LoadInst *LI = NextIRB.CreateLoad(DFSF.DFS.OriginTy,
3445 Type *ShadowTy = DFSF.DFS.getShadowTy(&PN);
3457 if (DFSF.DFS.shouldTrackOrigins()) {
3458 OriginPN = PHINode::Create(DFSF.DFS.OriginTy, PN.getNumIncomingValues(), "",
3460 Value *UndefOrigin = UndefValue::get(DFSF.DFS.OriginTy);