Lines Matching refs:DFSF

728   DFSanFunction &DFSF;  member in __anon636bc1100211::DFSanVisitor
730 DFSanVisitor(DFSanFunction &DFSF) : DFSF(DFSF) {} in DFSanVisitor() argument
733 return DFSF.F->getParent()->getDataLayout(); in getDataLayout()
1202 DFSanFunction DFSF(*this, F, /*IsNativeABI=*/true); in getOrBuildTrampolineFunction() local
1207 DFSF.expandFromPrimitiveShadow(ValAI->getType(), &*ShadowAI, CI); in getOrBuildTrampolineFunction()
1208 DFSF.ValShadowMap[&*ValAI] = Shadow; in getOrBuildTrampolineFunction()
1219 DFSF.ValOriginMap[&*ValAI] = &*OriginAI; in getOrBuildTrampolineFunction()
1222 DFSanVisitor(DFSF).visitCallInst(*CI); in getOrBuildTrampolineFunction()
1224 Value *PrimitiveShadow = DFSF.collapseToPrimitiveShadow( in getOrBuildTrampolineFunction()
1225 DFSF.getShadow(RI->getReturnValue()), RI); in getOrBuildTrampolineFunction()
1228 Value *Origin = DFSF.getOrigin(RI->getReturnValue()); in getOrBuildTrampolineFunction()
1555 DFSanFunction DFSF(*this, F, FnsWithNativeABI.count(F)); in runImpl() local
1571 if (!DFSF.SkipInsts.count(Inst)) in runImpl()
1572 DFSanVisitor(DFSF).visit(Inst); in runImpl()
1583 for (DFSanFunction::PHIFixupElement &P : DFSF.PHIFixups) { in runImpl()
1587 Val, DFSF.getShadow(P.Phi->getIncomingValue(Val))); in runImpl()
1590 Val, DFSF.getOrigin(P.Phi->getIncomingValue(Val))); in runImpl()
1599 for (Value *V : DFSF.NonZeroChecks) { in runImpl()
1604 Pos = &DFSF.F->getEntryBlock().front(); in runImpl()
1608 Value *PrimitiveShadow = DFSF.collapseToPrimitiveShadow(V, Pos); in runImpl()
1610 IRB.CreateICmpNE(PrimitiveShadow, DFSF.DFS.ZeroPrimitiveShadow); in runImpl()
1614 ThenIRB.CreateCall(DFSF.DFS.DFSanNonzeroLabelFn, {}); in runImpl()
1899 Value *CombinedShadow = DFSF.combineOperandShadows(&I); in visitInstOperands()
1900 DFSF.setShadow(&I, CombinedShadow); in visitInstOperands()
1944 if (!DFSF.DFS.shouldTrackOrigins()) in visitInstOperandOrigins()
1946 Value *CombinedOrigin = DFSF.combineOperandOrigins(&I); in visitInstOperandOrigins()
1947 DFSF.setOrigin(&I, CombinedOrigin); in visitInstOperandOrigins()
2217 DFSF.setShadow(&LI, DFSF.DFS.getZeroShadow(&LI)); in visitLoadInst()
2218 DFSF.setOrigin(&LI, DFSF.DFS.ZeroOrigin); in visitLoadInst()
2235 DFSF.loadShadowOrigin(LI.getPointerOperand(), Size, LI.getAlign(), Pos); in visitLoadInst()
2236 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitLoadInst()
2242 Value *PtrShadow = DFSF.getShadow(LI.getPointerOperand()); in visitLoadInst()
2243 PrimitiveShadow = DFSF.combineShadows(PrimitiveShadow, PtrShadow, Pos); in visitLoadInst()
2246 Origins.push_back(DFSF.getOrigin(LI.getPointerOperand())); in visitLoadInst()
2249 if (!DFSF.DFS.isZeroShadow(PrimitiveShadow)) in visitLoadInst()
2250 DFSF.NonZeroChecks.push_back(PrimitiveShadow); in visitLoadInst()
2253 DFSF.expandFromPrimitiveShadow(LI.getType(), PrimitiveShadow, Pos); in visitLoadInst()
2254 DFSF.setShadow(&LI, Shadow); in visitLoadInst()
2257 DFSF.setOrigin(&LI, DFSF.combineOrigins(Shadows, Origins, Pos)); in visitLoadInst()
2262 Value *Addr8 = IRB.CreateBitCast(LI.getPointerOperand(), DFSF.DFS.Int8Ptr); in visitLoadInst()
2263 IRB.CreateCall(DFSF.DFS.DFSanLoadCallbackFn, {PrimitiveShadow, Addr8}); in visitLoadInst()
2489 DFSF.DFS.shouldTrackOrigins() && !SI.isAtomic(); in visitStoreInst()
2494 SI.isAtomic() ? DFSF.DFS.getZeroShadow(Val) : DFSF.getShadow(Val); in visitStoreInst()
2498 Origins.push_back(DFSF.getOrigin(Val)); in visitStoreInst()
2503 Value *PtrShadow = DFSF.getShadow(SI.getPointerOperand()); in visitStoreInst()
2506 Origins.push_back(DFSF.getOrigin(SI.getPointerOperand())); in visitStoreInst()
2508 PrimitiveShadow = DFSF.combineShadows(Shadow, PtrShadow, &SI); in visitStoreInst()
2510 PrimitiveShadow = DFSF.collapseToPrimitiveShadow(Shadow, &SI); in visitStoreInst()
2514 Origin = DFSF.combineOrigins(Shadows, Origins, &SI); in visitStoreInst()
2515 DFSF.storePrimitiveShadowOrigin(SI.getPointerOperand(), Size, SI.getAlign(), in visitStoreInst()
2519 Value *Addr8 = IRB.CreateBitCast(SI.getPointerOperand(), DFSF.DFS.Int8Ptr); in visitStoreInst()
2520 IRB.CreateCall(DFSF.DFS.DFSanStoreCallbackFn, {PrimitiveShadow, Addr8}); in visitStoreInst()
2537 const Align ShadowAlign = DFSF.getShadowAlign(InstAlignment); in visitCASOrRMW()
2538 DFSF.storeZeroPrimitiveShadow(Addr, Size, ShadowAlign, &I); in visitCASOrRMW()
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()
2584 Value *CombinedShadow = DFSF.getShadow(&CI); in visitCmpInst()
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()
2614 DFSF.setShadow(&GEPI, DFSF.getShadow(BasePointer)); in visitGetElementPtrInst()
2615 if (DFSF.DFS.shouldTrackOrigins()) in visitGetElementPtrInst()
2616 DFSF.setOrigin(&GEPI, DFSF.getOrigin(BasePointer)); in visitGetElementPtrInst()
2632 if (!DFSF.DFS.shouldTrackFieldsAndIndices()) { in visitExtractValueInst()
2639 Value *AggShadow = DFSF.getShadow(Agg); in visitExtractValueInst()
2641 DFSF.setShadow(&I, ResShadow); in visitExtractValueInst()
2646 if (!DFSF.DFS.shouldTrackFieldsAndIndices()) { in visitInsertValueInst()
2652 Value *AggShadow = DFSF.getShadow(I.getAggregateOperand()); in visitInsertValueInst()
2653 Value *InsShadow = DFSF.getShadow(I.getInsertedValueOperand()); in visitInsertValueInst()
2655 DFSF.setShadow(&I, Res); in visitInsertValueInst()
2675 DFSF.AllocaShadowMap[&I] = IRB.CreateAlloca(DFSF.DFS.PrimitiveShadowTy); in visitAllocaInst()
2676 if (DFSF.DFS.shouldTrackOrigins()) { in visitAllocaInst()
2677 DFSF.AllocaOriginMap[&I] = 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()
2686 Value *CondShadow = DFSF.getShadow(I.getCondition()); in visitSelectInst()
2687 Value *TrueShadow = DFSF.getShadow(I.getTrueValue()); in visitSelectInst()
2688 Value *FalseShadow = DFSF.getShadow(I.getFalseValue()); in visitSelectInst()
2690 const bool ShouldTrackOrigins = DFSF.DFS.shouldTrackOrigins(); in visitSelectInst()
2694 ShouldTrackOrigins ? DFSF.getOrigin(I.getTrueValue()) : nullptr; in visitSelectInst()
2696 ShouldTrackOrigins ? DFSF.getOrigin(I.getFalseValue()) : nullptr; in visitSelectInst()
2699 ShadowSel = DFSF.combineShadowsThenConvert(I.getType(), TrueShadow, in visitSelectInst()
2724 DFSF.setShadow(&I, ClTrackSelectControlFlow in visitSelectInst()
2725 ? DFSF.combineShadowsThenConvert( in visitSelectInst()
2731 Origins.push_back(DFSF.getOrigin(I.getCondition())); in visitSelectInst()
2733 DFSF.setOrigin(&I, DFSF.combineOrigins(Shadows, Origins, &I)); in visitSelectInst()
2739 Value *ValShadow = DFSF.getShadow(I.getValue()); in visitMemSetInst()
2740 Value *ValOrigin = DFSF.DFS.shouldTrackOrigins() in visitMemSetInst()
2741 ? DFSF.getOrigin(I.getValue()) 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()
2800 if (!DFSF.IsNativeABI && RI.getReturnValue()) { in visitReturnInst()
2801 switch (DFSF.IA) { in visitReturnInst()
2807 Value *S = DFSF.getShadow(RI.getReturnValue()); in visitReturnInst()
2809 Type *RT = DFSF.F->getFunctionType()->getReturnType(); in visitReturnInst()
2811 getDataLayout().getTypeAllocSize(DFSF.DFS.getShadowTy(RT)); in visitReturnInst()
2815 IRB.CreateAlignedStore(S, DFSF.getRetvalTLS(RT, IRB), in visitReturnInst()
2818 if (DFSF.DFS.shouldTrackOrigins()) { in visitReturnInst()
2819 Value *O = DFSF.getOrigin(RI.getReturnValue()); in visitReturnInst()
2820 IRB.CreateStore(O, DFSF.getRetvalOriginTLS()); in visitReturnInst()
2828 Type *RT = DFSF.F->getFunctionType()->getReturnType(); in visitReturnInst()
2832 IRB.CreateInsertValue(InsVal, DFSF.getShadow(RI.getReturnValue()), 1); in visitReturnInst()
2849 Args.push_back(DFSF.collapseToPrimitiveShadow(DFSF.getShadow(*I), &CB)); in addShadowArguments()
2853 auto *LabelVATy = ArrayType::get(DFSF.DFS.PrimitiveShadowTy, in addShadowArguments()
2857 "labelva", &DFSF.F->getEntryBlock().front()); in addShadowArguments()
2861 IRB.CreateStore(DFSF.collapseToPrimitiveShadow(DFSF.getShadow(*I), &CB), in addShadowArguments()
2870 if (!DFSF.LabelReturnAlloca) { in addShadowArguments()
2871 DFSF.LabelReturnAlloca = new AllocaInst( in addShadowArguments()
2872 DFSF.DFS.PrimitiveShadowTy, getDataLayout().getAllocaAddrSpace(), in addShadowArguments()
2873 "labelreturn", &DFSF.F->getEntryBlock().front()); in addShadowArguments()
2875 Args.push_back(DFSF.LabelReturnAlloca); in addShadowArguments()
2888 Args.push_back(DFSF.getOrigin(*I)); in addOriginArguments()
2893 ArrayType::get(DFSF.DFS.OriginTy, CB.arg_size() - FT->getNumParams()); in addOriginArguments()
2896 "originva", &DFSF.F->getEntryBlock().front()); in addOriginArguments()
2900 IRB.CreateStore(DFSF.getOrigin(*I), OriginVAPtr); in addOriginArguments()
2908 if (!DFSF.OriginReturnAlloca) { in addOriginArguments()
2909 DFSF.OriginReturnAlloca = new AllocaInst( in addOriginArguments()
2910 DFSF.DFS.OriginTy, getDataLayout().getAllocaAddrSpace(), in addOriginArguments()
2911 "originreturn", &DFSF.F->getEntryBlock().front()); in addOriginArguments()
2913 Args.push_back(DFSF.OriginReturnAlloca); 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()
3021 DFSF.setShadow(CustomCI, DFSF.expandFromPrimitiveShadow( in visitWrappedCallBase()
3025 IRB.CreateLoad(DFSF.DFS.OriginTy, DFSF.OriginReturnAlloca); in visitWrappedCallBase()
3026 DFSF.setOrigin(CustomCI, OriginLoad); 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()
3066 Value *ArgShadow = DFSF.getShadow(CB.getArgOperand(I)); in visitCallBase()
3067 if (I < DFSF.DFS.NumOfElementsInArgOrgTLS && in visitCallBase()
3068 !DFSF.DFS.isZeroShadow(ArgShadow)) in visitCallBase()
3069 IRB.CreateStore(DFSF.getOrigin(CB.getArgOperand(I)), in visitCallBase()
3070 DFSF.getArgOriginTLS(I, IRB)); in visitCallBase()
3074 DL.getTypeAllocSize(DFSF.DFS.getShadowTy(FT->getParamType(I))); in visitCallBase()
3080 DFSF.getShadow(CB.getArgOperand(I)), in visitCallBase()
3081 DFSF.getArgTLS(FT->getParamType(I), ArgOffset, IRB), in visitCallBase()
3094 SplitEdge(II->getParent(), II->getNormalDest(), &DFSF.DT); 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()
3118 DFSF.SkipInsts.insert(LI); in visitCallBase()
3119 DFSF.setShadow(&CB, LI); in visitCallBase()
3120 DFSF.NonZeroChecks.push_back(LI); in visitCallBase()
3125 DFSF.DFS.OriginTy, DFSF.getRetvalOriginTLS(), "_dfsret_o"); in visitCallBase()
3126 DFSF.SkipInsts.insert(LI); in visitCallBase()
3127 DFSF.setOrigin(&CB, LI); in visitCallBase()
3134 if (DFSF.DFS.getInstrumentedABI() == DataFlowSanitizer::IA_Args) { in visitCallBase()
3137 FunctionType *NewFT = DFSF.DFS.getArgsFunctionType(FT); in visitCallBase()
3150 [&]() { return DFSF.getShadow(*ArgIt++); }); in visitCallBase()
3155 ArrayType::get(DFSF.DFS.PrimitiveShadowTy, VarArgSize); in visitCallBase()
3158 "", &DFSF.F->getEntryBlock().front()); in visitCallBase()
3165 DFSF.getShadow(Arg), in visitCallBase()
3180 *DFSF.DFS.Ctx, AttributeList::ReturnIndex, in visitCallBase()
3185 DFSF.SkipInsts.insert(ExVal); in visitCallBase()
3187 DFSF.SkipInsts.insert(ExShadow); in visitCallBase()
3188 DFSF.setShadow(ExVal, ExShadow); in visitCallBase()
3189 DFSF.NonZeroChecks.push_back(ExShadow); in visitCallBase()
3199 Type *ShadowTy = DFSF.DFS.getShadowTy(&PN); in visitPHINode()
3208 DFSF.setShadow(&PN, ShadowPN); 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()
3217 DFSF.setOrigin(&PN, OriginPN); in visitPHINode()
3220 DFSF.PHIFixups.push_back({&PN, ShadowPN, OriginPN}); in visitPHINode()