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,497 @@
|
|
|
1
|
+
//===- PTACallGraph.h -- Call graph representation----------------------------//
|
|
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
|
+
* PTACallGraph.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Nov 7, 2013
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef PTACALLGRAPH_H_
|
|
31
|
+
#define PTACALLGRAPH_H_
|
|
32
|
+
|
|
33
|
+
#include "Graphs/GenericGraph.h"
|
|
34
|
+
#include "SVFIR/SVFValue.h"
|
|
35
|
+
#include "Graphs/ICFG.h"
|
|
36
|
+
#include <set>
|
|
37
|
+
|
|
38
|
+
namespace SVF
|
|
39
|
+
{
|
|
40
|
+
|
|
41
|
+
class CallGraphNode;
|
|
42
|
+
class CallGraph;
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* Call Graph edge representing a calling relation between two functions
|
|
47
|
+
* Multiple calls from function A to B are merged into one call edge
|
|
48
|
+
* Each call edge has a set of direct callsites and a set of indirect callsites
|
|
49
|
+
*/
|
|
50
|
+
typedef GenericEdge<CallGraphNode> GenericPTACallGraphEdgeTy;
|
|
51
|
+
class CallGraphEdge : public GenericPTACallGraphEdgeTy
|
|
52
|
+
{
|
|
53
|
+
|
|
54
|
+
public:
|
|
55
|
+
typedef Set<const CallICFGNode*> CallInstSet;
|
|
56
|
+
enum CEDGEK
|
|
57
|
+
{
|
|
58
|
+
CallRetEdge,TDForkEdge,TDJoinEdge,HareParForEdge
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
private:
|
|
63
|
+
CallInstSet directCalls;
|
|
64
|
+
CallInstSet indirectCalls;
|
|
65
|
+
CallSiteID csId;
|
|
66
|
+
public:
|
|
67
|
+
/// Constructor
|
|
68
|
+
CallGraphEdge(CallGraphNode* s, CallGraphNode* d, CEDGEK kind, CallSiteID cs) :
|
|
69
|
+
GenericPTACallGraphEdgeTy(s, d, makeEdgeFlagWithInvokeID(kind, cs)), csId(cs)
|
|
70
|
+
{
|
|
71
|
+
}
|
|
72
|
+
/// Destructor
|
|
73
|
+
virtual ~CallGraphEdge()
|
|
74
|
+
{
|
|
75
|
+
}
|
|
76
|
+
/// Compute the unique edgeFlag value from edge kind and CallSiteID.
|
|
77
|
+
static inline GEdgeFlag makeEdgeFlagWithInvokeID(GEdgeKind k, CallSiteID cs)
|
|
78
|
+
{
|
|
79
|
+
return (cs << EdgeKindMaskBits) | k;
|
|
80
|
+
}
|
|
81
|
+
/// Get direct and indirect calls
|
|
82
|
+
//@{
|
|
83
|
+
inline CallSiteID getCallSiteID() const
|
|
84
|
+
{
|
|
85
|
+
return csId;
|
|
86
|
+
}
|
|
87
|
+
inline bool isDirectCallEdge() const
|
|
88
|
+
{
|
|
89
|
+
return !directCalls.empty() && indirectCalls.empty();
|
|
90
|
+
}
|
|
91
|
+
inline bool isIndirectCallEdge() const
|
|
92
|
+
{
|
|
93
|
+
return directCalls.empty() && !indirectCalls.empty();
|
|
94
|
+
}
|
|
95
|
+
inline CallInstSet& getDirectCalls()
|
|
96
|
+
{
|
|
97
|
+
return directCalls;
|
|
98
|
+
}
|
|
99
|
+
inline CallInstSet& getIndirectCalls()
|
|
100
|
+
{
|
|
101
|
+
return indirectCalls;
|
|
102
|
+
}
|
|
103
|
+
inline const CallInstSet& getDirectCalls() const
|
|
104
|
+
{
|
|
105
|
+
return directCalls;
|
|
106
|
+
}
|
|
107
|
+
inline const CallInstSet& getIndirectCalls() const
|
|
108
|
+
{
|
|
109
|
+
return indirectCalls;
|
|
110
|
+
}
|
|
111
|
+
//@}
|
|
112
|
+
|
|
113
|
+
/// Add direct and indirect callsite
|
|
114
|
+
//@{
|
|
115
|
+
void addDirectCallSite(const CallICFGNode* call);
|
|
116
|
+
|
|
117
|
+
void addInDirectCallSite(const CallICFGNode* call);
|
|
118
|
+
//@}
|
|
119
|
+
|
|
120
|
+
/// Iterators for direct and indirect callsites
|
|
121
|
+
//@{
|
|
122
|
+
inline CallInstSet::const_iterator directCallsBegin() const
|
|
123
|
+
{
|
|
124
|
+
return directCalls.begin();
|
|
125
|
+
}
|
|
126
|
+
inline CallInstSet::const_iterator directCallsEnd() const
|
|
127
|
+
{
|
|
128
|
+
return directCalls.end();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
inline CallInstSet::const_iterator indirectCallsBegin() const
|
|
132
|
+
{
|
|
133
|
+
return indirectCalls.begin();
|
|
134
|
+
}
|
|
135
|
+
inline CallInstSet::const_iterator indirectCallsEnd() const
|
|
136
|
+
{
|
|
137
|
+
return indirectCalls.end();
|
|
138
|
+
}
|
|
139
|
+
//@}
|
|
140
|
+
|
|
141
|
+
/// ClassOf
|
|
142
|
+
//@{
|
|
143
|
+
static inline bool classof(const CallGraphEdge*)
|
|
144
|
+
{
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
static inline bool classof(const GenericPTACallGraphEdgeTy *edge)
|
|
148
|
+
{
|
|
149
|
+
return edge->getEdgeKind() == CallGraphEdge::CallRetEdge ||
|
|
150
|
+
edge->getEdgeKind() == CallGraphEdge::TDForkEdge ||
|
|
151
|
+
edge->getEdgeKind() == CallGraphEdge::TDJoinEdge;
|
|
152
|
+
}
|
|
153
|
+
//@}
|
|
154
|
+
|
|
155
|
+
/// Overloading operator << for dumping ICFG node ID
|
|
156
|
+
//@{
|
|
157
|
+
friend OutStream& operator<< (OutStream &o, const CallGraphEdge&edge)
|
|
158
|
+
{
|
|
159
|
+
o << edge.toString();
|
|
160
|
+
return o;
|
|
161
|
+
}
|
|
162
|
+
//@}
|
|
163
|
+
|
|
164
|
+
virtual const std::string toString() const;
|
|
165
|
+
|
|
166
|
+
typedef GenericNode<CallGraphNode, CallGraphEdge>::GEdgeSetTy CallGraphEdgeSet;
|
|
167
|
+
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
class FunObjVar;
|
|
171
|
+
|
|
172
|
+
/*
|
|
173
|
+
* Call Graph node representing a function
|
|
174
|
+
*/
|
|
175
|
+
typedef GenericNode<CallGraphNode, CallGraphEdge> GenericPTACallGraphNodeTy;
|
|
176
|
+
class CallGraphNode : public GenericPTACallGraphNodeTy
|
|
177
|
+
{
|
|
178
|
+
private:
|
|
179
|
+
const FunObjVar* fun;
|
|
180
|
+
|
|
181
|
+
public:
|
|
182
|
+
/// Constructor
|
|
183
|
+
CallGraphNode(NodeID i, const FunObjVar* f) : GenericPTACallGraphNodeTy(i,CallNodeKd), fun(f)
|
|
184
|
+
{
|
|
185
|
+
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const std::string &getName() const;
|
|
189
|
+
|
|
190
|
+
/// Get function of this call node
|
|
191
|
+
inline const FunObjVar* getFunction() const
|
|
192
|
+
{
|
|
193
|
+
return fun;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/// Return TRUE if this function can be reached from main.
|
|
197
|
+
bool isReachableFromProgEntry(Map<NodeID, bool> &reachableFromEntry, NodeBS &visitedNodes) const;
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
/// Overloading operator << for dumping ICFG node ID
|
|
201
|
+
//@{
|
|
202
|
+
friend OutStream& operator<< (OutStream &o, const CallGraphNode&node)
|
|
203
|
+
{
|
|
204
|
+
o << node.toString();
|
|
205
|
+
return o;
|
|
206
|
+
}
|
|
207
|
+
//@}
|
|
208
|
+
|
|
209
|
+
virtual const std::string toString() const;
|
|
210
|
+
|
|
211
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
212
|
+
//@{
|
|
213
|
+
static inline bool classof(const CallGraphNode*)
|
|
214
|
+
{
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
static inline bool classof(const GenericICFGNodeTy* node)
|
|
219
|
+
{
|
|
220
|
+
return node->getNodeKind() == CallNodeKd;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
static inline bool classof(const SVFValue* node)
|
|
224
|
+
{
|
|
225
|
+
return node->getNodeKind() == CallNodeKd;
|
|
226
|
+
}
|
|
227
|
+
//@}
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
/*!
|
|
231
|
+
* Pointer Analysis Call Graph used internally for various pointer analysis
|
|
232
|
+
*/
|
|
233
|
+
typedef GenericGraph<CallGraphNode, CallGraphEdge> GenericPTACallGraphTy;
|
|
234
|
+
class CallGraph : public GenericPTACallGraphTy
|
|
235
|
+
{
|
|
236
|
+
|
|
237
|
+
public:
|
|
238
|
+
typedef CallGraphEdge::CallGraphEdgeSet CallGraphEdgeSet;
|
|
239
|
+
typedef Map<const FunObjVar*, CallGraphNode*> FunToCallGraphNodeMap;
|
|
240
|
+
typedef Map<const CallICFGNode*, CallGraphEdgeSet> CallInstToCallGraphEdgesMap;
|
|
241
|
+
typedef std::pair<const CallICFGNode*, const FunObjVar*> CallSitePair;
|
|
242
|
+
typedef Map<CallSitePair, CallSiteID> CallSiteToIdMap;
|
|
243
|
+
typedef Map<CallSiteID, CallSitePair> IdToCallSiteMap;
|
|
244
|
+
typedef Set<const FunObjVar*> FunctionSet;
|
|
245
|
+
typedef OrderedMap<const CallICFGNode*, FunctionSet> CallEdgeMap;
|
|
246
|
+
typedef CallGraphEdgeSet::iterator CallGraphEdgeIter;
|
|
247
|
+
typedef CallGraphEdgeSet::const_iterator CallGraphEdgeConstIter;
|
|
248
|
+
|
|
249
|
+
enum CGEK
|
|
250
|
+
{
|
|
251
|
+
NormCallGraph, ThdCallGraph
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
private:
|
|
255
|
+
/// Indirect call map
|
|
256
|
+
CallEdgeMap indirectCallMap;
|
|
257
|
+
|
|
258
|
+
/// Call site information
|
|
259
|
+
static CallSiteToIdMap csToIdMap; ///< Map a pair of call instruction and callee to a callsite ID
|
|
260
|
+
static IdToCallSiteMap idToCSMap; ///< Map a callsite ID to a pair of call instruction and callee
|
|
261
|
+
static CallSiteID totalCallSiteNum; ///< CallSiteIDs, start from 1;
|
|
262
|
+
|
|
263
|
+
protected:
|
|
264
|
+
FunToCallGraphNodeMap funToCallGraphNodeMap; ///< Call Graph node map
|
|
265
|
+
CallInstToCallGraphEdgesMap callinstToCallGraphEdgesMap; ///< Map a call instruction to its corresponding call edges
|
|
266
|
+
|
|
267
|
+
NodeID callGraphNodeNum;
|
|
268
|
+
u32_t numOfResolvedIndCallEdge;
|
|
269
|
+
CGEK kind;
|
|
270
|
+
|
|
271
|
+
/// Clean up memory
|
|
272
|
+
void destroy();
|
|
273
|
+
|
|
274
|
+
protected:
|
|
275
|
+
/// Add CallSiteID
|
|
276
|
+
inline CallSiteID addCallSite(const CallICFGNode* cs, const FunObjVar* callee)
|
|
277
|
+
{
|
|
278
|
+
std::pair<const CallICFGNode*, const FunObjVar*> newCS(std::make_pair(cs, callee));
|
|
279
|
+
CallSiteToIdMap::const_iterator it = csToIdMap.find(newCS);
|
|
280
|
+
//assert(it == csToIdMap.end() && "cannot add a callsite twice");
|
|
281
|
+
if(it == csToIdMap.end())
|
|
282
|
+
{
|
|
283
|
+
CallSiteID id = totalCallSiteNum++;
|
|
284
|
+
csToIdMap.insert(std::make_pair(newCS, id));
|
|
285
|
+
idToCSMap.insert(std::make_pair(id, newCS));
|
|
286
|
+
return id;
|
|
287
|
+
}
|
|
288
|
+
return it->second;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/// Add call graph edge
|
|
292
|
+
inline void addEdge(CallGraphEdge* edge)
|
|
293
|
+
{
|
|
294
|
+
edge->getDstNode()->addIncomingEdge(edge);
|
|
295
|
+
edge->getSrcNode()->addOutgoingEdge(edge);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
public:
|
|
299
|
+
/// Constructor
|
|
300
|
+
CallGraph(CGEK k = NormCallGraph);
|
|
301
|
+
|
|
302
|
+
/// Copy constructor
|
|
303
|
+
CallGraph(const CallGraph& other);
|
|
304
|
+
|
|
305
|
+
/// Destructor
|
|
306
|
+
virtual ~CallGraph()
|
|
307
|
+
{
|
|
308
|
+
destroy();
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/// Return type of this callgraph
|
|
312
|
+
inline CGEK getKind() const
|
|
313
|
+
{
|
|
314
|
+
return kind;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/// Get callees from an indirect callsite
|
|
318
|
+
//@{
|
|
319
|
+
inline CallEdgeMap& getIndCallMap()
|
|
320
|
+
{
|
|
321
|
+
return indirectCallMap;
|
|
322
|
+
}
|
|
323
|
+
inline bool hasIndCSCallees(const CallICFGNode* cs) const
|
|
324
|
+
{
|
|
325
|
+
return (indirectCallMap.find(cs) != indirectCallMap.end());
|
|
326
|
+
}
|
|
327
|
+
inline const FunctionSet& getIndCSCallees(const CallICFGNode* cs) const
|
|
328
|
+
{
|
|
329
|
+
CallEdgeMap::const_iterator it = indirectCallMap.find(cs);
|
|
330
|
+
assert(it!=indirectCallMap.end() && "not an indirect callsite!");
|
|
331
|
+
return it->second;
|
|
332
|
+
}
|
|
333
|
+
//@}
|
|
334
|
+
inline u32_t getTotalCallSiteNumber() const
|
|
335
|
+
{
|
|
336
|
+
return totalCallSiteNum;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
inline u32_t getNumOfResolvedIndCallEdge() const
|
|
340
|
+
{
|
|
341
|
+
return numOfResolvedIndCallEdge;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
inline const CallInstToCallGraphEdgesMap& getCallInstToCallGraphEdgesMap() const
|
|
345
|
+
{
|
|
346
|
+
return callinstToCallGraphEdgesMap;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/// Issue a warning if the function which has indirect call sites can not be reached from program entry.
|
|
350
|
+
void verifyCallGraph();
|
|
351
|
+
|
|
352
|
+
/// Add direct call edges
|
|
353
|
+
void addDirectCallGraphEdge(const CallICFGNode* call, const FunObjVar* callerFun, const FunObjVar* calleeFun);
|
|
354
|
+
|
|
355
|
+
void addCallGraphNode(const FunObjVar* fun);
|
|
356
|
+
|
|
357
|
+
/// Get call graph node
|
|
358
|
+
//@{
|
|
359
|
+
|
|
360
|
+
const CallGraphNode* getCallGraphNode(const std::string& name);
|
|
361
|
+
|
|
362
|
+
inline CallGraphNode* getCallGraphNode(NodeID id) const
|
|
363
|
+
{
|
|
364
|
+
return getGNode(id);
|
|
365
|
+
}
|
|
366
|
+
inline CallGraphNode* getCallGraphNode(const FunObjVar* fun) const
|
|
367
|
+
{
|
|
368
|
+
FunToCallGraphNodeMap::const_iterator it = funToCallGraphNodeMap.find(fun);
|
|
369
|
+
assert(it!=funToCallGraphNodeMap.end() && "call graph node not found!!");
|
|
370
|
+
return it->second;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
//@}
|
|
374
|
+
|
|
375
|
+
/// Get CallSiteID
|
|
376
|
+
//@{
|
|
377
|
+
inline CallSiteID getCallSiteID(const CallICFGNode* cs, const FunObjVar* callee) const
|
|
378
|
+
{
|
|
379
|
+
CallSitePair newCS(std::make_pair(cs, callee));
|
|
380
|
+
CallSiteToIdMap::const_iterator it = csToIdMap.find(newCS);
|
|
381
|
+
assert(it != csToIdMap.end() && "callsite id not found! This maybe a partially resolved callgraph, please check the indCallEdge limit");
|
|
382
|
+
return it->second;
|
|
383
|
+
}
|
|
384
|
+
inline bool hasCallSiteID(const CallICFGNode* cs, const FunObjVar* callee) const
|
|
385
|
+
{
|
|
386
|
+
CallSitePair newCS(std::make_pair(cs, callee));
|
|
387
|
+
CallSiteToIdMap::const_iterator it = csToIdMap.find(newCS);
|
|
388
|
+
return it != csToIdMap.end();
|
|
389
|
+
}
|
|
390
|
+
inline const CallSitePair& getCallSitePair(CallSiteID id) const
|
|
391
|
+
{
|
|
392
|
+
IdToCallSiteMap::const_iterator it = idToCSMap.find(id);
|
|
393
|
+
assert(it != idToCSMap.end() && "cannot find call site for this CallSiteID");
|
|
394
|
+
return (it->second);
|
|
395
|
+
}
|
|
396
|
+
inline const CallICFGNode* getCallSite(CallSiteID id) const
|
|
397
|
+
{
|
|
398
|
+
return getCallSitePair(id).first;
|
|
399
|
+
}
|
|
400
|
+
const FunObjVar* getCallerOfCallSite(CallSiteID id) const;
|
|
401
|
+
inline const FunObjVar* getCalleeOfCallSite(CallSiteID id) const
|
|
402
|
+
{
|
|
403
|
+
return getCallSitePair(id).second;
|
|
404
|
+
}
|
|
405
|
+
//@}
|
|
406
|
+
/// Whether we have already created this call graph edge
|
|
407
|
+
CallGraphEdge* hasGraphEdge(CallGraphNode* src, CallGraphNode* dst,
|
|
408
|
+
CallGraphEdge::CEDGEK kind, CallSiteID csId) const;
|
|
409
|
+
/// Get call graph edge via nodes
|
|
410
|
+
CallGraphEdge* getGraphEdge(CallGraphNode* src, CallGraphNode* dst,
|
|
411
|
+
CallGraphEdge::CEDGEK kind, CallSiteID csId);
|
|
412
|
+
|
|
413
|
+
/// Get all callees for a callsite
|
|
414
|
+
inline void getCallees(const CallICFGNode* cs, FunctionSet& callees)
|
|
415
|
+
{
|
|
416
|
+
if(hasCallGraphEdge(cs))
|
|
417
|
+
{
|
|
418
|
+
for (CallGraphEdgeSet::const_iterator it = getCallEdgeBegin(cs), eit =
|
|
419
|
+
getCallEdgeEnd(cs); it != eit; ++it)
|
|
420
|
+
{
|
|
421
|
+
callees.insert((*it)->getDstNode()->getFunction());
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/// Get call graph edge via call instruction
|
|
427
|
+
//@{
|
|
428
|
+
/// whether this call instruction has a valid call graph edge
|
|
429
|
+
inline bool hasCallGraphEdge(const CallICFGNode* inst) const
|
|
430
|
+
{
|
|
431
|
+
return callinstToCallGraphEdgesMap.find(inst)!=callinstToCallGraphEdgesMap.end();
|
|
432
|
+
}
|
|
433
|
+
inline CallGraphEdgeSet::const_iterator getCallEdgeBegin(const CallICFGNode* inst) const
|
|
434
|
+
{
|
|
435
|
+
CallInstToCallGraphEdgesMap::const_iterator it = callinstToCallGraphEdgesMap.find(inst);
|
|
436
|
+
assert(it!=callinstToCallGraphEdgesMap.end()
|
|
437
|
+
&& "call instruction does not have a valid callee");
|
|
438
|
+
return it->second.begin();
|
|
439
|
+
}
|
|
440
|
+
inline CallGraphEdgeSet::const_iterator getCallEdgeEnd(const CallICFGNode* inst) const
|
|
441
|
+
{
|
|
442
|
+
CallInstToCallGraphEdgesMap::const_iterator it = callinstToCallGraphEdgesMap.find(inst);
|
|
443
|
+
assert(it!=callinstToCallGraphEdgesMap.end()
|
|
444
|
+
&& "call instruction does not have a valid callee");
|
|
445
|
+
return it->second.end();
|
|
446
|
+
}
|
|
447
|
+
//@}
|
|
448
|
+
|
|
449
|
+
|
|
450
|
+
/// Add indirect call edges
|
|
451
|
+
//@{
|
|
452
|
+
void addIndirectCallGraphEdge(const CallICFGNode* cs,const FunObjVar* callerFun, const FunObjVar* calleeFun);
|
|
453
|
+
//@}
|
|
454
|
+
|
|
455
|
+
/// Get callsites invoking the callee
|
|
456
|
+
//@{
|
|
457
|
+
void getAllCallSitesInvokingCallee(const FunObjVar* callee, CallGraphEdge::CallInstSet& csSet);
|
|
458
|
+
void getDirCallSitesInvokingCallee(const FunObjVar* callee, CallGraphEdge::CallInstSet& csSet);
|
|
459
|
+
void getIndCallSitesInvokingCallee(const FunObjVar* callee, CallGraphEdge::CallInstSet& csSet);
|
|
460
|
+
//@}
|
|
461
|
+
|
|
462
|
+
/// Whether its reachable between two functions
|
|
463
|
+
bool isReachableBetweenFunctions(const FunObjVar* srcFn, const FunObjVar* dstFn) const;
|
|
464
|
+
|
|
465
|
+
/// Dump the graph
|
|
466
|
+
void dump(const std::string& filename);
|
|
467
|
+
|
|
468
|
+
/// View the graph from the debugger
|
|
469
|
+
void view();
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
} // End namespace SVF
|
|
473
|
+
|
|
474
|
+
namespace SVF
|
|
475
|
+
{
|
|
476
|
+
/* !
|
|
477
|
+
* GenericGraphTraits specializations for generic graph algorithms.
|
|
478
|
+
* Provide graph traits for traversing from a constraint node using standard graph traversals.
|
|
479
|
+
*/
|
|
480
|
+
template<> struct GenericGraphTraits<SVF::CallGraphNode*> : public GenericGraphTraits<SVF::GenericNode<SVF::CallGraphNode,SVF::CallGraphEdge>* >
|
|
481
|
+
{
|
|
482
|
+
};
|
|
483
|
+
|
|
484
|
+
/// Inverse GenericGraphTraits specializations for call graph node, it is used for inverse traversal.
|
|
485
|
+
template<>
|
|
486
|
+
struct GenericGraphTraits<Inverse<SVF::CallGraphNode*> > : public GenericGraphTraits<Inverse<SVF::GenericNode<SVF::CallGraphNode,SVF::CallGraphEdge>* > >
|
|
487
|
+
{
|
|
488
|
+
};
|
|
489
|
+
|
|
490
|
+
template<> struct GenericGraphTraits<SVF::CallGraph*> : public GenericGraphTraits<SVF::GenericGraph<SVF::CallGraphNode,SVF::CallGraphEdge>* >
|
|
491
|
+
{
|
|
492
|
+
typedef SVF::CallGraphNode*NodeRef;
|
|
493
|
+
};
|
|
494
|
+
|
|
495
|
+
} // End namespace llvm
|
|
496
|
+
|
|
497
|
+
#endif /* PTACALLGRAPH_H_ */
|