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,428 @@
|
|
|
1
|
+
//===- PointerAnalysis.h -- Base class of pointer analyses--------------------//
|
|
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
|
+
* PointerAnalysis.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Nov 12, 2013
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef POINTERANALYSIS_H_
|
|
31
|
+
#define POINTERANALYSIS_H_
|
|
32
|
+
|
|
33
|
+
#include <unistd.h>
|
|
34
|
+
#include <signal.h>
|
|
35
|
+
|
|
36
|
+
#include "Graphs/CHG.h"
|
|
37
|
+
#include "Graphs/ThreadCallGraph.h"
|
|
38
|
+
#include "Graphs/SCC.h"
|
|
39
|
+
#include "MemoryModel/AbstractPointsToDS.h"
|
|
40
|
+
#include "MemoryModel/ConditionalPT.h"
|
|
41
|
+
#include "MemoryModel/MutablePointsToDS.h"
|
|
42
|
+
#include "MemoryModel/PersistentPointsToDS.h"
|
|
43
|
+
#include "MemoryModel/PointsTo.h"
|
|
44
|
+
#include "SVFIR/SVFIR.h"
|
|
45
|
+
|
|
46
|
+
namespace SVF
|
|
47
|
+
{
|
|
48
|
+
|
|
49
|
+
class CommonCHGraph;
|
|
50
|
+
|
|
51
|
+
class ICFG;
|
|
52
|
+
class PTAStat;
|
|
53
|
+
/*
|
|
54
|
+
* Pointer Analysis Base Class
|
|
55
|
+
*/
|
|
56
|
+
class PointerAnalysis
|
|
57
|
+
{
|
|
58
|
+
|
|
59
|
+
public:
|
|
60
|
+
/// Pointer analysis type list
|
|
61
|
+
enum PTATY
|
|
62
|
+
{
|
|
63
|
+
// Whole program analysis
|
|
64
|
+
Andersen_BASE, ///< Base Andersen PTA
|
|
65
|
+
Andersen_WPA, ///< Andersen PTA
|
|
66
|
+
AndersenSCD_WPA, ///< Selective cycle detection andersen-style WPA
|
|
67
|
+
AndersenSFR_WPA, ///< Stride-based field representation
|
|
68
|
+
AndersenWaveDiff_WPA, ///< Diff wave propagation andersen-style WPA
|
|
69
|
+
Steensgaard_WPA, ///< Steensgaard PTA
|
|
70
|
+
CSCallString_WPA, ///< Call string based context sensitive WPA
|
|
71
|
+
CSSummary_WPA, ///< Summary based context sensitive WPA
|
|
72
|
+
FSDATAFLOW_WPA, ///< Traditional Dataflow-based flow sensitive WPA
|
|
73
|
+
FSSPARSE_WPA, ///< Sparse flow sensitive WPA
|
|
74
|
+
VFS_WPA, ///< Versioned sparse flow-sensitive WPA
|
|
75
|
+
FSCS_WPA, ///< Flow-, context- sensitive WPA
|
|
76
|
+
CFLFICI_WPA, ///< Flow-, context-, insensitive CFL-reachability-based analysis
|
|
77
|
+
CFLFSCI_WPA, ///< Flow-insensitive, context-sensitive CFL-reachability-based analysis
|
|
78
|
+
CFLFSCS_WPA, ///< Flow-, context-, CFL-reachability-based analysis
|
|
79
|
+
TypeCPP_WPA, ///< Type-based analysis for C++
|
|
80
|
+
|
|
81
|
+
// Demand driven analysis
|
|
82
|
+
FieldS_DDA, ///< Field sensitive DDA
|
|
83
|
+
FlowS_DDA, ///< Flow sensitive DDA
|
|
84
|
+
PathS_DDA, ///< Guarded value-flow DDA
|
|
85
|
+
Cxt_DDA, ///< context sensitive DDA
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
Default_PTA ///< default pta without any analysis
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/// Implementation type: BVDataPTAImpl or CondPTAImpl.
|
|
92
|
+
enum PTAImplTy
|
|
93
|
+
{
|
|
94
|
+
BaseImpl, ///< Represents PointerAnalaysis.
|
|
95
|
+
BVDataImpl, ///< Represents BVDataPTAImpl.
|
|
96
|
+
CondImpl, ///< Represents CondPTAImpl.
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/// Indirect call edges type, map a callsite to a set of callees
|
|
100
|
+
//@{
|
|
101
|
+
typedef Set<const CallICFGNode*> CallSiteSet;
|
|
102
|
+
typedef SVFIR::CallSiteToFunPtrMap CallSiteToFunPtrMap;
|
|
103
|
+
typedef Set<const FunObjVar*> FunctionSet;
|
|
104
|
+
typedef OrderedMap<const CallICFGNode*, FunctionSet> CallEdgeMap;
|
|
105
|
+
typedef SCCDetection<CallGraph*> CallGraphSCC;
|
|
106
|
+
typedef Set<const GlobalObjVar*> VTableSet;
|
|
107
|
+
typedef Set<const FunObjVar*> VFunSet;
|
|
108
|
+
//@}
|
|
109
|
+
|
|
110
|
+
static const std::string aliasTestMayAlias;
|
|
111
|
+
static const std::string aliasTestMayAliasMangled;
|
|
112
|
+
static const std::string aliasTestNoAlias;
|
|
113
|
+
static const std::string aliasTestNoAliasMangled;
|
|
114
|
+
static const std::string aliasTestPartialAlias;
|
|
115
|
+
static const std::string aliasTestPartialAliasMangled;
|
|
116
|
+
static const std::string aliasTestMustAlias;
|
|
117
|
+
static const std::string aliasTestMustAliasMangled;
|
|
118
|
+
static const std::string aliasTestFailMayAlias;
|
|
119
|
+
static const std::string aliasTestFailMayAliasMangled;
|
|
120
|
+
static const std::string aliasTestFailNoAlias;
|
|
121
|
+
static const std::string aliasTestFailNoAliasMangled;
|
|
122
|
+
|
|
123
|
+
private:
|
|
124
|
+
/// Release the memory
|
|
125
|
+
void destroy();
|
|
126
|
+
|
|
127
|
+
protected:
|
|
128
|
+
|
|
129
|
+
/// User input flags
|
|
130
|
+
//@{
|
|
131
|
+
/// Flag for printing the statistic results
|
|
132
|
+
bool print_stat;
|
|
133
|
+
/// Flag for validating points-to/alias results
|
|
134
|
+
bool alias_validation;
|
|
135
|
+
/// Flag for iteration budget for on-the-fly statistics
|
|
136
|
+
u32_t OnTheFlyIterBudgetForStat;
|
|
137
|
+
//@}
|
|
138
|
+
|
|
139
|
+
/// SVFIR
|
|
140
|
+
static SVFIR* pag;
|
|
141
|
+
/// Pointer analysis Type
|
|
142
|
+
PTATY ptaTy;
|
|
143
|
+
/// PTA implementation type.
|
|
144
|
+
PTAImplTy ptaImplTy;
|
|
145
|
+
/// Statistics
|
|
146
|
+
PTAStat* stat;
|
|
147
|
+
/// Call graph used for pointer analysis
|
|
148
|
+
CallGraph* callgraph;
|
|
149
|
+
/// SCC for PTACallGraph
|
|
150
|
+
CallGraphSCC* callGraphSCC;
|
|
151
|
+
/// Interprocedural control-flow graph
|
|
152
|
+
ICFG* icfg;
|
|
153
|
+
/// CHGraph
|
|
154
|
+
CommonCHGraph *chgraph;
|
|
155
|
+
|
|
156
|
+
public:
|
|
157
|
+
/// Get ICFG
|
|
158
|
+
inline ICFG* getICFG() const
|
|
159
|
+
{
|
|
160
|
+
return pag->getICFG();
|
|
161
|
+
}
|
|
162
|
+
/// Return number of resolved indirect call edges
|
|
163
|
+
inline u32_t getNumOfResolvedIndCallEdge() const
|
|
164
|
+
{
|
|
165
|
+
return getCallGraph()->getNumOfResolvedIndCallEdge();
|
|
166
|
+
}
|
|
167
|
+
/// Return call graph
|
|
168
|
+
inline CallGraph* getCallGraph() const
|
|
169
|
+
{
|
|
170
|
+
return callgraph;
|
|
171
|
+
}
|
|
172
|
+
/// Return call graph SCC
|
|
173
|
+
inline CallGraphSCC* getCallGraphSCC() const
|
|
174
|
+
{
|
|
175
|
+
return callGraphSCC;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/// Constructor
|
|
179
|
+
PointerAnalysis(SVFIR* pag, PTATY ty = Default_PTA, bool alias_check = true);
|
|
180
|
+
|
|
181
|
+
/// Type of pointer analysis
|
|
182
|
+
inline PTATY getAnalysisTy() const
|
|
183
|
+
{
|
|
184
|
+
return ptaTy;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/// Return implementation type of the pointer analysis.
|
|
188
|
+
inline PTAImplTy getImplTy() const
|
|
189
|
+
{
|
|
190
|
+
return ptaImplTy;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/// Get/set SVFIR
|
|
194
|
+
///@{
|
|
195
|
+
inline SVFIR* getPAG() const
|
|
196
|
+
{
|
|
197
|
+
return pag;
|
|
198
|
+
}
|
|
199
|
+
//@}
|
|
200
|
+
|
|
201
|
+
/// Get PTA stat
|
|
202
|
+
inline PTAStat* getStat() const
|
|
203
|
+
{
|
|
204
|
+
return stat;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/// Get all Valid Pointers for resolution
|
|
208
|
+
inline OrderedNodeSet& getAllValidPtrs()
|
|
209
|
+
{
|
|
210
|
+
return pag->getAllValidPtrs();
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/// Destructor
|
|
214
|
+
virtual ~PointerAnalysis();
|
|
215
|
+
|
|
216
|
+
/// Initialization of a pointer analysis, including building symbol table and SVFIR etc.
|
|
217
|
+
virtual void initialize();
|
|
218
|
+
|
|
219
|
+
/// Finalization of a pointer analysis, including checking alias correctness
|
|
220
|
+
virtual void finalize();
|
|
221
|
+
|
|
222
|
+
/// Start Analysis here (main part of pointer analysis). It needs to be implemented in child class
|
|
223
|
+
virtual void analyze() = 0;
|
|
224
|
+
|
|
225
|
+
/// Compute points-to results on-demand, overridden by derived classes
|
|
226
|
+
virtual void computeDDAPts(NodeID) {}
|
|
227
|
+
|
|
228
|
+
/// Interface exposed to users of our pointer analysis, given Value infos
|
|
229
|
+
virtual AliasResult alias(const SVFVar* V1,
|
|
230
|
+
const SVFVar* V2) = 0;
|
|
231
|
+
|
|
232
|
+
/// Interface exposed to users of our pointer analysis, given PAGNodeID
|
|
233
|
+
virtual AliasResult alias(NodeID node1, NodeID node2) = 0;
|
|
234
|
+
|
|
235
|
+
/// Get points-to targets of a pointer. It needs to be implemented in child class
|
|
236
|
+
virtual const PointsTo& getPts(NodeID ptr) = 0;
|
|
237
|
+
|
|
238
|
+
/// Given an object, get all the nodes having whose pointsto contains the object.
|
|
239
|
+
/// Similar to getPts, this also needs to be implemented in child classes.
|
|
240
|
+
virtual const NodeSet& getRevPts(NodeID nodeId) = 0;
|
|
241
|
+
|
|
242
|
+
/// Print targets of a function pointer
|
|
243
|
+
void printIndCSTargets(const CallICFGNode* cs, const FunctionSet& targets);
|
|
244
|
+
|
|
245
|
+
// Debug purpose
|
|
246
|
+
//@{
|
|
247
|
+
virtual void dumpTopLevelPtsTo() {}
|
|
248
|
+
virtual void dumpAllPts() {}
|
|
249
|
+
virtual void dumpCPts() {}
|
|
250
|
+
virtual void dumpPts(NodeID ptr, const PointsTo& pts);
|
|
251
|
+
void printIndCSTargets();
|
|
252
|
+
void dumpAllTypes();
|
|
253
|
+
//@}
|
|
254
|
+
|
|
255
|
+
protected:
|
|
256
|
+
/// Return all indirect callsites
|
|
257
|
+
inline const CallSiteToFunPtrMap& getIndirectCallsites() const
|
|
258
|
+
{
|
|
259
|
+
return pag->getIndirectCallsites();
|
|
260
|
+
}
|
|
261
|
+
/// Return function pointer PAGNode at a callsite cs
|
|
262
|
+
inline NodeID getFunPtr(const CallICFGNode* cs) const
|
|
263
|
+
{
|
|
264
|
+
return pag->getFunPtr(cs);
|
|
265
|
+
}
|
|
266
|
+
/// Alias check functions to verify correctness of pointer analysis
|
|
267
|
+
//@{
|
|
268
|
+
virtual void validateTests();
|
|
269
|
+
virtual void validateSuccessTests(std::string fun);
|
|
270
|
+
virtual void validateExpectedFailureTests(std::string fun);
|
|
271
|
+
//@}
|
|
272
|
+
|
|
273
|
+
/// Reset all object node as field-sensitive.
|
|
274
|
+
void resetObjFieldSensitive();
|
|
275
|
+
|
|
276
|
+
public:
|
|
277
|
+
/// Dump the statistics
|
|
278
|
+
void dumpStat();
|
|
279
|
+
|
|
280
|
+
/// Determine whether a points-to contains a black hole or constant node
|
|
281
|
+
//@{
|
|
282
|
+
inline bool containBlackHoleNode(const PointsTo& pts)
|
|
283
|
+
{
|
|
284
|
+
return pts.test(pag->getBlackHoleNode());
|
|
285
|
+
}
|
|
286
|
+
inline bool containConstantNode(const PointsTo& pts)
|
|
287
|
+
{
|
|
288
|
+
return pts.test(pag->getConstantNode());
|
|
289
|
+
}
|
|
290
|
+
virtual inline bool isBlkObjOrConstantObj(NodeID ptd) const
|
|
291
|
+
{
|
|
292
|
+
return pag->isBlkObjOrConstantObj(ptd);
|
|
293
|
+
}
|
|
294
|
+
//@}
|
|
295
|
+
|
|
296
|
+
/// Whether this object is heap or array
|
|
297
|
+
//@{
|
|
298
|
+
inline bool isHeapMemObj(NodeID id) const
|
|
299
|
+
{
|
|
300
|
+
return pag->getBaseObject(id) && SVFUtil::isa<HeapObjVar, DummyObjVar>(pag->getBaseObject(id));
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
inline bool isArrayMemObj(NodeID id) const
|
|
304
|
+
{
|
|
305
|
+
const BaseObjVar* obj = pag->getBaseObject(id);
|
|
306
|
+
assert(obj && "base object is null??");
|
|
307
|
+
return obj->isArray();
|
|
308
|
+
}
|
|
309
|
+
//@}
|
|
310
|
+
|
|
311
|
+
/// For field-sensitivity
|
|
312
|
+
///@{
|
|
313
|
+
inline bool isFIObjNode(NodeID id) const
|
|
314
|
+
{
|
|
315
|
+
return (SVFUtil::isa<BaseObjVar>(pag->getGNode(id)));
|
|
316
|
+
}
|
|
317
|
+
inline NodeID getBaseObjVar(NodeID id)
|
|
318
|
+
{
|
|
319
|
+
return pag->getBaseObjVar(id);
|
|
320
|
+
}
|
|
321
|
+
inline NodeID getFIObjVar(NodeID id)
|
|
322
|
+
{
|
|
323
|
+
return pag->getFIObjVar(id);
|
|
324
|
+
}
|
|
325
|
+
inline NodeID getGepObjVar(NodeID id, const APOffset& ap)
|
|
326
|
+
{
|
|
327
|
+
return pag->getGepObjVar(id, ap);
|
|
328
|
+
}
|
|
329
|
+
virtual inline const NodeBS& getAllFieldsObjVars(NodeID id)
|
|
330
|
+
{
|
|
331
|
+
return pag->getAllFieldsObjVars(id);
|
|
332
|
+
}
|
|
333
|
+
inline void setObjFieldInsensitive(NodeID id)
|
|
334
|
+
{
|
|
335
|
+
BaseObjVar* baseObj = const_cast<BaseObjVar*>(pag->getBaseObject(id));
|
|
336
|
+
baseObj->setFieldInsensitive();
|
|
337
|
+
}
|
|
338
|
+
inline bool isFieldInsensitive(NodeID id) const
|
|
339
|
+
{
|
|
340
|
+
const BaseObjVar* baseObj = pag->getBaseObject(id);
|
|
341
|
+
return baseObj->isFieldInsensitive();
|
|
342
|
+
}
|
|
343
|
+
///@}
|
|
344
|
+
|
|
345
|
+
/// Whether print statistics
|
|
346
|
+
inline bool printStat()
|
|
347
|
+
{
|
|
348
|
+
return print_stat;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/// Whether print statistics
|
|
352
|
+
inline void disablePrintStat()
|
|
353
|
+
{
|
|
354
|
+
print_stat = false;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/// Get callees from an indirect callsite
|
|
358
|
+
//@{
|
|
359
|
+
inline CallEdgeMap& getIndCallMap()
|
|
360
|
+
{
|
|
361
|
+
return getCallGraph()->getIndCallMap();
|
|
362
|
+
}
|
|
363
|
+
inline bool hasIndCSCallees(const CallICFGNode* cs) const
|
|
364
|
+
{
|
|
365
|
+
return getCallGraph()->hasIndCSCallees(cs);
|
|
366
|
+
}
|
|
367
|
+
inline const FunctionSet& getIndCSCallees(const CallICFGNode* cs) const
|
|
368
|
+
{
|
|
369
|
+
return getCallGraph()->getIndCSCallees(cs);
|
|
370
|
+
}
|
|
371
|
+
//@}
|
|
372
|
+
|
|
373
|
+
/// Resolve indirect call edges
|
|
374
|
+
virtual void resolveIndCalls(const CallICFGNode* cs, const PointsTo& target, CallEdgeMap& newEdges);
|
|
375
|
+
|
|
376
|
+
/// PTACallGraph SCC related methods
|
|
377
|
+
//@{
|
|
378
|
+
/// PTACallGraph SCC detection
|
|
379
|
+
inline void callGraphSCCDetection()
|
|
380
|
+
{
|
|
381
|
+
if(callGraphSCC==nullptr)
|
|
382
|
+
callGraphSCC = new CallGraphSCC(callgraph);
|
|
383
|
+
|
|
384
|
+
callGraphSCC->find();
|
|
385
|
+
}
|
|
386
|
+
/// Get SCC rep node of a SVFG node.
|
|
387
|
+
inline NodeID getCallGraphSCCRepNode(NodeID id) const
|
|
388
|
+
{
|
|
389
|
+
return callGraphSCC->repNode(id);
|
|
390
|
+
}
|
|
391
|
+
/// Return TRUE if this edge is inside a PTACallGraph SCC, i.e., src node and dst node are in the same SCC on the SVFG.
|
|
392
|
+
inline bool inSameCallGraphSCC(const FunObjVar* fun1,const FunObjVar* fun2)
|
|
393
|
+
{
|
|
394
|
+
const CallGraphNode* src = callgraph->getCallGraphNode(fun1);
|
|
395
|
+
const CallGraphNode* dst = callgraph->getCallGraphNode(fun2);
|
|
396
|
+
return (getCallGraphSCCRepNode(src->getId()) == getCallGraphSCCRepNode(dst->getId()));
|
|
397
|
+
}
|
|
398
|
+
inline bool isInRecursion(const FunObjVar* fun) const
|
|
399
|
+
{
|
|
400
|
+
return callGraphSCC->isInCycle(callgraph->getCallGraphNode(fun)->getId());
|
|
401
|
+
}
|
|
402
|
+
/// Whether a local variable is in function recursions
|
|
403
|
+
bool isLocalVarInRecursiveFun(NodeID id) const;
|
|
404
|
+
//@}
|
|
405
|
+
|
|
406
|
+
/// Return PTA name
|
|
407
|
+
virtual const std::string PTAName() const
|
|
408
|
+
{
|
|
409
|
+
return "Pointer Analysis";
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/// get CHGraph
|
|
413
|
+
CommonCHGraph *getCHGraph() const
|
|
414
|
+
{
|
|
415
|
+
return chgraph;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
void getVFnsFromCHA(const CallICFGNode* cs, VFunSet &vfns);
|
|
419
|
+
void getVFnsFromPts(const CallICFGNode* cs, const PointsTo &target, VFunSet &vfns);
|
|
420
|
+
void connectVCallToVFns(const CallICFGNode* cs, const VFunSet &vfns, CallEdgeMap& newEdges);
|
|
421
|
+
virtual void resolveCPPIndCalls(const CallICFGNode* cs,
|
|
422
|
+
const PointsTo& target,
|
|
423
|
+
CallEdgeMap& newEdges);
|
|
424
|
+
};
|
|
425
|
+
|
|
426
|
+
} // End namespace SVF
|
|
427
|
+
|
|
428
|
+
#endif /* POINTERANALYSIS_H_ */
|