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,178 @@
|
|
|
1
|
+
//===- FlowDDA.h -- Flow-sensitive demand-driven 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
|
+
* FlowDDA.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Jun 30, 2014
|
|
27
|
+
* Author: Yulei Sui, Sen Ye
|
|
28
|
+
*
|
|
29
|
+
* The implementation is based on
|
|
30
|
+
* (1) Yulei Sui and Jingling Xue. "On-Demand Strong Update Analysis via Value-Flow Refinement".
|
|
31
|
+
* ACM SIGSOFT International Symposium on the Foundation of Software Engineering (FSE'16)
|
|
32
|
+
*
|
|
33
|
+
* (2) Yulei Sui and Jingling Xue. "Value-Flow-Based Demand-Driven Pointer Analysis for C and C++".
|
|
34
|
+
* IEEE Transactions on Software Engineering (TSE'18)
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
#ifndef FlowDDA_H_
|
|
38
|
+
#define FlowDDA_H_
|
|
39
|
+
|
|
40
|
+
#include "MemoryModel/PointerAnalysisImpl.h"
|
|
41
|
+
#include "Util/DPItem.h"
|
|
42
|
+
#include "DDA/DDAVFSolver.h"
|
|
43
|
+
|
|
44
|
+
namespace SVF
|
|
45
|
+
{
|
|
46
|
+
|
|
47
|
+
class DDAClient;
|
|
48
|
+
typedef StmtDPItem<SVFGNode> LocDPItem;
|
|
49
|
+
|
|
50
|
+
/*!
|
|
51
|
+
* Flow sensitive demand-driven analysis on value-flow graph
|
|
52
|
+
*/
|
|
53
|
+
class FlowDDA : public BVDataPTAImpl, public DDAVFSolver<NodeID,PointsTo,LocDPItem>
|
|
54
|
+
{
|
|
55
|
+
|
|
56
|
+
public:
|
|
57
|
+
typedef BVDataPTAImpl::CallSiteSet CallSiteSet;
|
|
58
|
+
typedef BVDataPTAImpl::CallEdgeMap CallEdgeMap;
|
|
59
|
+
typedef BVDataPTAImpl::FunctionSet FunctionSet;
|
|
60
|
+
/// Constructor
|
|
61
|
+
FlowDDA(SVFIR* _pag, DDAClient* client): BVDataPTAImpl(_pag, PointerAnalysis::FlowS_DDA),
|
|
62
|
+
DDAVFSolver<NodeID,PointsTo,LocDPItem>(),
|
|
63
|
+
_client(client)
|
|
64
|
+
{
|
|
65
|
+
}
|
|
66
|
+
/// Destructor
|
|
67
|
+
inline virtual ~FlowDDA()
|
|
68
|
+
{
|
|
69
|
+
}
|
|
70
|
+
/// dummy analyze method
|
|
71
|
+
virtual void analyze() override {}
|
|
72
|
+
|
|
73
|
+
/// Compute points-to set for all top variable
|
|
74
|
+
void computeDDAPts(NodeID id) override;
|
|
75
|
+
|
|
76
|
+
/// Handle out-of-budget dpm
|
|
77
|
+
void handleOutOfBudgetDpm(const LocDPItem& dpm);
|
|
78
|
+
|
|
79
|
+
/// Handle condition for flow analysis (backward analysis)
|
|
80
|
+
virtual bool handleBKCondition(LocDPItem& dpm, const SVFGEdge* edge) override;
|
|
81
|
+
|
|
82
|
+
/// refine indirect call edge
|
|
83
|
+
bool testIndCallReachability(LocDPItem& dpm, const FunObjVar* callee, CallSiteID csId);
|
|
84
|
+
|
|
85
|
+
/// Initialization of the analysis
|
|
86
|
+
inline virtual void initialize() override
|
|
87
|
+
{
|
|
88
|
+
BVDataPTAImpl::initialize();
|
|
89
|
+
buildSVFG(pag);
|
|
90
|
+
setCallGraph(getCallGraph());
|
|
91
|
+
setCallGraphSCC(getCallGraphSCC());
|
|
92
|
+
stat = setDDAStat(new DDAStat(this));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/// Finalize analysis
|
|
96
|
+
inline virtual void finalize() override
|
|
97
|
+
{
|
|
98
|
+
BVDataPTAImpl::finalize();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/// we exclude concrete heap here following the conditions:
|
|
102
|
+
/// (1) local allocated heap and
|
|
103
|
+
/// (2) not escaped to the scope outside the current function
|
|
104
|
+
/// (3) not inside loop
|
|
105
|
+
/// (4) not involved in recursion
|
|
106
|
+
virtual bool isHeapCondMemObj(const NodeID& var, const StoreSVFGNode* store) override;
|
|
107
|
+
|
|
108
|
+
/// Override parent method
|
|
109
|
+
virtual inline PointsTo getConservativeCPts(const LocDPItem& dpm) override
|
|
110
|
+
{
|
|
111
|
+
return getAndersenAnalysis()->getPts(dpm.getCurNodeID());
|
|
112
|
+
}
|
|
113
|
+
/// Override parent method
|
|
114
|
+
virtual inline NodeID getPtrNodeID(const NodeID& var) const override
|
|
115
|
+
{
|
|
116
|
+
return var;
|
|
117
|
+
}
|
|
118
|
+
/// Handle Address SVFGNode to add proper points-to
|
|
119
|
+
virtual inline void handleAddr(PointsTo& pts,const LocDPItem& dpm,const AddrSVFGNode* addr) override
|
|
120
|
+
{
|
|
121
|
+
NodeID srcID = addr->getPAGSrcNodeID();
|
|
122
|
+
/// whether this object is set field-insensitive during pre-analysis
|
|
123
|
+
if (isFieldInsensitive(srcID))
|
|
124
|
+
srcID = getFIObjVar(srcID);
|
|
125
|
+
|
|
126
|
+
addDDAPts(pts,srcID);
|
|
127
|
+
DBOUT(DDDA, SVFUtil::outs() << "\t add points-to target " << srcID << " to dpm ");
|
|
128
|
+
DBOUT(DDDA, dpm.dump());
|
|
129
|
+
}
|
|
130
|
+
/// processGep node
|
|
131
|
+
virtual PointsTo processGepPts(const GepSVFGNode* gep, const PointsTo& srcPts) override;
|
|
132
|
+
|
|
133
|
+
/// Update call graph.
|
|
134
|
+
//@{
|
|
135
|
+
virtual void updateCallGraphAndSVFG(const LocDPItem& dpm,const CallICFGNode* cs,SVFGEdgeSet& svfgEdges) override
|
|
136
|
+
{
|
|
137
|
+
CallEdgeMap newEdges;
|
|
138
|
+
resolveIndCalls(cs, getCachedPointsTo(dpm), newEdges);
|
|
139
|
+
for (CallEdgeMap::const_iterator iter = newEdges.begin(),eiter = newEdges.end(); iter != eiter; iter++)
|
|
140
|
+
{
|
|
141
|
+
const CallICFGNode* newcs = iter->first;
|
|
142
|
+
const FunctionSet & functions = iter->second;
|
|
143
|
+
for (FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)
|
|
144
|
+
{
|
|
145
|
+
const FunObjVar* func = *func_iter;
|
|
146
|
+
getSVFG()->connectCallerAndCallee(newcs, func, svfgEdges);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//@}
|
|
151
|
+
|
|
152
|
+
/// Override parent class functions to get/add cached points-to directly via PAGNode ID
|
|
153
|
+
//@{
|
|
154
|
+
virtual inline const PointsTo& getCachedTLPointsTo(const LocDPItem& dpm) override
|
|
155
|
+
{
|
|
156
|
+
return getPts(dpm.getCurNodeID());
|
|
157
|
+
}
|
|
158
|
+
//@}
|
|
159
|
+
|
|
160
|
+
/// Union pts
|
|
161
|
+
bool unionDDAPts(LocDPItem dpm, const PointsTo& targetPts) override
|
|
162
|
+
{
|
|
163
|
+
if (isTopLevelPtrStmt(dpm.getLoc())) return unionPts(dpm.getCurNodeID(), targetPts);
|
|
164
|
+
else return dpmToADCPtSetMap[dpm] |= targetPts;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
virtual const std::string PTAName() const override
|
|
168
|
+
{
|
|
169
|
+
return "FlowSensitive DDA";
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
private:
|
|
173
|
+
DDAClient* _client; ///< DDA client
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
} // End namespace SVF
|
|
177
|
+
|
|
178
|
+
#endif /* FlowDDA_H_ */
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
//
|
|
2
|
+
// C++ standalone version of fastcluster by Daniel Muellner
|
|
3
|
+
//
|
|
4
|
+
// Copyright: Daniel Muellner, 2011
|
|
5
|
+
// Christoph Dalitz, 2020
|
|
6
|
+
// License: BSD style license
|
|
7
|
+
// (see the file LICENSE for details)
|
|
8
|
+
//
|
|
9
|
+
|
|
10
|
+
#ifndef fastclustercpp_H
|
|
11
|
+
#define fastclustercpp_H
|
|
12
|
+
|
|
13
|
+
//
|
|
14
|
+
// Assigns cluster labels (0, ..., nclust-1) to the n points such
|
|
15
|
+
// that the cluster result is split into nclust clusters.
|
|
16
|
+
//
|
|
17
|
+
// Input arguments:
|
|
18
|
+
// n = number of observables
|
|
19
|
+
// merge = clustering result in R format
|
|
20
|
+
// nclust = number of clusters
|
|
21
|
+
// Output arguments:
|
|
22
|
+
// labels = allocated integer array of size n for result
|
|
23
|
+
//
|
|
24
|
+
void cutree_k(int n, const int* merge, int nclust, int* labels);
|
|
25
|
+
|
|
26
|
+
//
|
|
27
|
+
// Assigns cluster labels (0, ..., nclust-1) to the n points such
|
|
28
|
+
// that the hierarchical clustering is stopped at cluster distance cdist
|
|
29
|
+
//
|
|
30
|
+
// Input arguments:
|
|
31
|
+
// n = number of observables
|
|
32
|
+
// merge = clustering result in R format
|
|
33
|
+
// height = cluster distance at each merge step
|
|
34
|
+
// cdist = cutoff cluster distance
|
|
35
|
+
// Output arguments:
|
|
36
|
+
// labels = allocated integer array of size n for result
|
|
37
|
+
//
|
|
38
|
+
void cutree_cdist(int n, const int* merge, double* height, double cdist, int* labels);
|
|
39
|
+
|
|
40
|
+
//
|
|
41
|
+
// Hierarchical clustering with one of Daniel Muellner's fast algorithms
|
|
42
|
+
//
|
|
43
|
+
// Input arguments:
|
|
44
|
+
// n = number of observables
|
|
45
|
+
// distmat = condensed distance matrix, i.e. an n*(n-1)/2 array representing
|
|
46
|
+
// the upper triangle (without diagonal elements) of the distance
|
|
47
|
+
// matrix, e.g. for n=4:
|
|
48
|
+
// d00 d01 d02 d03
|
|
49
|
+
// d10 d11 d12 d13 -> d01 d02 d03 d12 d13 d23
|
|
50
|
+
// d20 d21 d22 d23
|
|
51
|
+
// d30 d31 d32 d33
|
|
52
|
+
// method = cluster metric (see enum hclust_fast_methods)
|
|
53
|
+
// Output arguments:
|
|
54
|
+
// merge = allocated (n-1)x2 matrix (2*(n-1) array) for storing result.
|
|
55
|
+
// Result follows R hclust convention:
|
|
56
|
+
// - observable indices start with one
|
|
57
|
+
// - merge[i][] contains the merged nodes in step i
|
|
58
|
+
// - merge[i][j] is negative when the node is an atom
|
|
59
|
+
// height = allocated (n-1) array with distances at each merge step
|
|
60
|
+
// Return code:
|
|
61
|
+
// 0 = ok
|
|
62
|
+
// 1 = invalid method
|
|
63
|
+
//
|
|
64
|
+
int hclust_fast(int n, double* distmat, int method, int* merge, double* height);
|
|
65
|
+
enum hclust_fast_methods
|
|
66
|
+
{
|
|
67
|
+
// single link with the minimum spanning tree algorithm (Rohlf, 1973)
|
|
68
|
+
HCLUST_METHOD_SINGLE = 0,
|
|
69
|
+
// complete link with the nearest-neighbor-chain algorithm (Murtagh, 1984)
|
|
70
|
+
HCLUST_METHOD_COMPLETE = 1,
|
|
71
|
+
// complete link with the nearest-neighbor-chain algorithm (Murtagh, 1984)
|
|
72
|
+
HCLUST_METHOD_AVERAGE = 2,
|
|
73
|
+
// median link with the generic algorithm (Müllner, 2011)
|
|
74
|
+
HCLUST_METHOD_MEDIAN = 3,
|
|
75
|
+
// To indicate to try all methods and pick the best.
|
|
76
|
+
HCLUST_METHOD_SVF_BEST = 4
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
#endif
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
//===- BasicBlockG.h -- BasicBlock node------------------------------------------------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-2025> <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
|
+
* ICFGNode.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: 23 Jan, 2025
|
|
27
|
+
* Author: Jiawei, Xiao
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef BASICBLOCKGRAPH_H_
|
|
31
|
+
#define BASICBLOCKGRAPH_H_
|
|
32
|
+
#include "GenericGraph.h"
|
|
33
|
+
#include <sstream>
|
|
34
|
+
#include <algorithm>
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
namespace SVF
|
|
38
|
+
{
|
|
39
|
+
class SVFBasicBlock;
|
|
40
|
+
class BasicBlockEdge;
|
|
41
|
+
class ICFGNode;
|
|
42
|
+
class FunObjVar;
|
|
43
|
+
|
|
44
|
+
typedef GenericEdge<SVFBasicBlock> GenericBasicBlockEdgeTy;
|
|
45
|
+
class BasicBlockEdge: public GenericBasicBlockEdgeTy
|
|
46
|
+
{
|
|
47
|
+
friend class SVFIRWriter;
|
|
48
|
+
friend class SVFIRReader;
|
|
49
|
+
|
|
50
|
+
public:
|
|
51
|
+
public:
|
|
52
|
+
/// Constructor
|
|
53
|
+
BasicBlockEdge(SVFBasicBlock* s, SVFBasicBlock* d) : GenericBasicBlockEdgeTy(s, d, 0)
|
|
54
|
+
{
|
|
55
|
+
}
|
|
56
|
+
/// Destructor
|
|
57
|
+
~BasicBlockEdge() {}
|
|
58
|
+
|
|
59
|
+
/// Overloading operator << for dumping ICFG node ID
|
|
60
|
+
//@{
|
|
61
|
+
friend OutStream& operator<<(OutStream& o, const BasicBlockEdge& edge)
|
|
62
|
+
{
|
|
63
|
+
o << edge.toString();
|
|
64
|
+
return o;
|
|
65
|
+
}
|
|
66
|
+
//@}
|
|
67
|
+
|
|
68
|
+
virtual const std::string toString() const;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
typedef GenericNode<SVFBasicBlock, BasicBlockEdge> GenericBasicBlockNodeTy;
|
|
73
|
+
class SVFBasicBlock : public GenericBasicBlockNodeTy
|
|
74
|
+
{
|
|
75
|
+
friend class LLVMModuleSet;
|
|
76
|
+
friend class SVFIRWriter;
|
|
77
|
+
friend class SVFIRReader;
|
|
78
|
+
friend class SVFIRBuilder;
|
|
79
|
+
friend class FunObjVar;
|
|
80
|
+
friend class ICFGBuilder;
|
|
81
|
+
friend class ICFG;
|
|
82
|
+
|
|
83
|
+
public:
|
|
84
|
+
typedef std::vector<const ICFGNode*>::const_iterator const_iterator;
|
|
85
|
+
std::vector<const SVFBasicBlock*> succBBs;
|
|
86
|
+
std::vector<const SVFBasicBlock*> predBBs;
|
|
87
|
+
|
|
88
|
+
private:
|
|
89
|
+
std::vector<const ICFGNode*> allICFGNodes; ///< all ICFGNodes in this BasicBlock
|
|
90
|
+
const FunObjVar* fun; /// Function where this BasicBlock is
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
protected:
|
|
95
|
+
///@{ attributes to be set only through Module builders e.g., LLVMModule
|
|
96
|
+
|
|
97
|
+
inline void addICFGNode(const ICFGNode* icfgNode)
|
|
98
|
+
{
|
|
99
|
+
assert(std::find(getICFGNodeList().begin(), getICFGNodeList().end(),
|
|
100
|
+
icfgNode) == getICFGNodeList().end() && "duplicated icfgnode");
|
|
101
|
+
allICFGNodes.push_back(icfgNode);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/// @}
|
|
105
|
+
|
|
106
|
+
public:
|
|
107
|
+
/// Constructor without name
|
|
108
|
+
SVFBasicBlock(NodeID id, const FunObjVar* f): GenericBasicBlockNodeTy(id, BasicBlockKd), fun(f)
|
|
109
|
+
{
|
|
110
|
+
|
|
111
|
+
}
|
|
112
|
+
SVFBasicBlock() = delete;
|
|
113
|
+
~SVFBasicBlock()
|
|
114
|
+
{
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
static inline bool classof(const SVFValue* node)
|
|
119
|
+
{
|
|
120
|
+
return node->getNodeKind() == SVFValue::BasicBlockKd;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
static inline bool classof(const SVFBasicBlock* node)
|
|
124
|
+
{
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
//@{
|
|
129
|
+
friend OutStream &operator<<(OutStream &o, const SVFBasicBlock&node)
|
|
130
|
+
{
|
|
131
|
+
o << node.toString();
|
|
132
|
+
return o;
|
|
133
|
+
}
|
|
134
|
+
//@}
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
inline const std::vector<const ICFGNode*>& getICFGNodeList() const
|
|
138
|
+
{
|
|
139
|
+
return allICFGNodes;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
inline const_iterator begin() const
|
|
143
|
+
{
|
|
144
|
+
return allICFGNodes.begin();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
inline const_iterator end() const
|
|
148
|
+
{
|
|
149
|
+
return allICFGNodes.end();
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
inline void setFun(const FunObjVar* f)
|
|
154
|
+
{
|
|
155
|
+
fun = f;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
inline void addSuccBasicBlock(const SVFBasicBlock* succ2)
|
|
159
|
+
{
|
|
160
|
+
// check if the edge already exists
|
|
161
|
+
for (auto edge: this->getOutEdges())
|
|
162
|
+
{
|
|
163
|
+
if (edge->getDstNode() == succ2)
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
SVFBasicBlock* succ = const_cast<SVFBasicBlock*>(succ2);
|
|
168
|
+
BasicBlockEdge* edge = new BasicBlockEdge(this, succ);
|
|
169
|
+
this->addOutgoingEdge(edge);
|
|
170
|
+
succ->addIncomingEdge(edge);
|
|
171
|
+
this->succBBs.push_back(succ);
|
|
172
|
+
succ->predBBs.push_back(this);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
inline void addPredBasicBlock(const SVFBasicBlock* pred2)
|
|
176
|
+
{
|
|
177
|
+
// check if the edge already exists
|
|
178
|
+
for (auto edge: this->getInEdges())
|
|
179
|
+
{
|
|
180
|
+
if (edge->getSrcNode() == pred2)
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
SVFBasicBlock* pred = const_cast<SVFBasicBlock*>(pred2);
|
|
184
|
+
BasicBlockEdge* edge = new BasicBlockEdge(pred, this);
|
|
185
|
+
this->addIncomingEdge(edge);
|
|
186
|
+
pred->addOutgoingEdge(edge);
|
|
187
|
+
this->predBBs.push_back(pred);
|
|
188
|
+
pred->succBBs.push_back(this);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
inline const FunObjVar* getParent() const
|
|
192
|
+
{
|
|
193
|
+
assert(fun && "Function is null?");
|
|
194
|
+
return fun;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
inline const FunObjVar* getFunction() const
|
|
198
|
+
{
|
|
199
|
+
assert(fun && "Function is null?");
|
|
200
|
+
return fun;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
inline const ICFGNode* front() const
|
|
204
|
+
{
|
|
205
|
+
assert(!allICFGNodes.empty() && "bb empty?");
|
|
206
|
+
return allICFGNodes.front();
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
inline const ICFGNode* back() const
|
|
210
|
+
{
|
|
211
|
+
assert(!allICFGNodes.empty() && "bb empty?");
|
|
212
|
+
return allICFGNodes.back();
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
inline std::vector<const SVFBasicBlock*> getSuccessors() const
|
|
216
|
+
{
|
|
217
|
+
std::vector<const SVFBasicBlock*> res;
|
|
218
|
+
for (auto edge : this->getOutEdges())
|
|
219
|
+
{
|
|
220
|
+
res.push_back(edge->getDstNode());
|
|
221
|
+
}
|
|
222
|
+
return res;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
inline std::vector<const SVFBasicBlock*> getPredecessors() const
|
|
226
|
+
{
|
|
227
|
+
std::vector<const SVFBasicBlock*> res;
|
|
228
|
+
for (auto edge : this->getInEdges())
|
|
229
|
+
{
|
|
230
|
+
res.push_back(edge->getSrcNode());
|
|
231
|
+
}
|
|
232
|
+
return res;
|
|
233
|
+
}
|
|
234
|
+
u32_t getNumSuccessors() const
|
|
235
|
+
{
|
|
236
|
+
return this->getOutEdges().size();
|
|
237
|
+
}
|
|
238
|
+
u32_t getBBSuccessorPos(const SVFBasicBlock* Succ)
|
|
239
|
+
{
|
|
240
|
+
u32_t i = 0;
|
|
241
|
+
for (const SVFBasicBlock* SuccBB: succBBs)
|
|
242
|
+
{
|
|
243
|
+
if (SuccBB == Succ)
|
|
244
|
+
return i;
|
|
245
|
+
i++;
|
|
246
|
+
}
|
|
247
|
+
assert(false && "Didn't find successor edge?");
|
|
248
|
+
return 0;
|
|
249
|
+
}
|
|
250
|
+
u32_t getBBSuccessorPos(const SVFBasicBlock* Succ) const
|
|
251
|
+
{
|
|
252
|
+
u32_t i = 0;
|
|
253
|
+
for (const SVFBasicBlock* SuccBB: succBBs)
|
|
254
|
+
{
|
|
255
|
+
if (SuccBB == Succ)
|
|
256
|
+
return i;
|
|
257
|
+
i++;
|
|
258
|
+
}
|
|
259
|
+
assert(false && "Didn't find successor edge?");
|
|
260
|
+
return 0;
|
|
261
|
+
|
|
262
|
+
}
|
|
263
|
+
u32_t getBBPredecessorPos(const SVFBasicBlock* succbb)
|
|
264
|
+
{
|
|
265
|
+
u32_t pos = 0;
|
|
266
|
+
for (const SVFBasicBlock* PredBB : succbb->getPredecessors())
|
|
267
|
+
{
|
|
268
|
+
if(PredBB == this)
|
|
269
|
+
return pos;
|
|
270
|
+
++pos;
|
|
271
|
+
}
|
|
272
|
+
assert(false && "Didn't find predecessor edge?");
|
|
273
|
+
return pos;
|
|
274
|
+
}
|
|
275
|
+
u32_t getBBPredecessorPos(const SVFBasicBlock* succbb) const
|
|
276
|
+
{
|
|
277
|
+
u32_t pos = 0;
|
|
278
|
+
for (const SVFBasicBlock* PredBB : succbb->getPredecessors())
|
|
279
|
+
{
|
|
280
|
+
if(PredBB == this)
|
|
281
|
+
return pos;
|
|
282
|
+
++pos;
|
|
283
|
+
}
|
|
284
|
+
assert(false && "Didn't find predecessor edge?");
|
|
285
|
+
return pos;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const std::string toString() const;
|
|
289
|
+
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
typedef GenericGraph<SVFBasicBlock, BasicBlockEdge> GenericBasicBlockGraphTy;
|
|
295
|
+
class BasicBlockGraph: public GenericBasicBlockGraphTy
|
|
296
|
+
{
|
|
297
|
+
private:
|
|
298
|
+
NodeID id{0};
|
|
299
|
+
public:
|
|
300
|
+
/// Constructor
|
|
301
|
+
BasicBlockGraph()
|
|
302
|
+
{
|
|
303
|
+
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
SVFBasicBlock* addBasicBlock(const std::string& bbname)
|
|
307
|
+
{
|
|
308
|
+
id++;
|
|
309
|
+
SVFBasicBlock* bb = new SVFBasicBlock(id, nullptr);
|
|
310
|
+
addGNode(id, bb);
|
|
311
|
+
bb->setName(bbname);
|
|
312
|
+
return bb;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
#endif
|