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,169 @@
|
|
|
1
|
+
//===- MemPartition.h -- Memory region partition-----------------------------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-> <Yulei Sui>
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
// This program is free software: you can redistribute it and/or modify
|
|
9
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
10
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
// (at your option) any later version.
|
|
12
|
+
|
|
13
|
+
// This program is distributed in the hope that it will be useful,
|
|
14
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
// GNU Affero General Public License for more details.
|
|
17
|
+
|
|
18
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
19
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
//
|
|
21
|
+
//===----------------------------------------------------------------------===//
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* @file: DisnctMRGenerator.h
|
|
25
|
+
* @author: yesen
|
|
26
|
+
* @date: 07/12/2013
|
|
27
|
+
* @version: 1.0
|
|
28
|
+
*
|
|
29
|
+
* @section LICENSE
|
|
30
|
+
*
|
|
31
|
+
* @section DESCRIPTION
|
|
32
|
+
*
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
#ifndef DISNCTMRGENERATOR_H_
|
|
37
|
+
#define DISNCTMRGENERATOR_H_
|
|
38
|
+
|
|
39
|
+
#include "MSSA/MemRegion.h"
|
|
40
|
+
|
|
41
|
+
namespace SVF
|
|
42
|
+
{
|
|
43
|
+
|
|
44
|
+
/*!
|
|
45
|
+
* Distinct memory region generator.
|
|
46
|
+
*/
|
|
47
|
+
class DistinctMRG : public MRGenerator
|
|
48
|
+
{
|
|
49
|
+
public:
|
|
50
|
+
DistinctMRG(BVDataPTAImpl* p, bool ptrOnly) : MRGenerator(p, ptrOnly)
|
|
51
|
+
{}
|
|
52
|
+
|
|
53
|
+
~DistinctMRG() {}
|
|
54
|
+
|
|
55
|
+
protected:
|
|
56
|
+
/// Partition regions
|
|
57
|
+
virtual void partitionMRs();
|
|
58
|
+
|
|
59
|
+
/// Get memory region at a load
|
|
60
|
+
virtual void getMRsForLoad(MRSet& aliasMRs, const NodeBS& cpts, const FunObjVar* fun);
|
|
61
|
+
|
|
62
|
+
/// Get memory regions to be inserted at a load statement.
|
|
63
|
+
virtual void getMRsForCallSiteRef(MRSet& aliasMRs, const NodeBS& cpts, const FunObjVar* fun);
|
|
64
|
+
private:
|
|
65
|
+
/// Create memory regions for each points-to target.
|
|
66
|
+
void createDistinctMR(const FunObjVar* func, const NodeBS& cpts);
|
|
67
|
+
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/*!
|
|
71
|
+
* Create memory regions which don't have intersections with each other in the same function scope.
|
|
72
|
+
*/
|
|
73
|
+
class IntraDisjointMRG : public MRGenerator
|
|
74
|
+
{
|
|
75
|
+
public:
|
|
76
|
+
typedef OrderedMap<NodeBS, PointsToList> PtsToSubPtsMap;
|
|
77
|
+
typedef Map<const FunObjVar*, PtsToSubPtsMap> FunToPtsMap;
|
|
78
|
+
typedef Map<const FunObjVar*, PointsToList> FunToInterMap;
|
|
79
|
+
|
|
80
|
+
IntraDisjointMRG(BVDataPTAImpl* p, bool ptrOnly) : MRGenerator(p, ptrOnly)
|
|
81
|
+
{}
|
|
82
|
+
|
|
83
|
+
~IntraDisjointMRG() {}
|
|
84
|
+
|
|
85
|
+
protected:
|
|
86
|
+
|
|
87
|
+
/// Partition regions
|
|
88
|
+
virtual void partitionMRs();
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Get memory regions to be inserted at a load statement.
|
|
92
|
+
* @param cpts The conditional points-to set of load statement.
|
|
93
|
+
* @param fun The function being analyzed.
|
|
94
|
+
* @param mrs Memory region set contains all possible target memory regions.
|
|
95
|
+
*/
|
|
96
|
+
virtual inline void getMRsForLoad(MRSet& aliasMRs, const NodeBS& cpts,
|
|
97
|
+
const FunObjVar* fun)
|
|
98
|
+
{
|
|
99
|
+
const PointsToList& inters = getIntersList(fun);
|
|
100
|
+
getMRsForLoadFromInterList(aliasMRs, cpts, inters);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
void getMRsForLoadFromInterList(MRSet& mrs, const NodeBS& cpts, const PointsToList& inters);
|
|
104
|
+
|
|
105
|
+
/// Get memory regions to be inserted at a load statement.
|
|
106
|
+
virtual void getMRsForCallSiteRef(MRSet& aliasMRs, const NodeBS& cpts, const FunObjVar* fun);
|
|
107
|
+
|
|
108
|
+
/// Create disjoint memory region
|
|
109
|
+
void createDisjointMR(const FunObjVar* func, const NodeBS& cpts);
|
|
110
|
+
|
|
111
|
+
/// Compute intersections between cpts and computed cpts intersections before.
|
|
112
|
+
void computeIntersections(const NodeBS& cpts, PointsToList& inters);
|
|
113
|
+
|
|
114
|
+
private:
|
|
115
|
+
inline PtsToSubPtsMap& getPtsSubSetMap(const FunObjVar* func)
|
|
116
|
+
{
|
|
117
|
+
return funcToPtsMap[func];
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
inline PointsToList& getIntersList(const FunObjVar* func)
|
|
121
|
+
{
|
|
122
|
+
return funcToInterMap[func];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
inline const PtsToSubPtsMap& getPtsSubSetMap(const FunObjVar* func) const
|
|
126
|
+
{
|
|
127
|
+
FunToPtsMap::const_iterator it = funcToPtsMap.find(func);
|
|
128
|
+
assert(it != funcToPtsMap.end() && "can not find pts map for specified function");
|
|
129
|
+
return it->second;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
FunToPtsMap funcToPtsMap;
|
|
133
|
+
FunToInterMap funcToInterMap;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
/*!
|
|
137
|
+
* Create memory regions which don't have intersections with each other in the whole program scope.
|
|
138
|
+
*/
|
|
139
|
+
class InterDisjointMRG : public IntraDisjointMRG
|
|
140
|
+
{
|
|
141
|
+
public:
|
|
142
|
+
InterDisjointMRG(BVDataPTAImpl* p, bool ptrOnly) : IntraDisjointMRG(p, ptrOnly)
|
|
143
|
+
{}
|
|
144
|
+
|
|
145
|
+
~InterDisjointMRG() {}
|
|
146
|
+
|
|
147
|
+
protected:
|
|
148
|
+
/// Partition regions
|
|
149
|
+
virtual void partitionMRs();
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Get memory regions to be inserted at a load statement.
|
|
153
|
+
* @param cpts The conditional points-to set of load statement.
|
|
154
|
+
* @param fun The function being analyzed.
|
|
155
|
+
* @param mrs Memory region set contains all possible target memory regions.
|
|
156
|
+
*/
|
|
157
|
+
virtual inline void getMRsForLoad(MRSet& aliasMRs, const NodeBS& cpts,
|
|
158
|
+
const FunObjVar*)
|
|
159
|
+
{
|
|
160
|
+
getMRsForLoadFromInterList(aliasMRs, cpts, inters);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
private:
|
|
164
|
+
PointsToList inters;
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
} // End namespace SVF
|
|
168
|
+
|
|
169
|
+
#endif /* DISNCTMRGENERATOR_H_ */
|
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
//===- MemRegion.h -- Memory region -----------------------------------------//
|
|
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
|
+
* MemoryRegion.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Jul 14, 2013
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
* The implementation is based on
|
|
29
|
+
* Yulei Sui, Hua Yan, Yunpeng Zhang, Jingling Xue and Zheng Zheng.
|
|
30
|
+
* "Parallel Construction of Interprocedural Memory SSA Form".
|
|
31
|
+
* Journal of Systems and Software (JSS'16)
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
#ifndef MEMORYREGION_H_
|
|
35
|
+
#define MEMORYREGION_H_
|
|
36
|
+
|
|
37
|
+
#include "Graphs/ICFG.h"
|
|
38
|
+
#include "Graphs/CallGraph.h"
|
|
39
|
+
#include "Graphs/SCC.h"
|
|
40
|
+
#include "SVFIR/SVFIR.h"
|
|
41
|
+
#include "Util/WorkList.h"
|
|
42
|
+
|
|
43
|
+
#include <set>
|
|
44
|
+
|
|
45
|
+
namespace SVF
|
|
46
|
+
{
|
|
47
|
+
|
|
48
|
+
class BVDataPTAImpl;
|
|
49
|
+
|
|
50
|
+
typedef NodeID MRID;
|
|
51
|
+
typedef NodeID MRVERID;
|
|
52
|
+
typedef NodeID MRVERSION;
|
|
53
|
+
|
|
54
|
+
/// Memory Region class
|
|
55
|
+
class MemRegion
|
|
56
|
+
{
|
|
57
|
+
|
|
58
|
+
public:
|
|
59
|
+
typedef bool Condition;
|
|
60
|
+
private:
|
|
61
|
+
/// region ID 0 is reserved
|
|
62
|
+
static u32_t totalMRNum;
|
|
63
|
+
MRID rid;
|
|
64
|
+
const NodeBS cptsSet;
|
|
65
|
+
|
|
66
|
+
public:
|
|
67
|
+
/// Constructor
|
|
68
|
+
MemRegion(const NodeBS& cp) :
|
|
69
|
+
rid(++totalMRNum), cptsSet(cp)
|
|
70
|
+
{
|
|
71
|
+
}
|
|
72
|
+
/// Destructor
|
|
73
|
+
~MemRegion()
|
|
74
|
+
{
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/// Return memory region ID
|
|
78
|
+
inline MRID getMRID() const
|
|
79
|
+
{
|
|
80
|
+
return rid;
|
|
81
|
+
}
|
|
82
|
+
/// Return points-to
|
|
83
|
+
inline const NodeBS &getPointsTo() const
|
|
84
|
+
{
|
|
85
|
+
return cptsSet;
|
|
86
|
+
}
|
|
87
|
+
/// Operator== overriding
|
|
88
|
+
inline bool operator==(const MemRegion* rhs) const
|
|
89
|
+
{
|
|
90
|
+
return this->getPointsTo() == rhs->getPointsTo();
|
|
91
|
+
}
|
|
92
|
+
/// Dump string
|
|
93
|
+
inline std::string dumpStr() const
|
|
94
|
+
{
|
|
95
|
+
std::string str;
|
|
96
|
+
str += "pts{";
|
|
97
|
+
for (NodeBS::iterator ii = cptsSet.begin(), ie = cptsSet.end();
|
|
98
|
+
ii != ie; ii++)
|
|
99
|
+
{
|
|
100
|
+
char int2str[16];
|
|
101
|
+
snprintf(int2str, sizeof(int2str), "%d", *ii);
|
|
102
|
+
str += int2str;
|
|
103
|
+
str += " ";
|
|
104
|
+
}
|
|
105
|
+
str += "}";
|
|
106
|
+
return str;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/// add the hash function here to sort elements and remove
|
|
110
|
+
/// and remove duplicated element in the set (binary tree comparison)
|
|
111
|
+
//@{
|
|
112
|
+
typedef struct equalMemRegion
|
|
113
|
+
{
|
|
114
|
+
bool operator()(const MemRegion* lhs, const MemRegion* rhs) const
|
|
115
|
+
{
|
|
116
|
+
return SVFUtil::cmpNodeBS(lhs->getPointsTo(), rhs->getPointsTo());
|
|
117
|
+
}
|
|
118
|
+
} equalMemRegion;
|
|
119
|
+
//@}
|
|
120
|
+
|
|
121
|
+
/// Return memory object number inside a region
|
|
122
|
+
inline u32_t getRegionSize() const
|
|
123
|
+
{
|
|
124
|
+
return cptsSet.count();
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
/*!
|
|
129
|
+
* Memory Region Partitioning
|
|
130
|
+
*/
|
|
131
|
+
class MRGenerator
|
|
132
|
+
{
|
|
133
|
+
|
|
134
|
+
public:
|
|
135
|
+
typedef FIFOWorkList<NodeID> WorkList;
|
|
136
|
+
|
|
137
|
+
/// Get typedef from Pointer Analysis
|
|
138
|
+
//@{
|
|
139
|
+
//@}
|
|
140
|
+
///Define mem region set
|
|
141
|
+
typedef OrderedSet<const MemRegion*, MemRegion::equalMemRegion> MRSet;
|
|
142
|
+
typedef Map<const PAGEdge*, const FunObjVar*> PAGEdgeToFunMap;
|
|
143
|
+
typedef OrderedSet<NodeBS, SVFUtil::equalNodeBS> PointsToList;
|
|
144
|
+
typedef Map<const FunObjVar*, NodeBS> FunToPointsToMap;
|
|
145
|
+
typedef Map<const FunObjVar*, PointsToList> FunToPointsTosMap;
|
|
146
|
+
typedef OrderedMap<NodeBS, NodeBS, SVFUtil::equalNodeBS> PtsToRepPtsSetMap;
|
|
147
|
+
|
|
148
|
+
/// Map a function to its region set
|
|
149
|
+
typedef Map<const FunObjVar*, MRSet> FunToMRsMap;
|
|
150
|
+
/// Map loads/stores to its mem regions,
|
|
151
|
+
/// TODO:visitAtomicCmpXchgInst, visitAtomicRMWInst??
|
|
152
|
+
//@{
|
|
153
|
+
typedef Map<const LoadStmt*, MRSet> LoadsToMRsMap;
|
|
154
|
+
typedef Map<const StoreStmt*, MRSet> StoresToMRsMap;
|
|
155
|
+
typedef Map<const CallICFGNode*, MRSet> CallSiteToMRsMap;
|
|
156
|
+
//@}
|
|
157
|
+
|
|
158
|
+
/// Map loads/stores/callsites to their cpts set
|
|
159
|
+
//@{
|
|
160
|
+
typedef Map<const LoadStmt*, NodeBS> LoadsToPointsToMap;
|
|
161
|
+
typedef Map<const StoreStmt*, NodeBS> StoresToPointsToMap;
|
|
162
|
+
typedef Map<const CallICFGNode*, NodeBS> CallSiteToPointsToMap;
|
|
163
|
+
//@}
|
|
164
|
+
|
|
165
|
+
/// Maps Mod-Ref analysis
|
|
166
|
+
//@{
|
|
167
|
+
/// Map a function to its indirect refs/mods of memory objects
|
|
168
|
+
typedef Map<const FunObjVar*, NodeBS> FunToNodeBSMap;
|
|
169
|
+
/// Map a callsite to its indirect refs/mods of memory objects
|
|
170
|
+
typedef Map<const CallICFGNode*, NodeBS> CallSiteToNodeBSMap;
|
|
171
|
+
//@}
|
|
172
|
+
|
|
173
|
+
typedef Map<NodeID, NodeBS> NodeToPTSSMap;
|
|
174
|
+
|
|
175
|
+
/// SVFIR edge list
|
|
176
|
+
typedef SVFIR::SVFStmtList SVFStmtList;
|
|
177
|
+
/// Call Graph SCC
|
|
178
|
+
typedef SCCDetection<CallGraph*> SCC;
|
|
179
|
+
|
|
180
|
+
MRSet& getMRSet()
|
|
181
|
+
{
|
|
182
|
+
return memRegSet;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/// Get superset cpts set
|
|
186
|
+
inline const NodeBS& getRepPointsTo(const NodeBS& cpts) const
|
|
187
|
+
{
|
|
188
|
+
PtsToRepPtsSetMap::const_iterator it = cptsToRepCPtsMap.find(cpts);
|
|
189
|
+
assert(it!=cptsToRepCPtsMap.end() && "can not find superset of cpts??");
|
|
190
|
+
return it->second;
|
|
191
|
+
}
|
|
192
|
+
/// Get a memory region according to cpts
|
|
193
|
+
const MemRegion* getMR(const NodeBS& cpts) const;
|
|
194
|
+
|
|
195
|
+
private:
|
|
196
|
+
|
|
197
|
+
BVDataPTAImpl* pta;
|
|
198
|
+
SCC* callGraphSCC;
|
|
199
|
+
CallGraph* callGraph;
|
|
200
|
+
bool ptrOnlyMSSA;
|
|
201
|
+
|
|
202
|
+
/// Map a function to all its memory regions
|
|
203
|
+
FunToMRsMap funToMRsMap;
|
|
204
|
+
/// Map a load SVFIR Edge to its memory regions sets in order for inserting mus in Memory SSA
|
|
205
|
+
LoadsToMRsMap loadsToMRsMap;
|
|
206
|
+
/// Map a store SVFIR Edge to its memory regions sets in order for inserting chis in Memory SSA
|
|
207
|
+
StoresToMRsMap storesToMRsMap;
|
|
208
|
+
/// Map a callsite to its refs regions
|
|
209
|
+
CallSiteToMRsMap callsiteToRefMRsMap;
|
|
210
|
+
/// Map a callsite to its mods regions
|
|
211
|
+
CallSiteToMRsMap callsiteToModMRsMap;
|
|
212
|
+
/// Map a load SVFIR Edge to its CPts set map
|
|
213
|
+
LoadsToPointsToMap loadsToPointsToMap;
|
|
214
|
+
/// Map a store SVFIR Edge to its CPts set map
|
|
215
|
+
StoresToPointsToMap storesToPointsToMap;
|
|
216
|
+
/// Map a callsite to it refs cpts set
|
|
217
|
+
CallSiteToPointsToMap callsiteToRefPointsToMap;
|
|
218
|
+
/// Map a callsite to it mods cpts set
|
|
219
|
+
CallSiteToPointsToMap callsiteToModPointsToMap;
|
|
220
|
+
|
|
221
|
+
/// Map a function to all of its conditional points-to sets
|
|
222
|
+
FunToPointsTosMap funToPointsToMap;
|
|
223
|
+
/// Map a PAGEdge to its fun
|
|
224
|
+
PAGEdgeToFunMap pagEdgeToFunMap;
|
|
225
|
+
|
|
226
|
+
/// Map a function to its indirect uses of memory objects
|
|
227
|
+
FunToPointsToMap funToRefsMap;
|
|
228
|
+
/// Map a function to its indirect defs of memory objects
|
|
229
|
+
FunToPointsToMap funToModsMap;
|
|
230
|
+
/// Map a callsite to its indirect uses of memory objects
|
|
231
|
+
CallSiteToPointsToMap csToRefsMap;
|
|
232
|
+
/// Map a callsite to its indirect defs of memory objects
|
|
233
|
+
CallSiteToPointsToMap csToModsMap;
|
|
234
|
+
/// Map a callsite to all its object might pass into its callees
|
|
235
|
+
CallSiteToPointsToMap csToCallSiteArgsPtsMap;
|
|
236
|
+
/// Map a callsite to all its object might return from its callees
|
|
237
|
+
CallSiteToPointsToMap csToCallSiteRetPtsMap;
|
|
238
|
+
|
|
239
|
+
/// Map a pointer to its cached points-to chain;
|
|
240
|
+
NodeToPTSSMap cachedPtsChainMap;
|
|
241
|
+
|
|
242
|
+
/// All global variable SVFIR node ids
|
|
243
|
+
NodeBS allGlobals;
|
|
244
|
+
|
|
245
|
+
/// Clean up memory
|
|
246
|
+
void destroy();
|
|
247
|
+
|
|
248
|
+
//Get all objects might pass into callee from a callsite
|
|
249
|
+
void collectCallSitePts(const CallICFGNode* cs);
|
|
250
|
+
|
|
251
|
+
//Recursive collect points-to chain
|
|
252
|
+
NodeBS& CollectPtsChain(NodeID id);
|
|
253
|
+
|
|
254
|
+
/// Return the pts chain of all callsite arguments
|
|
255
|
+
inline NodeBS& getCallSiteArgsPts(const CallICFGNode* cs)
|
|
256
|
+
{
|
|
257
|
+
return csToCallSiteArgsPtsMap[cs];
|
|
258
|
+
}
|
|
259
|
+
/// Return the pts chain of the return parameter of the callsite
|
|
260
|
+
inline NodeBS& getCallSiteRetPts(const CallICFGNode* cs)
|
|
261
|
+
{
|
|
262
|
+
return csToCallSiteRetPtsMap[cs];
|
|
263
|
+
}
|
|
264
|
+
/// Whether the object node is a non-local object
|
|
265
|
+
/// including global, heap, and stack variable in recursions
|
|
266
|
+
bool isNonLocalObject(NodeID id, const FunObjVar* curFun) const;
|
|
267
|
+
|
|
268
|
+
/// Get all the objects in callee's modref escaped via global objects (the chain pts of globals)
|
|
269
|
+
void getEscapObjviaGlobals(NodeBS& globs, const NodeBS& pts);
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
protected:
|
|
273
|
+
MRGenerator(BVDataPTAImpl* p, bool ptrOnly);
|
|
274
|
+
|
|
275
|
+
/// A set of All memory regions
|
|
276
|
+
MRSet memRegSet;
|
|
277
|
+
/// Map a condition pts to its rep conditional pts (super set points-to)
|
|
278
|
+
PtsToRepPtsSetMap cptsToRepCPtsMap;
|
|
279
|
+
|
|
280
|
+
/// Generate a memory region and put in into functions which use it
|
|
281
|
+
void createMR(const FunObjVar* fun, const NodeBS& cpts);
|
|
282
|
+
|
|
283
|
+
/// Collect all global variables for later escape analysis
|
|
284
|
+
void collectGlobals();
|
|
285
|
+
|
|
286
|
+
/// Generate regions for loads/stores
|
|
287
|
+
virtual void collectModRefForLoadStore();
|
|
288
|
+
|
|
289
|
+
/// Generate regions for calls/rets
|
|
290
|
+
virtual void collectModRefForCall();
|
|
291
|
+
|
|
292
|
+
/// Partition regions
|
|
293
|
+
virtual void partitionMRs();
|
|
294
|
+
|
|
295
|
+
/// Update aliased regions for loads/stores/callsites
|
|
296
|
+
virtual void updateAliasMRs();
|
|
297
|
+
|
|
298
|
+
/// Given a condition pts, insert into cptsToRepCPtsMap for region generation
|
|
299
|
+
virtual void sortPointsTo(const NodeBS& cpts);
|
|
300
|
+
|
|
301
|
+
/// Whether a region is aliased with a conditional points-to
|
|
302
|
+
virtual inline bool isAliasedMR(const NodeBS& cpts, const MemRegion* mr)
|
|
303
|
+
{
|
|
304
|
+
return mr->getPointsTo().intersects(cpts);
|
|
305
|
+
}
|
|
306
|
+
/// Get all aliased mem regions from function fun according to cpts
|
|
307
|
+
virtual inline void getAliasMemRegions(MRSet& aliasMRs, const NodeBS& cpts, const FunObjVar* fun)
|
|
308
|
+
{
|
|
309
|
+
for(MRSet::const_iterator it = funToMRsMap[fun].begin(), eit = funToMRsMap[fun].end(); it!=eit; ++it)
|
|
310
|
+
{
|
|
311
|
+
if(isAliasedMR(cpts,*it))
|
|
312
|
+
aliasMRs.insert(*it);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/// Get memory regions for a load statement according to cpts.
|
|
317
|
+
virtual inline void getMRsForLoad(MRSet& aliasMRs, const NodeBS& cpts, const FunObjVar*)
|
|
318
|
+
{
|
|
319
|
+
const MemRegion* mr = getMR(cpts);
|
|
320
|
+
aliasMRs.insert(mr);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/// Get memory regions for call site ref according to cpts.
|
|
324
|
+
virtual inline void getMRsForCallSiteRef(MRSet& aliasMRs, const NodeBS& cpts, const FunObjVar*)
|
|
325
|
+
{
|
|
326
|
+
const MemRegion* mr = getMR(cpts);
|
|
327
|
+
aliasMRs.insert(mr);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/// Mod-Ref analysis for callsite invoking this callGraphNode
|
|
331
|
+
virtual void modRefAnalysis(CallGraphNode* callGraphNode, WorkList& worklist);
|
|
332
|
+
|
|
333
|
+
/// Get Mod-Ref of a callee function
|
|
334
|
+
virtual bool handleCallsiteModRef(NodeBS& mod, NodeBS& ref, const CallICFGNode* cs, const FunObjVar* fun);
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
/// Add cpts to store/load
|
|
338
|
+
//@{
|
|
339
|
+
inline void addCPtsToStore(NodeBS& cpts, const StoreStmt *st, const FunObjVar* fun)
|
|
340
|
+
{
|
|
341
|
+
storesToPointsToMap[st] = cpts;
|
|
342
|
+
funToPointsToMap[fun].insert(cpts);
|
|
343
|
+
addModSideEffectOfFunction(fun,cpts);
|
|
344
|
+
}
|
|
345
|
+
inline void addCPtsToLoad(NodeBS& cpts, const LoadStmt *ld, const FunObjVar* fun)
|
|
346
|
+
{
|
|
347
|
+
loadsToPointsToMap[ld] = cpts;
|
|
348
|
+
funToPointsToMap[fun].insert(cpts);
|
|
349
|
+
addRefSideEffectOfFunction(fun,cpts);
|
|
350
|
+
}
|
|
351
|
+
inline void addCPtsToCallSiteRefs(NodeBS& cpts, const CallICFGNode* cs)
|
|
352
|
+
{
|
|
353
|
+
callsiteToRefPointsToMap[cs] |= cpts;
|
|
354
|
+
funToPointsToMap[cs->getCaller()].insert(cpts);
|
|
355
|
+
}
|
|
356
|
+
inline void addCPtsToCallSiteMods(NodeBS& cpts, const CallICFGNode* cs)
|
|
357
|
+
{
|
|
358
|
+
callsiteToModPointsToMap[cs] |= cpts;
|
|
359
|
+
funToPointsToMap[cs->getCaller()].insert(cpts);
|
|
360
|
+
}
|
|
361
|
+
inline bool hasCPtsList(const FunObjVar* fun) const
|
|
362
|
+
{
|
|
363
|
+
return funToPointsToMap.find(fun)!=funToPointsToMap.end();
|
|
364
|
+
}
|
|
365
|
+
inline PointsToList& getPointsToList(const FunObjVar* fun)
|
|
366
|
+
{
|
|
367
|
+
return funToPointsToMap[fun];
|
|
368
|
+
}
|
|
369
|
+
inline FunToPointsTosMap& getFunToPointsToList()
|
|
370
|
+
{
|
|
371
|
+
return funToPointsToMap;
|
|
372
|
+
}
|
|
373
|
+
//@}
|
|
374
|
+
/// Add/Get methods for side-effect of functions and callsites
|
|
375
|
+
//@{
|
|
376
|
+
/// Add indirect uses an memory object in the function
|
|
377
|
+
void addRefSideEffectOfFunction(const FunObjVar* fun, const NodeBS& refs);
|
|
378
|
+
/// Add indirect def an memory object in the function
|
|
379
|
+
void addModSideEffectOfFunction(const FunObjVar* fun, const NodeBS& mods);
|
|
380
|
+
/// Add indirect uses an memory object in the function
|
|
381
|
+
bool addRefSideEffectOfCallSite(const CallICFGNode* cs, const NodeBS& refs);
|
|
382
|
+
/// Add indirect def an memory object in the function
|
|
383
|
+
bool addModSideEffectOfCallSite(const CallICFGNode* cs, const NodeBS& mods);
|
|
384
|
+
|
|
385
|
+
/// Get indirect refs of a function
|
|
386
|
+
inline const NodeBS& getRefSideEffectOfFunction(const FunObjVar* fun)
|
|
387
|
+
{
|
|
388
|
+
return funToRefsMap[fun];
|
|
389
|
+
}
|
|
390
|
+
/// Get indirect mods of a function
|
|
391
|
+
inline const NodeBS& getModSideEffectOfFunction(const FunObjVar* fun)
|
|
392
|
+
{
|
|
393
|
+
return funToModsMap[fun];
|
|
394
|
+
}
|
|
395
|
+
/// Get indirect refs of a callsite
|
|
396
|
+
inline const NodeBS& getRefSideEffectOfCallSite(const CallICFGNode* cs)
|
|
397
|
+
{
|
|
398
|
+
return csToRefsMap[cs];
|
|
399
|
+
}
|
|
400
|
+
/// Get indirect mods of a callsite
|
|
401
|
+
inline const NodeBS& getModSideEffectOfCallSite(const CallICFGNode* cs)
|
|
402
|
+
{
|
|
403
|
+
return csToModsMap[cs];
|
|
404
|
+
}
|
|
405
|
+
/// Has indirect refs of a callsite
|
|
406
|
+
inline bool hasRefSideEffectOfCallSite(const CallICFGNode* cs)
|
|
407
|
+
{
|
|
408
|
+
return csToRefsMap.find(cs) != csToRefsMap.end();
|
|
409
|
+
}
|
|
410
|
+
/// Has indirect mods of a callsite
|
|
411
|
+
inline bool hasModSideEffectOfCallSite(const CallICFGNode* cs)
|
|
412
|
+
{
|
|
413
|
+
return csToModsMap.find(cs) != csToModsMap.end();
|
|
414
|
+
}
|
|
415
|
+
//@}
|
|
416
|
+
|
|
417
|
+
public:
|
|
418
|
+
inline u32_t getMRNum() const
|
|
419
|
+
{
|
|
420
|
+
return memRegSet.size();
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/// Destructor
|
|
424
|
+
virtual ~MRGenerator()
|
|
425
|
+
{
|
|
426
|
+
destroy();
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/// Start generating memory regions
|
|
430
|
+
virtual void generateMRs();
|
|
431
|
+
|
|
432
|
+
/// Get the function which SVFIR Edge located
|
|
433
|
+
const FunObjVar* getFunction(const PAGEdge* pagEdge) const
|
|
434
|
+
{
|
|
435
|
+
PAGEdgeToFunMap::const_iterator it = pagEdgeToFunMap.find(pagEdge);
|
|
436
|
+
assert(it!=pagEdgeToFunMap.end() && "can not find its function, it is a global SVFIR edge");
|
|
437
|
+
return it->second;
|
|
438
|
+
}
|
|
439
|
+
/// Get Memory Region set
|
|
440
|
+
//@{
|
|
441
|
+
inline MRSet& getFunMRSet(const FunObjVar* fun)
|
|
442
|
+
{
|
|
443
|
+
return funToMRsMap[fun];
|
|
444
|
+
}
|
|
445
|
+
inline MRSet& getLoadMRSet(const LoadStmt* load)
|
|
446
|
+
{
|
|
447
|
+
return loadsToMRsMap[load];
|
|
448
|
+
}
|
|
449
|
+
inline MRSet& getStoreMRSet(const StoreStmt* store)
|
|
450
|
+
{
|
|
451
|
+
return storesToMRsMap[store];
|
|
452
|
+
}
|
|
453
|
+
inline bool hasRefMRSet(const CallICFGNode* cs)
|
|
454
|
+
{
|
|
455
|
+
return callsiteToRefMRsMap.find(cs)!=callsiteToRefMRsMap.end();
|
|
456
|
+
}
|
|
457
|
+
inline bool hasModMRSet(const CallICFGNode* cs)
|
|
458
|
+
{
|
|
459
|
+
return callsiteToModMRsMap.find(cs)!=callsiteToModMRsMap.end();
|
|
460
|
+
}
|
|
461
|
+
inline MRSet& getCallSiteRefMRSet(const CallICFGNode* cs)
|
|
462
|
+
{
|
|
463
|
+
return callsiteToRefMRsMap[cs];
|
|
464
|
+
}
|
|
465
|
+
inline MRSet& getCallSiteModMRSet(const CallICFGNode* cs)
|
|
466
|
+
{
|
|
467
|
+
return callsiteToModMRsMap[cs];
|
|
468
|
+
}
|
|
469
|
+
//@}
|
|
470
|
+
/// Whether this instruction has SVFIR Edge
|
|
471
|
+
bool hasSVFStmtList(const ICFGNode* icfgNode);
|
|
472
|
+
/// Given an instruction, get all its the PAGEdge (statement) in sequence
|
|
473
|
+
SVFStmtList& getPAGEdgesFromInst(const ICFGNode* node);
|
|
474
|
+
|
|
475
|
+
/// getModRefInfo APIs
|
|
476
|
+
//@{
|
|
477
|
+
/// Collect mod ref for external callsite other than heap alloc external call
|
|
478
|
+
NodeBS getModInfoForCall(const CallICFGNode* cs);
|
|
479
|
+
NodeBS getRefInfoForCall(const CallICFGNode* cs);
|
|
480
|
+
ModRefInfo getModRefInfo(const CallICFGNode* cs);
|
|
481
|
+
ModRefInfo getModRefInfo(const CallICFGNode* cs, const SVFVar* V);
|
|
482
|
+
ModRefInfo getModRefInfo(const CallICFGNode* cs1, const CallICFGNode* cs2);
|
|
483
|
+
//@}
|
|
484
|
+
|
|
485
|
+
};
|
|
486
|
+
|
|
487
|
+
} // End namespace SVF
|
|
488
|
+
|
|
489
|
+
#endif /* MEMORYREGION_H_ */
|