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,482 @@
|
|
|
1
|
+
//===- CDG.h -- Control Dependence Graph --------------------------------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-2017> <Yulei Sui>
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
// This program is free software: you can redistribute it and/or modify
|
|
9
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
10
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
// (at your option) any later version.
|
|
12
|
+
|
|
13
|
+
// This program is distributed in the hope that it will be useful,
|
|
14
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
// GNU Affero General Public License for more details.
|
|
17
|
+
|
|
18
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
19
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
//
|
|
21
|
+
//===----------------------------------------------------------------------===//
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* CDG.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Sep 27, 2023
|
|
27
|
+
* Author: Xiao Cheng
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef SVF_CONTROLDG_H
|
|
31
|
+
#define SVF_CONTROLDG_H
|
|
32
|
+
|
|
33
|
+
#include "SVFIR/SVFIR.h"
|
|
34
|
+
|
|
35
|
+
namespace SVF
|
|
36
|
+
{
|
|
37
|
+
|
|
38
|
+
class CDGNode;
|
|
39
|
+
|
|
40
|
+
typedef GenericEdge<CDGNode> GenericCDGEdgeTy;
|
|
41
|
+
|
|
42
|
+
class CDGEdge : public GenericCDGEdgeTy
|
|
43
|
+
{
|
|
44
|
+
public:
|
|
45
|
+
typedef std::pair<const SVFVar *, s32_t> BranchCondition;
|
|
46
|
+
|
|
47
|
+
/// Constructor
|
|
48
|
+
CDGEdge(CDGNode *s, CDGNode *d) : GenericCDGEdgeTy(s, d, 0)
|
|
49
|
+
{
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/// Destructor
|
|
53
|
+
~CDGEdge()
|
|
54
|
+
{
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
typedef GenericNode<CDGNode, CDGEdge>::GEdgeSetTy CDGEdgeSetTy;
|
|
58
|
+
typedef CDGEdgeSetTy SVFGEdgeSetTy;
|
|
59
|
+
|
|
60
|
+
virtual const std::string toString() const
|
|
61
|
+
{
|
|
62
|
+
std::string str;
|
|
63
|
+
std::stringstream rawstr(str);
|
|
64
|
+
rawstr << "CDGEdge " << " [";
|
|
65
|
+
rawstr << getDstID() << "<--" << getSrcID() << "\t";
|
|
66
|
+
return rawstr.str();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/// get/set branch condition
|
|
70
|
+
//{@
|
|
71
|
+
const Set<BranchCondition> &getBranchConditions() const
|
|
72
|
+
{
|
|
73
|
+
return brConditions;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
void insertBranchCondition(const SVFVar *pNode, s32_t branchID)
|
|
77
|
+
{
|
|
78
|
+
brConditions.insert(std::make_pair(pNode, branchID));
|
|
79
|
+
}
|
|
80
|
+
//@}
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
private:
|
|
84
|
+
Set<BranchCondition> brConditions;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
typedef GenericNode<CDGNode, CDGEdge> GenericCDGNodeTy;
|
|
88
|
+
|
|
89
|
+
class CDGNode : public GenericCDGNodeTy
|
|
90
|
+
{
|
|
91
|
+
|
|
92
|
+
public:
|
|
93
|
+
|
|
94
|
+
typedef CDGEdge::CDGEdgeSetTy::iterator iterator;
|
|
95
|
+
typedef CDGEdge::CDGEdgeSetTy::const_iterator const_iterator;
|
|
96
|
+
|
|
97
|
+
public:
|
|
98
|
+
/// Constructor
|
|
99
|
+
CDGNode(const ICFGNode *icfgNode) : GenericCDGNodeTy(icfgNode->getId(), CDNodeKd), _icfgNode(icfgNode)
|
|
100
|
+
{
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
virtual const std::string toString() const
|
|
105
|
+
{
|
|
106
|
+
std::string str;
|
|
107
|
+
std::stringstream rawstr(str);
|
|
108
|
+
rawstr << getId();
|
|
109
|
+
return rawstr.str();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const ICFGNode *getICFGNode() const
|
|
113
|
+
{
|
|
114
|
+
return _icfgNode;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
118
|
+
//@{
|
|
119
|
+
static inline bool classof(const CDGNode *)
|
|
120
|
+
{
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
static inline bool classof(const GenericICFGNodeTy* node)
|
|
125
|
+
{
|
|
126
|
+
return node->getNodeKind() == CDNodeKd;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
static inline bool classof(const SVFValue* node)
|
|
130
|
+
{
|
|
131
|
+
return node->getNodeKind() == CDNodeKd;
|
|
132
|
+
}
|
|
133
|
+
//@}
|
|
134
|
+
|
|
135
|
+
private:
|
|
136
|
+
const ICFGNode *_icfgNode;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
typedef std::vector<std::pair<NodeID, NodeID>> NodePairVector;
|
|
140
|
+
typedef GenericGraph<CDGNode, CDGEdge> GenericCDGTy;
|
|
141
|
+
|
|
142
|
+
class CDG : public GenericCDGTy
|
|
143
|
+
{
|
|
144
|
+
|
|
145
|
+
public:
|
|
146
|
+
|
|
147
|
+
typedef Map<NodeID, CDGNode *> CDGNodeIDToNodeMapTy;
|
|
148
|
+
typedef CDGEdge::CDGEdgeSetTy CDGEdgeSetTy;
|
|
149
|
+
typedef CDGNodeIDToNodeMapTy::iterator iterator;
|
|
150
|
+
typedef CDGNodeIDToNodeMapTy::const_iterator const_iterator;
|
|
151
|
+
typedef std::vector<const ICFGNode *> ICFGNodeVector;
|
|
152
|
+
typedef std::vector<std::pair<const ICFGNode *, const ICFGNode *>> ICFGNodePairVector;
|
|
153
|
+
|
|
154
|
+
private:
|
|
155
|
+
static CDG *controlDg; ///< Singleton pattern here
|
|
156
|
+
/// Constructor
|
|
157
|
+
CDG()
|
|
158
|
+
{
|
|
159
|
+
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
public:
|
|
164
|
+
/// Singleton design here to make sure we only have one instance during any analysis
|
|
165
|
+
//@{
|
|
166
|
+
static inline CDG * getCDG()
|
|
167
|
+
{
|
|
168
|
+
if (controlDg == nullptr)
|
|
169
|
+
{
|
|
170
|
+
controlDg = new CDG();
|
|
171
|
+
}
|
|
172
|
+
return controlDg;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
static void releaseCDG()
|
|
176
|
+
{
|
|
177
|
+
if (controlDg)
|
|
178
|
+
delete controlDg;
|
|
179
|
+
controlDg = nullptr;
|
|
180
|
+
}
|
|
181
|
+
//@}
|
|
182
|
+
|
|
183
|
+
/// Destructor
|
|
184
|
+
virtual ~CDG() {}
|
|
185
|
+
|
|
186
|
+
/// Get a CDG node
|
|
187
|
+
inline CDGNode *getCDGNode(NodeID id) const
|
|
188
|
+
{
|
|
189
|
+
if (!hasCDGNode(id))
|
|
190
|
+
return nullptr;
|
|
191
|
+
return getGNode(id);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/// Whether has the CDGNode
|
|
195
|
+
inline bool hasCDGNode(NodeID id) const
|
|
196
|
+
{
|
|
197
|
+
return hasGNode(id);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/// Whether we has a CDG edge
|
|
201
|
+
bool hasCDGEdge(CDGNode *src, CDGNode *dst)
|
|
202
|
+
{
|
|
203
|
+
CDGEdge edge(src, dst);
|
|
204
|
+
CDGEdge *outEdge = src->hasOutgoingEdge(&edge);
|
|
205
|
+
CDGEdge *inEdge = dst->hasIncomingEdge(&edge);
|
|
206
|
+
if (outEdge && inEdge)
|
|
207
|
+
{
|
|
208
|
+
assert(outEdge == inEdge && "edges not match");
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
else
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/// Get a control dependence edge according to src and dst
|
|
216
|
+
CDGEdge *getCDGEdge(const CDGNode *src, const CDGNode *dst)
|
|
217
|
+
{
|
|
218
|
+
CDGEdge *edge = nullptr;
|
|
219
|
+
size_t counter = 0;
|
|
220
|
+
for (CDGEdge::CDGEdgeSetTy::iterator iter = src->OutEdgeBegin();
|
|
221
|
+
iter != src->OutEdgeEnd(); ++iter)
|
|
222
|
+
{
|
|
223
|
+
if ((*iter)->getDstID() == dst->getId())
|
|
224
|
+
{
|
|
225
|
+
counter++;
|
|
226
|
+
edge = (*iter);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
assert(counter <= 1 && "there's more than one edge between two CDG nodes");
|
|
230
|
+
return edge;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/// View graph from the debugger
|
|
234
|
+
void view()
|
|
235
|
+
{
|
|
236
|
+
SVF::ViewGraph(this, "Control Dependence Graph");
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/// Dump graph into dot file
|
|
240
|
+
void dump(const std::string &filename)
|
|
241
|
+
{
|
|
242
|
+
GraphPrinter::WriteGraphToFile(SVFUtil::outs(), filename, this);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
public:
|
|
246
|
+
/// Remove a control dependence edge
|
|
247
|
+
inline void removeCDGEdge(CDGEdge *edge)
|
|
248
|
+
{
|
|
249
|
+
edge->getDstNode()->removeIncomingEdge(edge);
|
|
250
|
+
edge->getSrcNode()->removeOutgoingEdge(edge);
|
|
251
|
+
delete edge;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/// Remove a CDGNode
|
|
255
|
+
inline void removeCDGNode(CDGNode *node)
|
|
256
|
+
{
|
|
257
|
+
std::set<CDGEdge *> temp;
|
|
258
|
+
for (CDGEdge *e: node->getInEdges())
|
|
259
|
+
temp.insert(e);
|
|
260
|
+
for (CDGEdge *e: node->getOutEdges())
|
|
261
|
+
temp.insert(e);
|
|
262
|
+
for (CDGEdge *e: temp)
|
|
263
|
+
{
|
|
264
|
+
removeCDGEdge(e);
|
|
265
|
+
}
|
|
266
|
+
removeGNode(node);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/// Remove node from nodeID
|
|
270
|
+
inline bool removeCDGNode(NodeID id)
|
|
271
|
+
{
|
|
272
|
+
if (hasCDGNode(id))
|
|
273
|
+
{
|
|
274
|
+
removeCDGNode(getCDGNode(id));
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/// Add CDG edge
|
|
281
|
+
inline bool addCDGEdge(CDGEdge *edge)
|
|
282
|
+
{
|
|
283
|
+
bool added1 = edge->getDstNode()->addIncomingEdge(edge);
|
|
284
|
+
bool added2 = edge->getSrcNode()->addOutgoingEdge(edge);
|
|
285
|
+
assert(added1 && added2 && "edge not added??");
|
|
286
|
+
return added1 && added2;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/// Add a CDG node
|
|
290
|
+
virtual inline void addCDGNode(CDGNode *node)
|
|
291
|
+
{
|
|
292
|
+
addGNode(node->getId(), node);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/// Add CDG nodes from nodeid vector
|
|
296
|
+
inline void addCDGNodesFromVector(ICFGNodeVector nodes)
|
|
297
|
+
{
|
|
298
|
+
for (const ICFGNode *icfgNode: nodes)
|
|
299
|
+
{
|
|
300
|
+
if (!IDToNodeMap.count(icfgNode->getId()))
|
|
301
|
+
{
|
|
302
|
+
addGNode(icfgNode->getId(), new CDGNode(icfgNode));
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/// Add CDG edges from nodeid pair
|
|
308
|
+
void addCDGEdgeFromSrcDst(const ICFGNode *src, const ICFGNode *dst, const SVFVar *pNode, s32_t branchID);
|
|
309
|
+
|
|
310
|
+
};
|
|
311
|
+
} // end namespace SVF
|
|
312
|
+
|
|
313
|
+
namespace SVF
|
|
314
|
+
{
|
|
315
|
+
/* !
|
|
316
|
+
* GenericGraphTraits specializations for generic graph algorithms.
|
|
317
|
+
* Provide graph traits for traversing from a constraint node using standard graph ICFGTraversals.
|
|
318
|
+
*/
|
|
319
|
+
template<>
|
|
320
|
+
struct GenericGraphTraits<SVF::CDGNode *>
|
|
321
|
+
: public GenericGraphTraits<SVF::GenericNode<SVF::CDGNode, SVF::CDGEdge> *>
|
|
322
|
+
{
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
/// Inverse GenericGraphTraits specializations for call graph node, it is used for inverse ICFGTraversal.
|
|
326
|
+
template<>
|
|
327
|
+
struct GenericGraphTraits<Inverse<SVF::CDGNode *> > : public GenericGraphTraits<
|
|
328
|
+
Inverse<SVF::GenericNode<SVF::CDGNode, SVF::CDGEdge> *> >
|
|
329
|
+
{
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
template<>
|
|
333
|
+
struct GenericGraphTraits<SVF::CDG *>
|
|
334
|
+
: public GenericGraphTraits<SVF::GenericGraph<SVF::CDGNode, SVF::CDGEdge> *>
|
|
335
|
+
{
|
|
336
|
+
typedef SVF::CDGNode *NodeRef;
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
template<>
|
|
340
|
+
struct DOTGraphTraits<SVF::CDG *> : public DOTGraphTraits<SVF::PAG *>
|
|
341
|
+
{
|
|
342
|
+
|
|
343
|
+
typedef SVF::CDGNode NodeType;
|
|
344
|
+
|
|
345
|
+
DOTGraphTraits(bool isSimple = false) :
|
|
346
|
+
DOTGraphTraits<SVF::PAG *>(isSimple)
|
|
347
|
+
{
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/// Return name of the graph
|
|
351
|
+
static std::string getGraphName(SVF::CDG *)
|
|
352
|
+
{
|
|
353
|
+
return "Control Dependence Graph";
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
std::string getNodeLabel(NodeType *node, SVF::CDG *graph)
|
|
357
|
+
{
|
|
358
|
+
return getSimpleNodeLabel(node, graph);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/// Return the label of an ICFG node
|
|
362
|
+
static std::string getSimpleNodeLabel(NodeType *node, SVF::CDG *)
|
|
363
|
+
{
|
|
364
|
+
std::string str;
|
|
365
|
+
std::stringstream rawstr(str);
|
|
366
|
+
rawstr << "NodeID: " << node->getId() << "\n";
|
|
367
|
+
const SVF::ICFGNode *icfgNode = node->getICFGNode();
|
|
368
|
+
if (const SVF::IntraICFGNode *bNode = SVF::SVFUtil::dyn_cast<SVF::IntraICFGNode>(icfgNode))
|
|
369
|
+
{
|
|
370
|
+
rawstr << "IntraBlockNode ID: " << bNode->getId() << " \t";
|
|
371
|
+
SVF::PAG::SVFStmtList &edges = SVF::PAG::getPAG()->getPTASVFStmtList(bNode);
|
|
372
|
+
if (edges.empty())
|
|
373
|
+
{
|
|
374
|
+
rawstr << (bNode)->toString() << " \t";
|
|
375
|
+
}
|
|
376
|
+
else
|
|
377
|
+
{
|
|
378
|
+
for (SVF::PAG::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)
|
|
379
|
+
{
|
|
380
|
+
const SVF::PAGEdge *edge = *it;
|
|
381
|
+
rawstr << edge->toString();
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
rawstr << " {fun: " << bNode->getFun()->getName() << "}";
|
|
385
|
+
}
|
|
386
|
+
else if (const SVF::FunEntryICFGNode *entry = SVF::SVFUtil::dyn_cast<SVF::FunEntryICFGNode>(icfgNode))
|
|
387
|
+
{
|
|
388
|
+
rawstr << entry->toString();
|
|
389
|
+
}
|
|
390
|
+
else if (const SVF::FunExitICFGNode *exit = SVF::SVFUtil::dyn_cast<SVF::FunExitICFGNode>(icfgNode))
|
|
391
|
+
{
|
|
392
|
+
rawstr << exit->toString();
|
|
393
|
+
}
|
|
394
|
+
else if (const SVF::CallICFGNode *call = SVF::SVFUtil::dyn_cast<SVF::CallICFGNode>(icfgNode))
|
|
395
|
+
{
|
|
396
|
+
rawstr << call->toString();
|
|
397
|
+
}
|
|
398
|
+
else if (const SVF::RetICFGNode *ret = SVF::SVFUtil::dyn_cast<SVF::RetICFGNode>(icfgNode))
|
|
399
|
+
{
|
|
400
|
+
rawstr << ret->toString();
|
|
401
|
+
}
|
|
402
|
+
else if (const SVF::GlobalICFGNode *glob = SVF::SVFUtil::dyn_cast<SVF::GlobalICFGNode>(icfgNode))
|
|
403
|
+
{
|
|
404
|
+
SVF::PAG::SVFStmtList &edges = SVF::PAG::getPAG()->getPTASVFStmtList(glob);
|
|
405
|
+
for (SVF::PAG::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)
|
|
406
|
+
{
|
|
407
|
+
const SVF::PAGEdge *edge = *it;
|
|
408
|
+
rawstr << edge->toString();
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
else
|
|
412
|
+
assert(false && "what else kinds of nodes do we have??");
|
|
413
|
+
|
|
414
|
+
return rawstr.str();
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
static std::string getNodeAttributes(NodeType *node, SVF::CDG *)
|
|
418
|
+
{
|
|
419
|
+
std::string str;
|
|
420
|
+
std::stringstream rawstr(str);
|
|
421
|
+
const SVF::ICFGNode *icfgNode = node->getICFGNode();
|
|
422
|
+
|
|
423
|
+
if (SVF::SVFUtil::isa<SVF::IntraICFGNode>(icfgNode))
|
|
424
|
+
{
|
|
425
|
+
rawstr << "color=black";
|
|
426
|
+
}
|
|
427
|
+
else if (SVF::SVFUtil::isa<SVF::FunEntryICFGNode>(icfgNode))
|
|
428
|
+
{
|
|
429
|
+
rawstr << "color=yellow";
|
|
430
|
+
}
|
|
431
|
+
else if (SVF::SVFUtil::isa<SVF::FunExitICFGNode>(icfgNode))
|
|
432
|
+
{
|
|
433
|
+
rawstr << "color=green";
|
|
434
|
+
}
|
|
435
|
+
else if (SVF::SVFUtil::isa<SVF::CallICFGNode>(icfgNode))
|
|
436
|
+
{
|
|
437
|
+
rawstr << "color=red";
|
|
438
|
+
}
|
|
439
|
+
else if (SVF::SVFUtil::isa<SVF::RetICFGNode>(icfgNode))
|
|
440
|
+
{
|
|
441
|
+
rawstr << "color=blue";
|
|
442
|
+
}
|
|
443
|
+
else if (SVF::SVFUtil::isa<SVF::GlobalICFGNode>(icfgNode))
|
|
444
|
+
{
|
|
445
|
+
rawstr << "color=purple";
|
|
446
|
+
}
|
|
447
|
+
else
|
|
448
|
+
assert(false && "no such kind of node!!");
|
|
449
|
+
|
|
450
|
+
rawstr << "";
|
|
451
|
+
|
|
452
|
+
return rawstr.str();
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
template<class EdgeIter>
|
|
456
|
+
static std::string getEdgeAttributes(NodeType *, EdgeIter EI, SVF::CDG *)
|
|
457
|
+
{
|
|
458
|
+
assert(*(EI.getCurrent()) && "No edge found!!");
|
|
459
|
+
return "style=solid";
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
template<class EdgeIter>
|
|
463
|
+
static std::string getEdgeSourceLabel(NodeType *, EdgeIter EI)
|
|
464
|
+
{
|
|
465
|
+
SVF::CDGEdge *edge = *(EI.getCurrent());
|
|
466
|
+
assert(edge && "No edge found!!");
|
|
467
|
+
|
|
468
|
+
std::string str;
|
|
469
|
+
std::stringstream rawstr(str);
|
|
470
|
+
for (const auto &cond: edge->getBranchConditions())
|
|
471
|
+
{
|
|
472
|
+
rawstr << std::to_string(cond.second) << "|";
|
|
473
|
+
}
|
|
474
|
+
std::string lb = rawstr.str();
|
|
475
|
+
lb.pop_back();
|
|
476
|
+
|
|
477
|
+
return lb;
|
|
478
|
+
}
|
|
479
|
+
};
|
|
480
|
+
|
|
481
|
+
} // End namespace SVF
|
|
482
|
+
#endif //SVF_CONTROLDG_H
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
//===----- CFLGraph.h -- Graph for context-free language reachability analysis --//
|
|
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
|
+
* CFLGraph.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: March 5, 2022
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef CFLG_H_
|
|
31
|
+
#define CFLG_H_
|
|
32
|
+
|
|
33
|
+
#include <fstream>
|
|
34
|
+
#include <iostream>
|
|
35
|
+
#include <string>
|
|
36
|
+
#include "CFL/CFGrammar.h"
|
|
37
|
+
#include "Graphs/GenericGraph.h"
|
|
38
|
+
#include "Graphs/ConsG.h"
|
|
39
|
+
|
|
40
|
+
namespace SVF
|
|
41
|
+
{
|
|
42
|
+
class CFLNode;
|
|
43
|
+
|
|
44
|
+
typedef GenericEdge<CFLNode> GenericCFLEdgeTy;
|
|
45
|
+
|
|
46
|
+
class CFLEdge: public GenericCFLEdgeTy
|
|
47
|
+
{
|
|
48
|
+
public:
|
|
49
|
+
typedef GenericNode<CFLNode, CFLEdge>::GEdgeSetTy CFLEdgeSetTy;
|
|
50
|
+
|
|
51
|
+
CFLEdge(CFLNode *s, CFLNode *d, GEdgeFlag k = 0):
|
|
52
|
+
GenericCFLEdgeTy(s,d,k)
|
|
53
|
+
{
|
|
54
|
+
}
|
|
55
|
+
~CFLEdge() override = default;
|
|
56
|
+
|
|
57
|
+
inline GEdgeKind getEdgeKind() const
|
|
58
|
+
{
|
|
59
|
+
return this->getEdgeKindWithoutMask();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
inline GEdgeKind getEdgeKindWithMask() const
|
|
63
|
+
{
|
|
64
|
+
return (EdgeKindMask & this->getEdgeKindWithoutMask());
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
inline GEdgeKind getEdgeAttri() const
|
|
68
|
+
{
|
|
69
|
+
return (getEdgeKind() >> this->EdgeKindMaskBits);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
typedef GenericNode<CFLNode,CFLEdge> GenericCFLNodeTy;
|
|
75
|
+
class CFLNode: public GenericCFLNodeTy
|
|
76
|
+
{
|
|
77
|
+
public:
|
|
78
|
+
CFLNode (NodeID i = 0, GNodeK k = CFLNodeKd):
|
|
79
|
+
GenericCFLNodeTy(i, k)
|
|
80
|
+
{
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
~CFLNode() override = default;
|
|
84
|
+
|
|
85
|
+
/// Different Kind(label) associated edges set
|
|
86
|
+
typedef std::map <GrammarBase::Symbol, CFLEdge::CFLEdgeSetTy> CFLEdgeDataTy;
|
|
87
|
+
|
|
88
|
+
private:
|
|
89
|
+
CFLEdgeDataTy inCFLEdges;
|
|
90
|
+
CFLEdgeDataTy outCFLEdges;
|
|
91
|
+
|
|
92
|
+
public:
|
|
93
|
+
inline const CFLEdge::CFLEdgeSetTy& getInEdgeWithTy(GrammarBase::Symbol s)
|
|
94
|
+
{
|
|
95
|
+
return inCFLEdges[s];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
inline const CFLEdge::CFLEdgeSetTy& getOutEdgeWithTy(GrammarBase::Symbol s)
|
|
99
|
+
{
|
|
100
|
+
return outCFLEdges[s];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
inline bool addInEdgeWithKind(CFLEdge* inEdge, GrammarBase::Symbol s)
|
|
104
|
+
{
|
|
105
|
+
assert(inEdge->getDstID() == this->getId());
|
|
106
|
+
bool added1 = GenericNode::addIncomingEdge(inEdge);
|
|
107
|
+
bool added2 = inCFLEdges[s].insert(inEdge).second;
|
|
108
|
+
|
|
109
|
+
return added1 && added2;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
inline bool addIngoingEdge(CFLEdge* inEdge)
|
|
113
|
+
{
|
|
114
|
+
return addInEdgeWithKind(inEdge, inEdge->getEdgeKind());
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
inline bool addOutEdgeWithKind(CFLEdge* outEdge, GrammarBase::Symbol s)
|
|
118
|
+
{
|
|
119
|
+
assert(outEdge->getSrcID() == this->getId());
|
|
120
|
+
bool added1 = GenericNode::addOutgoingEdge(outEdge);
|
|
121
|
+
bool added2 = outCFLEdges[s].insert(outEdge).second;
|
|
122
|
+
|
|
123
|
+
return added1 && added2;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
inline bool addOutgoingEdge(CFLEdge* OutEdge)
|
|
127
|
+
{
|
|
128
|
+
return addOutEdgeWithKind(OutEdge, OutEdge->getEdgeKind());
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
inline bool removeCFLInEdge(CFLEdge* inEdge)
|
|
132
|
+
{
|
|
133
|
+
u32_t num1 = removeIncomingEdge(inEdge);
|
|
134
|
+
|
|
135
|
+
GrammarBase::Symbol s = inEdge->getEdgeKind();
|
|
136
|
+
u32_t num2 = inCFLEdges[s].erase(inEdge);
|
|
137
|
+
|
|
138
|
+
return num1 && num2;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
inline bool removeCFLOutEdge(CFLEdge* outEdge)
|
|
142
|
+
{
|
|
143
|
+
u32_t num1 = removeOutgoingEdge(outEdge);
|
|
144
|
+
|
|
145
|
+
GrammarBase::Symbol s = outEdge->getEdgeKind();
|
|
146
|
+
u32_t num2 = outCFLEdges[s].erase(outEdge);
|
|
147
|
+
|
|
148
|
+
return num1 && num2;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
152
|
+
//@{
|
|
153
|
+
static inline bool classof(const CFLNode *)
|
|
154
|
+
{
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
static inline bool classof(const GenericICFGNodeTy* node)
|
|
159
|
+
{
|
|
160
|
+
return node->getNodeKind() == CFLNodeKd;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
static inline bool classof(const SVFValue* node)
|
|
164
|
+
{
|
|
165
|
+
return node->getNodeKind() == CFLNodeKd;
|
|
166
|
+
}
|
|
167
|
+
//@}
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
/// Edge-labeled graph for CFL Reachability analysis
|
|
171
|
+
typedef GenericGraph<CFLNode,CFLEdge> GenericCFLGraphTy;
|
|
172
|
+
class CFLGraph: public GenericCFLGraphTy
|
|
173
|
+
{
|
|
174
|
+
public:
|
|
175
|
+
typedef CFGrammar::Symbol Symbol;
|
|
176
|
+
typedef CFGrammar::Kind Kind;
|
|
177
|
+
typedef GenericNode<CFLNode,CFLEdge>::GEdgeSetTy CFLEdgeSet;
|
|
178
|
+
Kind startKind;
|
|
179
|
+
|
|
180
|
+
CFLGraph(Kind kind)
|
|
181
|
+
{
|
|
182
|
+
startKind = kind;
|
|
183
|
+
}
|
|
184
|
+
~CFLGraph() override = default;
|
|
185
|
+
|
|
186
|
+
Kind getStartKind() const;
|
|
187
|
+
|
|
188
|
+
virtual void addCFLNode(NodeID id, CFLNode* node);
|
|
189
|
+
|
|
190
|
+
virtual const CFLEdge* addCFLEdge(CFLNode* src, CFLNode* dst, CFLEdge::GEdgeFlag label);
|
|
191
|
+
|
|
192
|
+
virtual const CFLEdge* hasEdge(CFLNode* src, CFLNode* dst, CFLEdge::GEdgeFlag label);
|
|
193
|
+
|
|
194
|
+
void dump(const std::string& filename);
|
|
195
|
+
|
|
196
|
+
void view();
|
|
197
|
+
|
|
198
|
+
inline const CFLEdgeSet& getCFLEdges() const
|
|
199
|
+
{
|
|
200
|
+
return cflEdgeSet;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
private:
|
|
204
|
+
CFLEdgeSet cflEdgeSet;
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
namespace SVF
|
|
210
|
+
{
|
|
211
|
+
/* !
|
|
212
|
+
* GenericGraphTraits specializations for generic graph algorithms.
|
|
213
|
+
* Provide graph traits for traversing from a constraint node using standard graph traversals.
|
|
214
|
+
*/
|
|
215
|
+
template<> struct GenericGraphTraits<SVF::CFLNode*> : public GenericGraphTraits<SVF::GenericNode<SVF::CFLNode,SVF::CFLEdge>* >
|
|
216
|
+
{
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
/// Inverse GenericGraphTraits specializations for call graph node, it is used for inverse traversal.
|
|
220
|
+
template<>
|
|
221
|
+
struct GenericGraphTraits<Inverse<SVF::CFLNode *> > : public GenericGraphTraits<Inverse<SVF::GenericNode<SVF::CFLNode,SVF::CFLEdge>* > >
|
|
222
|
+
{
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
template<> struct GenericGraphTraits<SVF::CFLGraph*> : public GenericGraphTraits<SVF::GenericGraph<SVF::CFLNode,SVF::CFLEdge>* >
|
|
226
|
+
{
|
|
227
|
+
typedef SVF::CFLNode *NodeRef;
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
} // End namespace llvm
|
|
231
|
+
|
|
232
|
+
#endif /* CFLG_H_ */
|