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,722 @@
|
|
|
1
|
+
//===- MSSAMuChi.h -- Mu/Chi on MSSA------------------------------------------//
|
|
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
|
+
* MSSAMuChi.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Oct 31, 2013
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef MSSAMUCHI_H_
|
|
31
|
+
#define MSSAMUCHI_H_
|
|
32
|
+
|
|
33
|
+
#include "MSSA/MemRegion.h"
|
|
34
|
+
|
|
35
|
+
namespace SVF
|
|
36
|
+
{
|
|
37
|
+
|
|
38
|
+
class MSSADEF;
|
|
39
|
+
|
|
40
|
+
/*!
|
|
41
|
+
* Memory SSA Variable (in the form of SSA versions of each memory region )
|
|
42
|
+
*/
|
|
43
|
+
class MRVer
|
|
44
|
+
{
|
|
45
|
+
|
|
46
|
+
public:
|
|
47
|
+
typedef MSSADEF MSSADef;
|
|
48
|
+
private:
|
|
49
|
+
/// ver ID 0 is reserved
|
|
50
|
+
static u32_t totalVERNum;
|
|
51
|
+
const MemRegion* mr;
|
|
52
|
+
MRVERSION version;
|
|
53
|
+
MRVERID vid;
|
|
54
|
+
MSSADef* def;
|
|
55
|
+
public:
|
|
56
|
+
/// Constructor
|
|
57
|
+
MRVer(const MemRegion* m, MRVERSION v, MSSADef* d) :
|
|
58
|
+
mr(m), version(v), vid(totalVERNum++),def(d)
|
|
59
|
+
{
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/// Return the memory region
|
|
63
|
+
inline const MemRegion* getMR() const
|
|
64
|
+
{
|
|
65
|
+
return mr;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/// Return SSA version
|
|
69
|
+
inline MRVERSION getSSAVersion() const
|
|
70
|
+
{
|
|
71
|
+
return version;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/// Get MSSADef
|
|
75
|
+
inline MSSADef* getDef() const
|
|
76
|
+
{
|
|
77
|
+
return def;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/// Get MRVERID
|
|
81
|
+
inline MRVERID getID() const
|
|
82
|
+
{
|
|
83
|
+
return vid;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
/*!
|
|
89
|
+
* Indirect Memory Read
|
|
90
|
+
* 1) LoadMU at each store instruction
|
|
91
|
+
* 2) CallMU at callsite
|
|
92
|
+
* 3) RetMU at function return
|
|
93
|
+
*/
|
|
94
|
+
template<class Cond>
|
|
95
|
+
class MSSAMU
|
|
96
|
+
{
|
|
97
|
+
|
|
98
|
+
public:
|
|
99
|
+
enum MUTYPE
|
|
100
|
+
{
|
|
101
|
+
LoadMSSAMU, CallMSSAMU, RetMSSAMU
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
protected:
|
|
105
|
+
MUTYPE type;
|
|
106
|
+
const MemRegion* mr;
|
|
107
|
+
MRVer* ver;
|
|
108
|
+
Cond cond;
|
|
109
|
+
public:
|
|
110
|
+
/// Constructor/Destructor for MU
|
|
111
|
+
//@{
|
|
112
|
+
MSSAMU(MUTYPE t, const MemRegion* m, Cond c) : type(t), mr(m), ver(nullptr), cond(c)
|
|
113
|
+
{
|
|
114
|
+
}
|
|
115
|
+
virtual ~MSSAMU()
|
|
116
|
+
{
|
|
117
|
+
}
|
|
118
|
+
//@}
|
|
119
|
+
|
|
120
|
+
/// Return MR
|
|
121
|
+
inline const MemRegion* getMR() const
|
|
122
|
+
{
|
|
123
|
+
return mr;
|
|
124
|
+
}
|
|
125
|
+
/// Return type
|
|
126
|
+
inline MUTYPE getType() const
|
|
127
|
+
{
|
|
128
|
+
return type;
|
|
129
|
+
}
|
|
130
|
+
/// Set Ver
|
|
131
|
+
inline void setVer(MRVer* v)
|
|
132
|
+
{
|
|
133
|
+
assert(v->getMR() == mr && "inserting different memory region?");
|
|
134
|
+
ver = v;
|
|
135
|
+
}
|
|
136
|
+
/// Get Ver
|
|
137
|
+
inline MRVer* getMRVer() const
|
|
138
|
+
{
|
|
139
|
+
assert(ver!=nullptr && "version is nullptr, did not rename?");
|
|
140
|
+
return ver;
|
|
141
|
+
}
|
|
142
|
+
/// Return condition
|
|
143
|
+
inline Cond getCond() const
|
|
144
|
+
{
|
|
145
|
+
return cond;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/// Avoid adding duplicated mus
|
|
149
|
+
inline bool operator < (const MSSAMU & rhs) const
|
|
150
|
+
{
|
|
151
|
+
return mr > rhs.getMR();
|
|
152
|
+
}
|
|
153
|
+
/// Print MU
|
|
154
|
+
virtual void dump()
|
|
155
|
+
{
|
|
156
|
+
SVFUtil::outs() << "MU(MR_" << mr->getMRID() << "V_" << ver->getSSAVersion() << ") \t" <<
|
|
157
|
+
this->getMR()->dumpStr() << "\n";
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
/*!
|
|
162
|
+
* LoadMU is annotated at each load instruction, representing a memory object is read here
|
|
163
|
+
*/
|
|
164
|
+
template<class Cond>
|
|
165
|
+
class LoadMU : public MSSAMU<Cond>
|
|
166
|
+
{
|
|
167
|
+
|
|
168
|
+
private:
|
|
169
|
+
const LoadStmt* inst;
|
|
170
|
+
const SVFBasicBlock* bb;
|
|
171
|
+
|
|
172
|
+
public:
|
|
173
|
+
/// Constructor/Destructor for MU
|
|
174
|
+
//@{
|
|
175
|
+
LoadMU(const SVFBasicBlock* b,const LoadStmt* i, const MemRegion* m, Cond c = true) :
|
|
176
|
+
MSSAMU<Cond>(MSSAMU<Cond>::LoadMSSAMU,m,c), inst(i), bb(b)
|
|
177
|
+
{
|
|
178
|
+
}
|
|
179
|
+
virtual ~LoadMU()
|
|
180
|
+
{
|
|
181
|
+
|
|
182
|
+
}
|
|
183
|
+
//@}
|
|
184
|
+
|
|
185
|
+
/// Return load instruction
|
|
186
|
+
inline const LoadStmt* getLoadStmt() const
|
|
187
|
+
{
|
|
188
|
+
return inst;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/// Return basic block
|
|
192
|
+
inline const SVFBasicBlock* getBasicBlock() const
|
|
193
|
+
{
|
|
194
|
+
return bb;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
198
|
+
//@{
|
|
199
|
+
static inline bool classof(const LoadMU *)
|
|
200
|
+
{
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
static inline bool classof(const MSSAMU<Cond> *mu)
|
|
204
|
+
{
|
|
205
|
+
return mu->getType() == MSSAMU<Cond>::LoadMSSAMU;
|
|
206
|
+
}
|
|
207
|
+
//@}
|
|
208
|
+
|
|
209
|
+
/// Print MU
|
|
210
|
+
virtual void dump()
|
|
211
|
+
{
|
|
212
|
+
SVFUtil::outs() << "LDMU(MR_" << this->getMR()->getMRID() << "V_" << this->getMRVer()->getSSAVersion() << ") \t" <<
|
|
213
|
+
this->getMR()->dumpStr() << "\n";
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
/*!
|
|
218
|
+
* CallMU is annotated at callsite, representing a memory object is indirect read by callee
|
|
219
|
+
*/
|
|
220
|
+
template<class Cond>
|
|
221
|
+
class CallMU : public MSSAMU<Cond>
|
|
222
|
+
{
|
|
223
|
+
|
|
224
|
+
private:
|
|
225
|
+
const CallICFGNode* callsite;
|
|
226
|
+
|
|
227
|
+
public:
|
|
228
|
+
/// Constructor/Destructor for MU
|
|
229
|
+
//@{
|
|
230
|
+
CallMU(const CallICFGNode* cs, const MemRegion* m, Cond c = true) :
|
|
231
|
+
MSSAMU<Cond>(MSSAMU<Cond>::CallMSSAMU,m,c), callsite(cs)
|
|
232
|
+
{
|
|
233
|
+
}
|
|
234
|
+
virtual ~CallMU()
|
|
235
|
+
{
|
|
236
|
+
|
|
237
|
+
}
|
|
238
|
+
//@}
|
|
239
|
+
|
|
240
|
+
/// Return callsite
|
|
241
|
+
inline const CallICFGNode* getCallSite() const
|
|
242
|
+
{
|
|
243
|
+
return callsite;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/// Return basic block
|
|
247
|
+
inline const SVFBasicBlock* getBasicBlock() const
|
|
248
|
+
{
|
|
249
|
+
return callsite->getBB();
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
253
|
+
//@{
|
|
254
|
+
static inline bool classof(const CallMU *)
|
|
255
|
+
{
|
|
256
|
+
return true;
|
|
257
|
+
}
|
|
258
|
+
static inline bool classof(const MSSAMU<Cond> *mu)
|
|
259
|
+
{
|
|
260
|
+
return mu->getType() == MSSAMU<Cond>::CallMSSAMU;
|
|
261
|
+
}
|
|
262
|
+
//@}
|
|
263
|
+
|
|
264
|
+
/// Print MU
|
|
265
|
+
virtual void dump()
|
|
266
|
+
{
|
|
267
|
+
SVFUtil::outs() << "CALMU(MR_" << this->getMR()->getMRID() << "V_" << this->getMRVer()->getSSAVersion() << ") \t" <<
|
|
268
|
+
this->getMR()->dumpStr() << "\n";
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
/*!
|
|
274
|
+
* RetMU is annotated at function return, representing memory objects returns to callers
|
|
275
|
+
*/
|
|
276
|
+
template<class Cond>
|
|
277
|
+
class RetMU : public MSSAMU<Cond>
|
|
278
|
+
{
|
|
279
|
+
private:
|
|
280
|
+
const FunObjVar* fun;
|
|
281
|
+
public:
|
|
282
|
+
/// Constructor/Destructor for MU
|
|
283
|
+
//@{
|
|
284
|
+
RetMU(const FunObjVar* f, const MemRegion* m, Cond c = true) :
|
|
285
|
+
MSSAMU<Cond>(MSSAMU<Cond>::RetMSSAMU,m,c), fun(f)
|
|
286
|
+
{
|
|
287
|
+
}
|
|
288
|
+
virtual ~RetMU() {}
|
|
289
|
+
//@}
|
|
290
|
+
|
|
291
|
+
/// Return function
|
|
292
|
+
inline const FunObjVar* getFunction() const
|
|
293
|
+
{
|
|
294
|
+
return fun;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
298
|
+
//@{
|
|
299
|
+
static inline bool classof(const RetMU *)
|
|
300
|
+
{
|
|
301
|
+
return true;
|
|
302
|
+
}
|
|
303
|
+
static inline bool classof(const MSSAMU<Cond> *mu)
|
|
304
|
+
{
|
|
305
|
+
return mu->getType() == MSSAMU<Cond>::RetMSSAMU;
|
|
306
|
+
}
|
|
307
|
+
//@}
|
|
308
|
+
|
|
309
|
+
/// Print MU
|
|
310
|
+
virtual void dump()
|
|
311
|
+
{
|
|
312
|
+
SVFUtil::outs() << "RETMU(MR_" << this->getMR()->getMRID() << "V_" << this->getMRVer()->getSSAVersion() << ") \t" <<
|
|
313
|
+
this->getMR()->dumpStr() << "\n";
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
/*!
|
|
319
|
+
* Indirect Memory Definition
|
|
320
|
+
* 1) MSSACHI indirect memory object is modified
|
|
321
|
+
* a) StoreCHI definition at store
|
|
322
|
+
* b) EntryCHI definition at function entry
|
|
323
|
+
* 2) MSSAPHI memory object is defined at joint points of a control flow
|
|
324
|
+
*/
|
|
325
|
+
class MSSADEF
|
|
326
|
+
{
|
|
327
|
+
|
|
328
|
+
public:
|
|
329
|
+
enum DEFTYPE
|
|
330
|
+
{
|
|
331
|
+
SSACHI,
|
|
332
|
+
StoreMSSACHI,
|
|
333
|
+
CallMSSACHI,
|
|
334
|
+
EntryMSSACHI,
|
|
335
|
+
SSAPHI
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
protected:
|
|
339
|
+
DEFTYPE type;
|
|
340
|
+
const MemRegion* mr;
|
|
341
|
+
MRVer* resVer;
|
|
342
|
+
|
|
343
|
+
public:
|
|
344
|
+
/// Constructor/Destructor for MSSADEF
|
|
345
|
+
//@{
|
|
346
|
+
MSSADEF(DEFTYPE t, const MemRegion* m): type(t), mr(m), resVer(nullptr)
|
|
347
|
+
{
|
|
348
|
+
|
|
349
|
+
}
|
|
350
|
+
virtual ~MSSADEF() {}
|
|
351
|
+
//@}
|
|
352
|
+
|
|
353
|
+
/// Return memory region
|
|
354
|
+
inline const MemRegion* getMR() const
|
|
355
|
+
{
|
|
356
|
+
return mr;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/// Return type of this CHI
|
|
360
|
+
inline DEFTYPE getType() const
|
|
361
|
+
{
|
|
362
|
+
return type;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/// Set result operand ver
|
|
366
|
+
inline void setResVer(MRVer* v)
|
|
367
|
+
{
|
|
368
|
+
assert(v->getMR() == mr && "inserting different memory region?");
|
|
369
|
+
resVer = v;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/// Set operand vers
|
|
373
|
+
inline MRVer* getResVer() const
|
|
374
|
+
{
|
|
375
|
+
assert(resVer!=nullptr && "version is nullptr, did not rename?");
|
|
376
|
+
return resVer;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/// Avoid adding duplicated chis and phis
|
|
380
|
+
inline bool operator < (const MSSADEF & rhs) const
|
|
381
|
+
{
|
|
382
|
+
return mr > rhs.getMR();
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/// Print MSSADef
|
|
386
|
+
virtual void dump()
|
|
387
|
+
{
|
|
388
|
+
SVFUtil::outs() << "DEF(MR_" << mr->getMRID() << "V_" << resVer->getSSAVersion() << ")\n";
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
/*!
|
|
393
|
+
* Indirect Memory Write
|
|
394
|
+
*/
|
|
395
|
+
template<class Cond>
|
|
396
|
+
class MSSACHI : public MSSADEF
|
|
397
|
+
{
|
|
398
|
+
|
|
399
|
+
private:
|
|
400
|
+
MRVer* opVer;
|
|
401
|
+
Cond cond;
|
|
402
|
+
public:
|
|
403
|
+
typedef typename MSSADEF::DEFTYPE CHITYPE;
|
|
404
|
+
/// Constructor/Destructor for MSSACHI
|
|
405
|
+
//@{
|
|
406
|
+
MSSACHI(CHITYPE t, const MemRegion* m, Cond c): MSSADEF(t,m), opVer(nullptr), cond(c)
|
|
407
|
+
{
|
|
408
|
+
|
|
409
|
+
}
|
|
410
|
+
virtual ~MSSACHI() {}
|
|
411
|
+
//@}
|
|
412
|
+
|
|
413
|
+
/// Set operand ver
|
|
414
|
+
inline void setOpVer(MRVer* v)
|
|
415
|
+
{
|
|
416
|
+
assert(v->getMR() == this->getMR() && "inserting different memory region?");
|
|
417
|
+
opVer = v;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/// Get operand ver
|
|
421
|
+
inline MRVer* getOpVer() const
|
|
422
|
+
{
|
|
423
|
+
assert(opVer!=nullptr && "version is nullptr, did not rename?");
|
|
424
|
+
return opVer;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/// Get condition
|
|
428
|
+
inline Cond getCond() const
|
|
429
|
+
{
|
|
430
|
+
return cond;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
434
|
+
//@{
|
|
435
|
+
static inline bool classof(const MSSACHI * chi)
|
|
436
|
+
{
|
|
437
|
+
return true;
|
|
438
|
+
}
|
|
439
|
+
static inline bool classof(const MSSADEF *chi)
|
|
440
|
+
{
|
|
441
|
+
return chi->getType() == MSSADEF::EntryMSSACHI ||
|
|
442
|
+
chi->getType() == MSSADEF::StoreMSSACHI ||
|
|
443
|
+
chi->getType() == MSSADEF::SSACHI ;
|
|
444
|
+
}
|
|
445
|
+
//@}
|
|
446
|
+
|
|
447
|
+
/// Print CHI
|
|
448
|
+
virtual void dump()
|
|
449
|
+
{
|
|
450
|
+
SVFUtil::outs() << "MR_" << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
|
|
451
|
+
" = CHI(MR_" << this->getMR()->getMRID() << "V_" << opVer->getSSAVersion() << ") \t" <<
|
|
452
|
+
this->getMR()->dumpStr() << "\n";
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
/*!
|
|
457
|
+
*
|
|
458
|
+
* StoreCHI is annotated at each store instruction, representing a memory object is modified here
|
|
459
|
+
*/
|
|
460
|
+
template<class Cond>
|
|
461
|
+
class StoreCHI : public MSSACHI<Cond>
|
|
462
|
+
{
|
|
463
|
+
private:
|
|
464
|
+
const SVFBasicBlock* bb;
|
|
465
|
+
const StoreStmt* inst;
|
|
466
|
+
public:
|
|
467
|
+
/// Constructors for StoreCHI
|
|
468
|
+
//@{
|
|
469
|
+
StoreCHI(const SVFBasicBlock* b, const StoreStmt* i, const MemRegion* m, Cond c = true) :
|
|
470
|
+
MSSACHI<Cond>(MSSADEF::StoreMSSACHI,m,c), bb(b), inst(i)
|
|
471
|
+
{
|
|
472
|
+
}
|
|
473
|
+
virtual ~StoreCHI()
|
|
474
|
+
{
|
|
475
|
+
}
|
|
476
|
+
//@}
|
|
477
|
+
|
|
478
|
+
/// Get basic block
|
|
479
|
+
inline const SVFBasicBlock* getBasicBlock() const
|
|
480
|
+
{
|
|
481
|
+
return bb;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
/// Get store instruction
|
|
485
|
+
inline const StoreStmt* getStoreStmt() const
|
|
486
|
+
{
|
|
487
|
+
return inst;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
491
|
+
//@{
|
|
492
|
+
static inline bool classof(const StoreCHI * chi)
|
|
493
|
+
{
|
|
494
|
+
return true;
|
|
495
|
+
}
|
|
496
|
+
static inline bool classof(const MSSACHI<Cond> * chi)
|
|
497
|
+
{
|
|
498
|
+
return chi->getType() == MSSADEF::StoreMSSACHI;
|
|
499
|
+
}
|
|
500
|
+
static inline bool classof(const MSSADEF *chi)
|
|
501
|
+
{
|
|
502
|
+
return chi->getType() == MSSADEF::StoreMSSACHI;
|
|
503
|
+
}
|
|
504
|
+
//@}
|
|
505
|
+
|
|
506
|
+
/// Print CHI
|
|
507
|
+
virtual void dump()
|
|
508
|
+
{
|
|
509
|
+
SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
|
|
510
|
+
" = STCHI(MR_" << this->getMR()->getMRID() << "V_" << this->getOpVer()->getSSAVersion() << ") \t" <<
|
|
511
|
+
this->getMR()->dumpStr() << "\n";
|
|
512
|
+
}
|
|
513
|
+
};
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
/*!
|
|
517
|
+
*
|
|
518
|
+
* CallCHI is annotated at callsite, representing a memory object is indirect modified by callee
|
|
519
|
+
*/
|
|
520
|
+
template<class Cond>
|
|
521
|
+
class CallCHI : public MSSACHI<Cond>
|
|
522
|
+
{
|
|
523
|
+
private:
|
|
524
|
+
const CallICFGNode* callsite;
|
|
525
|
+
public:
|
|
526
|
+
/// Constructors for CallCHI
|
|
527
|
+
//@{
|
|
528
|
+
CallCHI(const CallICFGNode* cs, const MemRegion* m, Cond c = true) :
|
|
529
|
+
MSSACHI<Cond>(MSSADEF::CallMSSACHI,m,c), callsite(cs)
|
|
530
|
+
{
|
|
531
|
+
}
|
|
532
|
+
virtual ~CallCHI()
|
|
533
|
+
{
|
|
534
|
+
}
|
|
535
|
+
//@}
|
|
536
|
+
|
|
537
|
+
/// Return basic block
|
|
538
|
+
inline const SVFBasicBlock* getBasicBlock() const
|
|
539
|
+
{
|
|
540
|
+
return callsite->getBB();
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/// Return callsite
|
|
544
|
+
inline const CallICFGNode* getCallSite() const
|
|
545
|
+
{
|
|
546
|
+
return callsite;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
550
|
+
//@{
|
|
551
|
+
static inline bool classof(const CallCHI * chi)
|
|
552
|
+
{
|
|
553
|
+
return true;
|
|
554
|
+
}
|
|
555
|
+
static inline bool classof(const MSSACHI<Cond> * chi)
|
|
556
|
+
{
|
|
557
|
+
return chi->getType() == MSSADEF::CallMSSACHI;
|
|
558
|
+
}
|
|
559
|
+
static inline bool classof(const MSSADEF *chi)
|
|
560
|
+
{
|
|
561
|
+
return chi->getType() == MSSADEF::CallMSSACHI;
|
|
562
|
+
}
|
|
563
|
+
//@}
|
|
564
|
+
|
|
565
|
+
/// Print CHI
|
|
566
|
+
virtual void dump()
|
|
567
|
+
{
|
|
568
|
+
SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
|
|
569
|
+
" = CALCHI(MR_" << this->getMR()->getMRID() << "V_" << this->getOpVer()->getSSAVersion() << ") \t" <<
|
|
570
|
+
this->getMR()->dumpStr() << "\n";
|
|
571
|
+
}
|
|
572
|
+
};
|
|
573
|
+
|
|
574
|
+
/*!
|
|
575
|
+
* EntryCHI is annotated at function entry, representing receiving memory objects from callers
|
|
576
|
+
*/
|
|
577
|
+
template<class Cond>
|
|
578
|
+
class EntryCHI : public MSSACHI<Cond>
|
|
579
|
+
{
|
|
580
|
+
private:
|
|
581
|
+
const FunObjVar* fun;
|
|
582
|
+
public:
|
|
583
|
+
/// Constructors for EntryCHI
|
|
584
|
+
//@{
|
|
585
|
+
EntryCHI(const FunObjVar* f, const MemRegion* m, Cond c = true) :
|
|
586
|
+
MSSACHI<Cond>(MSSADEF::EntryMSSACHI,m,c),fun(f)
|
|
587
|
+
{
|
|
588
|
+
}
|
|
589
|
+
virtual ~EntryCHI()
|
|
590
|
+
{
|
|
591
|
+
}
|
|
592
|
+
//@}
|
|
593
|
+
|
|
594
|
+
/// Return function
|
|
595
|
+
inline const FunObjVar* getFunction() const
|
|
596
|
+
{
|
|
597
|
+
return fun;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
601
|
+
//@{
|
|
602
|
+
static inline bool classof(const EntryCHI * chi)
|
|
603
|
+
{
|
|
604
|
+
return true;
|
|
605
|
+
}
|
|
606
|
+
static inline bool classof(const MSSACHI<Cond> * chi)
|
|
607
|
+
{
|
|
608
|
+
return chi->getType() == MSSADEF::EntryMSSACHI;
|
|
609
|
+
}
|
|
610
|
+
static inline bool classof(const MSSADEF *chi)
|
|
611
|
+
{
|
|
612
|
+
return chi->getType() == MSSADEF::EntryMSSACHI;
|
|
613
|
+
}
|
|
614
|
+
//@}
|
|
615
|
+
|
|
616
|
+
/// Print CHI
|
|
617
|
+
virtual void dump()
|
|
618
|
+
{
|
|
619
|
+
SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
|
|
620
|
+
" = ENCHI(MR_" << this->getMR()->getMRID() << "V_" << this->getOpVer()->getSSAVersion() << ") \t" <<
|
|
621
|
+
this->getMR()->dumpStr() << "\n";
|
|
622
|
+
}
|
|
623
|
+
};
|
|
624
|
+
|
|
625
|
+
/*
|
|
626
|
+
* Memory SSA Select, similar to PHINode
|
|
627
|
+
*/
|
|
628
|
+
template<class Cond>
|
|
629
|
+
class MSSAPHI : public MSSADEF
|
|
630
|
+
{
|
|
631
|
+
|
|
632
|
+
public:
|
|
633
|
+
typedef Map<u32_t,const MRVer*> OPVers;
|
|
634
|
+
private:
|
|
635
|
+
const SVFBasicBlock* bb;
|
|
636
|
+
OPVers opVers;
|
|
637
|
+
Cond cond;
|
|
638
|
+
public:
|
|
639
|
+
/// Constructors for PHI
|
|
640
|
+
//@{
|
|
641
|
+
MSSAPHI(const SVFBasicBlock* b, const MemRegion* m, Cond c = true) :
|
|
642
|
+
MSSADEF(MSSADEF::SSAPHI,m), bb(b), cond(c)
|
|
643
|
+
{
|
|
644
|
+
}
|
|
645
|
+
virtual ~MSSAPHI()
|
|
646
|
+
{
|
|
647
|
+
}
|
|
648
|
+
//@}
|
|
649
|
+
|
|
650
|
+
/// Set operand ver
|
|
651
|
+
inline void setOpVer(const MRVer* v, u32_t pos)
|
|
652
|
+
{
|
|
653
|
+
assert(v->getMR() == this->getMR() && "inserting different memory region?");
|
|
654
|
+
opVers[pos] = v;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
/// Get operand ver
|
|
658
|
+
inline const MRVer* getOpVer(u32_t pos) const
|
|
659
|
+
{
|
|
660
|
+
OPVers::const_iterator it = opVers.find(pos);
|
|
661
|
+
assert(it!=opVers.end() && "version is nullptr, did not rename?");
|
|
662
|
+
return it->second;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
/// Get the number of operand ver
|
|
666
|
+
inline u32_t getOpVerNum() const
|
|
667
|
+
{
|
|
668
|
+
return opVers.size();
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
/// Operand ver iterators
|
|
672
|
+
//@{
|
|
673
|
+
inline OPVers::const_iterator opVerBegin() const
|
|
674
|
+
{
|
|
675
|
+
return opVers.begin();
|
|
676
|
+
}
|
|
677
|
+
inline OPVers::const_iterator opVerEnd() const
|
|
678
|
+
{
|
|
679
|
+
return opVers.end();
|
|
680
|
+
}
|
|
681
|
+
//@}
|
|
682
|
+
|
|
683
|
+
/// Return the basic block
|
|
684
|
+
inline const SVFBasicBlock* getBasicBlock() const
|
|
685
|
+
{
|
|
686
|
+
return bb;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
/// Return condition
|
|
690
|
+
inline Cond getCond() const
|
|
691
|
+
{
|
|
692
|
+
return cond;
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
696
|
+
//@{
|
|
697
|
+
static inline bool classof(const MSSAPHI * phi)
|
|
698
|
+
{
|
|
699
|
+
return true;
|
|
700
|
+
}
|
|
701
|
+
static inline bool classof(const MSSADEF *phi)
|
|
702
|
+
{
|
|
703
|
+
return phi->getType() == MSSADEF::SSAPHI ;
|
|
704
|
+
}
|
|
705
|
+
//@}
|
|
706
|
+
|
|
707
|
+
/// Print PHI
|
|
708
|
+
virtual void dump()
|
|
709
|
+
{
|
|
710
|
+
SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
|
|
711
|
+
" = PHI(";
|
|
712
|
+
for(OPVers::iterator it = opVers.begin(), eit = opVers.end(); it!=eit; ++it)
|
|
713
|
+
SVFUtil::outs() << "MR_" << this->getMR()->getMRID() << "V_" << it->second->getSSAVersion() << ", ";
|
|
714
|
+
|
|
715
|
+
SVFUtil::outs() << ")\n";
|
|
716
|
+
}
|
|
717
|
+
};
|
|
718
|
+
|
|
719
|
+
std::ostream& operator<<(std::ostream &o, const MRVer& mrver);
|
|
720
|
+
} // End namespace SVF
|
|
721
|
+
|
|
722
|
+
#endif /* MSSAMUCHI_H_ */
|