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,322 @@
|
|
|
1
|
+
//===- FlowSensitive.h -- Flow-sensitive pointer analysis---------------------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-2017> <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
|
+
* FlowSensitiveAnalysis.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Oct 28, 2013
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef FLOWSENSITIVEANALYSIS_H_
|
|
31
|
+
#define FLOWSENSITIVEANALYSIS_H_
|
|
32
|
+
|
|
33
|
+
#include "FastCluster/fastcluster.h"
|
|
34
|
+
#include "Graphs/SVFGOPT.h"
|
|
35
|
+
#include "MemoryModel/PointerAnalysisImpl.h"
|
|
36
|
+
#include "MSSA/SVFGBuilder.h"
|
|
37
|
+
#include "WPA/WPAFSSolver.h"
|
|
38
|
+
|
|
39
|
+
namespace SVF
|
|
40
|
+
{
|
|
41
|
+
|
|
42
|
+
class AndersenWaveDiff;
|
|
43
|
+
|
|
44
|
+
/*!
|
|
45
|
+
* Flow sensitive whole program pointer analysis
|
|
46
|
+
*/
|
|
47
|
+
typedef WPAFSSolver<SVFG*> WPASVFGFSSolver;
|
|
48
|
+
class FlowSensitive : public WPASVFGFSSolver, public BVDataPTAImpl
|
|
49
|
+
{
|
|
50
|
+
friend class FlowSensitiveStat;
|
|
51
|
+
protected:
|
|
52
|
+
typedef SVFG::SVFGEdgeSetTy SVFGEdgeSetTy;
|
|
53
|
+
|
|
54
|
+
public:
|
|
55
|
+
typedef BVDataPTAImpl::MutDFPTDataTy MutDFPTDataTy;
|
|
56
|
+
typedef BVDataPTAImpl::MutDFPTDataTy::DFPtsMap DFInOutMap;
|
|
57
|
+
typedef BVDataPTAImpl::MutDFPTDataTy::PtsMap PtsMap;
|
|
58
|
+
|
|
59
|
+
/// Constructor
|
|
60
|
+
explicit FlowSensitive(SVFIR* _pag, PTATY type = FSSPARSE_WPA) : WPASVFGFSSolver(), BVDataPTAImpl(_pag, type)
|
|
61
|
+
{
|
|
62
|
+
svfg = nullptr;
|
|
63
|
+
solveTime = sccTime = processTime = propagationTime = updateTime = 0;
|
|
64
|
+
addrTime = copyTime = gepTime = loadTime = storeTime = phiTime = 0;
|
|
65
|
+
updateCallGraphTime = directPropaTime = indirectPropaTime = 0;
|
|
66
|
+
numOfProcessedAddr = numOfProcessedCopy = numOfProcessedGep = 0;
|
|
67
|
+
numOfProcessedLoad = numOfProcessedStore = 0;
|
|
68
|
+
numOfProcessedPhi = numOfProcessedActualParam = numOfProcessedFormalRet = 0;
|
|
69
|
+
numOfProcessedMSSANode = 0;
|
|
70
|
+
maxSCCSize = numOfSCC = numOfNodesInSCC = 0;
|
|
71
|
+
iterationForPrintStat = OnTheFlyIterBudgetForStat;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/// Destructor
|
|
75
|
+
~FlowSensitive() override = default;
|
|
76
|
+
|
|
77
|
+
/// Create single instance of flow-sensitive pointer analysis
|
|
78
|
+
static FlowSensitive* createFSWPA(SVFIR* _pag)
|
|
79
|
+
{
|
|
80
|
+
if (fspta == nullptr)
|
|
81
|
+
{
|
|
82
|
+
fspta = std::unique_ptr<FlowSensitive>(new FlowSensitive(_pag));
|
|
83
|
+
fspta->analyze();
|
|
84
|
+
}
|
|
85
|
+
return fspta.get();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/// Release flow-sensitive pointer analysis
|
|
89
|
+
static void releaseFSWPA()
|
|
90
|
+
{
|
|
91
|
+
fspta = nullptr;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/// We start from here
|
|
95
|
+
virtual bool runOnModule()
|
|
96
|
+
{
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/// Flow sensitive analysis
|
|
101
|
+
void analyze() override;
|
|
102
|
+
|
|
103
|
+
virtual void solveAndwritePtsToFile(const std::string& filename);
|
|
104
|
+
|
|
105
|
+
virtual void readPtsFromFile(const std::string& filename);
|
|
106
|
+
|
|
107
|
+
virtual void solveConstraints();
|
|
108
|
+
|
|
109
|
+
/// Initialize analysis
|
|
110
|
+
void initialize() override;
|
|
111
|
+
|
|
112
|
+
/// Finalize analysis
|
|
113
|
+
void finalize() override;
|
|
114
|
+
|
|
115
|
+
/// Get PTA name
|
|
116
|
+
const std::string PTAName() const override
|
|
117
|
+
{
|
|
118
|
+
return "FlowSensitive";
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast
|
|
122
|
+
//@{
|
|
123
|
+
static inline bool classof(const FlowSensitive *)
|
|
124
|
+
{
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
static inline bool classof(const PointerAnalysis *pta)
|
|
128
|
+
{
|
|
129
|
+
return pta->getAnalysisTy() == FSSPARSE_WPA;
|
|
130
|
+
}
|
|
131
|
+
//@}
|
|
132
|
+
|
|
133
|
+
/// Return SVFG
|
|
134
|
+
inline SVFG* getSVFG() const
|
|
135
|
+
{
|
|
136
|
+
return svfg;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
protected:
|
|
140
|
+
/// SCC detection
|
|
141
|
+
NodeStack& SCCDetect() override;
|
|
142
|
+
|
|
143
|
+
/// Propagation
|
|
144
|
+
//@{
|
|
145
|
+
/// Propagate points-to information from an edge's src node to its dst node.
|
|
146
|
+
bool propFromSrcToDst(SVFGEdge* edge) override;
|
|
147
|
+
/// Propagate points-to information along a DIRECT SVFG edge.
|
|
148
|
+
virtual bool propAlongDirectEdge(const DirectSVFGEdge* edge);
|
|
149
|
+
/// Propagate points-to information along an INDIRECT SVFG edge.
|
|
150
|
+
virtual bool propAlongIndirectEdge(const IndirectSVFGEdge* edge);
|
|
151
|
+
/// Propagate points-to information of a certain variable from src to dst.
|
|
152
|
+
virtual bool propVarPtsFromSrcToDst(NodeID var, const SVFGNode* src, const SVFGNode* dst);
|
|
153
|
+
/// Propagate points-to information from an actual-param to a formal-param.
|
|
154
|
+
/// Not necessary if SVFGOPT is used instead of original SVFG.
|
|
155
|
+
virtual bool propagateFromAPToFP(const ActualParmSVFGNode* ap, const SVFGNode* dst);
|
|
156
|
+
/// Propagate points-to information from a formal-ret to an actual-ret.
|
|
157
|
+
/// Not necessary if SVFGOPT is used instead of original SVFG.
|
|
158
|
+
virtual bool propagateFromFRToAR(const FormalRetSVFGNode* fr, const SVFGNode* dst);
|
|
159
|
+
/// Handle weak updates
|
|
160
|
+
virtual bool weakUpdateOutFromIn(const SVFGNode* node)
|
|
161
|
+
{
|
|
162
|
+
return getDFPTDataTy()->updateAllDFOutFromIn(node->getId(),0,false);
|
|
163
|
+
}
|
|
164
|
+
/// Handle strong updates
|
|
165
|
+
virtual bool strongUpdateOutFromIn(const SVFGNode* node, NodeID singleton)
|
|
166
|
+
{
|
|
167
|
+
return getDFPTDataTy()->updateAllDFOutFromIn(node->getId(),singleton,true);
|
|
168
|
+
}
|
|
169
|
+
//@}
|
|
170
|
+
|
|
171
|
+
/// Propagation between newly connected SVFG nodes during updateCallGraph.
|
|
172
|
+
/// Can only be used during updateCallGraph.
|
|
173
|
+
//@{
|
|
174
|
+
bool propVarPtsAfterCGUpdated(NodeID var, const SVFGNode* src, const SVFGNode* dst);
|
|
175
|
+
|
|
176
|
+
virtual inline bool propDFOutToIn(const SVFGNode* srcStmt, NodeID srcVar, const SVFGNode* dstStmt, NodeID dstVar)
|
|
177
|
+
{
|
|
178
|
+
return getDFPTDataTy()->updateAllDFInFromOut(srcStmt->getId(), srcVar, dstStmt->getId(),dstVar);
|
|
179
|
+
}
|
|
180
|
+
virtual inline bool propDFInToIn(const SVFGNode* srcStmt, NodeID srcVar, const SVFGNode* dstStmt, NodeID dstVar)
|
|
181
|
+
{
|
|
182
|
+
return getDFPTDataTy()->updateAllDFInFromIn(srcStmt->getId(), srcVar, dstStmt->getId(),dstVar);
|
|
183
|
+
}
|
|
184
|
+
//@}
|
|
185
|
+
|
|
186
|
+
/// Update data-flow points-to data
|
|
187
|
+
//@{
|
|
188
|
+
inline bool updateOutFromIn(const SVFGNode* srcStmt, NodeID srcVar, const SVFGNode* dstStmt, NodeID dstVar)
|
|
189
|
+
{
|
|
190
|
+
return getDFPTDataTy()->updateDFOutFromIn(srcStmt->getId(),srcVar, dstStmt->getId(),dstVar);
|
|
191
|
+
}
|
|
192
|
+
virtual inline bool updateInFromIn(const SVFGNode* srcStmt, NodeID srcVar, const SVFGNode* dstStmt, NodeID dstVar)
|
|
193
|
+
{
|
|
194
|
+
return getDFPTDataTy()->updateDFInFromIn(srcStmt->getId(),srcVar, dstStmt->getId(),dstVar);
|
|
195
|
+
}
|
|
196
|
+
virtual inline bool updateInFromOut(const SVFGNode* srcStmt, NodeID srcVar, const SVFGNode* dstStmt, NodeID dstVar)
|
|
197
|
+
{
|
|
198
|
+
return getDFPTDataTy()->updateDFInFromOut(srcStmt->getId(),srcVar, dstStmt->getId(),dstVar);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
virtual inline bool unionPtsFromIn(const SVFGNode* stmt, NodeID srcVar, NodeID dstVar)
|
|
202
|
+
{
|
|
203
|
+
return getDFPTDataTy()->updateTLVPts(stmt->getId(),srcVar,dstVar);
|
|
204
|
+
}
|
|
205
|
+
virtual inline bool unionPtsFromTop(const SVFGNode* stmt, NodeID srcVar, NodeID dstVar)
|
|
206
|
+
{
|
|
207
|
+
return getDFPTDataTy()->updateATVPts(srcVar,stmt->getId(),dstVar);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
inline void clearAllDFOutVarFlag(const SVFGNode* stmt)
|
|
211
|
+
{
|
|
212
|
+
getDFPTDataTy()->clearAllDFOutUpdatedVar(stmt->getId());
|
|
213
|
+
}
|
|
214
|
+
//@}
|
|
215
|
+
|
|
216
|
+
/// Handle various constraints
|
|
217
|
+
//@{
|
|
218
|
+
void processNode(NodeID nodeId) override;
|
|
219
|
+
bool processSVFGNode(SVFGNode* node);
|
|
220
|
+
virtual bool processAddr(const AddrSVFGNode* addr);
|
|
221
|
+
virtual bool processCopy(const CopySVFGNode* copy);
|
|
222
|
+
virtual bool processPhi(const PHISVFGNode* phi);
|
|
223
|
+
virtual bool processGep(const GepSVFGNode* edge);
|
|
224
|
+
virtual bool processLoad(const LoadSVFGNode* load);
|
|
225
|
+
virtual bool processStore(const StoreSVFGNode* store);
|
|
226
|
+
//@}
|
|
227
|
+
|
|
228
|
+
/// Update call graph
|
|
229
|
+
//@{
|
|
230
|
+
/// Update call graph.
|
|
231
|
+
bool updateCallGraph(const CallSiteToFunPtrMap& callsites) override;
|
|
232
|
+
/// Connect nodes in SVFG.
|
|
233
|
+
void connectCallerAndCallee(const CallEdgeMap& newEdges, SVFGEdgeSetTy& edges);
|
|
234
|
+
/// Update nodes connected during updating call graph.
|
|
235
|
+
virtual void updateConnectedNodes(const SVFGEdgeSetTy& edges);
|
|
236
|
+
//@}
|
|
237
|
+
|
|
238
|
+
/// Return TRUE if this is a strong update STORE statement.
|
|
239
|
+
bool isStrongUpdate(const SVFGNode* node, NodeID& singleton);
|
|
240
|
+
|
|
241
|
+
/// Fills may/noAliases for the location/pointer pairs in cmp.
|
|
242
|
+
virtual void countAliases(Set<std::pair<NodeID, NodeID>> cmp, unsigned *mayAliases, unsigned *noAliases);
|
|
243
|
+
|
|
244
|
+
SVFG* svfg;
|
|
245
|
+
///Get points-to set for a node from data flow IN/OUT set at a statement.
|
|
246
|
+
//@{
|
|
247
|
+
inline const PointsTo& getDFInPtsSet(const SVFGNode* stmt, const NodeID node)
|
|
248
|
+
{
|
|
249
|
+
return getDFPTDataTy()->getDFInPtsSet(stmt->getId(),node);
|
|
250
|
+
}
|
|
251
|
+
inline const PointsTo& getDFOutPtsSet(const SVFGNode* stmt, const NodeID node)
|
|
252
|
+
{
|
|
253
|
+
return getDFPTDataTy()->getDFOutPtsSet(stmt->getId(),node);
|
|
254
|
+
}
|
|
255
|
+
//@}
|
|
256
|
+
|
|
257
|
+
/// Get IN/OUT data flow map.
|
|
258
|
+
/// May only be called when the backing is MUTABLE.
|
|
259
|
+
///@{
|
|
260
|
+
inline const DFInOutMap& getDFInputMap() const
|
|
261
|
+
{
|
|
262
|
+
return getMutDFPTDataTy()->getDFIn();
|
|
263
|
+
}
|
|
264
|
+
inline const DFInOutMap& getDFOutputMap() const
|
|
265
|
+
{
|
|
266
|
+
return getMutDFPTDataTy()->getDFOut();
|
|
267
|
+
}
|
|
268
|
+
///@}
|
|
269
|
+
|
|
270
|
+
/// Performs clustering based on ander, setting the global best mapping
|
|
271
|
+
/// accordingly.
|
|
272
|
+
virtual void cluster(void);
|
|
273
|
+
/// Sets the global best mapping as a plain mapping, i.e. n -> n.
|
|
274
|
+
virtual void plainMap(void) const;
|
|
275
|
+
|
|
276
|
+
static std::unique_ptr<FlowSensitive> fspta;
|
|
277
|
+
SVFGBuilder memSSA;
|
|
278
|
+
AndersenWaveDiff *ander;
|
|
279
|
+
|
|
280
|
+
/// Save candidate mappings for evaluation's sake.
|
|
281
|
+
std::vector<std::pair<hclust_fast_methods, std::vector<NodeID>>> candidateMappings;
|
|
282
|
+
|
|
283
|
+
/// Statistics.
|
|
284
|
+
//@{
|
|
285
|
+
u32_t numOfProcessedAddr; /// Number of processed Addr node
|
|
286
|
+
u32_t numOfProcessedCopy; /// Number of processed Copy node
|
|
287
|
+
u32_t numOfProcessedGep; /// Number of processed Gep node
|
|
288
|
+
u32_t numOfProcessedPhi; /// Number of processed Phi node
|
|
289
|
+
u32_t numOfProcessedLoad; /// Number of processed Load node
|
|
290
|
+
u32_t numOfProcessedStore; /// Number of processed Store node
|
|
291
|
+
u32_t numOfProcessedActualParam; /// Number of processed actual param node
|
|
292
|
+
u32_t numOfProcessedFormalRet; /// Number of processed formal ret node
|
|
293
|
+
u32_t numOfProcessedMSSANode; /// Number of processed mssa node
|
|
294
|
+
|
|
295
|
+
u32_t maxSCCSize;
|
|
296
|
+
u32_t numOfSCC;
|
|
297
|
+
u32_t numOfNodesInSCC;
|
|
298
|
+
|
|
299
|
+
double solveTime; ///< time of solve.
|
|
300
|
+
double sccTime; ///< time of SCC detection.
|
|
301
|
+
double processTime; ///< time of processNode.
|
|
302
|
+
double propagationTime; ///< time of points-to propagation.
|
|
303
|
+
double directPropaTime; ///< time of points-to propagation of address-taken objects
|
|
304
|
+
double indirectPropaTime; ///< time of points-to propagation of top-level pointers
|
|
305
|
+
double updateTime; ///< time of strong/weak updates.
|
|
306
|
+
double addrTime; ///< time of handling address edges
|
|
307
|
+
double copyTime; ///< time of handling copy edges
|
|
308
|
+
double gepTime; ///< time of handling gep edges
|
|
309
|
+
double loadTime; ///< time of load edges
|
|
310
|
+
double storeTime; ///< time of store edges
|
|
311
|
+
double phiTime; ///< time of phi nodes.
|
|
312
|
+
double updateCallGraphTime; ///< time of updating call graph
|
|
313
|
+
|
|
314
|
+
NodeBS svfgHasSU;
|
|
315
|
+
//@}
|
|
316
|
+
|
|
317
|
+
void svfgStat();
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
} // End namespace SVF
|
|
321
|
+
|
|
322
|
+
#endif /* FLOWSENSITIVEANALYSIS_H_ */
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Steensgaard.h
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2 Feb. 2021
|
|
5
|
+
* Author: Yulei Sui
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#ifndef INCLUDE_WPA_STEENSGAARD_H_
|
|
9
|
+
#define INCLUDE_WPA_STEENSGAARD_H_
|
|
10
|
+
|
|
11
|
+
#include "WPA/Andersen.h"
|
|
12
|
+
|
|
13
|
+
namespace SVF
|
|
14
|
+
{
|
|
15
|
+
/*!
|
|
16
|
+
* Equivalence-based Pointer Analysis
|
|
17
|
+
*/
|
|
18
|
+
typedef WPASolver<ConstraintGraph*> WPAConstraintSolver;
|
|
19
|
+
|
|
20
|
+
class Steensgaard : public AndersenBase
|
|
21
|
+
{
|
|
22
|
+
|
|
23
|
+
public:
|
|
24
|
+
typedef Map<NodeID, NodeID> NodeToEquivClassMap;
|
|
25
|
+
typedef Map<NodeID, Set<NodeID>> NodeToSubsMap;
|
|
26
|
+
|
|
27
|
+
/// Constructor
|
|
28
|
+
Steensgaard(SVFIR* _pag) : AndersenBase(_pag, Steensgaard_WPA, true) {}
|
|
29
|
+
|
|
30
|
+
/// Create an singleton instance
|
|
31
|
+
static Steensgaard* createSteensgaard(SVFIR* _pag)
|
|
32
|
+
{
|
|
33
|
+
if (steens == nullptr)
|
|
34
|
+
{
|
|
35
|
+
steens = new Steensgaard(_pag);
|
|
36
|
+
steens->analyze();
|
|
37
|
+
return steens;
|
|
38
|
+
}
|
|
39
|
+
return steens;
|
|
40
|
+
}
|
|
41
|
+
static void releaseSteensgaard()
|
|
42
|
+
{
|
|
43
|
+
if (steens)
|
|
44
|
+
delete steens;
|
|
45
|
+
steens = nullptr;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
virtual void solveWorklist() override;
|
|
49
|
+
|
|
50
|
+
void processAllAddr();
|
|
51
|
+
|
|
52
|
+
void ecUnion(NodeID id, NodeID ec);
|
|
53
|
+
|
|
54
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
55
|
+
//@{
|
|
56
|
+
static inline bool classof(const Steensgaard*)
|
|
57
|
+
{
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
static inline bool classof(const AndersenBase* pta)
|
|
61
|
+
{
|
|
62
|
+
return (pta->getAnalysisTy() == Steensgaard_WPA);
|
|
63
|
+
}
|
|
64
|
+
static inline bool classof(const PointerAnalysis* pta)
|
|
65
|
+
{
|
|
66
|
+
return (pta->getAnalysisTy() == Steensgaard_WPA);
|
|
67
|
+
}
|
|
68
|
+
//@}
|
|
69
|
+
|
|
70
|
+
/// Operation of points-to set
|
|
71
|
+
virtual inline const PointsTo& getPts(NodeID id) override
|
|
72
|
+
{
|
|
73
|
+
return getPTDataTy()->getPts(getEC(id));
|
|
74
|
+
}
|
|
75
|
+
/// pts(id) = pts(id) U target
|
|
76
|
+
virtual inline bool unionPts(NodeID id, const PointsTo& target) override
|
|
77
|
+
{
|
|
78
|
+
id = getEC(id);
|
|
79
|
+
return getPTDataTy()->unionPts(id, target);
|
|
80
|
+
}
|
|
81
|
+
/// pts(id) = pts(id) U pts(ptd)
|
|
82
|
+
virtual inline bool unionPts(NodeID id, NodeID ptd) override
|
|
83
|
+
{
|
|
84
|
+
id = getEC(id);
|
|
85
|
+
ptd = getEC(ptd);
|
|
86
|
+
return getPTDataTy()->unionPts(id, ptd);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/// API for equivalence class operations
|
|
90
|
+
/// Every constraint node maps to an unique equivalence class EC
|
|
91
|
+
/// An equivalence class has a set of sub constraint nodes.
|
|
92
|
+
inline NodeID getEC(NodeID id) const
|
|
93
|
+
{
|
|
94
|
+
NodeToEquivClassMap::const_iterator it = nodeToECMap.find(id);
|
|
95
|
+
if (it == nodeToECMap.end())
|
|
96
|
+
return id;
|
|
97
|
+
else
|
|
98
|
+
return it->second;
|
|
99
|
+
}
|
|
100
|
+
/// Return getEC(id)
|
|
101
|
+
inline NodeID sccRepNode(NodeID id) const override
|
|
102
|
+
{
|
|
103
|
+
return getEC(id);
|
|
104
|
+
}
|
|
105
|
+
void setEC(NodeID node, NodeID rep);
|
|
106
|
+
|
|
107
|
+
inline Set<NodeID>& getSubNodes(NodeID id)
|
|
108
|
+
{
|
|
109
|
+
nodeToSubsMap[id].insert(id);
|
|
110
|
+
return nodeToSubsMap[id];
|
|
111
|
+
}
|
|
112
|
+
inline void addSubNode(NodeID node, NodeID sub)
|
|
113
|
+
{
|
|
114
|
+
nodeToSubsMap[node].insert(sub);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/// Add copy edge on constraint graph
|
|
118
|
+
virtual inline bool addCopyEdge(NodeID src, NodeID dst) override
|
|
119
|
+
{
|
|
120
|
+
return consCG->addCopyCGEdge(src, dst);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
private:
|
|
124
|
+
static Steensgaard* steens; // static instance
|
|
125
|
+
NodeToEquivClassMap nodeToECMap;
|
|
126
|
+
NodeToSubsMap nodeToSubsMap;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
} // namespace SVF
|
|
130
|
+
|
|
131
|
+
#endif /* INCLUDE_WPA_STEENSGAARD_H_ */
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
//===- TypeAnalysis.h -- Fast type-based analysis without pointer analysis---------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-2017> <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
|
+
* TypeAnalysis.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: 7 Sep. 2018
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef INCLUDE_WPA_TYPEANALYSIS_H_
|
|
31
|
+
#define INCLUDE_WPA_TYPEANALYSIS_H_
|
|
32
|
+
|
|
33
|
+
#include "WPA/Andersen.h"
|
|
34
|
+
|
|
35
|
+
namespace SVF
|
|
36
|
+
{
|
|
37
|
+
|
|
38
|
+
class TypeAnalysis: public AndersenBase
|
|
39
|
+
{
|
|
40
|
+
|
|
41
|
+
public:
|
|
42
|
+
/// Constructor
|
|
43
|
+
TypeAnalysis(SVFIR* pag)
|
|
44
|
+
: AndersenBase(pag, TypeCPP_WPA)
|
|
45
|
+
{
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/// Destructor
|
|
49
|
+
virtual ~TypeAnalysis()
|
|
50
|
+
{
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/// Type analysis
|
|
54
|
+
void analyze() override;
|
|
55
|
+
|
|
56
|
+
/// Initialize analysis
|
|
57
|
+
void initialize() override;
|
|
58
|
+
|
|
59
|
+
/// Finalize analysis
|
|
60
|
+
virtual inline void finalize() override;
|
|
61
|
+
|
|
62
|
+
/// Add copy edge on constraint graph
|
|
63
|
+
inline bool addCopyEdge(NodeID src, NodeID dst) override
|
|
64
|
+
{
|
|
65
|
+
assert(false && "this function should never be executed!");
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/// Resolve callgraph based on CHA
|
|
70
|
+
void callGraphSolveBasedOnCHA(const CallSiteToFunPtrMap& callsites, CallEdgeMap& newEdges);
|
|
71
|
+
|
|
72
|
+
/// Statistics of CHA and callgraph
|
|
73
|
+
void dumpCHAStats();
|
|
74
|
+
|
|
75
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
76
|
+
//@{
|
|
77
|
+
static inline bool classof(const TypeAnalysis *)
|
|
78
|
+
{
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
static inline bool classof(const PointerAnalysis *pta)
|
|
82
|
+
{
|
|
83
|
+
return (pta->getAnalysisTy() == TypeCPP_WPA);
|
|
84
|
+
}
|
|
85
|
+
//@}
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
} // End namespace SVF
|
|
89
|
+
|
|
90
|
+
#endif /* INCLUDE_WPA_TYPEANALYSIS_H_ */
|