svf-lib 1.0.2319 → 1.0.2321
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/WorkList.h +0 -0
- package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/Modules/FindZ3.cmake +93 -0
- package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFConfig.cmake +106 -0
- package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFConfigVersion.cmake +43 -0
- package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFTargets-release.cmake +101 -0
- package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFTargets.cmake +180 -0
- package/SVF-linux-aarch64/Release-build/lib/libSvfCore.so.3.1 +0 -0
- package/SVF-linux-aarch64/Release-build/lib/libSvfLLVM.so.3.1 +0 -0
- package/SVF-linux-aarch64/Release-build/lib/pkgconfig/SVF.pc +12 -0
- package/SVF-osx/Release-build/bin/ae +0 -0
- package/SVF-osx/Release-build/bin/cfl +0 -0
- package/SVF-osx/Release-build/bin/dvf +0 -0
- package/SVF-osx/Release-build/bin/llvm2svf +0 -0
- package/SVF-osx/Release-build/bin/mta +0 -0
- package/SVF-osx/Release-build/bin/saber +0 -0
- package/SVF-osx/Release-build/bin/svf-ex +0 -0
- package/SVF-osx/Release-build/bin/wpa +0 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/AbstractState.h +425 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/AbstractValue.h +157 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/AddressValue.h +225 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/ICFGWTO.h +135 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/IntervalValue.h +1055 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/NumericValue.h +1292 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/RelExeState.h +226 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/RelationSolver.h +91 -0
- package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AEDetector.h +439 -0
- package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AbsExtAPI.h +138 -0
- package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AbstractInterpretation.h +384 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFGNormalizer.h +84 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFGrammar.h +468 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLAlias.h +168 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLBase.h +118 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLGramGraphChecker.h +74 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLGraphBuilder.h +168 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLSVFGBuilder.h +58 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLSolver.h +374 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLStat.h +67 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLVF.h +68 -0
- package/SVF-osx/Release-build/include/SVF/CFL/GrammarBuilder.h +100 -0
- package/SVF-osx/Release-build/include/SVF/DDA/ContextDDA.h +230 -0
- package/SVF-osx/Release-build/include/SVF/DDA/DDAClient.h +163 -0
- package/SVF-osx/Release-build/include/SVF/DDA/DDAPass.h +102 -0
- package/SVF-osx/Release-build/include/SVF/DDA/DDAStat.h +121 -0
- package/SVF-osx/Release-build/include/SVF/DDA/DDAVFSolver.h +794 -0
- package/SVF-osx/Release-build/include/SVF/DDA/FlowDDA.h +178 -0
- package/SVF-osx/Release-build/include/SVF/FastCluster/fastcluster.h +80 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/BasicBlockG.h +318 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/CDG.h +482 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/CFLGraph.h +232 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/CHG.h +368 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/CallGraph.h +497 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ConsG.h +402 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ConsGEdge.h +355 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ConsGNode.h +418 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/DOTGraphTraits.h +188 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/GenericGraph.h +628 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/GraphPrinter.h +111 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/GraphTraits.h +150 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/GraphWriter.h +380 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ICFG.h +331 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ICFGEdge.h +281 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ICFGNode.h +669 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ICFGStat.h +164 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/IRGraph.h +398 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/SCC.h +375 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/SVFG.h +491 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/SVFGEdge.h +237 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/SVFGNode.h +501 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/SVFGOPT.h +372 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/SVFGStat.h +273 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ThreadCallGraph.h +399 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/VFG.h +726 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/VFGEdge.h +295 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/VFGNode.h +1266 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/WTO.h +872 -0
- package/SVF-osx/Release-build/include/SVF/MSSA/MSSAMuChi.h +722 -0
- package/SVF-osx/Release-build/include/SVF/MSSA/MemPartition.h +169 -0
- package/SVF-osx/Release-build/include/SVF/MSSA/MemRegion.h +489 -0
- package/SVF-osx/Release-build/include/SVF/MSSA/MemSSA.h +452 -0
- package/SVF-osx/Release-build/include/SVF/MSSA/SVFGBuilder.h +104 -0
- package/SVF-osx/Release-build/include/SVF/MTA/LockAnalysis.h +533 -0
- package/SVF-osx/Release-build/include/SVF/MTA/MHP.h +546 -0
- package/SVF-osx/Release-build/include/SVF/MTA/MTA.h +97 -0
- package/SVF-osx/Release-build/include/SVF/MTA/MTAStat.h +73 -0
- package/SVF-osx/Release-build/include/SVF/MTA/TCT.h +620 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/AbstractPointsToDS.h +316 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/AccessPath.h +194 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/ConditionalPT.h +878 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/MutablePointsToDS.h +1025 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/PersistentPointsToCache.h +463 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/PersistentPointsToDS.h +955 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/PointerAnalysis.h +428 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/PointerAnalysisImpl.h +602 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/PointsTo.h +255 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/SVFLoop.h +167 -0
- package/SVF-osx/Release-build/include/SVF/SABER/DoubleFreeChecker.h +76 -0
- package/SVF-osx/Release-build/include/SVF/SABER/FileChecker.h +80 -0
- package/SVF-osx/Release-build/include/SVF/SABER/LeakChecker.h +122 -0
- package/SVF-osx/Release-build/include/SVF/SABER/ProgSlice.h +327 -0
- package/SVF-osx/Release-build/include/SVF/SABER/SaberCheckerAPI.h +151 -0
- package/SVF-osx/Release-build/include/SVF/SABER/SaberCondAllocator.h +317 -0
- package/SVF-osx/Release-build/include/SVF/SABER/SaberSVFGBuilder.h +114 -0
- package/SVF-osx/Release-build/include/SVF/SABER/SrcSnkDDA.h +327 -0
- package/SVF-osx/Release-build/include/SVF/SABER/SrcSnkSolver.h +186 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/BasicTypes.h +280 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/BreakConstantExpr.h +93 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/CHGBuilder.h +78 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/CppUtil.h +184 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/DCHG.h +474 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/GEPTypeBridgeIterator.h +183 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/ICFGBuilder.h +160 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMLoopAnalysis.h +60 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMModule.h +527 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMUtil.h +433 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/ObjTypeInference.h +129 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/SVFIRBuilder.h +523 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/SymbolTableBuilder.h +132 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/ObjTypeInfo.h +224 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/PAGBuilderFromFile.h +80 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/SVFIR.h +856 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/SVFStatements.h +1330 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/SVFType.h +606 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/SVFValue.h +338 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/SVFVariables.h +2212 -0
- package/SVF-osx/Release-build/include/SVF/Util/Annotator.h +180 -0
- package/SVF-osx/Release-build/include/SVF/Util/BitVector.h +55 -0
- package/SVF-osx/Release-build/include/SVF/Util/CDGBuilder.h +107 -0
- package/SVF-osx/Release-build/include/SVF/Util/CallGraphBuilder.h +61 -0
- package/SVF-osx/Release-build/include/SVF/Util/Casting.h +426 -0
- package/SVF-osx/Release-build/include/SVF/Util/CommandLine.h +530 -0
- package/SVF-osx/Release-build/include/SVF/Util/CoreBitVector.h +214 -0
- package/SVF-osx/Release-build/include/SVF/Util/CxtStmt.h +502 -0
- package/SVF-osx/Release-build/include/SVF/Util/DPItem.h +618 -0
- package/SVF-osx/Release-build/include/SVF/Util/ExtAPI.h +117 -0
- package/SVF-osx/Release-build/include/SVF/Util/GeneralType.h +127 -0
- package/SVF-osx/Release-build/include/SVF/Util/GraphReachSolver.h +186 -0
- package/SVF-osx/Release-build/include/SVF/Util/NodeIDAllocator.h +203 -0
- package/SVF-osx/Release-build/include/SVF/Util/Options.h +273 -0
- package/SVF-osx/Release-build/include/SVF/Util/PTAStat.h +83 -0
- package/SVF-osx/Release-build/include/SVF/Util/SVFBugReport.h +427 -0
- package/SVF-osx/Release-build/include/SVF/Util/SVFLoopAndDomInfo.h +169 -0
- package/SVF-osx/Release-build/include/SVF/Util/SVFStat.h +103 -0
- package/SVF-osx/Release-build/include/SVF/Util/SVFUtil.h +478 -0
- package/SVF-osx/Release-build/include/SVF/Util/SparseBitVector.h +1252 -0
- package/SVF-osx/Release-build/include/SVF/Util/ThreadAPI.h +188 -0
- package/SVF-osx/Release-build/include/SVF/Util/WorkList.h +317 -0
- package/SVF-osx/Release-build/include/SVF/Util/Z3Expr.h +325 -0
- package/SVF-osx/Release-build/include/SVF/Util/cJSON.h +300 -0
- package/SVF-osx/Release-build/include/SVF/Util/config.h +46 -0
- package/SVF-osx/Release-build/include/SVF/Util/iterator.h +407 -0
- package/SVF-osx/Release-build/include/SVF/Util/iterator_range.h +76 -0
- package/SVF-osx/Release-build/include/SVF/WPA/Andersen.h +434 -0
- package/SVF-osx/Release-build/include/SVF/WPA/AndersenPWC.h +160 -0
- package/SVF-osx/Release-build/include/SVF/WPA/CSC.h +95 -0
- package/SVF-osx/Release-build/include/SVF/WPA/FlowSensitive.h +322 -0
- package/SVF-osx/Release-build/include/SVF/WPA/Steensgaard.h +131 -0
- package/SVF-osx/Release-build/include/SVF/WPA/TypeAnalysis.h +90 -0
- package/SVF-osx/Release-build/include/SVF/WPA/VersionedFlowSensitive.h +295 -0
- package/SVF-osx/Release-build/include/SVF/WPA/WPAFSSolver.h +246 -0
- package/SVF-osx/Release-build/include/SVF/WPA/WPAPass.h +115 -0
- package/SVF-osx/Release-build/include/SVF/WPA/WPASolver.h +205 -0
- package/SVF-osx/Release-build/include/SVF/WPA/WPAStat.h +222 -0
- package/SVF-osx/Release-build/include/SVF/extapi.bc +2384 -0
- package/SVF-osx/Release-build/lib/cmake/SVF/Modules/FindZ3.cmake +93 -0
- package/SVF-osx/Release-build/lib/cmake/SVF/SVFConfig.cmake +106 -0
- package/SVF-osx/Release-build/lib/cmake/SVF/SVFConfigVersion.cmake +43 -0
- package/SVF-osx/Release-build/lib/cmake/SVF/SVFTargets-release.cmake +101 -0
- package/SVF-osx/Release-build/lib/cmake/SVF/SVFTargets.cmake +180 -0
- package/SVF-osx/Release-build/lib/libSvfCore.3.1.dylib +0 -0
- package/SVF-osx/Release-build/lib/libSvfLLVM.3.1.dylib +0 -0
- package/SVF-osx/Release-build/lib/pkgconfig/SVF.pc +12 -0
- package/package.json +1 -1
- package/SVF-linux-aarch64/Release-build/include/CFL/grammar/PAGGrammar.txt +0 -15
- package/SVF-linux-aarch64/Release-build/include/CFL/grammar/PEGGrammar.txt +0 -11
- package/SVF-linux-aarch64/Release-build/include/CFL/grammar/VFGGrammar.txt +0 -7
- package/SVF-linux-aarch64/Release-build/include/FastCluster/LICENSE.TXT +0 -13
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AbstractState.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AbstractValue.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AddressValue.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/ICFGWTO.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/IntervalValue.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/NumericValue.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/RelExeState.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/RelationSolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AEDetector.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AbsExtAPI.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AbstractInterpretation.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFGNormalizer.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFGrammar.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLAlias.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLBase.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLGramGraphChecker.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLGraphBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLSVFGBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLSolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLVF.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/GrammarBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/ContextDDA.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAClient.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAPass.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAVFSolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/FlowDDA.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{FastCluster → SVF/FastCluster}/fastcluster.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/BasicBlockG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CDG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CFLGraph.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CHG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CallGraph.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsGEdge.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsGNode.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/DOTGraphTraits.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GenericGraph.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphPrinter.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphTraits.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphWriter.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGEdge.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGNode.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/IRGraph.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SCC.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGEdge.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGNode.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGOPT.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ThreadCallGraph.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFGEdge.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFGNode.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/WTO.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MSSAMuChi.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemPartition.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemRegion.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemSSA.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/SVFGBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/LockAnalysis.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MHP.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MTA.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MTAStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/TCT.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/AbstractPointsToDS.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/AccessPath.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/ConditionalPT.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/MutablePointsToDS.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PersistentPointsToCache.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PersistentPointsToDS.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointerAnalysis.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointerAnalysisImpl.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointsTo.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/SVFLoop.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/DoubleFreeChecker.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/FileChecker.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/LeakChecker.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/ProgSlice.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberCheckerAPI.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberCondAllocator.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberSVFGBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SrcSnkDDA.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SrcSnkSolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/BasicTypes.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/BreakConstantExpr.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/CHGBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/CppUtil.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/DCHG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/GEPTypeBridgeIterator.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/ICFGBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMLoopAnalysis.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMModule.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMUtil.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/ObjTypeInference.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/SVFIRBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/SymbolTableBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/ObjTypeInfo.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/PAGBuilderFromFile.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFIR.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFStatements.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFType.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFValue.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFVariables.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Annotator.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/BitVector.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CDGBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CallGraphBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Casting.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CommandLine.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CoreBitVector.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CxtStmt.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/DPItem.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/ExtAPI.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/GeneralType.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/GraphReachSolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/NodeIDAllocator.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Options.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/PTAStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFBugReport.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFLoopAndDomInfo.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFUtil.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SparseBitVector.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/ThreadAPI.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Z3Expr.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/cJSON.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/iterator.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/iterator_range.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/Andersen.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/AndersenPWC.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/CSC.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/FlowSensitive.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/Steensgaard.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/TypeAnalysis.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/VersionedFlowSensitive.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAFSSolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAPass.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPASolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/{lib → include/SVF}/extapi.bc +0 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
//===- ContextDDA.h -- Context-sensitive demand-driven analysis-------------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-> <Yulei Sui>
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
// This program is free software: you can redistribute it and/or modify
|
|
9
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
10
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
// (at your option) any later version.
|
|
12
|
+
|
|
13
|
+
// This program is distributed in the hope that it will be useful,
|
|
14
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
// GNU Affero General Public License for more details.
|
|
17
|
+
|
|
18
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
19
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
//
|
|
21
|
+
//===----------------------------------------------------------------------===//
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* ContextDDA.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Aug 17, 2014
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*
|
|
29
|
+
* The implementation is based on
|
|
30
|
+
* (1) Yulei Sui and Jingling Xue. "On-Demand Strong Update Analysis via Value-Flow Refinement".
|
|
31
|
+
* ACM SIGSOFT International Symposium on the Foundation of Software Engineering (FSE'16)
|
|
32
|
+
*
|
|
33
|
+
* (2) Yulei Sui and Jingling Xue. "Value-Flow-Based Demand-Driven Pointer Analysis for C and C++".
|
|
34
|
+
* IEEE Transactions on Software Engineering (TSE'18)
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
#ifndef ContextDDA_H_
|
|
38
|
+
#define ContextDDA_H_
|
|
39
|
+
|
|
40
|
+
#include "MemoryModel/PointerAnalysisImpl.h"
|
|
41
|
+
#include "DDA/DDAVFSolver.h"
|
|
42
|
+
#include "Util/DPItem.h"
|
|
43
|
+
|
|
44
|
+
namespace SVF
|
|
45
|
+
{
|
|
46
|
+
|
|
47
|
+
class FlowDDA;
|
|
48
|
+
class DDAClient;
|
|
49
|
+
typedef CxtStmtDPItem<SVFGNode> CxtLocDPItem;
|
|
50
|
+
|
|
51
|
+
/*!
|
|
52
|
+
* Context-, Flow- Sensitive Demand-driven Analysis
|
|
53
|
+
*/
|
|
54
|
+
class ContextDDA : public CondPTAImpl<ContextCond>, public DDAVFSolver<CxtVar,CxtPtSet,CxtLocDPItem>
|
|
55
|
+
{
|
|
56
|
+
|
|
57
|
+
public:
|
|
58
|
+
/// Constructor
|
|
59
|
+
ContextDDA(SVFIR* _pag, DDAClient* client);
|
|
60
|
+
|
|
61
|
+
/// Destructor
|
|
62
|
+
virtual ~ContextDDA();
|
|
63
|
+
|
|
64
|
+
/// Initialization of the analysis
|
|
65
|
+
virtual void initialize() override;
|
|
66
|
+
|
|
67
|
+
/// Finalize analysis
|
|
68
|
+
virtual inline void finalize() override
|
|
69
|
+
{
|
|
70
|
+
CondPTAImpl<ContextCond>::finalize();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/// dummy analyze method
|
|
74
|
+
virtual void analyze() override {}
|
|
75
|
+
|
|
76
|
+
/// Compute points-to set for an unconditional pointer
|
|
77
|
+
virtual void computeDDAPts(NodeID id) override;
|
|
78
|
+
|
|
79
|
+
/// Compute points-to set for a context-sensitive pointer
|
|
80
|
+
virtual const CxtPtSet& computeDDAPts(const CxtVar& cxtVar);
|
|
81
|
+
|
|
82
|
+
/// Handle out-of-budget dpm
|
|
83
|
+
void handleOutOfBudgetDpm(const CxtLocDPItem& dpm);
|
|
84
|
+
|
|
85
|
+
/// Override parent method
|
|
86
|
+
virtual CxtPtSet getConservativeCPts(const CxtLocDPItem& dpm) override
|
|
87
|
+
{
|
|
88
|
+
const PointsTo& pts = getAndersenAnalysis()->getPts(dpm.getCurNodeID());
|
|
89
|
+
CxtPtSet tmpCPts;
|
|
90
|
+
ContextCond cxt;
|
|
91
|
+
for (PointsTo::iterator piter = pts.begin(); piter != pts.end(); ++piter)
|
|
92
|
+
{
|
|
93
|
+
CxtVar var(cxt,*piter);
|
|
94
|
+
tmpCPts.set(var);
|
|
95
|
+
}
|
|
96
|
+
return tmpCPts;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/// Override parent method
|
|
100
|
+
virtual inline NodeID getPtrNodeID(const CxtVar& var) const override
|
|
101
|
+
{
|
|
102
|
+
return var.get_id();
|
|
103
|
+
}
|
|
104
|
+
/// Handle condition for context or path analysis (backward analysis)
|
|
105
|
+
virtual bool handleBKCondition(CxtLocDPItem& dpm, const SVFGEdge* edge) override;
|
|
106
|
+
|
|
107
|
+
/// we exclude concrete heap given the following conditions:
|
|
108
|
+
/// (1) concrete calling context (not involved in recursion and not exceed the maximum context limit)
|
|
109
|
+
/// (2) not inside loop
|
|
110
|
+
virtual bool isHeapCondMemObj(const CxtVar& var, const StoreSVFGNode* store) override;
|
|
111
|
+
|
|
112
|
+
/// refine indirect call edge
|
|
113
|
+
bool testIndCallReachability(CxtLocDPItem& dpm, const FunObjVar* callee, const CallICFGNode* cs);
|
|
114
|
+
|
|
115
|
+
/// get callsite id from call, return 0 if it is a spurious call edge
|
|
116
|
+
CallSiteID getCSIDAtCall(CxtLocDPItem& dpm, const SVFGEdge* edge);
|
|
117
|
+
|
|
118
|
+
/// get callsite id from return, return 0 if it is a spurious return edge
|
|
119
|
+
CallSiteID getCSIDAtRet(CxtLocDPItem& dpm, const SVFGEdge* edge);
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
/// Pop recursive callsites
|
|
123
|
+
inline virtual void popRecursiveCallSites(CxtLocDPItem& dpm)
|
|
124
|
+
{
|
|
125
|
+
ContextCond& cxtCond = dpm.getCond();
|
|
126
|
+
cxtCond.setNonConcreteCxt();
|
|
127
|
+
CallStrCxt& cxt = cxtCond.getContexts();
|
|
128
|
+
while(!cxt.empty() && isEdgeInRecursion(cxt.back()))
|
|
129
|
+
{
|
|
130
|
+
cxt.pop_back();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/// Whether call/return inside recursion
|
|
134
|
+
inline virtual bool isEdgeInRecursion(CallSiteID csId)
|
|
135
|
+
{
|
|
136
|
+
const FunObjVar* caller = getCallGraph()->getCallerOfCallSite(csId);
|
|
137
|
+
const FunObjVar* callee = getCallGraph()->getCalleeOfCallSite(csId);
|
|
138
|
+
return inSameCallGraphSCC(caller, callee);
|
|
139
|
+
}
|
|
140
|
+
/// Update call graph.
|
|
141
|
+
//@{
|
|
142
|
+
virtual void updateCallGraphAndSVFG(const CxtLocDPItem& dpm,const CallICFGNode* cs,SVFGEdgeSet& svfgEdges) override
|
|
143
|
+
{
|
|
144
|
+
CallEdgeMap newEdges;
|
|
145
|
+
resolveIndCalls(cs, getBVPointsTo(getCachedPointsTo(dpm)), newEdges);
|
|
146
|
+
for (CallEdgeMap::const_iterator iter = newEdges.begin(),eiter = newEdges.end(); iter != eiter; iter++)
|
|
147
|
+
{
|
|
148
|
+
const CallICFGNode* newcs = iter->first;
|
|
149
|
+
const FunctionSet & functions = iter->second;
|
|
150
|
+
for (FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)
|
|
151
|
+
{
|
|
152
|
+
const FunObjVar* func = *func_iter;
|
|
153
|
+
getSVFG()->connectCallerAndCallee(newcs, func, svfgEdges);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//@}
|
|
158
|
+
|
|
159
|
+
/// Return TRUE if this edge is inside a SVFG SCC, i.e., src node and dst node are in the same SCC on the SVFG.
|
|
160
|
+
inline bool edgeInCallGraphSCC(const SVFGEdge* edge)
|
|
161
|
+
{
|
|
162
|
+
const FunObjVar* srcfun = edge->getSrcNode()->getFun();
|
|
163
|
+
const FunObjVar* dstfun = edge->getDstNode()->getFun();
|
|
164
|
+
|
|
165
|
+
if(srcfun && dstfun)
|
|
166
|
+
return inSameCallGraphSCC(srcfun,dstfun);
|
|
167
|
+
|
|
168
|
+
assert(edge->isRetVFGEdge() == false && "should not be an inter-procedural return edge" );
|
|
169
|
+
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/// processGep node
|
|
174
|
+
virtual CxtPtSet processGepPts(const GepSVFGNode* gep, const CxtPtSet& srcPts) override;
|
|
175
|
+
|
|
176
|
+
/// Handle Address SVFGNode to add proper conditional points-to
|
|
177
|
+
virtual void handleAddr(CxtPtSet& pts,const CxtLocDPItem& dpm,const AddrSVFGNode* addr) override
|
|
178
|
+
{
|
|
179
|
+
NodeID srcID = addr->getPAGSrcNodeID();
|
|
180
|
+
/// whether this object is set field-insensitive during pre-analysis
|
|
181
|
+
if (isFieldInsensitive(srcID))
|
|
182
|
+
srcID = getFIObjVar(srcID);
|
|
183
|
+
|
|
184
|
+
CxtVar var(dpm.getCond(),srcID);
|
|
185
|
+
addDDAPts(pts,var);
|
|
186
|
+
DBOUT(DDDA, SVFUtil::outs() << "\t add points-to target " << var << " to dpm ");
|
|
187
|
+
DBOUT(DDDA, dpm.dump());
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/// Propagate along indirect value-flow if two objects of load and store are same
|
|
191
|
+
virtual inline bool propagateViaObj(const CxtVar& storeObj, const CxtVar& loadObj) override
|
|
192
|
+
{
|
|
193
|
+
return isSameVar(storeObj,loadObj);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/// Whether two call string contexts are compatible which may represent the same memory object
|
|
197
|
+
/// compare with call strings from last few callsite ids (most recent ids to objects):
|
|
198
|
+
/// compatible : (e.g., 123 == 123, 123 == 23). not compatible (e.g., 123 != 423)
|
|
199
|
+
virtual inline bool isCondCompatible(const ContextCond& cxt1, const ContextCond& cxt2, bool singleton) const override;
|
|
200
|
+
|
|
201
|
+
/// Whether this edge is treated context-insensitively
|
|
202
|
+
bool isInsensitiveCallRet(const SVFGEdge* edge)
|
|
203
|
+
{
|
|
204
|
+
return insensitveEdges.find(edge) != insensitveEdges.end();
|
|
205
|
+
}
|
|
206
|
+
/// Return insensitive edge set
|
|
207
|
+
inline ConstSVFGEdgeSet& getInsensitiveEdgeSet()
|
|
208
|
+
{
|
|
209
|
+
return insensitveEdges;
|
|
210
|
+
}
|
|
211
|
+
/// dump context call strings
|
|
212
|
+
virtual inline void dumpContexts(const ContextCond& cxts)
|
|
213
|
+
{
|
|
214
|
+
SVFUtil::outs() << cxts.toString() << "\n";
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
virtual const std::string PTAName() const override
|
|
218
|
+
{
|
|
219
|
+
return "Context Sensitive DDA";
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
private:
|
|
223
|
+
ConstSVFGEdgeSet insensitveEdges;///< insensitive call-return edges
|
|
224
|
+
FlowDDA* flowDDA; ///< downgrade to flowDDA if out-of-budget
|
|
225
|
+
DDAClient* _client; ///< DDA client
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
} // End namespace SVF
|
|
229
|
+
|
|
230
|
+
#endif /* ContextDDA_H_ */
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
//===- DDAClient.h -- Clients of demand-driven analysis-------------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-> <Yulei Sui>
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
// This program is free software: you can redistribute it and/or modify
|
|
9
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
10
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
// (at your option) any later version.
|
|
12
|
+
|
|
13
|
+
// This program is distributed in the hope that it will be useful,
|
|
14
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
// GNU Affero General Public License for more details.
|
|
17
|
+
|
|
18
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
19
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
//
|
|
21
|
+
//===----------------------------------------------------------------------===//
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
/*
|
|
25
|
+
* @file: DDAClient.h
|
|
26
|
+
* @author: yesen
|
|
27
|
+
* @date: 4 Feb 2015
|
|
28
|
+
*
|
|
29
|
+
* LICENSE
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
#ifndef DDACLIENT_H_
|
|
35
|
+
#define DDACLIENT_H_
|
|
36
|
+
|
|
37
|
+
#include "SVFIR/SVFIR.h"
|
|
38
|
+
#include "MemoryModel/PointerAnalysisImpl.h"
|
|
39
|
+
#include "Graphs/SVFG.h"
|
|
40
|
+
#include "SVFIR/SVFValue.h"
|
|
41
|
+
|
|
42
|
+
namespace SVF
|
|
43
|
+
{
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* General DDAClient which queries all top level pointers by default.
|
|
47
|
+
*/
|
|
48
|
+
class DDAClient
|
|
49
|
+
{
|
|
50
|
+
public:
|
|
51
|
+
DDAClient() : pag(nullptr), curPtr(0), solveAll(true) {}
|
|
52
|
+
|
|
53
|
+
virtual ~DDAClient() {}
|
|
54
|
+
|
|
55
|
+
virtual inline void initialise() {}
|
|
56
|
+
|
|
57
|
+
/// Collect candidate pointers for query.
|
|
58
|
+
virtual inline OrderedNodeSet& collectCandidateQueries(SVFIR* p)
|
|
59
|
+
{
|
|
60
|
+
setPAG(p);
|
|
61
|
+
if (solveAll)
|
|
62
|
+
candidateQueries = pag->getAllValidPtrs();
|
|
63
|
+
else
|
|
64
|
+
{
|
|
65
|
+
for (OrderedNodeSet::iterator it = userInput.begin(), eit = userInput.end(); it != eit; ++it)
|
|
66
|
+
addCandidate(*it);
|
|
67
|
+
}
|
|
68
|
+
return candidateQueries;
|
|
69
|
+
}
|
|
70
|
+
/// Get candidate queries
|
|
71
|
+
inline const OrderedNodeSet& getCandidateQueries() const
|
|
72
|
+
{
|
|
73
|
+
return candidateQueries;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/// Call back used by DDAVFSolver.
|
|
77
|
+
virtual inline void handleStatement(const SVFGNode*, NodeID) {}
|
|
78
|
+
/// Set SVFIR graph.
|
|
79
|
+
inline void setPAG(SVFIR* g)
|
|
80
|
+
{
|
|
81
|
+
pag = g;
|
|
82
|
+
}
|
|
83
|
+
/// Set the pointer being queried.
|
|
84
|
+
void setCurrentQueryPtr(NodeID ptr)
|
|
85
|
+
{
|
|
86
|
+
curPtr = ptr;
|
|
87
|
+
}
|
|
88
|
+
/// Set pointer to be queried by DDA analysis.
|
|
89
|
+
void setQuery(NodeID ptr)
|
|
90
|
+
{
|
|
91
|
+
userInput.insert(ptr);
|
|
92
|
+
solveAll = false;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
virtual void answerQueries(PointerAnalysis* pta);
|
|
96
|
+
|
|
97
|
+
virtual inline void performStat(PointerAnalysis*) {}
|
|
98
|
+
|
|
99
|
+
virtual inline void collectWPANum() {}
|
|
100
|
+
protected:
|
|
101
|
+
void addCandidate(NodeID id)
|
|
102
|
+
{
|
|
103
|
+
if (pag->isValidTopLevelPtr(pag->getGNode(id)))
|
|
104
|
+
candidateQueries.insert(id);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
SVFIR* pag; ///< SVFIR graph used by current DDA analysis
|
|
108
|
+
NodeID curPtr; ///< current pointer being queried
|
|
109
|
+
OrderedNodeSet candidateQueries; ///< store all candidate pointers to be queried
|
|
110
|
+
|
|
111
|
+
private:
|
|
112
|
+
OrderedNodeSet userInput; ///< User input queries
|
|
113
|
+
bool solveAll; ///< TRUE if all top level pointers are being queried
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* DDA client with function pointers as query candidates.
|
|
119
|
+
*/
|
|
120
|
+
class FunptrDDAClient : public DDAClient
|
|
121
|
+
{
|
|
122
|
+
private:
|
|
123
|
+
typedef OrderedMap<NodeID,const CallICFGNode*> VTablePtrToCallSiteMap;
|
|
124
|
+
VTablePtrToCallSiteMap vtableToCallSiteMap;
|
|
125
|
+
public:
|
|
126
|
+
FunptrDDAClient() : DDAClient() {}
|
|
127
|
+
~FunptrDDAClient() {}
|
|
128
|
+
|
|
129
|
+
/// Only collect function pointers as query candidates.
|
|
130
|
+
virtual OrderedNodeSet& collectCandidateQueries(SVFIR* p);
|
|
131
|
+
virtual void performStat(PointerAnalysis* pta);
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* DDA client with function pointers as query candidates.
|
|
138
|
+
*/
|
|
139
|
+
class AliasDDAClient : public DDAClient
|
|
140
|
+
{
|
|
141
|
+
|
|
142
|
+
public:
|
|
143
|
+
typedef OrderedSet<const PAGNode*> PAGNodeSet;
|
|
144
|
+
|
|
145
|
+
AliasDDAClient() : DDAClient() {}
|
|
146
|
+
~AliasDDAClient() {}
|
|
147
|
+
|
|
148
|
+
/// Only collect function pointers as query candidates.
|
|
149
|
+
virtual OrderedNodeSet& collectCandidateQueries(SVFIR* pag);
|
|
150
|
+
|
|
151
|
+
virtual void performStat(PointerAnalysis* pta);
|
|
152
|
+
|
|
153
|
+
private:
|
|
154
|
+
typedef OrderedMap<NodeID,const CallICFGNode*> VTablePtrToCallSiteMap;
|
|
155
|
+
VTablePtrToCallSiteMap vtableToCallSiteMap;
|
|
156
|
+
PAGNodeSet loadSrcNodes;
|
|
157
|
+
PAGNodeSet storeDstNodes;
|
|
158
|
+
PAGNodeSet gepSrcNodes;
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
} // End namespace SVF
|
|
162
|
+
|
|
163
|
+
#endif /* DDACLIENT_H_ */
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
//===- DDAPass.h -- Demand-driven analysis driver pass-------------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-> <Yulei Sui>
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
// This program is free software: you can redistribute it and/or modify
|
|
9
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
10
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
// (at your option) any later version.
|
|
12
|
+
|
|
13
|
+
// This program is distributed in the hope that it will be useful,
|
|
14
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
// GNU Affero General Public License for more details.
|
|
17
|
+
|
|
18
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
19
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
//
|
|
21
|
+
//===----------------------------------------------------------------------===//
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* @file: DDAPass.h
|
|
25
|
+
* @author: Yulei Sui
|
|
26
|
+
* @date: 01/07/2014
|
|
27
|
+
* @version: 1.0
|
|
28
|
+
*
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
#ifndef DDAPASS_H_
|
|
33
|
+
#define DDAPASS_H_
|
|
34
|
+
|
|
35
|
+
#include "DDA/DDAClient.h"
|
|
36
|
+
#include "Graphs/SCC.h"
|
|
37
|
+
#include "MemoryModel/PointerAnalysisImpl.h"
|
|
38
|
+
|
|
39
|
+
namespace SVF
|
|
40
|
+
{
|
|
41
|
+
|
|
42
|
+
/*!
|
|
43
|
+
* Demand-Driven Pointer Analysis.
|
|
44
|
+
* This class performs various pointer analysis on the given module.
|
|
45
|
+
*/
|
|
46
|
+
class DDAPass
|
|
47
|
+
{
|
|
48
|
+
|
|
49
|
+
public:
|
|
50
|
+
/// Pass ID
|
|
51
|
+
static char ID;
|
|
52
|
+
typedef SCCDetection<SVFG*> SVFGSCC;
|
|
53
|
+
typedef OrderedSet<const SVFGEdge*> SVFGEdgeSet;
|
|
54
|
+
typedef std::vector<PointerAnalysis*> PTAVector;
|
|
55
|
+
|
|
56
|
+
DDAPass() : _pta(nullptr), _client(nullptr) {}
|
|
57
|
+
~DDAPass();
|
|
58
|
+
|
|
59
|
+
/// Interface expose to users of our pointer analysis, given Value infos
|
|
60
|
+
virtual AliasResult alias(const SVFVar* V1, const SVFVar* V2)
|
|
61
|
+
{
|
|
62
|
+
return alias(V1->getId(), V2->getId());
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/// Interface expose to users of our pointer analysis, given PAGNodes
|
|
66
|
+
virtual AliasResult alias(NodeID V1, NodeID V2);
|
|
67
|
+
|
|
68
|
+
/// We start from here
|
|
69
|
+
virtual void runOnModule(SVFIR* module);
|
|
70
|
+
|
|
71
|
+
/// Select a client
|
|
72
|
+
virtual void selectClient();
|
|
73
|
+
|
|
74
|
+
/// Pass name
|
|
75
|
+
virtual inline std::string getPassName() const
|
|
76
|
+
{
|
|
77
|
+
return "DDAPass";
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private:
|
|
81
|
+
/// Print queries' pts
|
|
82
|
+
void printQueryPTS();
|
|
83
|
+
/// Create pointer analysis according to specified kind and analyze the module.
|
|
84
|
+
void runPointerAnalysis(SVFIR* module, u32_t kind);
|
|
85
|
+
/// Context insensitive Edge for DDA
|
|
86
|
+
void initCxtInsensitiveEdges(PointerAnalysis* pta, const SVFG* svfg,const SVFGSCC* svfgSCC, SVFGEdgeSet& insensitveEdges);
|
|
87
|
+
/// Return TRUE if this edge is inside a SVFG SCC, i.e., src node and dst node are in the same SCC on the SVFG.
|
|
88
|
+
bool edgeInSVFGSCC(const SVFGSCC* svfgSCC,const SVFGEdge* edge);
|
|
89
|
+
/// Return TRUE if this edge is inside a SVFG SCC, i.e., src node and dst node are in the same SCC on the SVFG.
|
|
90
|
+
bool edgeInCallGraphSCC(PointerAnalysis* pta,const SVFGEdge* edge);
|
|
91
|
+
|
|
92
|
+
void collectCxtInsenEdgeForRecur(PointerAnalysis* pta, const SVFG* svfg,SVFGEdgeSet& insensitveEdges);
|
|
93
|
+
void collectCxtInsenEdgeForVFCycle(PointerAnalysis* pta, const SVFG* svfg,const SVFGSCC* svfgSCC, SVFGEdgeSet& insensitveEdges);
|
|
94
|
+
|
|
95
|
+
std::unique_ptr<PointerAnalysis> _pta; ///< pointer analysis to be executed.
|
|
96
|
+
DDAClient* _client; ///< DDA client used
|
|
97
|
+
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
} // End namespace SVF
|
|
101
|
+
|
|
102
|
+
#endif /* WPA_H_ */
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
//===- DDAStat.h -- Statistics for demand-driven pass-------------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-> <Yulei Sui>
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
// This program is free software: you can redistribute it and/or modify
|
|
9
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
10
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
// (at your option) any later version.
|
|
12
|
+
|
|
13
|
+
// This program is distributed in the hope that it will be useful,
|
|
14
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
// GNU Affero General Public License for more details.
|
|
17
|
+
|
|
18
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
19
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
//
|
|
21
|
+
//===----------------------------------------------------------------------===//
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* DDAStat.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Sep 15, 2014
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef DDASTAT_H_
|
|
31
|
+
#define DDASTAT_H_
|
|
32
|
+
|
|
33
|
+
#include "Util/PTAStat.h"
|
|
34
|
+
#include "MemoryModel/PointsTo.h"
|
|
35
|
+
|
|
36
|
+
namespace SVF
|
|
37
|
+
{
|
|
38
|
+
|
|
39
|
+
class FlowDDA;
|
|
40
|
+
class ContextDDA;
|
|
41
|
+
class SVFG;
|
|
42
|
+
class PointerAnalysis;
|
|
43
|
+
|
|
44
|
+
/*!
|
|
45
|
+
* Statistics of demand-driven analysis
|
|
46
|
+
*/
|
|
47
|
+
class DDAStat : public PTAStat
|
|
48
|
+
{
|
|
49
|
+
|
|
50
|
+
public:
|
|
51
|
+
DDAStat(FlowDDA* pta);
|
|
52
|
+
DDAStat(ContextDDA* pta);
|
|
53
|
+
|
|
54
|
+
u32_t _NumOfDPM;
|
|
55
|
+
u32_t _NumOfStrongUpdates;
|
|
56
|
+
u32_t _NumOfMustAliases;
|
|
57
|
+
u32_t _NumOfInfeasiblePath;
|
|
58
|
+
|
|
59
|
+
u64_t _NumOfStep;
|
|
60
|
+
u64_t _NumOfStepInCycle;
|
|
61
|
+
double _AnaTimePerQuery;
|
|
62
|
+
double _AnaTimeCyclePerQuery;
|
|
63
|
+
double _TotalTimeOfQueries;
|
|
64
|
+
double _TotalTimeOfBKCondition;
|
|
65
|
+
|
|
66
|
+
NodeBS _StrongUpdateStores;
|
|
67
|
+
|
|
68
|
+
void performStatPerQuery(NodeID ptr) override;
|
|
69
|
+
|
|
70
|
+
void performStat() override;
|
|
71
|
+
|
|
72
|
+
void printStat(std::string str = "") override;
|
|
73
|
+
|
|
74
|
+
void printStatPerQuery(NodeID ptr, const PointsTo& pts) override;
|
|
75
|
+
|
|
76
|
+
void getNumOfOOBQuery();
|
|
77
|
+
|
|
78
|
+
private:
|
|
79
|
+
FlowDDA* flowDDA;
|
|
80
|
+
ContextDDA* contextDDA;
|
|
81
|
+
|
|
82
|
+
u32_t _TotalNumOfQuery;
|
|
83
|
+
u32_t _TotalNumOfOutOfBudgetQuery;
|
|
84
|
+
u32_t _TotalNumOfDPM;
|
|
85
|
+
u32_t _TotalNumOfStrongUpdates;
|
|
86
|
+
u32_t _TotalNumOfMustAliases;
|
|
87
|
+
u32_t _TotalNumOfInfeasiblePath;
|
|
88
|
+
|
|
89
|
+
u32_t _TotalNumOfStep;
|
|
90
|
+
u32_t _TotalNumOfStepInCycle;
|
|
91
|
+
|
|
92
|
+
u32_t _NumOfIndCallEdgeSolved;
|
|
93
|
+
u32_t _MaxCPtsSize;
|
|
94
|
+
u32_t _MaxPtsSize;
|
|
95
|
+
u32_t _TotalCPtsSize;
|
|
96
|
+
u32_t _TotalPtsSize;
|
|
97
|
+
u32_t _NumOfNullPtr;
|
|
98
|
+
u32_t _NumOfConstantPtr;
|
|
99
|
+
u32_t _NumOfBlackholePtr;
|
|
100
|
+
|
|
101
|
+
double _AvgNumOfDPMAtSVFGNode;
|
|
102
|
+
u32_t _MaxNumOfDPMAtSVFGNode;
|
|
103
|
+
|
|
104
|
+
NUMStatMap NumPerQueryStatMap;
|
|
105
|
+
|
|
106
|
+
void initDefault();
|
|
107
|
+
|
|
108
|
+
public:
|
|
109
|
+
SVFG* getSVFG() const;
|
|
110
|
+
|
|
111
|
+
PointerAnalysis* getPTA() const;
|
|
112
|
+
|
|
113
|
+
inline NodeBS& getStrongUpdateStores()
|
|
114
|
+
{
|
|
115
|
+
return _StrongUpdateStores;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
} // End namespace SVF
|
|
120
|
+
|
|
121
|
+
#endif /* DDASTAT_H_ */
|