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,452 @@
|
|
|
1
|
+
//===- MemSSA.h -- Memory SSA-------------------------------------------------//
|
|
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
|
+
* MemorySSAPass.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Jul 14, 2013
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*
|
|
29
|
+
* The implementation is based on
|
|
30
|
+
* Yulei Sui, Hua Yan, Yunpeng Zhang, Jingling Xue and Zheng Zheng.
|
|
31
|
+
* "Parallel Construction of Interprocedural Memory SSA Form".
|
|
32
|
+
* Journal of Systems and Software (JSS'16), Algorithm 3 in the paper
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
#ifndef MEMORYSSAPASS_H_
|
|
37
|
+
#define MEMORYSSAPASS_H_
|
|
38
|
+
|
|
39
|
+
#include "MSSA/MemRegion.h"
|
|
40
|
+
#include "MSSA/MSSAMuChi.h"
|
|
41
|
+
|
|
42
|
+
#include <vector>
|
|
43
|
+
|
|
44
|
+
namespace SVF
|
|
45
|
+
{
|
|
46
|
+
|
|
47
|
+
class PointerAnalysis;
|
|
48
|
+
class MemSSAStat;
|
|
49
|
+
/*
|
|
50
|
+
* Memory SSA implementation on top of partial SSA
|
|
51
|
+
*/
|
|
52
|
+
class MemSSA
|
|
53
|
+
{
|
|
54
|
+
|
|
55
|
+
public:
|
|
56
|
+
|
|
57
|
+
/// define condition here changes needed if we add new type
|
|
58
|
+
typedef MemRegion::Condition Condition;
|
|
59
|
+
typedef MSSAMU<Condition> MU;
|
|
60
|
+
typedef RetMU<Condition> RETMU;
|
|
61
|
+
typedef LoadMU<Condition> LOADMU;
|
|
62
|
+
typedef CallMU<Condition> CALLMU;
|
|
63
|
+
typedef MSSACHI<Condition> CHI;
|
|
64
|
+
typedef EntryCHI<Condition> ENTRYCHI;
|
|
65
|
+
typedef StoreCHI<Condition> STORECHI;
|
|
66
|
+
typedef CallCHI<Condition> CALLCHI;
|
|
67
|
+
typedef MSSAPHI<Condition> PHI;
|
|
68
|
+
typedef MSSADEF MDEF;
|
|
69
|
+
|
|
70
|
+
typedef Set<MU*> MUSet;
|
|
71
|
+
typedef Set<CHI*> CHISet;
|
|
72
|
+
typedef Set<PHI*> PHISet;
|
|
73
|
+
|
|
74
|
+
///Define mem region set
|
|
75
|
+
typedef MRGenerator::MRSet MRSet;
|
|
76
|
+
typedef std::vector<const MemRegion*> MRVector;
|
|
77
|
+
/// Map loads/stores to its mem regions,
|
|
78
|
+
/// TODO:visitAtomicCmpXchgInst, visitAtomicRMWInst??
|
|
79
|
+
//@{
|
|
80
|
+
typedef Map<const LoadStmt*, MUSet> LoadToMUSetMap;
|
|
81
|
+
typedef Map<const StoreStmt*, CHISet> StoreToChiSetMap;
|
|
82
|
+
typedef Map<const CallICFGNode*, MUSet> CallSiteToMUSetMap;
|
|
83
|
+
typedef Map<const CallICFGNode*, CHISet> CallSiteToCHISetMap;
|
|
84
|
+
typedef OrderedMap<const SVFBasicBlock*, PHISet> BBToPhiSetMap;
|
|
85
|
+
//@}
|
|
86
|
+
|
|
87
|
+
/// Map from fun to its entry chi set and return mu set
|
|
88
|
+
typedef Map<const FunObjVar*, CHISet> FunToEntryChiSetMap;
|
|
89
|
+
typedef Map<const FunObjVar*, MUSet> FunToReturnMuSetMap;
|
|
90
|
+
|
|
91
|
+
/// For phi insertion
|
|
92
|
+
//@{
|
|
93
|
+
typedef std::vector<const SVFBasicBlock*> BBList;
|
|
94
|
+
typedef Map<const SVFBasicBlock*, MRSet> BBToMRSetMap;
|
|
95
|
+
typedef Map<const MemRegion*, BBList> MemRegToBBsMap;
|
|
96
|
+
//@}
|
|
97
|
+
|
|
98
|
+
/// For SSA renaming
|
|
99
|
+
typedef Map<const MemRegion*, std::vector<MRVer*> > MemRegToVerStackMap;
|
|
100
|
+
typedef Map<const MemRegion*, MRVERSION> MemRegToCounterMap;
|
|
101
|
+
|
|
102
|
+
/// SVFIR edge list
|
|
103
|
+
typedef SVFIR::SVFStmtList SVFStmtList;
|
|
104
|
+
|
|
105
|
+
/// Statistics
|
|
106
|
+
//@{
|
|
107
|
+
static double timeOfGeneratingMemRegions; ///< Time for allocating regions
|
|
108
|
+
static double timeOfCreateMUCHI; ///< Time for generating mu/chi for load/store/calls
|
|
109
|
+
static double timeOfInsertingPHI; ///< Time for inserting phis
|
|
110
|
+
static double timeOfSSARenaming; ///< Time for SSA rename
|
|
111
|
+
//@}
|
|
112
|
+
|
|
113
|
+
enum MemPartition
|
|
114
|
+
{
|
|
115
|
+
Distinct,
|
|
116
|
+
IntraDisjoint,
|
|
117
|
+
InterDisjoint
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
protected:
|
|
121
|
+
BVDataPTAImpl* pta;
|
|
122
|
+
MRGenerator* mrGen;
|
|
123
|
+
MemSSAStat* stat;
|
|
124
|
+
|
|
125
|
+
/// Create mu chi for candidate regions in a function
|
|
126
|
+
virtual void createMUCHI(const FunObjVar& fun);
|
|
127
|
+
/// Insert phi for candidate regions in a function
|
|
128
|
+
virtual void insertPHI(const FunObjVar& fun);
|
|
129
|
+
/// SSA rename for a function
|
|
130
|
+
virtual void SSARename(const FunObjVar& fun);
|
|
131
|
+
/// SSA rename for a basic block
|
|
132
|
+
virtual void SSARenameBB(const SVFBasicBlock& bb);
|
|
133
|
+
private:
|
|
134
|
+
LoadToMUSetMap load2MuSetMap;
|
|
135
|
+
StoreToChiSetMap store2ChiSetMap;
|
|
136
|
+
CallSiteToMUSetMap callsiteToMuSetMap;
|
|
137
|
+
CallSiteToCHISetMap callsiteToChiSetMap;
|
|
138
|
+
BBToPhiSetMap bb2PhiSetMap;
|
|
139
|
+
|
|
140
|
+
FunToEntryChiSetMap funToEntryChiSetMap;
|
|
141
|
+
FunToReturnMuSetMap funToReturnMuSetMap;
|
|
142
|
+
|
|
143
|
+
MemRegToVerStackMap mr2VerStackMap;
|
|
144
|
+
MemRegToCounterMap mr2CounterMap;
|
|
145
|
+
|
|
146
|
+
/// The following three set are used for prune SSA phi insertion
|
|
147
|
+
// (see algorithm in book Engineering A Compiler section 9.3)
|
|
148
|
+
///@{
|
|
149
|
+
/// Collects used memory regions
|
|
150
|
+
MRSet usedRegs;
|
|
151
|
+
/// Maps memory region to its basic block
|
|
152
|
+
MemRegToBBsMap reg2BBMap;
|
|
153
|
+
/// Collect memory regions whose definition killed
|
|
154
|
+
MRSet varKills;
|
|
155
|
+
//@}
|
|
156
|
+
|
|
157
|
+
std::vector<std::unique_ptr<MRVer>> usedMRVers;
|
|
158
|
+
|
|
159
|
+
/// Release the memory
|
|
160
|
+
void destroy();
|
|
161
|
+
|
|
162
|
+
/// Get a new SSA name of a memory region
|
|
163
|
+
MRVer* newSSAName(const MemRegion* mr, MSSADEF* def);
|
|
164
|
+
|
|
165
|
+
/// Get the last version of the SSA ver of memory region
|
|
166
|
+
inline MRVer* getTopStackVer(const MemRegion* mr)
|
|
167
|
+
{
|
|
168
|
+
std::vector<MRVer*> &stack = mr2VerStackMap[mr];
|
|
169
|
+
assert(!stack.empty() && "stack is empty!!");
|
|
170
|
+
return stack.back();
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/// Collect region uses and region defs according to mus/chis, in order to insert phis
|
|
174
|
+
//@{
|
|
175
|
+
inline void collectRegUses(const MemRegion* mr)
|
|
176
|
+
{
|
|
177
|
+
if (0 == varKills.count(mr))
|
|
178
|
+
usedRegs.insert(mr);
|
|
179
|
+
}
|
|
180
|
+
inline void collectRegDefs(const SVFBasicBlock* bb, const MemRegion* mr)
|
|
181
|
+
{
|
|
182
|
+
varKills.insert(mr);
|
|
183
|
+
reg2BBMap[mr].push_back(bb);
|
|
184
|
+
}
|
|
185
|
+
//@}
|
|
186
|
+
|
|
187
|
+
/// Add methods for mus/chis/phis
|
|
188
|
+
//@{
|
|
189
|
+
inline void AddLoadMU(const SVFBasicBlock* bb, const LoadStmt* load, const MRSet& mrSet)
|
|
190
|
+
{
|
|
191
|
+
for (MRSet::iterator iter = mrSet.begin(), eiter = mrSet.end(); iter != eiter; ++iter)
|
|
192
|
+
AddLoadMU(bb,load,*iter);
|
|
193
|
+
}
|
|
194
|
+
inline void AddStoreCHI(const SVFBasicBlock* bb, const StoreStmt* store, const MRSet& mrSet)
|
|
195
|
+
{
|
|
196
|
+
for (MRSet::iterator iter = mrSet.begin(), eiter = mrSet.end(); iter != eiter; ++iter)
|
|
197
|
+
AddStoreCHI(bb,store,*iter);
|
|
198
|
+
}
|
|
199
|
+
inline void AddCallSiteMU(const CallICFGNode* cs, const MRSet& mrSet)
|
|
200
|
+
{
|
|
201
|
+
for (MRSet::iterator iter = mrSet.begin(), eiter = mrSet.end(); iter != eiter; ++iter)
|
|
202
|
+
AddCallSiteMU(cs,*iter);
|
|
203
|
+
}
|
|
204
|
+
inline void AddCallSiteCHI(const CallICFGNode* cs, const MRSet& mrSet)
|
|
205
|
+
{
|
|
206
|
+
for (MRSet::iterator iter = mrSet.begin(), eiter = mrSet.end(); iter != eiter; ++iter)
|
|
207
|
+
AddCallSiteCHI(cs,*iter);
|
|
208
|
+
}
|
|
209
|
+
inline void AddMSSAPHI(const SVFBasicBlock* bb, const MRSet& mrSet)
|
|
210
|
+
{
|
|
211
|
+
for (MRSet::iterator iter = mrSet.begin(), eiter = mrSet.end(); iter != eiter; ++iter)
|
|
212
|
+
AddMSSAPHI(bb,*iter);
|
|
213
|
+
}
|
|
214
|
+
inline void AddLoadMU(const SVFBasicBlock* bb, const LoadStmt* load, const MemRegion* mr)
|
|
215
|
+
{
|
|
216
|
+
LOADMU* mu = new LOADMU(bb,load, mr);
|
|
217
|
+
load2MuSetMap[load].insert(mu);
|
|
218
|
+
collectRegUses(mr);
|
|
219
|
+
}
|
|
220
|
+
inline void AddStoreCHI(const SVFBasicBlock* bb, const StoreStmt* store, const MemRegion* mr)
|
|
221
|
+
{
|
|
222
|
+
STORECHI* chi = new STORECHI(bb,store, mr);
|
|
223
|
+
store2ChiSetMap[store].insert(chi);
|
|
224
|
+
collectRegUses(mr);
|
|
225
|
+
collectRegDefs(bb,mr);
|
|
226
|
+
}
|
|
227
|
+
inline void AddCallSiteMU(const CallICFGNode* cs, const MemRegion* mr)
|
|
228
|
+
{
|
|
229
|
+
CALLMU* mu = new CALLMU(cs, mr);
|
|
230
|
+
callsiteToMuSetMap[cs].insert(mu);
|
|
231
|
+
collectRegUses(mr);
|
|
232
|
+
}
|
|
233
|
+
inline void AddCallSiteCHI(const CallICFGNode* cs, const MemRegion* mr)
|
|
234
|
+
{
|
|
235
|
+
CALLCHI* chi = new CALLCHI(cs, mr);
|
|
236
|
+
callsiteToChiSetMap[cs].insert(chi);
|
|
237
|
+
collectRegUses(mr);
|
|
238
|
+
collectRegDefs(chi->getBasicBlock(),mr);
|
|
239
|
+
}
|
|
240
|
+
inline void AddMSSAPHI(const SVFBasicBlock* bb, const MemRegion* mr)
|
|
241
|
+
{
|
|
242
|
+
bb2PhiSetMap[bb].insert(new PHI(bb, mr));
|
|
243
|
+
}
|
|
244
|
+
//@}
|
|
245
|
+
|
|
246
|
+
/// Rename mus, chis and phis
|
|
247
|
+
//@{
|
|
248
|
+
/// Rename mu set
|
|
249
|
+
inline void RenameMuSet(const MUSet& muSet)
|
|
250
|
+
{
|
|
251
|
+
for (MUSet::const_iterator mit = muSet.begin(), emit = muSet.end();
|
|
252
|
+
mit != emit; ++mit)
|
|
253
|
+
{
|
|
254
|
+
MU* mu = (*mit);
|
|
255
|
+
mu->setVer(getTopStackVer(mu->getMR()));
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/// Rename chi set
|
|
260
|
+
inline void RenameChiSet(const CHISet& chiSet, MRVector& memRegs)
|
|
261
|
+
{
|
|
262
|
+
for (CHISet::const_iterator cit = chiSet.begin(), ecit = chiSet.end();
|
|
263
|
+
cit != ecit; ++cit)
|
|
264
|
+
{
|
|
265
|
+
CHI* chi = (*cit);
|
|
266
|
+
chi->setOpVer(getTopStackVer(chi->getMR()));
|
|
267
|
+
chi->setResVer(newSSAName(chi->getMR(),chi));
|
|
268
|
+
memRegs.push_back(chi->getMR());
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/// Rename result (LHS) of phis
|
|
273
|
+
inline void RenamePhiRes(const PHISet& phiSet, MRVector& memRegs)
|
|
274
|
+
{
|
|
275
|
+
for (PHISet::const_iterator iter = phiSet.begin(), eiter = phiSet.end();
|
|
276
|
+
iter != eiter; ++iter)
|
|
277
|
+
{
|
|
278
|
+
PHI* phi = *iter;
|
|
279
|
+
phi->setResVer(newSSAName(phi->getMR(),phi));
|
|
280
|
+
memRegs.push_back(phi->getMR());
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/// Rename operands (RHS) of phis
|
|
285
|
+
inline void RenamePhiOps(const PHISet& phiSet, u32_t pos, MRVector&)
|
|
286
|
+
{
|
|
287
|
+
for (PHISet::const_iterator iter = phiSet.begin(), eiter = phiSet.end();
|
|
288
|
+
iter != eiter; ++iter)
|
|
289
|
+
{
|
|
290
|
+
PHI* phi = *iter;
|
|
291
|
+
phi->setOpVer(getTopStackVer(phi->getMR()), pos);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
//@}
|
|
295
|
+
|
|
296
|
+
public:
|
|
297
|
+
/// Constructor
|
|
298
|
+
MemSSA(BVDataPTAImpl* p, bool ptrOnlyMSSA);
|
|
299
|
+
|
|
300
|
+
/// Destructor
|
|
301
|
+
virtual ~MemSSA()
|
|
302
|
+
{
|
|
303
|
+
destroy();
|
|
304
|
+
}
|
|
305
|
+
/// Return SVFIR
|
|
306
|
+
inline SVFIR* getPAG();
|
|
307
|
+
/// Return PTA
|
|
308
|
+
inline BVDataPTAImpl* getPTA() const
|
|
309
|
+
{
|
|
310
|
+
return pta;
|
|
311
|
+
}
|
|
312
|
+
/// Return MRGenerator
|
|
313
|
+
inline MRGenerator* getMRGenerator()
|
|
314
|
+
{
|
|
315
|
+
return mrGen;
|
|
316
|
+
}
|
|
317
|
+
/// We start from here
|
|
318
|
+
virtual void buildMemSSA(const FunObjVar& fun);
|
|
319
|
+
|
|
320
|
+
/// Perform statistics
|
|
321
|
+
void performStat();
|
|
322
|
+
|
|
323
|
+
/// Has mu/chi methods
|
|
324
|
+
//@{
|
|
325
|
+
inline bool hasMU(const PAGEdge* inst) const
|
|
326
|
+
{
|
|
327
|
+
if (const LoadStmt* load = SVFUtil::dyn_cast<LoadStmt>(inst))
|
|
328
|
+
{
|
|
329
|
+
bool hasMu = load2MuSetMap.count(load) != 0;
|
|
330
|
+
assert(hasMu && "not associated with mem region!");
|
|
331
|
+
return hasMu;
|
|
332
|
+
}
|
|
333
|
+
else
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
inline bool hasCHI(const PAGEdge* inst) const
|
|
337
|
+
{
|
|
338
|
+
if (const StoreStmt* store = SVFUtil::dyn_cast<StoreStmt>(
|
|
339
|
+
inst))
|
|
340
|
+
{
|
|
341
|
+
bool has_store = store2ChiSetMap.count(store) != 0;
|
|
342
|
+
assert(has_store && "not associated with mem region!");
|
|
343
|
+
return has_store;
|
|
344
|
+
}
|
|
345
|
+
else
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
348
|
+
inline bool hasMU(const CallICFGNode* cs) const
|
|
349
|
+
{
|
|
350
|
+
return callsiteToMuSetMap.find(cs)!=callsiteToMuSetMap.end();
|
|
351
|
+
}
|
|
352
|
+
inline bool hasCHI(const CallICFGNode* cs) const
|
|
353
|
+
{
|
|
354
|
+
return callsiteToChiSetMap.find(cs)!=callsiteToChiSetMap.end();
|
|
355
|
+
}
|
|
356
|
+
//@}
|
|
357
|
+
|
|
358
|
+
/// Has function entry chi or return mu
|
|
359
|
+
//@{
|
|
360
|
+
inline bool hasFuncEntryChi(const FunObjVar * fun) const
|
|
361
|
+
{
|
|
362
|
+
return (funToEntryChiSetMap.find(fun) != funToEntryChiSetMap.end());
|
|
363
|
+
}
|
|
364
|
+
inline bool hasReturnMu(const FunObjVar * fun) const
|
|
365
|
+
{
|
|
366
|
+
return (funToReturnMuSetMap.find(fun) != funToReturnMuSetMap.end());
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
inline CHISet& getFuncEntryChiSet(const FunObjVar * fun)
|
|
370
|
+
{
|
|
371
|
+
return funToEntryChiSetMap[fun];
|
|
372
|
+
}
|
|
373
|
+
inline MUSet& getReturnMuSet(const FunObjVar * fun)
|
|
374
|
+
{
|
|
375
|
+
return funToReturnMuSetMap[fun];
|
|
376
|
+
}
|
|
377
|
+
//@}
|
|
378
|
+
|
|
379
|
+
/// Get methods of mu/chi/phi
|
|
380
|
+
//@{
|
|
381
|
+
inline MUSet& getMUSet(const LoadStmt* ld)
|
|
382
|
+
{
|
|
383
|
+
return load2MuSetMap[ld];
|
|
384
|
+
}
|
|
385
|
+
inline CHISet& getCHISet(const StoreStmt* st)
|
|
386
|
+
{
|
|
387
|
+
return store2ChiSetMap[st];
|
|
388
|
+
}
|
|
389
|
+
inline MUSet& getMUSet(const CallICFGNode* cs)
|
|
390
|
+
{
|
|
391
|
+
return callsiteToMuSetMap[cs];
|
|
392
|
+
}
|
|
393
|
+
inline CHISet& getCHISet(const CallICFGNode* cs)
|
|
394
|
+
{
|
|
395
|
+
return callsiteToChiSetMap[cs];
|
|
396
|
+
}
|
|
397
|
+
inline PHISet& getPHISet(const SVFBasicBlock* bb)
|
|
398
|
+
{
|
|
399
|
+
return bb2PhiSetMap[bb];
|
|
400
|
+
}
|
|
401
|
+
inline bool hasPHISet(const SVFBasicBlock* bb) const
|
|
402
|
+
{
|
|
403
|
+
return bb2PhiSetMap.find(bb)!=bb2PhiSetMap.end();
|
|
404
|
+
}
|
|
405
|
+
inline LoadToMUSetMap& getLoadToMUSetMap()
|
|
406
|
+
{
|
|
407
|
+
return load2MuSetMap;
|
|
408
|
+
}
|
|
409
|
+
inline StoreToChiSetMap& getStoreToChiSetMap()
|
|
410
|
+
{
|
|
411
|
+
return store2ChiSetMap;
|
|
412
|
+
}
|
|
413
|
+
inline FunToReturnMuSetMap& getFunToRetMuSetMap()
|
|
414
|
+
{
|
|
415
|
+
return funToReturnMuSetMap;
|
|
416
|
+
}
|
|
417
|
+
inline FunToEntryChiSetMap& getFunToEntryChiSetMap()
|
|
418
|
+
{
|
|
419
|
+
return funToEntryChiSetMap;
|
|
420
|
+
}
|
|
421
|
+
inline CallSiteToMUSetMap& getCallSiteToMuSetMap()
|
|
422
|
+
{
|
|
423
|
+
return callsiteToMuSetMap;
|
|
424
|
+
}
|
|
425
|
+
inline CallSiteToCHISetMap& getCallSiteToChiSetMap()
|
|
426
|
+
{
|
|
427
|
+
return callsiteToChiSetMap;
|
|
428
|
+
}
|
|
429
|
+
inline BBToPhiSetMap& getBBToPhiSetMap()
|
|
430
|
+
{
|
|
431
|
+
return bb2PhiSetMap;
|
|
432
|
+
}
|
|
433
|
+
//@}
|
|
434
|
+
|
|
435
|
+
/// Stat methods
|
|
436
|
+
//@{
|
|
437
|
+
u32_t getLoadMuNum() const;
|
|
438
|
+
u32_t getStoreChiNum() const;
|
|
439
|
+
u32_t getFunEntryChiNum() const;
|
|
440
|
+
u32_t getFunRetMuNum() const;
|
|
441
|
+
u32_t getCallSiteMuNum() const;
|
|
442
|
+
u32_t getCallSiteChiNum() const;
|
|
443
|
+
u32_t getBBPhiNum() const;
|
|
444
|
+
//@}
|
|
445
|
+
|
|
446
|
+
/// Print Memory SSA
|
|
447
|
+
void dumpMSSA(OutStream & Out = SVFUtil::outs());
|
|
448
|
+
};
|
|
449
|
+
|
|
450
|
+
} // End namespace SVF
|
|
451
|
+
|
|
452
|
+
#endif /* MEMORYSSAPASS_H_ */
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
//===- SVFGBuilder.h -- Building SVFG-----------------------------------------//
|
|
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
|
+
* AndersenMemSSA.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Oct 27, 2013
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef ANDERSENMEMSSA_H_
|
|
31
|
+
#define ANDERSENMEMSSA_H_
|
|
32
|
+
|
|
33
|
+
#include "MemoryModel/PointerAnalysis.h"
|
|
34
|
+
#include "Graphs/SVFGOPT.h"
|
|
35
|
+
#include "Util/Options.h"
|
|
36
|
+
|
|
37
|
+
namespace SVF
|
|
38
|
+
{
|
|
39
|
+
|
|
40
|
+
/*!
|
|
41
|
+
* SVFG Builder
|
|
42
|
+
*/
|
|
43
|
+
class SVFGBuilder
|
|
44
|
+
{
|
|
45
|
+
|
|
46
|
+
public:
|
|
47
|
+
typedef PointerAnalysis::CallSiteSet CallSiteSet;
|
|
48
|
+
typedef PointerAnalysis::CallEdgeMap CallEdgeMap;
|
|
49
|
+
typedef PointerAnalysis::FunctionSet FunctionSet;
|
|
50
|
+
typedef SVFG::SVFGEdgeSetTy SVFGEdgeSet;
|
|
51
|
+
|
|
52
|
+
/// Constructor
|
|
53
|
+
explicit SVFGBuilder(bool _SVFGWithIndCall = Options::SVFGWithIndirectCall(), bool _SVFGWithPostOpts = Options::OPTSVFG())
|
|
54
|
+
: svfg(nullptr), SVFGWithIndCall(_SVFGWithIndCall), SVFGWithPostOpts(_SVFGWithPostOpts)
|
|
55
|
+
{
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/// Destructor
|
|
59
|
+
virtual ~SVFGBuilder() = default;
|
|
60
|
+
|
|
61
|
+
SVFG* buildPTROnlySVFG(BVDataPTAImpl* pta);
|
|
62
|
+
SVFG* buildFullSVFG(BVDataPTAImpl* pta);
|
|
63
|
+
|
|
64
|
+
/// Get SVFG instance
|
|
65
|
+
inline SVFG* getSVFG() const
|
|
66
|
+
{
|
|
67
|
+
return svfg.get();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/// Mark feasible VF edge by removing it from set vfEdgesAtIndCallSite
|
|
71
|
+
inline void markValidVFEdge(SVFGEdgeSet& edges)
|
|
72
|
+
{
|
|
73
|
+
for(SVFGEdgeSet::iterator it = edges.begin(), eit = edges.end(); it!=eit; ++it)
|
|
74
|
+
vfEdgesAtIndCallSite.erase(*it);
|
|
75
|
+
}
|
|
76
|
+
/// Return true if this is an VF Edge pre-connected by Andersen's analysis
|
|
77
|
+
inline bool isSpuriousVFEdgeAtIndCallSite(const SVFGEdge* edge)
|
|
78
|
+
{
|
|
79
|
+
return vfEdgesAtIndCallSite.find(const_cast<SVFGEdge*>(edge))!=vfEdgesAtIndCallSite.end();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/// Build Memory SSA
|
|
83
|
+
virtual std::unique_ptr<MemSSA> buildMSSA(BVDataPTAImpl* pta, bool ptrOnlyMSSA);
|
|
84
|
+
|
|
85
|
+
protected:
|
|
86
|
+
/// Create a DDA SVFG. By default actualOut and FormalIN are removed, unless withAOFI is set true.
|
|
87
|
+
SVFG* build(BVDataPTAImpl* pta, VFG::VFGK kind);
|
|
88
|
+
/// Can be rewritten by subclasses
|
|
89
|
+
virtual void buildSVFG();
|
|
90
|
+
/// Release global SVFG
|
|
91
|
+
virtual void releaseMemory();
|
|
92
|
+
|
|
93
|
+
/// SVFG Edges connected at indirect call/ret sites
|
|
94
|
+
SVFGEdgeSet vfEdgesAtIndCallSite;
|
|
95
|
+
std::unique_ptr<SVFG> svfg;
|
|
96
|
+
/// SVFG with precomputed indirect call edges
|
|
97
|
+
bool SVFGWithIndCall;
|
|
98
|
+
/// Build optimised version of SVFG
|
|
99
|
+
bool SVFGWithPostOpts;
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
} // End namespace SVF
|
|
103
|
+
|
|
104
|
+
#endif /* ANDERSENMEMSSA_H_ */
|