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