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,402 @@
|
|
|
1
|
+
//===- ConsG.h -- Constraint 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
|
+
* ConstraintGraph.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Oct 14, 2013
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef CONSG_H_
|
|
31
|
+
#define CONSG_H_
|
|
32
|
+
|
|
33
|
+
#include "Graphs/ConsGEdge.h"
|
|
34
|
+
#include "Graphs/ConsGNode.h"
|
|
35
|
+
|
|
36
|
+
namespace SVF
|
|
37
|
+
{
|
|
38
|
+
|
|
39
|
+
/*!
|
|
40
|
+
* Constraint graph for Andersen's analysis
|
|
41
|
+
* ConstraintNodes are same as PAGNodes
|
|
42
|
+
* ConstraintEdges are self-defined edges (initialized with ConstraintEdges)
|
|
43
|
+
*/
|
|
44
|
+
class ConstraintGraph : public GenericGraph<ConstraintNode,ConstraintEdge>
|
|
45
|
+
{
|
|
46
|
+
|
|
47
|
+
public:
|
|
48
|
+
typedef OrderedMap<NodeID, ConstraintNode *> ConstraintNodeIDToNodeMapTy;
|
|
49
|
+
typedef ConstraintEdge::ConstraintEdgeSetTy::iterator ConstraintNodeIter;
|
|
50
|
+
typedef Map<NodeID, NodeID> NodeToRepMap;
|
|
51
|
+
typedef Map<NodeID, NodeBS> NodeToSubsMap;
|
|
52
|
+
typedef FIFOWorkList<NodeID> WorkList;
|
|
53
|
+
|
|
54
|
+
protected:
|
|
55
|
+
SVFIR* pag;
|
|
56
|
+
NodeToRepMap nodeToRepMap;
|
|
57
|
+
NodeToSubsMap nodeToSubsMap;
|
|
58
|
+
WorkList nodesToBeCollapsed;
|
|
59
|
+
EdgeID edgeIndex;
|
|
60
|
+
|
|
61
|
+
ConstraintEdge::ConstraintEdgeSetTy AddrCGEdgeSet;
|
|
62
|
+
ConstraintEdge::ConstraintEdgeSetTy directEdgeSet;
|
|
63
|
+
ConstraintEdge::ConstraintEdgeSetTy LoadCGEdgeSet;
|
|
64
|
+
ConstraintEdge::ConstraintEdgeSetTy StoreCGEdgeSet;
|
|
65
|
+
|
|
66
|
+
void buildCG();
|
|
67
|
+
|
|
68
|
+
void destroy();
|
|
69
|
+
|
|
70
|
+
void clearSolitaries(); // remove nodes that are neither pointers nor connected with any edge
|
|
71
|
+
|
|
72
|
+
SVFStmt::SVFStmtSetTy& getPAGEdgeSet(SVFStmt::PEDGEK kind)
|
|
73
|
+
{
|
|
74
|
+
return pag->getPTASVFStmtSet(kind);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/// Wrappers used internally, not expose to Andersen Pass
|
|
78
|
+
//@{
|
|
79
|
+
inline NodeID getReturnNode(const FunObjVar* value) const
|
|
80
|
+
{
|
|
81
|
+
return pag->getReturnNode(value);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
inline NodeID getVarargNode(const FunObjVar* value) const
|
|
85
|
+
{
|
|
86
|
+
return pag->getVarargNode(value);
|
|
87
|
+
}
|
|
88
|
+
//@}
|
|
89
|
+
|
|
90
|
+
public:
|
|
91
|
+
/// Constructor
|
|
92
|
+
ConstraintGraph(SVFIR* p): pag(p), edgeIndex(0)
|
|
93
|
+
{
|
|
94
|
+
buildCG();
|
|
95
|
+
}
|
|
96
|
+
/// Destructor
|
|
97
|
+
virtual ~ConstraintGraph()
|
|
98
|
+
{
|
|
99
|
+
destroy();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// Get/add/remove constraint node
|
|
103
|
+
//@{
|
|
104
|
+
inline ConstraintNode* getConstraintNode(NodeID id) const
|
|
105
|
+
{
|
|
106
|
+
id = sccRepNode(id);
|
|
107
|
+
return getGNode(id);
|
|
108
|
+
}
|
|
109
|
+
inline void addConstraintNode(ConstraintNode* node, NodeID id)
|
|
110
|
+
{
|
|
111
|
+
addGNode(id,node);
|
|
112
|
+
}
|
|
113
|
+
inline bool hasConstraintNode(NodeID id) const
|
|
114
|
+
{
|
|
115
|
+
id = sccRepNode(id);
|
|
116
|
+
return hasGNode(id);
|
|
117
|
+
}
|
|
118
|
+
inline void removeConstraintNode(ConstraintNode* node)
|
|
119
|
+
{
|
|
120
|
+
removeGNode(node);
|
|
121
|
+
}
|
|
122
|
+
//@}
|
|
123
|
+
|
|
124
|
+
//// Return true if this edge exits
|
|
125
|
+
inline bool hasEdge(ConstraintNode* src, ConstraintNode* dst, ConstraintEdge::ConstraintEdgeK kind)
|
|
126
|
+
{
|
|
127
|
+
ConstraintEdge edge(src,dst,kind);
|
|
128
|
+
if(kind == ConstraintEdge::Copy ||
|
|
129
|
+
kind == ConstraintEdge::NormalGep || kind == ConstraintEdge::VariantGep)
|
|
130
|
+
return directEdgeSet.find(&edge) != directEdgeSet.end();
|
|
131
|
+
else if(kind == ConstraintEdge::Addr)
|
|
132
|
+
return AddrCGEdgeSet.find(&edge) != AddrCGEdgeSet.end();
|
|
133
|
+
else if(kind == ConstraintEdge::Store)
|
|
134
|
+
return StoreCGEdgeSet.find(&edge) != StoreCGEdgeSet.end();
|
|
135
|
+
else if(kind == ConstraintEdge::Load)
|
|
136
|
+
return LoadCGEdgeSet.find(&edge) != LoadCGEdgeSet.end();
|
|
137
|
+
else
|
|
138
|
+
assert(false && "no other kind!");
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/// Get an edge via its src and dst nodes and kind
|
|
143
|
+
inline ConstraintEdge* getEdge(ConstraintNode* src, ConstraintNode* dst, ConstraintEdge::ConstraintEdgeK kind)
|
|
144
|
+
{
|
|
145
|
+
ConstraintEdge edge(src,dst,kind);
|
|
146
|
+
if(kind == ConstraintEdge::Copy || kind == ConstraintEdge::NormalGep || kind == ConstraintEdge::VariantGep)
|
|
147
|
+
{
|
|
148
|
+
auto eit = directEdgeSet.find(&edge);
|
|
149
|
+
return *eit;
|
|
150
|
+
}
|
|
151
|
+
else if(kind == ConstraintEdge::Addr)
|
|
152
|
+
{
|
|
153
|
+
auto eit = AddrCGEdgeSet.find(&edge);
|
|
154
|
+
return *eit;
|
|
155
|
+
}
|
|
156
|
+
else if(kind == ConstraintEdge::Store)
|
|
157
|
+
{
|
|
158
|
+
auto eit = StoreCGEdgeSet.find(&edge);
|
|
159
|
+
return *eit;
|
|
160
|
+
}
|
|
161
|
+
else if(kind == ConstraintEdge::Load)
|
|
162
|
+
{
|
|
163
|
+
auto eit = LoadCGEdgeSet.find(&edge);
|
|
164
|
+
return *eit;
|
|
165
|
+
}
|
|
166
|
+
else
|
|
167
|
+
{
|
|
168
|
+
assert(false && "no other kind!");
|
|
169
|
+
return nullptr;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
///Add a SVFIR edge into Edge map
|
|
174
|
+
//@{
|
|
175
|
+
/// Add Address edge
|
|
176
|
+
AddrCGEdge* addAddrCGEdge(NodeID src, NodeID dst);
|
|
177
|
+
/// Add Copy edge
|
|
178
|
+
CopyCGEdge* addCopyCGEdge(NodeID src, NodeID dst);
|
|
179
|
+
/// Add Gep edge
|
|
180
|
+
NormalGepCGEdge* addNormalGepCGEdge(NodeID src, NodeID dst, const AccessPath& ap);
|
|
181
|
+
VariantGepCGEdge* addVariantGepCGEdge(NodeID src, NodeID dst);
|
|
182
|
+
/// Add Load edge
|
|
183
|
+
LoadCGEdge* addLoadCGEdge(NodeID src, NodeID dst);
|
|
184
|
+
/// Add Store edge
|
|
185
|
+
StoreCGEdge* addStoreCGEdge(NodeID src, NodeID dst);
|
|
186
|
+
//@}
|
|
187
|
+
|
|
188
|
+
///Get SVFIR edge
|
|
189
|
+
//@{
|
|
190
|
+
/// Get Address edges
|
|
191
|
+
inline ConstraintEdge::ConstraintEdgeSetTy& getAddrCGEdges()
|
|
192
|
+
{
|
|
193
|
+
return AddrCGEdgeSet;
|
|
194
|
+
}
|
|
195
|
+
/// Get Copy/call/ret/gep edges
|
|
196
|
+
inline ConstraintEdge::ConstraintEdgeSetTy& getDirectCGEdges()
|
|
197
|
+
{
|
|
198
|
+
return directEdgeSet;
|
|
199
|
+
}
|
|
200
|
+
/// Get Load edges
|
|
201
|
+
inline ConstraintEdge::ConstraintEdgeSetTy& getLoadCGEdges()
|
|
202
|
+
{
|
|
203
|
+
return LoadCGEdgeSet;
|
|
204
|
+
}
|
|
205
|
+
/// Get Store edges
|
|
206
|
+
inline ConstraintEdge::ConstraintEdgeSetTy& getStoreCGEdges()
|
|
207
|
+
{
|
|
208
|
+
return StoreCGEdgeSet;
|
|
209
|
+
}
|
|
210
|
+
//@}
|
|
211
|
+
|
|
212
|
+
/// Used for cycle elimination
|
|
213
|
+
//@{
|
|
214
|
+
/// Remove edge from old dst target, change edge dst id and add modified edge into new dst
|
|
215
|
+
void reTargetDstOfEdge(ConstraintEdge* edge, ConstraintNode* newDstNode);
|
|
216
|
+
/// Remove edge from old src target, change edge dst id and add modified edge into new src
|
|
217
|
+
void reTargetSrcOfEdge(ConstraintEdge* edge, ConstraintNode* newSrcNode);
|
|
218
|
+
/// Remove addr edge from their src and dst edge sets
|
|
219
|
+
void removeAddrEdge(AddrCGEdge* edge);
|
|
220
|
+
/// Remove direct edge from their src and dst edge sets
|
|
221
|
+
void removeDirectEdge(ConstraintEdge* edge);
|
|
222
|
+
/// Remove load edge from their src and dst edge sets
|
|
223
|
+
void removeLoadEdge(LoadCGEdge* edge);
|
|
224
|
+
/// Remove store edge from their src and dst edge sets
|
|
225
|
+
void removeStoreEdge(StoreCGEdge* edge);
|
|
226
|
+
//@}
|
|
227
|
+
|
|
228
|
+
/// SCC rep/sub nodes methods
|
|
229
|
+
//@{
|
|
230
|
+
inline NodeID sccRepNode(NodeID id) const
|
|
231
|
+
{
|
|
232
|
+
NodeToRepMap::const_iterator it = nodeToRepMap.find(id);
|
|
233
|
+
if(it==nodeToRepMap.end())
|
|
234
|
+
return id;
|
|
235
|
+
else
|
|
236
|
+
return it->second;
|
|
237
|
+
}
|
|
238
|
+
inline NodeBS& sccSubNodes(NodeID id)
|
|
239
|
+
{
|
|
240
|
+
nodeToSubsMap[id].set(id);
|
|
241
|
+
return nodeToSubsMap[id];
|
|
242
|
+
}
|
|
243
|
+
inline void setRep(NodeID node, NodeID rep)
|
|
244
|
+
{
|
|
245
|
+
nodeToRepMap[node] = rep;
|
|
246
|
+
}
|
|
247
|
+
inline void setSubs(NodeID node, NodeBS& subs)
|
|
248
|
+
{
|
|
249
|
+
nodeToSubsMap[node] |= subs;
|
|
250
|
+
}
|
|
251
|
+
inline void resetSubs(NodeID node)
|
|
252
|
+
{
|
|
253
|
+
nodeToSubsMap.erase(node);
|
|
254
|
+
}
|
|
255
|
+
inline NodeBS& getSubs(NodeID node)
|
|
256
|
+
{
|
|
257
|
+
return nodeToSubsMap[node];
|
|
258
|
+
}
|
|
259
|
+
inline NodeID getRep(NodeID node)
|
|
260
|
+
{
|
|
261
|
+
return nodeToRepMap[node];
|
|
262
|
+
}
|
|
263
|
+
inline void resetRep(NodeID node)
|
|
264
|
+
{
|
|
265
|
+
nodeToRepMap.erase(node);
|
|
266
|
+
}
|
|
267
|
+
//@}
|
|
268
|
+
|
|
269
|
+
/// Move incoming direct edges of a sub node which is outside the SCC to its rep node
|
|
270
|
+
/// Remove incoming direct edges of a sub node which is inside the SCC from its rep node
|
|
271
|
+
/// Return TRUE if there's a gep edge inside this SCC (PWC).
|
|
272
|
+
bool moveInEdgesToRepNode(ConstraintNode*node, ConstraintNode* rep );
|
|
273
|
+
|
|
274
|
+
/// Move outgoing direct edges of a sub node which is outside the SCC to its rep node
|
|
275
|
+
/// Remove outgoing direct edges of sub node which is inside the SCC from its rep node
|
|
276
|
+
/// Return TRUE if there's a gep edge inside this SCC (PWC).
|
|
277
|
+
bool moveOutEdgesToRepNode(ConstraintNode*node, ConstraintNode* rep );
|
|
278
|
+
|
|
279
|
+
/// Move incoming/outgoing direct edges of a sub node to its rep node
|
|
280
|
+
/// Return TRUE if there's a gep edge inside this SCC (PWC).
|
|
281
|
+
inline bool moveEdgesToRepNode(ConstraintNode*node, ConstraintNode* rep )
|
|
282
|
+
{
|
|
283
|
+
bool gepIn = moveInEdgesToRepNode(node, rep);
|
|
284
|
+
bool gepOut = moveOutEdgesToRepNode(node, rep);
|
|
285
|
+
return (gepIn || gepOut);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/// Check if a given edge is a NormalGepCGEdge with 0 offset.
|
|
289
|
+
inline bool isZeroOffsettedGepCGEdge(ConstraintEdge *edge) const
|
|
290
|
+
{
|
|
291
|
+
if (NormalGepCGEdge *normalGepCGEdge = SVFUtil::dyn_cast<NormalGepCGEdge>(edge))
|
|
292
|
+
if (0 == normalGepCGEdge->getConstantFieldIdx())
|
|
293
|
+
return true;
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/// Wrappers for invoking SVFIR methods
|
|
298
|
+
//@{
|
|
299
|
+
inline const SVFIR::CallSiteToFunPtrMap& getIndirectCallsites() const
|
|
300
|
+
{
|
|
301
|
+
return pag->getIndirectCallsites();
|
|
302
|
+
}
|
|
303
|
+
inline NodeID getBlackHoleNode()
|
|
304
|
+
{
|
|
305
|
+
return pag->getBlackHoleNode();
|
|
306
|
+
}
|
|
307
|
+
inline bool isBlkObjOrConstantObj(NodeID id)
|
|
308
|
+
{
|
|
309
|
+
return pag->isBlkObjOrConstantObj(id);
|
|
310
|
+
}
|
|
311
|
+
inline NodeBS& getAllFieldsObjVars(NodeID id)
|
|
312
|
+
{
|
|
313
|
+
return pag->getAllFieldsObjVars(id);
|
|
314
|
+
}
|
|
315
|
+
inline NodeID getBaseObjVar(NodeID id)
|
|
316
|
+
{
|
|
317
|
+
return pag->getBaseObjVar(id);
|
|
318
|
+
}
|
|
319
|
+
inline bool isSingleFieldObj(NodeID id) const
|
|
320
|
+
{
|
|
321
|
+
const BaseObjVar* baseObj = pag->getBaseObject(id);
|
|
322
|
+
return (baseObj->getMaxFieldOffsetLimit() == 1);
|
|
323
|
+
}
|
|
324
|
+
/// Get a field of a memory object
|
|
325
|
+
inline NodeID getGepObjVar(NodeID id, const APOffset& apOffset)
|
|
326
|
+
{
|
|
327
|
+
NodeID gep = pag->getGepObjVar(id, apOffset);
|
|
328
|
+
/// Create a node when it is (1) not exist on graph and (2) not merged
|
|
329
|
+
if(sccRepNode(gep)==gep && hasConstraintNode(gep)==false)
|
|
330
|
+
addConstraintNode(new ConstraintNode(gep),gep);
|
|
331
|
+
return gep;
|
|
332
|
+
}
|
|
333
|
+
/// Get a field-insensitive node of a memory object
|
|
334
|
+
inline NodeID getFIObjVar(NodeID id)
|
|
335
|
+
{
|
|
336
|
+
NodeID fi = pag->getFIObjVar(id);
|
|
337
|
+
/// The fi obj in PAG must be either an existing node or merged to another rep node in ConsG
|
|
338
|
+
assert((hasConstraintNode(fi) || sccRepNode(fi) != fi) && "non-existing fi obj??");
|
|
339
|
+
return fi;
|
|
340
|
+
}
|
|
341
|
+
//@}
|
|
342
|
+
|
|
343
|
+
/// Check/Set PWC (positive weight cycle) flag
|
|
344
|
+
//@{
|
|
345
|
+
inline bool isPWCNode(NodeID nodeId)
|
|
346
|
+
{
|
|
347
|
+
return getConstraintNode(nodeId)->isPWCNode();
|
|
348
|
+
}
|
|
349
|
+
inline void setPWCNode(NodeID nodeId)
|
|
350
|
+
{
|
|
351
|
+
getConstraintNode(nodeId)->setPWCNode();
|
|
352
|
+
}
|
|
353
|
+
//@}
|
|
354
|
+
|
|
355
|
+
/// Add/get nodes to be collapsed
|
|
356
|
+
//@{
|
|
357
|
+
inline bool hasNodesToBeCollapsed() const
|
|
358
|
+
{
|
|
359
|
+
return (!nodesToBeCollapsed.empty());
|
|
360
|
+
}
|
|
361
|
+
inline void addNodeToBeCollapsed(NodeID id)
|
|
362
|
+
{
|
|
363
|
+
nodesToBeCollapsed.push(id);
|
|
364
|
+
}
|
|
365
|
+
inline NodeID getNextCollapseNode()
|
|
366
|
+
{
|
|
367
|
+
return nodesToBeCollapsed.pop();
|
|
368
|
+
}
|
|
369
|
+
//@}
|
|
370
|
+
|
|
371
|
+
/// Dump graph into dot file
|
|
372
|
+
void dump(std::string name);
|
|
373
|
+
/// Print CG into terminal
|
|
374
|
+
void print();
|
|
375
|
+
|
|
376
|
+
/// View graph from the debugger.
|
|
377
|
+
void view();
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
/* !
|
|
382
|
+
* GenericGraphTraits specializations for the generic graph algorithms.
|
|
383
|
+
* Provide graph traits for traversing from a constraint node using standard graph traversals.
|
|
384
|
+
*/
|
|
385
|
+
template<> struct GenericGraphTraits<SVF::ConstraintNode*> : public GenericGraphTraits<SVF::GenericNode<SVF::ConstraintNode,SVF::ConstraintEdge>* >
|
|
386
|
+
{
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
/// Inverse GenericGraphTraits specializations for Value flow node, it is used for inverse traversal.
|
|
390
|
+
template<>
|
|
391
|
+
struct GenericGraphTraits<Inverse<SVF::ConstraintNode *> > : public GenericGraphTraits<Inverse<SVF::GenericNode<SVF::ConstraintNode,SVF::ConstraintEdge>* > >
|
|
392
|
+
{
|
|
393
|
+
};
|
|
394
|
+
|
|
395
|
+
template<> struct GenericGraphTraits<SVF::ConstraintGraph*> : public GenericGraphTraits<SVF::GenericGraph<SVF::ConstraintNode,SVF::ConstraintEdge>* >
|
|
396
|
+
{
|
|
397
|
+
typedef SVF::ConstraintNode *NodeRef;
|
|
398
|
+
};
|
|
399
|
+
|
|
400
|
+
} // End namespace SVF
|
|
401
|
+
|
|
402
|
+
#endif /* CONSG_H_ */
|