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,368 @@
|
|
|
1
|
+
//===----- CHG.h -- Class hierarchy graph ---------------------------//
|
|
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
|
+
* CHG.h (previously CHA.h)
|
|
25
|
+
*
|
|
26
|
+
* Created on: Apr 13, 2016
|
|
27
|
+
* Author: Xiaokang Fan
|
|
28
|
+
*
|
|
29
|
+
* Created on: Aug 24, 2019
|
|
30
|
+
* Author: Mohamad Barbar
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
#ifndef CHA_H_
|
|
34
|
+
#define CHA_H_
|
|
35
|
+
|
|
36
|
+
#include "Util/ThreadAPI.h"
|
|
37
|
+
#include "Graphs/GenericGraph.h"
|
|
38
|
+
#include "Util/WorkList.h"
|
|
39
|
+
|
|
40
|
+
namespace SVF
|
|
41
|
+
{
|
|
42
|
+
|
|
43
|
+
class CHNode;
|
|
44
|
+
class GlobalObjVar;
|
|
45
|
+
|
|
46
|
+
typedef Set<const GlobalObjVar*> VTableSet;
|
|
47
|
+
typedef Set<const FunObjVar*> VFunSet;
|
|
48
|
+
|
|
49
|
+
/// Common base for class hierarchy graph. Only implements what PointerAnalysis needs.
|
|
50
|
+
class CommonCHGraph
|
|
51
|
+
{
|
|
52
|
+
public:
|
|
53
|
+
virtual ~CommonCHGraph() { };
|
|
54
|
+
enum CHGKind
|
|
55
|
+
{
|
|
56
|
+
Standard,
|
|
57
|
+
DI
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
virtual bool csHasVFnsBasedonCHA(const CallICFGNode* cs) = 0;
|
|
61
|
+
virtual const VFunSet &getCSVFsBasedonCHA(const CallICFGNode* cs) = 0;
|
|
62
|
+
virtual bool csHasVtblsBasedonCHA(const CallICFGNode* cs) = 0;
|
|
63
|
+
virtual const VTableSet &getCSVtblsBasedonCHA(const CallICFGNode* cs) = 0;
|
|
64
|
+
virtual void getVFnsFromVtbls(const CallICFGNode* cs, const VTableSet& vtbls,
|
|
65
|
+
VFunSet& virtualFunctions) = 0;
|
|
66
|
+
|
|
67
|
+
CHGKind getKind(void) const
|
|
68
|
+
{
|
|
69
|
+
return kind;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
protected:
|
|
73
|
+
CHGKind kind;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
typedef GenericEdge<CHNode> GenericCHEdgeTy;
|
|
78
|
+
class CHEdge: public GenericCHEdgeTy
|
|
79
|
+
{
|
|
80
|
+
friend class SVFIRWriter;
|
|
81
|
+
friend class SVFIRReader;
|
|
82
|
+
|
|
83
|
+
public:
|
|
84
|
+
typedef enum
|
|
85
|
+
{
|
|
86
|
+
INHERITANCE = 0x1, // inheritance relation
|
|
87
|
+
INSTANTCE = 0x2 // template-instance relation
|
|
88
|
+
} CHEDGETYPE;
|
|
89
|
+
|
|
90
|
+
typedef GenericNode<CHNode, CHEdge>::GEdgeSetTy CHEdgeSetTy;
|
|
91
|
+
|
|
92
|
+
CHEdge(CHNode* s, CHNode* d, CHEDGETYPE et, GEdgeFlag k = 0)
|
|
93
|
+
: GenericCHEdgeTy(s, d, k)
|
|
94
|
+
{
|
|
95
|
+
edgeType = et;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
CHEDGETYPE getEdgeType() const
|
|
99
|
+
{
|
|
100
|
+
return edgeType;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
private:
|
|
104
|
+
CHEDGETYPE edgeType;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
typedef GenericNode<CHNode, CHEdge> GenericCHNodeTy;
|
|
108
|
+
class CHNode: public GenericCHNodeTy
|
|
109
|
+
{
|
|
110
|
+
friend class SVFIRWriter;
|
|
111
|
+
friend class SVFIRReader;
|
|
112
|
+
|
|
113
|
+
public:
|
|
114
|
+
typedef enum
|
|
115
|
+
{
|
|
116
|
+
PURE_ABSTRACT = 0x1, // pure virtual abstract class
|
|
117
|
+
MULTI_INHERITANCE = 0x2, // multi inheritance class
|
|
118
|
+
TEMPLATE = 0x04 // template class
|
|
119
|
+
} CLASSATTR;
|
|
120
|
+
|
|
121
|
+
typedef std::vector<const FunObjVar*> FuncVector;
|
|
122
|
+
|
|
123
|
+
CHNode (const std::string& name, NodeID i = 0, GNodeK k = CHNodeKd):
|
|
124
|
+
GenericCHNodeTy(i, k), vtable(nullptr), className(name), flags(0)
|
|
125
|
+
{
|
|
126
|
+
}
|
|
127
|
+
~CHNode()
|
|
128
|
+
{
|
|
129
|
+
}
|
|
130
|
+
virtual const std::string& getName() const
|
|
131
|
+
{
|
|
132
|
+
return className;
|
|
133
|
+
}
|
|
134
|
+
/// Flags
|
|
135
|
+
//@{
|
|
136
|
+
inline void setFlag(CLASSATTR mask)
|
|
137
|
+
{
|
|
138
|
+
flags |= mask;
|
|
139
|
+
}
|
|
140
|
+
inline bool hasFlag(CLASSATTR mask) const
|
|
141
|
+
{
|
|
142
|
+
return (flags & mask) == mask;
|
|
143
|
+
}
|
|
144
|
+
//@}
|
|
145
|
+
|
|
146
|
+
/// Attribute
|
|
147
|
+
//@{
|
|
148
|
+
inline void setPureAbstract()
|
|
149
|
+
{
|
|
150
|
+
setFlag(PURE_ABSTRACT);
|
|
151
|
+
}
|
|
152
|
+
inline void setMultiInheritance()
|
|
153
|
+
{
|
|
154
|
+
setFlag(MULTI_INHERITANCE);
|
|
155
|
+
}
|
|
156
|
+
inline void setTemplate()
|
|
157
|
+
{
|
|
158
|
+
setFlag(TEMPLATE);
|
|
159
|
+
}
|
|
160
|
+
inline bool isPureAbstract() const
|
|
161
|
+
{
|
|
162
|
+
return hasFlag(PURE_ABSTRACT);
|
|
163
|
+
}
|
|
164
|
+
inline bool isMultiInheritance() const
|
|
165
|
+
{
|
|
166
|
+
return hasFlag(MULTI_INHERITANCE);
|
|
167
|
+
}
|
|
168
|
+
inline bool isTemplate() const
|
|
169
|
+
{
|
|
170
|
+
return hasFlag(TEMPLATE);
|
|
171
|
+
}
|
|
172
|
+
//@}
|
|
173
|
+
|
|
174
|
+
void addVirtualFunctionVector(FuncVector vfuncvec)
|
|
175
|
+
{
|
|
176
|
+
virtualFunctionVectors.push_back(vfuncvec);
|
|
177
|
+
}
|
|
178
|
+
const std::vector<FuncVector> &getVirtualFunctionVectors() const
|
|
179
|
+
{
|
|
180
|
+
return virtualFunctionVectors;
|
|
181
|
+
}
|
|
182
|
+
void getVirtualFunctions(u32_t idx, FuncVector &virtualFunctions) const;
|
|
183
|
+
|
|
184
|
+
const GlobalObjVar *getVTable() const
|
|
185
|
+
{
|
|
186
|
+
return vtable;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
void setVTable(const GlobalObjVar *vtbl)
|
|
190
|
+
{
|
|
191
|
+
vtable = vtbl;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
195
|
+
//@{
|
|
196
|
+
static inline bool classof(const CHNode *)
|
|
197
|
+
{
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
static inline bool classof(const GenericCHNodeTy * node)
|
|
202
|
+
{
|
|
203
|
+
return node->getNodeKind() == CHNodeKd;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
static inline bool classof(const SVFValue* node)
|
|
207
|
+
{
|
|
208
|
+
return node->getNodeKind() == CHNodeKd;
|
|
209
|
+
}
|
|
210
|
+
//@}
|
|
211
|
+
|
|
212
|
+
private:
|
|
213
|
+
const GlobalObjVar* vtable;
|
|
214
|
+
std::string className;
|
|
215
|
+
size_t flags;
|
|
216
|
+
/*
|
|
217
|
+
* virtual functions inherited from different classes are separately stored
|
|
218
|
+
* to model different vtables inherited from different fathers.
|
|
219
|
+
*
|
|
220
|
+
* Example:
|
|
221
|
+
* class C: public A, public B
|
|
222
|
+
* vtableC = {Af1, Af2, ..., inttoptr, Bg1, Bg2, ...} ("inttoptr"
|
|
223
|
+
* instruction works as the delimiter for separating virtual functions
|
|
224
|
+
* inherited from different classes)
|
|
225
|
+
*
|
|
226
|
+
* virtualFunctionVectors = {{Af1, Af2, ...}, {Bg1, Bg2, ...}}
|
|
227
|
+
*/
|
|
228
|
+
std::vector<FuncVector> virtualFunctionVectors;
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
/// class hierarchy graph
|
|
232
|
+
typedef GenericGraph<CHNode, CHEdge> GenericCHGraphTy;
|
|
233
|
+
class CHGraph: public CommonCHGraph, public GenericCHGraphTy
|
|
234
|
+
{
|
|
235
|
+
friend class SVFIRWriter;
|
|
236
|
+
friend class SVFIRReader;
|
|
237
|
+
friend class CHGBuilder;
|
|
238
|
+
|
|
239
|
+
public:
|
|
240
|
+
typedef Set<const CHNode*> CHNodeSetTy;
|
|
241
|
+
typedef FIFOWorkList<const CHNode*> WorkList;
|
|
242
|
+
typedef Map<std::string, CHNodeSetTy> NameToCHNodesMap;
|
|
243
|
+
|
|
244
|
+
typedef Map<const ICFGNode*, CHNodeSetTy> CallNodeToCHNodesMap;
|
|
245
|
+
typedef Map<const ICFGNode*, VTableSet> CallNodeToVTableSetMap;
|
|
246
|
+
typedef Map<const ICFGNode*, VFunSet> CallNodeToVFunSetMap;
|
|
247
|
+
|
|
248
|
+
typedef enum
|
|
249
|
+
{
|
|
250
|
+
CONSTRUCTOR = 0x1, // connect node based on constructor
|
|
251
|
+
DESTRUCTOR = 0x2 // connect node based on destructor
|
|
252
|
+
} RELATIONTYPE;
|
|
253
|
+
|
|
254
|
+
CHGraph(): classNum(0), vfID(0), buildingCHGTime(0)
|
|
255
|
+
{
|
|
256
|
+
this->kind = Standard;
|
|
257
|
+
}
|
|
258
|
+
~CHGraph() override = default;
|
|
259
|
+
|
|
260
|
+
void addEdge(const std::string className,
|
|
261
|
+
const std::string baseClassName,
|
|
262
|
+
CHEdge::CHEDGETYPE edgeType);
|
|
263
|
+
CHNode *getNode(const std::string name) const;
|
|
264
|
+
void getVFnsFromVtbls(const CallICFGNode* cs, const VTableSet &vtbls, VFunSet &virtualFunctions) override;
|
|
265
|
+
void dump(const std::string& filename);
|
|
266
|
+
void view();
|
|
267
|
+
void printCH();
|
|
268
|
+
|
|
269
|
+
inline u32_t getVirtualFunctionID(const FunObjVar* vfn) const
|
|
270
|
+
{
|
|
271
|
+
Map<const FunObjVar*, u32_t>::const_iterator it =
|
|
272
|
+
virtualFunctionToIDMap.find(vfn);
|
|
273
|
+
if (it != virtualFunctionToIDMap.end())
|
|
274
|
+
return it->second;
|
|
275
|
+
else
|
|
276
|
+
return -1;
|
|
277
|
+
}
|
|
278
|
+
inline const FunObjVar* getVirtualFunctionBasedonID(u32_t id) const
|
|
279
|
+
{
|
|
280
|
+
Map<const FunObjVar*, u32_t>::const_iterator it, eit;
|
|
281
|
+
for (it = virtualFunctionToIDMap.begin(), eit =
|
|
282
|
+
virtualFunctionToIDMap.end(); it != eit; ++it)
|
|
283
|
+
{
|
|
284
|
+
if (it->second == id)
|
|
285
|
+
return it->first;
|
|
286
|
+
}
|
|
287
|
+
return nullptr;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
inline void addInstances(const std::string templateName, CHNode* node)
|
|
291
|
+
{
|
|
292
|
+
NameToCHNodesMap::iterator it = templateNameToInstancesMap.find(
|
|
293
|
+
templateName);
|
|
294
|
+
if (it != templateNameToInstancesMap.end())
|
|
295
|
+
it->second.insert(node);
|
|
296
|
+
else
|
|
297
|
+
templateNameToInstancesMap[templateName].insert(node);
|
|
298
|
+
}
|
|
299
|
+
inline const CHNodeSetTy &getDescendants(const std::string className)
|
|
300
|
+
{
|
|
301
|
+
return classNameToDescendantsMap[className];
|
|
302
|
+
}
|
|
303
|
+
inline const CHNodeSetTy &getInstances(const std::string className)
|
|
304
|
+
{
|
|
305
|
+
return templateNameToInstancesMap[className];
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
bool csHasVtblsBasedonCHA(const CallICFGNode* cs) override;
|
|
309
|
+
bool csHasVFnsBasedonCHA(const CallICFGNode* cs) override;
|
|
310
|
+
const VTableSet &getCSVtblsBasedonCHA(const CallICFGNode* cs) override;
|
|
311
|
+
const VFunSet &getCSVFsBasedonCHA(const CallICFGNode* cs) override;
|
|
312
|
+
|
|
313
|
+
static inline bool classof(const CommonCHGraph *chg)
|
|
314
|
+
{
|
|
315
|
+
return chg->getKind() == Standard;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
private:
|
|
320
|
+
u32_t classNum;
|
|
321
|
+
u32_t vfID;
|
|
322
|
+
double buildingCHGTime;
|
|
323
|
+
Map<std::string, CHNode*> classNameToNodeMap;
|
|
324
|
+
NameToCHNodesMap classNameToDescendantsMap;
|
|
325
|
+
NameToCHNodesMap classNameToAncestorsMap;
|
|
326
|
+
NameToCHNodesMap classNameToInstAndDescsMap;
|
|
327
|
+
NameToCHNodesMap templateNameToInstancesMap;
|
|
328
|
+
CallNodeToCHNodesMap callNodeToClassesMap;
|
|
329
|
+
|
|
330
|
+
Map<const FunObjVar*, u32_t> virtualFunctionToIDMap;
|
|
331
|
+
|
|
332
|
+
CallNodeToVTableSetMap callNodeToCHAVtblsMap;
|
|
333
|
+
CallNodeToVFunSetMap callNodeToCHAVFnsMap;
|
|
334
|
+
};
|
|
335
|
+
|
|
336
|
+
} // End namespace SVF
|
|
337
|
+
|
|
338
|
+
namespace SVF
|
|
339
|
+
{
|
|
340
|
+
/* !
|
|
341
|
+
* GenericGraphTraits specializations for generic graph algorithms.
|
|
342
|
+
* Provide graph traits for traversing from a constraint node using standard graph traversals.
|
|
343
|
+
*/
|
|
344
|
+
template <>
|
|
345
|
+
struct GenericGraphTraits<SVF::CHNode*>
|
|
346
|
+
: public GenericGraphTraits<SVF::GenericNode<SVF::CHNode, SVF::CHEdge>*>
|
|
347
|
+
{
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
/// Inverse GenericGraphTraits specializations for call graph node, it is used
|
|
351
|
+
/// for inverse traversal.
|
|
352
|
+
template <>
|
|
353
|
+
struct GenericGraphTraits<Inverse<SVF::CHNode*>>
|
|
354
|
+
: public GenericGraphTraits<
|
|
355
|
+
Inverse<SVF::GenericNode<SVF::CHNode, SVF::CHEdge>*>>
|
|
356
|
+
{
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
template <>
|
|
360
|
+
struct GenericGraphTraits<SVF::CHGraph*>
|
|
361
|
+
: public GenericGraphTraits<SVF::GenericGraph<SVF::CHNode, SVF::CHEdge>*>
|
|
362
|
+
{
|
|
363
|
+
typedef SVF::CHNode* NodeRef;
|
|
364
|
+
};
|
|
365
|
+
|
|
366
|
+
} // End namespace llvm
|
|
367
|
+
|
|
368
|
+
#endif /* CHA_H_ */
|