Lines Matching defs:DFSF

787   DFSanFunction &DFSF;
789 DFSanVisitor(DFSanFunction &DFSF) : DFSF(DFSF) {}
792 return DFSF.F->getDataLayout();
1695 DFSanFunction DFSF(*this, F, FnsWithNativeABI.count(F),
1702 Value *FArgShadow = DFSF.getShadow(&FArg);
1710 dyn_cast<Instruction>(DFSF.getOrigin(&FArg))) {
1719 DFSF.addReachesFunctionCallbacksIfEnabled(IRB, *Next, &FArg);
1737 if (!DFSF.SkipInsts.count(Inst))
1738 DFSanVisitor(DFSF).visit(Inst);
1749 for (DFSanFunction::PHIFixupElement &P : DFSF.PHIFixups) {
1753 Val, DFSF.getShadow(P.Phi->getIncomingValue(Val)));
1756 Val, DFSF.getOrigin(P.Phi->getIncomingValue(Val)));
1765 for (Value *V : DFSF.NonZeroChecks) {
1770 Pos = DFSF.F->getEntryBlock().begin();
1774 Value *PrimitiveShadow = DFSF.collapseToPrimitiveShadow(V, Pos);
1776 IRB.CreateICmpNE(PrimitiveShadow, DFSF.DFS.ZeroPrimitiveShadow);
1780 ThenIRB.CreateCall(DFSF.DFS.DFSanNonzeroLabelFn, {});
2045 Value *CombinedShadow = DFSF.combineOperandShadows(&I);
2046 DFSF.setShadow(&I, CombinedShadow);
2091 if (!DFSF.DFS.shouldTrackOrigins())
2093 Value *CombinedOrigin = DFSF.combineOperandOrigins(&I);
2094 DFSF.setOrigin(&I, CombinedOrigin);
2393 DFSF.setShadow(&LI, DFSF.DFS.getZeroShadow(&LI));
2394 DFSF.setOrigin(&LI, DFSF.DFS.ZeroOrigin);
2415 DFSF.loadShadowOrigin(LI.getPointerOperand(), Size, LI.getAlign(), Pos);
2416 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins();
2422 DFSF.isLookupTableConstant(
2424 Value *PtrShadow = DFSF.getShadow(LI.getPointerOperand());
2425 PrimitiveShadow = DFSF.combineShadows(PrimitiveShadow, PtrShadow, Pos);
2428 Origins.push_back(DFSF.getOrigin(LI.getPointerOperand()));
2431 if (!DFSF.DFS.isZeroShadow(PrimitiveShadow))
2432 DFSF.NonZeroChecks.push_back(PrimitiveShadow);
2435 DFSF.expandFromPrimitiveShadow(LI.getType(), PrimitiveShadow, Pos);
2436 DFSF.setShadow(&LI, Shadow);
2439 DFSF.setOrigin(&LI, DFSF.combineOrigins(Shadows, Origins, Pos));
2446 IRB.CreateCall(DFSF.DFS.DFSanLoadCallbackFn, {PrimitiveShadow, Addr});
2451 DFSF.addReachesFunctionCallbacksIfEnabled(IRB, LI, &LI);
2672 DFSF.DFS.shouldTrackOrigins() && !SI.isAtomic();
2677 SI.isAtomic() ? DFSF.DFS.getZeroShadow(Val) : DFSF.getShadow(Val);
2681 Origins.push_back(DFSF.getOrigin(Val));
2686 Value *PtrShadow = DFSF.getShadow(SI.getPointerOperand());
2689 Origins.push_back(DFSF.getOrigin(SI.getPointerOperand()));
2691 PrimitiveShadow = DFSF.combineShadows(Shadow, PtrShadow, SI.getIterator());
2693 PrimitiveShadow = DFSF.collapseToPrimitiveShadow(Shadow, SI.getIterator());
2697 Origin = DFSF.combineOrigins(Shadows, Origins, SI.getIterator());
2698 DFSF.storePrimitiveShadowOrigin(SI.getPointerOperand(), Size, SI.getAlign(),
2704 IRB.CreateCall(DFSF.DFS.DFSanStoreCallbackFn, {PrimitiveShadow, Addr});
2722 const Align ShadowAlign = DFSF.getShadowAlign(InstAlignment);
2723 DFSF.storeZeroPrimitiveShadow(Addr, Size, ShadowAlign, I.getIterator());
2724 DFSF.setShadow(&I, DFSF.DFS.getZeroShadow(&I));
2725 DFSF.setOrigin(&I, DFSF.DFS.ZeroOrigin);
2766 Value *CombinedShadow = DFSF.getShadow(&CI);
2768 IRB.CreateCall(DFSF.DFS.DFSanCmpCallbackFn, CombinedShadow);
2785 DFSF.setShadow(&LPI, DFSF.DFS.getZeroShadow(&LPI));
2786 DFSF.setOrigin(&LPI, DFSF.DFS.ZeroOrigin);
2791 DFSF.isLookupTableConstant(
2800 DFSF.setShadow(&GEPI, DFSF.getShadow(BasePointer));
2801 if (DFSF.DFS.shouldTrackOrigins())
2802 DFSF.setOrigin(&GEPI, DFSF.getOrigin(BasePointer));
2820 Value *AggShadow = DFSF.getShadow(Agg);
2822 DFSF.setShadow(&I, ResShadow);
2828 Value *AggShadow = DFSF.getShadow(I.getAggregateOperand());
2829 Value *InsShadow = DFSF.getShadow(I.getInsertedValueOperand());
2831 DFSF.setShadow(&I, Res);
2851 DFSF.AllocaShadowMap[&I] = IRB.CreateAlloca(DFSF.DFS.PrimitiveShadowTy);
2852 if (DFSF.DFS.shouldTrackOrigins()) {
2853 DFSF.AllocaOriginMap[&I] =
2854 IRB.CreateAlloca(DFSF.DFS.OriginTy, nullptr, "_dfsa");
2857 DFSF.setShadow(&I, DFSF.DFS.ZeroPrimitiveShadow);
2858 DFSF.setOrigin(&I, DFSF.DFS.ZeroOrigin);
2862 Value *CondShadow = DFSF.getShadow(I.getCondition());
2863 Value *TrueShadow = DFSF.getShadow(I.getTrueValue());
2864 Value *FalseShadow = DFSF.getShadow(I.getFalseValue());
2866 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins();
2870 ShouldTrackOrigins ? DFSF.getOrigin(I.getTrueValue()) : nullptr;
2872 ShouldTrackOrigins ? DFSF.getOrigin(I.getFalseValue()) : nullptr;
2874 DFSF.addConditionalCallbacksIfEnabled(I, I.getCondition());
2877 ShadowSel = DFSF.combineShadowsThenConvert(I.getType(), TrueShadow,
2902 DFSF.setShadow(&I, ClTrackSelectControlFlow ? DFSF.combineShadowsThenConvert(
2909 Origins.push_back(DFSF.getOrigin(I.getCondition()));
2911 DFSF.setOrigin(&I, DFSF.combineOrigins(Shadows, Origins, I.getIterator()));
2917 Value *ValShadow = DFSF.getShadow(I.getValue());
2918 Value *ValOrigin = DFSF.DFS.shouldTrackOrigins()
2919 ? DFSF.getOrigin(I.getValue())
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));
2946 MTI->setDestAlignment(DFSF.getShadowAlign(I.getDestAlign().valueOrOne()));
2947 MTI->setSourceAlignment(DFSF.getShadowAlign(I.getSourceAlign().valueOrOne()));
2950 DFSF.DFS.DFSanMemTransferCallbackFn,
2951 {DestShadow, IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)});
2959 DFSF.addConditionalCallbacksIfEnabled(BR, BR.getCondition());
2963 DFSF.addConditionalCallbacksIfEnabled(SW, SW.getCondition());
2978 if (!DFSF.IsNativeABI && RI.getReturnValue()) {
2983 Value *S = DFSF.getShadow(RI.getReturnValue());
2985 Type *RT = DFSF.F->getFunctionType()->getReturnType();
2986 unsigned Size = getDataLayout().getTypeAllocSize(DFSF.DFS.getShadowTy(RT));
2990 IRB.CreateAlignedStore(S, DFSF.getRetvalTLS(RT, IRB), ShadowTLSAlignment);
2992 if (DFSF.DFS.shouldTrackOrigins()) {
2993 Value *O = DFSF.getOrigin(RI.getReturnValue());
2994 IRB.CreateStore(O, DFSF.getRetvalOriginTLS());
3009 DFSF.collapseToPrimitiveShadow(DFSF.getShadow(*I), CB.getIterator()));
3013 auto *LabelVATy = ArrayType::get(DFSF.DFS.PrimitiveShadowTy,
3017 "labelva", DFSF.F->getEntryBlock().begin());
3022 DFSF.collapseToPrimitiveShadow(DFSF.getShadow(*I), CB.getIterator()),
3031 if (!DFSF.LabelReturnAlloca) {
3032 DFSF.LabelReturnAlloca = new AllocaInst(
3033 DFSF.DFS.PrimitiveShadowTy, getDataLayout().getAllocaAddrSpace(),
3034 "labelreturn", DFSF.F->getEntryBlock().begin());
3036 Args.push_back(DFSF.LabelReturnAlloca);
3049 Args.push_back(DFSF.getOrigin(*I));
3054 ArrayType::get(DFSF.DFS.OriginTy, CB.arg_size() - FT->getNumParams());
3057 "originva", DFSF.F->getEntryBlock().begin());
3061 IRB.CreateStore(DFSF.getOrigin(*I), OriginVAPtr);
3069 if (!DFSF.OriginReturnAlloca) {
3070 DFSF.OriginReturnAlloca = new AllocaInst(
3071 DFSF.DFS.OriginTy, getDataLayout().getAllocaAddrSpace(),
3072 "originreturn", DFSF.F->getEntryBlock().begin());
3074 Args.push_back(DFSF.OriginReturnAlloca);
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);
3169 DFSF.setShadow(CustomCI,
3170 DFSF.expandFromPrimitiveShadow(
3174 IRB.CreateLoad(DFSF.DFS.OriginTy, DFSF.OriginReturnAlloca);
3175 DFSF.setOrigin(CustomCI, OriginLoad);
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())
3330 if (DFSF.TLI.getLibFunc(CB, LF)) {
3364 DFSF.DFS.UnwrappedFnMap.find(CB.getCalledOperand());
3365 if (UnwrappedFnIt != DFSF.DFS.UnwrappedFnMap.end())
3371 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins();
3380 Value *ArgShadow = DFSF.getShadow(CB.getArgOperand(I));
3381 if (I < DFSF.DFS.NumOfElementsInArgOrgTLS &&
3382 !DFSF.DFS.isZeroShadow(ArgShadow))
3383 IRB.CreateStore(DFSF.getOrigin(CB.getArgOperand(I)),
3384 DFSF.getArgOriginTLS(I, IRB));
3388 DL.getTypeAllocSize(DFSF.DFS.getShadowTy(FT->getParamType(I)));
3393 IRB.CreateAlignedStore(DFSF.getShadow(CB.getArgOperand(I)),
3394 DFSF.getArgTLS(FT->getParamType(I), ArgOffset, IRB),
3406 SplitEdge(II->getParent(), II->getNormalDest(), &DFSF.DT);
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),
3428 DFSF.SkipInsts.insert(LI);
3429 DFSF.setShadow(&CB, LI);
3430 DFSF.NonZeroChecks.push_back(LI);
3434 LoadInst *LI = NextIRB.CreateLoad(DFSF.DFS.OriginTy,
3435 DFSF.getRetvalOriginTLS(), "_dfsret_o");
3436 DFSF.SkipInsts.insert(LI);
3437 DFSF.setOrigin(&CB, LI);
3440 DFSF.addReachesFunctionCallbacksIfEnabled(NextIRB, CB, &CB);
3445 Type *ShadowTy = DFSF.DFS.getShadowTy(&PN);
3454 DFSF.setShadow(&PN, ShadowPN);
3457 if (DFSF.DFS.shouldTrackOrigins()) {
3458 OriginPN = PHINode::Create(DFSF.DFS.OriginTy, PN.getNumIncomingValues(), "",
3460 Value *UndefOrigin = UndefValue::get(DFSF.DFS.OriginTy);
3463 DFSF.setOrigin(&PN, OriginPN);
3466 DFSF.PHIFixups.push_back({&PN, ShadowPN, OriginPN});