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,327 @@
|
|
|
1
|
+
//===- SrcSnkDDA.h -- Source-sink analyzer-----------------------------------//
|
|
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
|
+
* SrcSnkDDA.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Apr 1, 2014
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*
|
|
29
|
+
* The implementation is based on
|
|
30
|
+
* (1) Yulei Sui, Ding Ye, and Jingling Xue. "Static Memory Leak Detection Using Full-Sparse Value-Flow Analysis".
|
|
31
|
+
* 2012 International Symposium on Software Testing and Analysis (ISSTA'12)
|
|
32
|
+
*
|
|
33
|
+
* (2) Yulei Sui, Ding Ye, and Jingling Xue. "Detecting Memory Leaks Statically with Full-Sparse Value-Flow Analysis".
|
|
34
|
+
* IEEE Transactions on Software Engineering (TSE'14)
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
#ifndef SRCSNKANALYSIS_H_
|
|
38
|
+
#define SRCSNKANALYSIS_H_
|
|
39
|
+
|
|
40
|
+
#include "Graphs/SVFGOPT.h"
|
|
41
|
+
#include "SABER/ProgSlice.h"
|
|
42
|
+
#include "SABER/SaberSVFGBuilder.h"
|
|
43
|
+
#include "Util/GraphReachSolver.h"
|
|
44
|
+
#include "Util/SVFBugReport.h"
|
|
45
|
+
|
|
46
|
+
namespace SVF
|
|
47
|
+
{
|
|
48
|
+
|
|
49
|
+
typedef GraphReachSolver<SVFG*,CxtDPItem> CFLSrcSnkSolver;
|
|
50
|
+
|
|
51
|
+
/*!
|
|
52
|
+
* General source-sink analysis, which serves as a base analysis to be extended for various clients
|
|
53
|
+
*/
|
|
54
|
+
class SrcSnkDDA : public CFLSrcSnkSolver
|
|
55
|
+
{
|
|
56
|
+
|
|
57
|
+
public:
|
|
58
|
+
typedef ProgSlice::SVFGNodeSet SVFGNodeSet;
|
|
59
|
+
typedef Map<const SVFGNode*,ProgSlice*> SVFGNodeToSliceMap;
|
|
60
|
+
typedef SVFGNodeSet::const_iterator SVFGNodeSetIter;
|
|
61
|
+
typedef CxtDPItem DPIm;
|
|
62
|
+
typedef Set<DPIm> DPImSet; ///< dpitem set
|
|
63
|
+
typedef Map<const SVFGNode*, DPImSet> SVFGNodeToDPItemsMap; ///< map a SVFGNode to its visited dpitems
|
|
64
|
+
typedef Set<const CallICFGNode*> CallSiteSet;
|
|
65
|
+
typedef NodeBS SVFGNodeBS;
|
|
66
|
+
typedef ProgSlice::VFWorkList WorkList;
|
|
67
|
+
|
|
68
|
+
private:
|
|
69
|
+
ProgSlice* _curSlice; /// current program slice
|
|
70
|
+
SVFGNodeSet sources; /// source nodes
|
|
71
|
+
SVFGNodeSet sinks; /// source nodes
|
|
72
|
+
std::unique_ptr<SaberCondAllocator> saberCondAllocator;
|
|
73
|
+
SVFGNodeToDPItemsMap nodeToDPItemsMap; ///< record forward visited dpitems
|
|
74
|
+
SVFGNodeSet visitedSet; ///< record backward visited nodes
|
|
75
|
+
|
|
76
|
+
protected:
|
|
77
|
+
SaberSVFGBuilder memSSA;
|
|
78
|
+
SVFG* svfg;
|
|
79
|
+
CallGraph* callgraph;
|
|
80
|
+
SVFBugReport report; /// Bug Reporter
|
|
81
|
+
|
|
82
|
+
public:
|
|
83
|
+
|
|
84
|
+
/// Constructor
|
|
85
|
+
SrcSnkDDA() : _curSlice(nullptr), svfg(nullptr), callgraph(nullptr)
|
|
86
|
+
{
|
|
87
|
+
saberCondAllocator = std::make_unique<SaberCondAllocator>();
|
|
88
|
+
}
|
|
89
|
+
/// Destructor
|
|
90
|
+
~SrcSnkDDA() override
|
|
91
|
+
{
|
|
92
|
+
svfg = nullptr;
|
|
93
|
+
|
|
94
|
+
delete _curSlice;
|
|
95
|
+
_curSlice = nullptr;
|
|
96
|
+
|
|
97
|
+
/// the following shared by multiple checkers, thus can not be released.
|
|
98
|
+
//if (callgraph != nullptr)
|
|
99
|
+
// delete callgraph;
|
|
100
|
+
//callgraph = nullptr;
|
|
101
|
+
|
|
102
|
+
//if(pathCondAllocator)
|
|
103
|
+
// delete pathCondAllocator;
|
|
104
|
+
//pathCondAllocator = nullptr;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/// Start analysis here
|
|
108
|
+
virtual void analyze();
|
|
109
|
+
|
|
110
|
+
/// Initialize analysis
|
|
111
|
+
virtual void initialize();
|
|
112
|
+
|
|
113
|
+
/// Finalize analysis
|
|
114
|
+
virtual void finalize()
|
|
115
|
+
{
|
|
116
|
+
dumpSlices();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/// Get SVFIR
|
|
120
|
+
SVFIR* getPAG() const
|
|
121
|
+
{
|
|
122
|
+
return SVFIR::getPAG();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/// Get SVFG
|
|
126
|
+
inline const SVFG* getSVFG() const
|
|
127
|
+
{
|
|
128
|
+
return graph();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/// Get Callgraph
|
|
132
|
+
inline CallGraph* getCallgraph() const
|
|
133
|
+
{
|
|
134
|
+
return callgraph;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/// Whether this svfg node may access global variable
|
|
138
|
+
inline bool isGlobalSVFGNode(const SVFGNode* node) const
|
|
139
|
+
{
|
|
140
|
+
return memSSA.isGlobalSVFGNode(node);
|
|
141
|
+
}
|
|
142
|
+
/// Slice operations
|
|
143
|
+
//@{
|
|
144
|
+
virtual void setCurSlice(const SVFGNode* src);
|
|
145
|
+
|
|
146
|
+
inline ProgSlice* getCurSlice() const
|
|
147
|
+
{
|
|
148
|
+
return _curSlice;
|
|
149
|
+
}
|
|
150
|
+
inline void addSinkToCurSlice(const SVFGNode* node)
|
|
151
|
+
{
|
|
152
|
+
_curSlice->addToSinks(node);
|
|
153
|
+
addToCurForwardSlice(node);
|
|
154
|
+
}
|
|
155
|
+
inline bool isInCurForwardSlice(const SVFGNode* node)
|
|
156
|
+
{
|
|
157
|
+
return _curSlice->inForwardSlice(node);
|
|
158
|
+
}
|
|
159
|
+
inline bool isInCurBackwardSlice(const SVFGNode* node)
|
|
160
|
+
{
|
|
161
|
+
return _curSlice->inBackwardSlice(node);
|
|
162
|
+
}
|
|
163
|
+
inline void addToCurForwardSlice(const SVFGNode* node)
|
|
164
|
+
{
|
|
165
|
+
_curSlice->addToForwardSlice(node);
|
|
166
|
+
}
|
|
167
|
+
inline void addToCurBackwardSlice(const SVFGNode* node)
|
|
168
|
+
{
|
|
169
|
+
_curSlice->addToBackwardSlice(node);
|
|
170
|
+
}
|
|
171
|
+
//@}
|
|
172
|
+
|
|
173
|
+
/// Initialize sources and sinks
|
|
174
|
+
///@{
|
|
175
|
+
virtual void initSrcs() = 0;
|
|
176
|
+
virtual void initSnks() = 0;
|
|
177
|
+
virtual bool isSourceLikeFun(const FunObjVar* fun)
|
|
178
|
+
{
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
virtual bool isSinkLikeFun(const FunObjVar* fun)
|
|
183
|
+
{
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
bool isSource(const SVFGNode* node) const
|
|
188
|
+
{
|
|
189
|
+
return getSources().find(node)!=getSources().end();
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
bool isSink(const SVFGNode* node) const
|
|
193
|
+
{
|
|
194
|
+
return getSinks().find(node)!=getSinks().end();
|
|
195
|
+
}
|
|
196
|
+
///@}
|
|
197
|
+
|
|
198
|
+
/// Identify allocation wrappers
|
|
199
|
+
bool isInAWrapper(const SVFGNode* src, CallSiteSet& csIdSet);
|
|
200
|
+
|
|
201
|
+
/// report bug on the current analyzed slice
|
|
202
|
+
virtual void reportBug(ProgSlice* slice) = 0;
|
|
203
|
+
|
|
204
|
+
/// Get sources/sinks
|
|
205
|
+
//@{
|
|
206
|
+
inline const SVFGNodeSet& getSources() const
|
|
207
|
+
{
|
|
208
|
+
return sources;
|
|
209
|
+
}
|
|
210
|
+
inline SVFGNodeSetIter sourcesBegin() const
|
|
211
|
+
{
|
|
212
|
+
return sources.begin();
|
|
213
|
+
}
|
|
214
|
+
inline SVFGNodeSetIter sourcesEnd() const
|
|
215
|
+
{
|
|
216
|
+
return sources.end();
|
|
217
|
+
}
|
|
218
|
+
inline void addToSources(const SVFGNode* node)
|
|
219
|
+
{
|
|
220
|
+
sources.insert(node);
|
|
221
|
+
}
|
|
222
|
+
inline const SVFGNodeSet& getSinks() const
|
|
223
|
+
{
|
|
224
|
+
return sinks;
|
|
225
|
+
}
|
|
226
|
+
inline SVFGNodeSetIter sinksBegin() const
|
|
227
|
+
{
|
|
228
|
+
return sinks.begin();
|
|
229
|
+
}
|
|
230
|
+
inline SVFGNodeSetIter sinksEnd() const
|
|
231
|
+
{
|
|
232
|
+
return sinks.end();
|
|
233
|
+
}
|
|
234
|
+
inline void addToSinks(const SVFGNode* node)
|
|
235
|
+
{
|
|
236
|
+
sinks.insert(node);
|
|
237
|
+
}
|
|
238
|
+
//@}
|
|
239
|
+
|
|
240
|
+
/// Get saber condition allocator
|
|
241
|
+
SaberCondAllocator* getSaberCondAllocator() const
|
|
242
|
+
{
|
|
243
|
+
return saberCondAllocator.get();
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
inline const SVFBugReport& getBugReport() const
|
|
247
|
+
{
|
|
248
|
+
return report;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
protected:
|
|
252
|
+
/// Forward traverse
|
|
253
|
+
inline void FWProcessCurNode(const DPIm& item) override
|
|
254
|
+
{
|
|
255
|
+
const SVFGNode* node = getNode(item.getCurNodeID());
|
|
256
|
+
if(isSink(node))
|
|
257
|
+
{
|
|
258
|
+
addSinkToCurSlice(node);
|
|
259
|
+
_curSlice->setPartialReachable();
|
|
260
|
+
}
|
|
261
|
+
else
|
|
262
|
+
addToCurForwardSlice(node);
|
|
263
|
+
}
|
|
264
|
+
/// Backward traverse
|
|
265
|
+
inline void BWProcessCurNode(const DPIm& item) override
|
|
266
|
+
{
|
|
267
|
+
const SVFGNode* node = getNode(item.getCurNodeID());
|
|
268
|
+
if(isInCurForwardSlice(node))
|
|
269
|
+
{
|
|
270
|
+
addToCurBackwardSlice(node);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/// Propagate information forward by matching context
|
|
274
|
+
void FWProcessOutgoingEdge(const DPIm& item, SVFGEdge* edge) override;
|
|
275
|
+
/// Propagate information backward without matching context, as forward analysis already did it
|
|
276
|
+
void BWProcessIncomingEdge(const DPIm& item, SVFGEdge* edge) override;
|
|
277
|
+
/// Whether has been visited or not, in order to avoid recursion on SVFG
|
|
278
|
+
//@{
|
|
279
|
+
inline bool forwardVisited(const SVFGNode* node, const DPIm& item)
|
|
280
|
+
{
|
|
281
|
+
SVFGNodeToDPItemsMap::const_iterator it = nodeToDPItemsMap.find(node);
|
|
282
|
+
if(it!=nodeToDPItemsMap.end())
|
|
283
|
+
return it->second.find(item)!=it->second.end();
|
|
284
|
+
else
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
inline void addForwardVisited(const SVFGNode* node, const DPIm& item)
|
|
288
|
+
{
|
|
289
|
+
nodeToDPItemsMap[node].insert(item);
|
|
290
|
+
}
|
|
291
|
+
inline bool backwardVisited(const SVFGNode* node)
|
|
292
|
+
{
|
|
293
|
+
return visitedSet.find(node)!=visitedSet.end();
|
|
294
|
+
}
|
|
295
|
+
inline void addBackwardVisited(const SVFGNode* node)
|
|
296
|
+
{
|
|
297
|
+
visitedSet.insert(node);
|
|
298
|
+
}
|
|
299
|
+
inline void clearVisitedMap()
|
|
300
|
+
{
|
|
301
|
+
nodeToDPItemsMap.clear();
|
|
302
|
+
visitedSet.clear();
|
|
303
|
+
}
|
|
304
|
+
//@}
|
|
305
|
+
|
|
306
|
+
/// Whether it is all path reachable from a source
|
|
307
|
+
virtual bool isAllPathReachable()
|
|
308
|
+
{
|
|
309
|
+
return _curSlice->isAllReachable();
|
|
310
|
+
}
|
|
311
|
+
/// Whether it is some path reachable from a source
|
|
312
|
+
virtual bool isSomePathReachable()
|
|
313
|
+
{
|
|
314
|
+
return _curSlice->isPartialReachable();
|
|
315
|
+
}
|
|
316
|
+
/// Dump SVFG with annotated slice information
|
|
317
|
+
//@{
|
|
318
|
+
void dumpSlices();
|
|
319
|
+
void annotateSlice(ProgSlice* slice);
|
|
320
|
+
void printZ3Stat();
|
|
321
|
+
//@}
|
|
322
|
+
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
} // End namespace SVF
|
|
326
|
+
|
|
327
|
+
#endif /* SRCSNKANALYSIS_H_ */
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
//===- SrcSnkSolver.h -- CFL reachability solver---------------------------------//
|
|
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
|
+
* SrcSnkSolver.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Apr 1, 2014
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef CFLSOLVER_H_
|
|
31
|
+
#define CFLSOLVER_H_
|
|
32
|
+
|
|
33
|
+
#include "Util/WorkList.h"
|
|
34
|
+
#include "Util/DPItem.h"
|
|
35
|
+
|
|
36
|
+
namespace SVF
|
|
37
|
+
{
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
* Generic CFL solver for demand-driven analysis based on different graphs (e.g. SVFIR, VFG, ThreadVFG)
|
|
41
|
+
* Extend this class for sophisticated CFL-reachability resolution (e.g. field, flow, path)
|
|
42
|
+
*/
|
|
43
|
+
template<class GraphType, class DPIm = DPItem>
|
|
44
|
+
class SrcSnkSolver
|
|
45
|
+
{
|
|
46
|
+
|
|
47
|
+
public:
|
|
48
|
+
///Define the GTraits and node iterator
|
|
49
|
+
typedef SVF::GenericGraphTraits<GraphType> GTraits;
|
|
50
|
+
typedef typename GTraits::NodeType GNODE;
|
|
51
|
+
typedef typename GTraits::EdgeType GEDGE;
|
|
52
|
+
typedef typename GTraits::nodes_iterator node_iterator;
|
|
53
|
+
typedef typename GTraits::ChildIteratorType child_iterator;
|
|
54
|
+
|
|
55
|
+
/// Define inverse GTraits and note iterator
|
|
56
|
+
typedef SVF::GenericGraphTraits<SVF::Inverse<GNODE *> > InvGTraits;
|
|
57
|
+
typedef typename InvGTraits::ChildIteratorType inv_child_iterator;
|
|
58
|
+
|
|
59
|
+
/// Define worklist
|
|
60
|
+
typedef FIFOWorkList<DPIm> WorkList;
|
|
61
|
+
|
|
62
|
+
protected:
|
|
63
|
+
|
|
64
|
+
/// Constructor
|
|
65
|
+
SrcSnkSolver(): _graph(nullptr)
|
|
66
|
+
{
|
|
67
|
+
}
|
|
68
|
+
/// Destructor
|
|
69
|
+
virtual ~SrcSnkSolver()
|
|
70
|
+
{
|
|
71
|
+
}
|
|
72
|
+
/// Get/Set graph methods
|
|
73
|
+
//@{
|
|
74
|
+
const inline GraphType graph() const
|
|
75
|
+
{
|
|
76
|
+
return _graph;
|
|
77
|
+
}
|
|
78
|
+
inline void setGraph(GraphType g)
|
|
79
|
+
{
|
|
80
|
+
_graph = g;
|
|
81
|
+
}
|
|
82
|
+
//@}
|
|
83
|
+
|
|
84
|
+
inline GNODE* getNode(NodeID id) const
|
|
85
|
+
{
|
|
86
|
+
return _graph->getGNode(id);
|
|
87
|
+
}
|
|
88
|
+
virtual inline NodeID getNodeIDFromItem(const DPIm& item) const
|
|
89
|
+
{
|
|
90
|
+
return item.getCurNodeID();
|
|
91
|
+
}
|
|
92
|
+
/// CFL forward traverse solve
|
|
93
|
+
virtual void forwardTraverse(DPIm& it)
|
|
94
|
+
{
|
|
95
|
+
pushIntoWorklist(it);
|
|
96
|
+
|
|
97
|
+
while (!isWorklistEmpty())
|
|
98
|
+
{
|
|
99
|
+
DPIm item = popFromWorklist();
|
|
100
|
+
FWProcessCurNode(item);
|
|
101
|
+
|
|
102
|
+
GNODE* v = getNode(getNodeIDFromItem(item));
|
|
103
|
+
child_iterator EI = GTraits::child_begin(v);
|
|
104
|
+
child_iterator EE = GTraits::child_end(v);
|
|
105
|
+
for (; EI != EE; ++EI)
|
|
106
|
+
{
|
|
107
|
+
FWProcessOutgoingEdge(item,*(EI.getCurrent()) );
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/// CFL forward traverse solve
|
|
112
|
+
virtual void backwardTraverse(DPIm& it)
|
|
113
|
+
{
|
|
114
|
+
pushIntoWorklist(it);
|
|
115
|
+
|
|
116
|
+
while (!isWorklistEmpty())
|
|
117
|
+
{
|
|
118
|
+
DPIm item = popFromWorklist();
|
|
119
|
+
BWProcessCurNode(item);
|
|
120
|
+
|
|
121
|
+
GNODE* v = getNode(getNodeIDFromItem(item));
|
|
122
|
+
inv_child_iterator EI = InvGTraits::child_begin(v);
|
|
123
|
+
inv_child_iterator EE = InvGTraits::child_end(v);
|
|
124
|
+
for (; EI != EE; ++EI)
|
|
125
|
+
{
|
|
126
|
+
BWProcessIncomingEdge(item,*(EI.getCurrent()) );
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/// Process the DP item
|
|
131
|
+
//@{
|
|
132
|
+
virtual void FWProcessCurNode(const DPIm&)
|
|
133
|
+
{
|
|
134
|
+
}
|
|
135
|
+
virtual void BWProcessCurNode(const DPIm&)
|
|
136
|
+
{
|
|
137
|
+
}
|
|
138
|
+
//@}
|
|
139
|
+
/// Propagation for the solving, to be implemented in the child class
|
|
140
|
+
//@{
|
|
141
|
+
virtual void FWProcessOutgoingEdge(const DPIm& item, GEDGE* edge)
|
|
142
|
+
{
|
|
143
|
+
DPIm newItem(item);
|
|
144
|
+
newItem.setCurNodeID(edge->getDstID());
|
|
145
|
+
pushIntoWorklist(newItem);
|
|
146
|
+
}
|
|
147
|
+
virtual void BWProcessIncomingEdge(const DPIm& item, GEDGE* edge)
|
|
148
|
+
{
|
|
149
|
+
DPIm newItem(item);
|
|
150
|
+
newItem.setCurNodeID(edge->getSrcID());
|
|
151
|
+
pushIntoWorklist(newItem);
|
|
152
|
+
}
|
|
153
|
+
//@}
|
|
154
|
+
/// Worklist operations
|
|
155
|
+
//@{
|
|
156
|
+
inline DPIm popFromWorklist()
|
|
157
|
+
{
|
|
158
|
+
return worklist.pop();
|
|
159
|
+
}
|
|
160
|
+
inline bool pushIntoWorklist(DPIm& item)
|
|
161
|
+
{
|
|
162
|
+
return worklist.push(item);
|
|
163
|
+
}
|
|
164
|
+
inline bool isWorklistEmpty()
|
|
165
|
+
{
|
|
166
|
+
return worklist.empty();
|
|
167
|
+
}
|
|
168
|
+
inline bool isInWorklist(DPIm& item)
|
|
169
|
+
{
|
|
170
|
+
return worklist.find(item);
|
|
171
|
+
}
|
|
172
|
+
//@}
|
|
173
|
+
|
|
174
|
+
private:
|
|
175
|
+
|
|
176
|
+
/// Graph
|
|
177
|
+
GraphType _graph;
|
|
178
|
+
|
|
179
|
+
/// Worklist for resolution
|
|
180
|
+
WorkList worklist;
|
|
181
|
+
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
} // End namespace SVF
|
|
185
|
+
|
|
186
|
+
#endif /* CFLSOLVER_H_ */
|