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,491 @@
|
|
|
1
|
+
//===- SVFG.h -- Sparse value-flow graph--------------------------------------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-2017> <Yulei Sui>
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
// This program is free software: you can redistribute it and/or modify
|
|
9
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
10
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
// (at your option) any later version.
|
|
12
|
+
|
|
13
|
+
// This program is distributed in the hope that it will be useful,
|
|
14
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
// GNU Affero General Public License for more details.
|
|
17
|
+
|
|
18
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
19
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
//
|
|
21
|
+
//===----------------------------------------------------------------------===//
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* SVFG.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Oct 28, 2013
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef SVFG_H_
|
|
31
|
+
#define SVFG_H_
|
|
32
|
+
|
|
33
|
+
#include "Graphs/VFG.h"
|
|
34
|
+
#include "Graphs/SVFGNode.h"
|
|
35
|
+
|
|
36
|
+
namespace SVF
|
|
37
|
+
{
|
|
38
|
+
|
|
39
|
+
class PointerAnalysis;
|
|
40
|
+
class SVFGStat;
|
|
41
|
+
|
|
42
|
+
typedef VFGEdge SVFGEdge;
|
|
43
|
+
typedef VFGNode SVFGNode;
|
|
44
|
+
typedef ActualParmVFGNode ActualParmSVFGNode;
|
|
45
|
+
typedef ActualRetVFGNode ActualRetSVFGNode;
|
|
46
|
+
typedef FormalParmVFGNode FormalParmSVFGNode;
|
|
47
|
+
typedef FormalRetVFGNode FormalRetSVFGNode;
|
|
48
|
+
|
|
49
|
+
typedef NullPtrVFGNode NullPtrSVFGNode;
|
|
50
|
+
typedef StmtVFGNode StmtSVFGNode;
|
|
51
|
+
typedef AddrVFGNode AddrSVFGNode;
|
|
52
|
+
typedef CopyVFGNode CopySVFGNode;
|
|
53
|
+
typedef StoreVFGNode StoreSVFGNode;
|
|
54
|
+
typedef LoadVFGNode LoadSVFGNode;
|
|
55
|
+
typedef GepVFGNode GepSVFGNode;
|
|
56
|
+
typedef PHIVFGNode PHISVFGNode;
|
|
57
|
+
typedef IntraPHIVFGNode IntraPHISVFGNode;
|
|
58
|
+
typedef InterPHIVFGNode InterPHISVFGNode;
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
/*!
|
|
62
|
+
* Sparse value flow graph
|
|
63
|
+
* Each node stands for a definition, each edge stands for value flow relations
|
|
64
|
+
*/
|
|
65
|
+
class SVFG : public VFG
|
|
66
|
+
{
|
|
67
|
+
friend class SVFGBuilder;
|
|
68
|
+
friend class SaberSVFGBuilder;
|
|
69
|
+
friend class CFLSVFGBuilder;
|
|
70
|
+
friend class TaintSVFGBuilder;
|
|
71
|
+
friend class DDASVFGBuilder;
|
|
72
|
+
friend class MTASVFGBuilder;
|
|
73
|
+
friend class RcSvfgBuilder;
|
|
74
|
+
|
|
75
|
+
public:
|
|
76
|
+
typedef VFGNodeIDToNodeMapTy SVFGNodeIDToNodeMapTy;
|
|
77
|
+
typedef Map<const PAGNode*, NodeID> PAGNodeToDefMapTy;
|
|
78
|
+
typedef Map<const MRVer*, NodeID> MSSAVarToDefMapTy;
|
|
79
|
+
typedef NodeBS ActualINSVFGNodeSet;
|
|
80
|
+
typedef NodeBS ActualOUTSVFGNodeSet;
|
|
81
|
+
typedef NodeBS FormalINSVFGNodeSet;
|
|
82
|
+
typedef NodeBS FormalOUTSVFGNodeSet;
|
|
83
|
+
typedef Map<const CallICFGNode*, ActualINSVFGNodeSet> CallSiteToActualINsMapTy;
|
|
84
|
+
typedef Map<const CallICFGNode*, ActualOUTSVFGNodeSet> CallSiteToActualOUTsMapTy;
|
|
85
|
+
typedef Map<const FunObjVar*, FormalINSVFGNodeSet> FunctionToFormalINsMapTy;
|
|
86
|
+
typedef Map<const FunObjVar*, FormalOUTSVFGNodeSet> FunctionToFormalOUTsMapTy;
|
|
87
|
+
typedef MemSSA::MUSet MUSet;
|
|
88
|
+
typedef MemSSA::CHISet CHISet;
|
|
89
|
+
typedef MemSSA::PHISet PHISet;
|
|
90
|
+
typedef MemSSA::MU MU;
|
|
91
|
+
typedef MemSSA::CHI CHI;
|
|
92
|
+
typedef MemSSA::LOADMU LOADMU;
|
|
93
|
+
typedef MemSSA::STORECHI STORECHI;
|
|
94
|
+
typedef MemSSA::RETMU RETMU;
|
|
95
|
+
typedef MemSSA::ENTRYCHI ENTRYCHI;
|
|
96
|
+
typedef MemSSA::CALLCHI CALLCHI;
|
|
97
|
+
typedef MemSSA::CALLMU CALLMU;
|
|
98
|
+
|
|
99
|
+
protected:
|
|
100
|
+
MSSAVarToDefMapTy MSSAVarToDefMap; ///< map a memory SSA operator to its definition SVFG node
|
|
101
|
+
CallSiteToActualINsMapTy callSiteToActualINMap;
|
|
102
|
+
CallSiteToActualOUTsMapTy callSiteToActualOUTMap;
|
|
103
|
+
FunctionToFormalINsMapTy funToFormalINMap;
|
|
104
|
+
FunctionToFormalOUTsMapTy funToFormalOUTMap;
|
|
105
|
+
SVFGStat * stat;
|
|
106
|
+
std::unique_ptr<MemSSA> mssa;
|
|
107
|
+
PointerAnalysis* pta;
|
|
108
|
+
|
|
109
|
+
/// Clean up memory
|
|
110
|
+
void destroy();
|
|
111
|
+
|
|
112
|
+
/// Constructor
|
|
113
|
+
SVFG(std::unique_ptr<MemSSA> mssa, VFGK k);
|
|
114
|
+
|
|
115
|
+
/// Start building SVFG
|
|
116
|
+
virtual void buildSVFG();
|
|
117
|
+
|
|
118
|
+
public:
|
|
119
|
+
/// Destructor
|
|
120
|
+
virtual ~SVFG()
|
|
121
|
+
{
|
|
122
|
+
destroy();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/// Return statistics
|
|
126
|
+
inline SVFGStat* getStat() const
|
|
127
|
+
{
|
|
128
|
+
return stat;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/// Clear MSSA
|
|
132
|
+
inline void clearMSSA()
|
|
133
|
+
{
|
|
134
|
+
mssa = nullptr;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/// Get SVFG memory SSA
|
|
138
|
+
inline MemSSA* getMSSA() const
|
|
139
|
+
{
|
|
140
|
+
return mssa.get();
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/// Get Pointer Analysis
|
|
144
|
+
inline PointerAnalysis* getPTA() const
|
|
145
|
+
{
|
|
146
|
+
return pta;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/// Get a SVFG node
|
|
150
|
+
inline SVFGNode* getSVFGNode(NodeID id) const
|
|
151
|
+
{
|
|
152
|
+
return getVFGNode(id);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/// Whether has the SVFGNode
|
|
156
|
+
inline bool hasSVFGNode(NodeID id) const
|
|
157
|
+
{
|
|
158
|
+
return hasVFGNode(id);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/// Get all inter value flow edges of a indirect call site
|
|
162
|
+
void getInterVFEdgesForIndirectCallSite(const CallICFGNode* cs, const FunObjVar* callee, SVFGEdgeSetTy& edges);
|
|
163
|
+
|
|
164
|
+
/// Dump graph into dot file
|
|
165
|
+
void dump(const std::string& file, bool simple = false);
|
|
166
|
+
|
|
167
|
+
/// Connect SVFG nodes between caller and callee for indirect call site
|
|
168
|
+
virtual void connectCallerAndCallee(const CallICFGNode* cs, const FunObjVar* callee, SVFGEdgeSetTy& edges);
|
|
169
|
+
|
|
170
|
+
/// Given a pagNode, return its definition site
|
|
171
|
+
inline const SVFGNode* getDefSVFGNode(const PAGNode* pagNode) const
|
|
172
|
+
{
|
|
173
|
+
return getSVFGNode(getDef(pagNode));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/// Given a pagNode, return whether it has definition site
|
|
177
|
+
inline bool hasDefSVFGNode(const PAGNode* pagNode) const
|
|
178
|
+
{
|
|
179
|
+
return hasDef(pagNode) && hasSVFGNode(getDef(pagNode));
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/// Perform statistics
|
|
183
|
+
void performStat();
|
|
184
|
+
|
|
185
|
+
/// Has a SVFGNode
|
|
186
|
+
//@{
|
|
187
|
+
inline bool hasActualINSVFGNodes(const CallICFGNode* cs) const
|
|
188
|
+
{
|
|
189
|
+
return callSiteToActualINMap.find(cs)!=callSiteToActualINMap.end();
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
inline bool hasActualOUTSVFGNodes(const CallICFGNode* cs) const
|
|
193
|
+
{
|
|
194
|
+
return callSiteToActualOUTMap.find(cs)!=callSiteToActualOUTMap.end();
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
inline bool hasFormalINSVFGNodes(const FunObjVar* fun) const
|
|
198
|
+
{
|
|
199
|
+
return funToFormalINMap.find(fun)!=funToFormalINMap.end();
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
inline bool hasFormalOUTSVFGNodes(const FunObjVar* fun) const
|
|
203
|
+
{
|
|
204
|
+
return funToFormalOUTMap.find(fun)!=funToFormalOUTMap.end();
|
|
205
|
+
}
|
|
206
|
+
//@}
|
|
207
|
+
|
|
208
|
+
/// Get SVFGNode set
|
|
209
|
+
//@{
|
|
210
|
+
inline ActualINSVFGNodeSet& getActualINSVFGNodes(const CallICFGNode* cs)
|
|
211
|
+
{
|
|
212
|
+
return callSiteToActualINMap[cs];
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
inline ActualOUTSVFGNodeSet& getActualOUTSVFGNodes(const CallICFGNode* cs)
|
|
216
|
+
{
|
|
217
|
+
return callSiteToActualOUTMap[cs];
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
inline FormalINSVFGNodeSet& getFormalINSVFGNodes(const FunObjVar* fun)
|
|
221
|
+
{
|
|
222
|
+
return funToFormalINMap[fun];
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
inline FormalOUTSVFGNodeSet& getFormalOUTSVFGNodes(const FunObjVar* fun)
|
|
226
|
+
{
|
|
227
|
+
return funToFormalOUTMap[fun];
|
|
228
|
+
}
|
|
229
|
+
//@}
|
|
230
|
+
|
|
231
|
+
/// Whether a node is function entry SVFGNode
|
|
232
|
+
const FunObjVar* isFunEntrySVFGNode(const SVFGNode* node) const;
|
|
233
|
+
|
|
234
|
+
/// Whether a node is callsite return SVFGNode
|
|
235
|
+
const CallICFGNode* isCallSiteRetSVFGNode(const SVFGNode* node) const;
|
|
236
|
+
|
|
237
|
+
/// Remove a SVFG edge
|
|
238
|
+
inline void removeSVFGEdge(SVFGEdge* edge)
|
|
239
|
+
{
|
|
240
|
+
removeVFGEdge(edge);
|
|
241
|
+
}
|
|
242
|
+
/// Remove a SVFGNode
|
|
243
|
+
inline void removeSVFGNode(SVFGNode* node)
|
|
244
|
+
{
|
|
245
|
+
removeVFGNode(node);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/// Add SVFG edge
|
|
249
|
+
inline bool addSVFGEdge(SVFGEdge* edge)
|
|
250
|
+
{
|
|
251
|
+
return addVFGEdge(edge);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/// Return total SVFG node number
|
|
255
|
+
inline u32_t getSVFGNodeNum() const
|
|
256
|
+
{
|
|
257
|
+
return nodeNum;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/// Used *only* for Versioned FSPTA to encode propagation of versions
|
|
261
|
+
/// in the worklist (allowing for breadth-first propagation).
|
|
262
|
+
/// Returns the created node.
|
|
263
|
+
inline const DummyVersionPropSVFGNode *addDummyVersionPropSVFGNode(const NodeID object, const NodeID version)
|
|
264
|
+
{
|
|
265
|
+
DummyVersionPropSVFGNode *dvpNode = new DummyVersionPropSVFGNode(totalVFGNode++, object, version);
|
|
266
|
+
// Not going through add[S]VFGNode because we have no ICFG edge.
|
|
267
|
+
addGNode(dvpNode->getId(), dvpNode);
|
|
268
|
+
return dvpNode;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
virtual void writeToFile(const std::string& filename);
|
|
272
|
+
virtual void readFile(const std::string& filename);
|
|
273
|
+
virtual MRVer* getMRVERFromString(const std::string& input);
|
|
274
|
+
|
|
275
|
+
protected:
|
|
276
|
+
/// Add indirect def-use edges of a memory region between two statements,
|
|
277
|
+
//@{
|
|
278
|
+
SVFGEdge* addIntraIndirectVFEdge(NodeID srcId, NodeID dstId, const NodeBS& cpts);
|
|
279
|
+
SVFGEdge* addCallIndirectVFEdge(NodeID srcId, NodeID dstId, const NodeBS& cpts,CallSiteID csId);
|
|
280
|
+
SVFGEdge* addRetIndirectVFEdge(NodeID srcId, NodeID dstId, const NodeBS& cpts,CallSiteID csId);
|
|
281
|
+
SVFGEdge* addThreadMHPIndirectVFEdge(NodeID srcId, NodeID dstId, const NodeBS& cpts);
|
|
282
|
+
//@}
|
|
283
|
+
|
|
284
|
+
/// Add inter VF edge from callsite mu to function entry chi
|
|
285
|
+
SVFGEdge* addInterIndirectVFCallEdge(const ActualINSVFGNode* src, const FormalINSVFGNode* dst,CallSiteID csId);
|
|
286
|
+
|
|
287
|
+
/// Add inter VF edge from function exit mu to callsite chi
|
|
288
|
+
SVFGEdge* addInterIndirectVFRetEdge(const FormalOUTSVFGNode* src, const ActualOUTSVFGNode* dst,CallSiteID csId);
|
|
289
|
+
|
|
290
|
+
/// Connect SVFG nodes between caller and callee for indirect call site
|
|
291
|
+
//@{
|
|
292
|
+
/// Connect actual-in and formal-in
|
|
293
|
+
virtual inline void connectAInAndFIn(const ActualINSVFGNode* actualIn, const FormalINSVFGNode* formalIn, CallSiteID csId, SVFGEdgeSetTy& edges)
|
|
294
|
+
{
|
|
295
|
+
SVFGEdge* edge = addInterIndirectVFCallEdge(actualIn, formalIn,csId);
|
|
296
|
+
if (edge != nullptr)
|
|
297
|
+
edges.insert(edge);
|
|
298
|
+
}
|
|
299
|
+
/// Connect formal-out and actual-out
|
|
300
|
+
virtual inline void connectFOutAndAOut(const FormalOUTSVFGNode* formalOut, const ActualOUTSVFGNode* actualOut, CallSiteID csId, SVFGEdgeSetTy& edges)
|
|
301
|
+
{
|
|
302
|
+
SVFGEdge* edge = addInterIndirectVFRetEdge(formalOut, actualOut,csId);
|
|
303
|
+
if (edge != nullptr)
|
|
304
|
+
edges.insert(edge);
|
|
305
|
+
}
|
|
306
|
+
//@}
|
|
307
|
+
|
|
308
|
+
/// Get inter value flow edges between indirect call site and callee.
|
|
309
|
+
//@{
|
|
310
|
+
virtual inline void getInterVFEdgeAtIndCSFromAPToFP(const PAGNode* cs_arg, const PAGNode* fun_arg, const CallICFGNode*, CallSiteID csId, SVFGEdgeSetTy& edges)
|
|
311
|
+
{
|
|
312
|
+
SVFGNode* actualParam = getSVFGNode(getDef(cs_arg));
|
|
313
|
+
SVFGNode* formalParam = getSVFGNode(getDef(fun_arg));
|
|
314
|
+
SVFGEdge* edge = hasInterVFGEdge(actualParam, formalParam, SVFGEdge::CallDirVF, csId);
|
|
315
|
+
assert(edge != nullptr && "Can not find inter value flow edge from aparam to fparam");
|
|
316
|
+
edges.insert(edge);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
virtual inline void getInterVFEdgeAtIndCSFromFRToAR(const PAGNode* fun_ret, const PAGNode* cs_ret, CallSiteID csId, SVFGEdgeSetTy& edges)
|
|
320
|
+
{
|
|
321
|
+
SVFGNode* formalRet = getSVFGNode(getDef(fun_ret));
|
|
322
|
+
SVFGNode* actualRet = getSVFGNode(getDef(cs_ret));
|
|
323
|
+
SVFGEdge* edge = hasInterVFGEdge(formalRet, actualRet, SVFGEdge::RetDirVF, csId);
|
|
324
|
+
assert(edge != nullptr && "Can not find inter value flow edge from fret to aret");
|
|
325
|
+
edges.insert(edge);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
virtual inline void getInterVFEdgeAtIndCSFromAInToFIn(ActualINSVFGNode* actualIn, const FunObjVar* callee, SVFGEdgeSetTy& edges)
|
|
329
|
+
{
|
|
330
|
+
for (SVFGNode::const_iterator outIt = actualIn->OutEdgeBegin(), outEit = actualIn->OutEdgeEnd(); outIt != outEit; ++outIt)
|
|
331
|
+
{
|
|
332
|
+
SVFGEdge* edge = *outIt;
|
|
333
|
+
if (edge->getDstNode()->getFun() == callee)
|
|
334
|
+
edges.insert(edge);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
virtual inline void getInterVFEdgeAtIndCSFromFOutToAOut(ActualOUTSVFGNode* actualOut, const FunObjVar* callee, SVFGEdgeSetTy& edges)
|
|
339
|
+
{
|
|
340
|
+
for (SVFGNode::const_iterator inIt = actualOut->InEdgeBegin(), inEit = actualOut->InEdgeEnd(); inIt != inEit; ++inIt)
|
|
341
|
+
{
|
|
342
|
+
SVFGEdge* edge = *inIt;
|
|
343
|
+
if (edge->getSrcNode()->getFun() == callee)
|
|
344
|
+
edges.insert(edge);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
//@}
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
/// Given a PAGNode, set/get its def SVFG node (definition of top level pointers)
|
|
351
|
+
//@{
|
|
352
|
+
inline void setDef(const PAGNode* pagNode, const SVFGNode* node)
|
|
353
|
+
{
|
|
354
|
+
VFG::setDef(pagNode, node);
|
|
355
|
+
}
|
|
356
|
+
inline NodeID getDef(const PAGNode* pagNode) const
|
|
357
|
+
{
|
|
358
|
+
return VFG::getDef(pagNode);
|
|
359
|
+
}
|
|
360
|
+
inline bool hasDef(const PAGNode* pagNode) const
|
|
361
|
+
{
|
|
362
|
+
return VFG::hasDef(pagNode);
|
|
363
|
+
}
|
|
364
|
+
//@}
|
|
365
|
+
|
|
366
|
+
/// Given a MSSADef, set/get its def SVFG node (definition of address-taken variables)
|
|
367
|
+
//@{
|
|
368
|
+
inline void setDef(const MRVer* mvar, const SVFGNode* node)
|
|
369
|
+
{
|
|
370
|
+
MSSAVarToDefMapTy::iterator it = MSSAVarToDefMap.find(mvar);
|
|
371
|
+
if(it==MSSAVarToDefMap.end())
|
|
372
|
+
{
|
|
373
|
+
MSSAVarToDefMap[mvar] = node->getId();
|
|
374
|
+
assert(hasSVFGNode(node->getId()) && "not in the map!!");
|
|
375
|
+
}
|
|
376
|
+
else
|
|
377
|
+
{
|
|
378
|
+
assert((it->second == node->getId()) && "a SVFIR node can only have unique definition ");
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
inline NodeID getDef(const MRVer* mvar) const
|
|
382
|
+
{
|
|
383
|
+
MSSAVarToDefMapTy::const_iterator it = MSSAVarToDefMap.find(mvar);
|
|
384
|
+
assert(it!=MSSAVarToDefMap.end() && "memory SSA does not have a definition??");
|
|
385
|
+
return it->second;
|
|
386
|
+
}
|
|
387
|
+
//@}
|
|
388
|
+
|
|
389
|
+
/// Create SVFG nodes for address-taken variables
|
|
390
|
+
void addSVFGNodesForAddrTakenVars();
|
|
391
|
+
/// Connect direct SVFG edges between two SVFG nodes (value-flow of top address-taken variables)
|
|
392
|
+
void connectIndirectSVFGEdges();
|
|
393
|
+
/// Connect indirect SVFG edges from global initializers (store) to main function entry
|
|
394
|
+
void connectFromGlobalToProgEntry();
|
|
395
|
+
|
|
396
|
+
/// Add SVFG node
|
|
397
|
+
virtual inline void addSVFGNode(SVFGNode* node, ICFGNode* icfgNode)
|
|
398
|
+
{
|
|
399
|
+
addVFGNode(node, icfgNode);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/// Add memory Function entry chi SVFG node
|
|
403
|
+
inline void addFormalINSVFGNode(const FunEntryICFGNode* funEntry, const MRVer* resVer, const NodeID nodeId)
|
|
404
|
+
{
|
|
405
|
+
FormalINSVFGNode* sNode = new FormalINSVFGNode(nodeId, resVer, funEntry);
|
|
406
|
+
addSVFGNode(sNode, pag->getICFG()->getFunEntryICFGNode(funEntry->getFun()));
|
|
407
|
+
setDef(resVer,sNode);
|
|
408
|
+
funToFormalINMap[funEntry->getFun()].set(sNode->getId());
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/// Add memory Function return mu SVFG node
|
|
412
|
+
inline void addFormalOUTSVFGNode(const FunExitICFGNode* funExit, const MRVer* ver, const NodeID nodeId)
|
|
413
|
+
{
|
|
414
|
+
FormalOUTSVFGNode* sNode = new FormalOUTSVFGNode(nodeId, ver, funExit);
|
|
415
|
+
addSVFGNode(sNode,pag->getICFG()->getFunExitICFGNode(funExit->getFun()));
|
|
416
|
+
funToFormalOUTMap[funExit->getFun()].set(sNode->getId());
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/// Add memory callsite mu SVFG node
|
|
420
|
+
inline void addActualINSVFGNode(const CallICFGNode* callsite, const MRVer* ver, const NodeID nodeId)
|
|
421
|
+
{
|
|
422
|
+
ActualINSVFGNode* sNode = new ActualINSVFGNode(nodeId, callsite, ver);
|
|
423
|
+
addSVFGNode(sNode, const_cast<CallICFGNode*>(callsite));
|
|
424
|
+
callSiteToActualINMap[callsite].set(sNode->getId());
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/// Add memory callsite chi SVFG node
|
|
428
|
+
inline void addActualOUTSVFGNode(const CallICFGNode* callsite, const MRVer* resVer, const NodeID nodeId)
|
|
429
|
+
{
|
|
430
|
+
ActualOUTSVFGNode* sNode = new ActualOUTSVFGNode(nodeId, callsite, resVer);
|
|
431
|
+
addSVFGNode(sNode,const_cast<RetICFGNode*>(callsite->getRetICFGNode()));
|
|
432
|
+
setDef(resVer,sNode);
|
|
433
|
+
callSiteToActualOUTMap[callsite].set(sNode->getId());
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/// Add memory SSA PHI SVFG node
|
|
437
|
+
inline void addIntraMSSAPHISVFGNode(ICFGNode* BlockICFGNode, const Map<u32_t,const MRVer*>::const_iterator opVerBegin,
|
|
438
|
+
const Map<u32_t,const MRVer*>::const_iterator opVerEnd, const MRVer* resVer, const NodeID nodeId)
|
|
439
|
+
{
|
|
440
|
+
IntraMSSAPHISVFGNode* sNode = new IntraMSSAPHISVFGNode(nodeId, resVer);
|
|
441
|
+
addSVFGNode(sNode, BlockICFGNode);
|
|
442
|
+
for(MemSSA::PHI::OPVers::const_iterator it = opVerBegin, eit=opVerEnd; it!=eit; ++it)
|
|
443
|
+
sNode->setOpVer(it->first,it->second);
|
|
444
|
+
setDef(resVer,sNode);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/// Has function for EntryCHI/RetMU/CallCHI/CallMU
|
|
448
|
+
//@{
|
|
449
|
+
inline bool hasFuncEntryChi(const FunObjVar* func) const
|
|
450
|
+
{
|
|
451
|
+
return (funToFormalINMap.find(func) != funToFormalINMap.end());
|
|
452
|
+
}
|
|
453
|
+
inline bool hasFuncRetMu(const FunObjVar* func) const
|
|
454
|
+
{
|
|
455
|
+
return (funToFormalOUTMap.find(func) != funToFormalOUTMap.end());
|
|
456
|
+
}
|
|
457
|
+
inline bool hasCallSiteChi(const CallICFGNode* cs) const
|
|
458
|
+
{
|
|
459
|
+
return (callSiteToActualOUTMap.find(cs) != callSiteToActualOUTMap.end());
|
|
460
|
+
}
|
|
461
|
+
inline bool hasCallSiteMu(const CallICFGNode* cs) const
|
|
462
|
+
{
|
|
463
|
+
return (callSiteToActualINMap.find(cs) != callSiteToActualINMap.end());
|
|
464
|
+
}
|
|
465
|
+
//@}
|
|
466
|
+
};
|
|
467
|
+
|
|
468
|
+
} // End namespace SVF
|
|
469
|
+
|
|
470
|
+
namespace SVF
|
|
471
|
+
{
|
|
472
|
+
/* !
|
|
473
|
+
* GenericGraphTraits specializations for SVFG to be used for generic graph algorithms.
|
|
474
|
+
* Provide graph traits for traversing from a SVFG node using standard graph traversals.
|
|
475
|
+
*/
|
|
476
|
+
//template<> struct GenericGraphTraits<SVF::SVFGNode*>: public GenericGraphTraits<SVF::GenericNode<SVF::SVFGNode,SVF::SVFGEdge>* > {
|
|
477
|
+
//};
|
|
478
|
+
//
|
|
479
|
+
///// Inverse GenericGraphTraits specializations for Value flow node, it is used for inverse traversal.
|
|
480
|
+
//template<>
|
|
481
|
+
//struct GenericGraphTraits<Inverse<SVF::SVFGNode *> > : public GenericGraphTraits<Inverse<SVF::GenericNode<SVF::SVFGNode,SVF::SVFGEdge>* > > {
|
|
482
|
+
//};
|
|
483
|
+
|
|
484
|
+
template<> struct GenericGraphTraits<SVF::SVFG*> : public GenericGraphTraits<SVF::GenericGraph<SVF::SVFGNode,SVF::SVFGEdge>* >
|
|
485
|
+
{
|
|
486
|
+
typedef SVF::SVFGNode *NodeRef;
|
|
487
|
+
};
|
|
488
|
+
|
|
489
|
+
} // End namespace llvm
|
|
490
|
+
|
|
491
|
+
#endif /* SVFG_H_ */
|