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,117 @@
|
|
|
1
|
+
//===- ExtAPI.h -- External functions -----------------------------------------//
|
|
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
|
+
* ExtAPI.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: July 1, 2022
|
|
27
|
+
* Author: Shuangxiang Kan
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef __ExtAPI_H
|
|
31
|
+
#define __ExtAPI_H
|
|
32
|
+
|
|
33
|
+
#include "SVFIR/SVFValue.h"
|
|
34
|
+
#include <Util/config.h>
|
|
35
|
+
#include <string>
|
|
36
|
+
#include <vector>
|
|
37
|
+
#include <map>
|
|
38
|
+
|
|
39
|
+
/// For a more detailed explanation of how External APIs are handled in SVF, please refer to the SVF Wiki: https://github.com/SVF-tools/SVF/wiki/Handling-External-APIs-with-extapi.c
|
|
40
|
+
|
|
41
|
+
namespace SVF
|
|
42
|
+
{
|
|
43
|
+
|
|
44
|
+
class FunObjVar;
|
|
45
|
+
|
|
46
|
+
class ExtAPI
|
|
47
|
+
{
|
|
48
|
+
friend class LLVMModuleSet;
|
|
49
|
+
friend class SVFIRBuilder;
|
|
50
|
+
|
|
51
|
+
private:
|
|
52
|
+
|
|
53
|
+
static ExtAPI *extOp;
|
|
54
|
+
|
|
55
|
+
// Map SVFFunction to its annotations
|
|
56
|
+
Map<const FunObjVar*, std::vector<std::string>> funObjVar2Annotations;
|
|
57
|
+
|
|
58
|
+
// extapi.bc file path
|
|
59
|
+
static std::string extBcPath;
|
|
60
|
+
|
|
61
|
+
ExtAPI() = default;
|
|
62
|
+
|
|
63
|
+
public:
|
|
64
|
+
|
|
65
|
+
static ExtAPI *getExtAPI();
|
|
66
|
+
|
|
67
|
+
static void destory();
|
|
68
|
+
|
|
69
|
+
// Set extapi.bc file path
|
|
70
|
+
static bool setExtBcPath(const std::string& path);
|
|
71
|
+
|
|
72
|
+
// Get extapi.bc file path
|
|
73
|
+
std::string getExtBcPath();
|
|
74
|
+
|
|
75
|
+
// Get the annotation of (F)
|
|
76
|
+
std::string getExtFuncAnnotation(const FunObjVar* fun, const std::string&funcAnnotation);
|
|
77
|
+
|
|
78
|
+
const std::vector<std::string>& getExtFuncAnnotations(const FunObjVar*fun);
|
|
79
|
+
|
|
80
|
+
// Does (F) have some annotation?
|
|
81
|
+
bool hasExtFuncAnnotation(const FunObjVar* fun, const std::string&funcAnnotation);
|
|
82
|
+
|
|
83
|
+
public:
|
|
84
|
+
|
|
85
|
+
// Does (F) have a static var X (unavailable to us) that its return points to?
|
|
86
|
+
bool has_static(const FunObjVar *F);
|
|
87
|
+
|
|
88
|
+
// Does (F) have a memcpy_like operation?
|
|
89
|
+
bool is_memcpy(const FunObjVar *F);
|
|
90
|
+
|
|
91
|
+
// Does (F) have a memset_like operation?
|
|
92
|
+
bool is_memset(const FunObjVar *F);
|
|
93
|
+
|
|
94
|
+
// Does (F) allocate a new object and return it?
|
|
95
|
+
bool is_alloc(const FunObjVar *F);
|
|
96
|
+
|
|
97
|
+
// Does (F) allocate a new object and assign it to one of its arguments?
|
|
98
|
+
bool is_arg_alloc(const FunObjVar *F);
|
|
99
|
+
|
|
100
|
+
// Does (F) allocate a new stack object and return it?
|
|
101
|
+
bool is_alloc_stack_ret(const FunObjVar *F);
|
|
102
|
+
|
|
103
|
+
// Get the position of argument which holds the new object
|
|
104
|
+
s32_t get_alloc_arg_pos(const FunObjVar *F);
|
|
105
|
+
|
|
106
|
+
// Does (F) reallocate a new object?
|
|
107
|
+
bool is_realloc(const FunObjVar *F);
|
|
108
|
+
|
|
109
|
+
bool is_ext(const FunObjVar* funObjVar);
|
|
110
|
+
|
|
111
|
+
private:
|
|
112
|
+
// Set the annotation of (F)
|
|
113
|
+
void setExtFuncAnnotations(const FunObjVar* fun, const std::vector<std::string>&funcAnnotations);
|
|
114
|
+
};
|
|
115
|
+
} // End namespace SVF
|
|
116
|
+
|
|
117
|
+
#endif
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
//===- GeneralType.h -- Primitive types used in SVF--------------------------//
|
|
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
|
+
* GeneralType.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Feb 8, 2024
|
|
27
|
+
* Author: Jiawei Wang
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#pragma once
|
|
31
|
+
#include <cstdint>
|
|
32
|
+
#include <deque>
|
|
33
|
+
#include <iostream>
|
|
34
|
+
#include <list>
|
|
35
|
+
#include <map>
|
|
36
|
+
#include <set>
|
|
37
|
+
#include <stack>
|
|
38
|
+
#include <unordered_map>
|
|
39
|
+
#include <unordered_set>
|
|
40
|
+
#include <vector>
|
|
41
|
+
#include <memory>
|
|
42
|
+
#include "Util/SparseBitVector.h"
|
|
43
|
+
|
|
44
|
+
namespace SVF
|
|
45
|
+
{
|
|
46
|
+
typedef std::ostream OutStream;
|
|
47
|
+
typedef unsigned u32_t;
|
|
48
|
+
typedef signed s32_t;
|
|
49
|
+
typedef unsigned long long u64_t;
|
|
50
|
+
typedef signed long long s64_t;
|
|
51
|
+
typedef unsigned char u8_t;
|
|
52
|
+
typedef signed char s8_t;
|
|
53
|
+
typedef unsigned short u16_t;
|
|
54
|
+
typedef signed short s16_t;
|
|
55
|
+
|
|
56
|
+
typedef u32_t NodeID;
|
|
57
|
+
typedef u32_t EdgeID;
|
|
58
|
+
typedef unsigned CallSiteID;
|
|
59
|
+
typedef unsigned ThreadID;
|
|
60
|
+
typedef s64_t APOffset;
|
|
61
|
+
|
|
62
|
+
typedef SparseBitVector<> NodeBS;
|
|
63
|
+
typedef unsigned PointsToID;
|
|
64
|
+
|
|
65
|
+
/// provide extra hash function for std::pair handling
|
|
66
|
+
template <class T> struct Hash;
|
|
67
|
+
|
|
68
|
+
template <class S, class T> struct Hash<std::pair<S, T>>
|
|
69
|
+
{
|
|
70
|
+
// Pairing function from: http://szudzik.com/ElegantPairing.pdf
|
|
71
|
+
static size_t szudzik(size_t a, size_t b)
|
|
72
|
+
{
|
|
73
|
+
return a > b ? b * b + a : a * a + a + b;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
size_t operator()(const std::pair<S, T>& t) const
|
|
77
|
+
{
|
|
78
|
+
Hash<decltype(t.first)> first;
|
|
79
|
+
Hash<decltype(t.second)> second;
|
|
80
|
+
return szudzik(first(t.first), second(t.second));
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
template <class T> struct Hash
|
|
85
|
+
{
|
|
86
|
+
size_t operator()(const T& t) const
|
|
87
|
+
{
|
|
88
|
+
std::hash<T> h;
|
|
89
|
+
return h(t);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
template <typename Key, typename Hash = Hash<Key>,
|
|
94
|
+
typename KeyEqual = std::equal_to<Key>,
|
|
95
|
+
typename Allocator = std::allocator<Key>>
|
|
96
|
+
using Set = std::unordered_set<Key, Hash, KeyEqual, Allocator>;
|
|
97
|
+
|
|
98
|
+
template <typename Key, typename Value, typename Hash = Hash<Key>,
|
|
99
|
+
typename KeyEqual = std::equal_to<Key>,
|
|
100
|
+
typename Allocator = std::allocator<std::pair<const Key, Value>>>
|
|
101
|
+
using Map = std::unordered_map<Key, Value, Hash, KeyEqual, Allocator>;
|
|
102
|
+
|
|
103
|
+
template <typename Key, typename Compare = std::less<Key>,
|
|
104
|
+
typename Allocator = std::allocator<Key>>
|
|
105
|
+
using OrderedSet = std::set<Key, Compare, Allocator>;
|
|
106
|
+
|
|
107
|
+
template <typename Key, typename Value, typename Compare = std::less<Key>,
|
|
108
|
+
typename Allocator = std::allocator<std::pair<const Key, Value>>>
|
|
109
|
+
using OrderedMap = std::map<Key, Value, Compare, Allocator>;
|
|
110
|
+
|
|
111
|
+
typedef std::pair<NodeID, NodeID> NodePair;
|
|
112
|
+
typedef OrderedSet<NodeID> OrderedNodeSet;
|
|
113
|
+
typedef Set<NodeID> NodeSet;
|
|
114
|
+
typedef Set<NodePair> NodePairSet;
|
|
115
|
+
typedef Map<NodePair, NodeID> NodePairMap;
|
|
116
|
+
typedef std::vector<NodeID> NodeVector;
|
|
117
|
+
typedef std::vector<EdgeID> EdgeVector;
|
|
118
|
+
typedef std::stack<NodeID> NodeStack;
|
|
119
|
+
typedef std::list<NodeID> NodeList;
|
|
120
|
+
typedef std::deque<NodeID> NodeDeque;
|
|
121
|
+
typedef NodeSet EdgeSet;
|
|
122
|
+
typedef std::vector<u32_t> CallStrCxt;
|
|
123
|
+
typedef unsigned Version;
|
|
124
|
+
typedef Set<Version> VersionSet;
|
|
125
|
+
typedef std::pair<NodeID, Version> VersionedVar;
|
|
126
|
+
typedef Set<VersionedVar> VersionedVarSet;
|
|
127
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
//===- GraphReachSolver.h -- Generic graph reachability solver---------------------------------//
|
|
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
|
+
* GraphReachSolver.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Apr 1, 2014
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef CFLSOLVER_H_
|
|
31
|
+
#define CFLSOLVER_H_
|
|
32
|
+
|
|
33
|
+
#include "Util/WorkList.h"
|
|
34
|
+
#include "Util/DPItem.h"
|
|
35
|
+
|
|
36
|
+
namespace SVF
|
|
37
|
+
{
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
* Generic Graph Reachability solver for demand-driven analysis based on different graphs (e.g. SVFIR, VFG, ThreadVFG)
|
|
41
|
+
* Extend this class for sophisticated CFL-reachability resolution (e.g. field, flow, path)
|
|
42
|
+
*/
|
|
43
|
+
template<class GraphType, class DPIm = DPItem>
|
|
44
|
+
class GraphReachSolver
|
|
45
|
+
{
|
|
46
|
+
|
|
47
|
+
public:
|
|
48
|
+
///Define the GTraits and node iterator
|
|
49
|
+
typedef SVF::GenericGraphTraits<GraphType> GTraits;
|
|
50
|
+
typedef typename GTraits::NodeType GNODE;
|
|
51
|
+
typedef typename GTraits::EdgeType GEDGE;
|
|
52
|
+
typedef typename GTraits::nodes_iterator node_iterator;
|
|
53
|
+
typedef typename GTraits::ChildIteratorType child_iterator;
|
|
54
|
+
|
|
55
|
+
/// Define inverse GTraits and note iterator
|
|
56
|
+
typedef SVF::GenericGraphTraits<SVF::Inverse<GNODE *> > InvGTraits;
|
|
57
|
+
typedef typename InvGTraits::ChildIteratorType inv_child_iterator;
|
|
58
|
+
|
|
59
|
+
/// Define worklist
|
|
60
|
+
typedef FIFOWorkList<DPIm> WorkList;
|
|
61
|
+
|
|
62
|
+
protected:
|
|
63
|
+
|
|
64
|
+
/// Constructor
|
|
65
|
+
GraphReachSolver(): _graph(nullptr)
|
|
66
|
+
{
|
|
67
|
+
}
|
|
68
|
+
/// Destructor
|
|
69
|
+
virtual ~GraphReachSolver()
|
|
70
|
+
{
|
|
71
|
+
}
|
|
72
|
+
/// Get/Set graph methods
|
|
73
|
+
//@{
|
|
74
|
+
const inline GraphType graph() const
|
|
75
|
+
{
|
|
76
|
+
return _graph;
|
|
77
|
+
}
|
|
78
|
+
inline void setGraph(GraphType g)
|
|
79
|
+
{
|
|
80
|
+
_graph = g;
|
|
81
|
+
}
|
|
82
|
+
//@}
|
|
83
|
+
|
|
84
|
+
inline GNODE* getNode(NodeID id) const
|
|
85
|
+
{
|
|
86
|
+
return _graph->getGNode(id);
|
|
87
|
+
}
|
|
88
|
+
virtual inline NodeID getNodeIDFromItem(const DPIm& item) const
|
|
89
|
+
{
|
|
90
|
+
return item.getCurNodeID();
|
|
91
|
+
}
|
|
92
|
+
/// CFL forward traverse solve
|
|
93
|
+
virtual void forwardTraverse(DPIm& it)
|
|
94
|
+
{
|
|
95
|
+
pushIntoWorklist(it);
|
|
96
|
+
|
|
97
|
+
while (!isWorklistEmpty())
|
|
98
|
+
{
|
|
99
|
+
DPIm item = popFromWorklist();
|
|
100
|
+
FWProcessCurNode(item);
|
|
101
|
+
|
|
102
|
+
GNODE* v = getNode(getNodeIDFromItem(item));
|
|
103
|
+
child_iterator EI = GTraits::child_begin(v);
|
|
104
|
+
child_iterator EE = GTraits::child_end(v);
|
|
105
|
+
for (; EI != EE; ++EI)
|
|
106
|
+
{
|
|
107
|
+
FWProcessOutgoingEdge(item,*(EI.getCurrent()) );
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/// CFL forward traverse solve
|
|
112
|
+
virtual void backwardTraverse(DPIm& it)
|
|
113
|
+
{
|
|
114
|
+
pushIntoWorklist(it);
|
|
115
|
+
|
|
116
|
+
while (!isWorklistEmpty())
|
|
117
|
+
{
|
|
118
|
+
DPIm item = popFromWorklist();
|
|
119
|
+
BWProcessCurNode(item);
|
|
120
|
+
|
|
121
|
+
GNODE* v = getNode(getNodeIDFromItem(item));
|
|
122
|
+
inv_child_iterator EI = InvGTraits::child_begin(v);
|
|
123
|
+
inv_child_iterator EE = InvGTraits::child_end(v);
|
|
124
|
+
for (; EI != EE; ++EI)
|
|
125
|
+
{
|
|
126
|
+
BWProcessIncomingEdge(item,*(EI.getCurrent()) );
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/// Process the DP item
|
|
131
|
+
//@{
|
|
132
|
+
virtual void FWProcessCurNode(const DPIm&)
|
|
133
|
+
{
|
|
134
|
+
}
|
|
135
|
+
virtual void BWProcessCurNode(const DPIm&)
|
|
136
|
+
{
|
|
137
|
+
}
|
|
138
|
+
//@}
|
|
139
|
+
/// Propagation for the solving, to be implemented in the child class
|
|
140
|
+
//@{
|
|
141
|
+
virtual void FWProcessOutgoingEdge(const DPIm& item, GEDGE* edge)
|
|
142
|
+
{
|
|
143
|
+
DPIm newItem(item);
|
|
144
|
+
newItem.setCurNodeID(edge->getDstID());
|
|
145
|
+
pushIntoWorklist(newItem);
|
|
146
|
+
}
|
|
147
|
+
virtual void BWProcessIncomingEdge(const DPIm& item, GEDGE* edge)
|
|
148
|
+
{
|
|
149
|
+
DPIm newItem(item);
|
|
150
|
+
newItem.setCurNodeID(edge->getSrcID());
|
|
151
|
+
pushIntoWorklist(newItem);
|
|
152
|
+
}
|
|
153
|
+
//@}
|
|
154
|
+
/// Worklist operations
|
|
155
|
+
//@{
|
|
156
|
+
inline DPIm popFromWorklist()
|
|
157
|
+
{
|
|
158
|
+
return worklist.pop();
|
|
159
|
+
}
|
|
160
|
+
inline bool pushIntoWorklist(DPIm& item)
|
|
161
|
+
{
|
|
162
|
+
return worklist.push(item);
|
|
163
|
+
}
|
|
164
|
+
inline bool isWorklistEmpty()
|
|
165
|
+
{
|
|
166
|
+
return worklist.empty();
|
|
167
|
+
}
|
|
168
|
+
inline bool isInWorklist(DPIm& item)
|
|
169
|
+
{
|
|
170
|
+
return worklist.find(item);
|
|
171
|
+
}
|
|
172
|
+
//@}
|
|
173
|
+
|
|
174
|
+
private:
|
|
175
|
+
|
|
176
|
+
/// Graph
|
|
177
|
+
GraphType _graph;
|
|
178
|
+
|
|
179
|
+
/// Worklist for resolution
|
|
180
|
+
WorkList worklist;
|
|
181
|
+
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
} // End namespace SVF
|
|
185
|
+
|
|
186
|
+
#endif /* CFLSOLVER_H_ */
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
//===- NodeIDAllocator.h -- Allocates node IDs on request ------------------------//
|
|
2
|
+
|
|
3
|
+
#ifndef NODEIDALLOCATOR_H_
|
|
4
|
+
#define NODEIDALLOCATOR_H_
|
|
5
|
+
|
|
6
|
+
#include "FastCluster/fastcluster.h"
|
|
7
|
+
#include "SVFIR/SVFType.h"
|
|
8
|
+
#include "MemoryModel/PointsTo.h"
|
|
9
|
+
|
|
10
|
+
namespace SVF
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
// Forward declare for the Clusterer.
|
|
14
|
+
class BVDataPTAImpl;
|
|
15
|
+
|
|
16
|
+
/// Allocates node IDs for objects and values, upon request, according to
|
|
17
|
+
/// some strategy which can be user-defined.
|
|
18
|
+
/// It is the job of SymbolTableInfo to tell the NodeIDAllocator when
|
|
19
|
+
/// all symbols have been allocated through endSymbolAllocation.
|
|
20
|
+
class NodeIDAllocator
|
|
21
|
+
{
|
|
22
|
+
friend class SVFIRWriter;
|
|
23
|
+
friend class SVFIRReader;
|
|
24
|
+
|
|
25
|
+
public:
|
|
26
|
+
/// Allocation strategy to use.
|
|
27
|
+
enum Strategy
|
|
28
|
+
{
|
|
29
|
+
/// Allocate objects contiguously, separate from values, and vice versa.
|
|
30
|
+
/// If [****...*****] is the space of unsigned integers, we allocate as,
|
|
31
|
+
/// [ssssooooooo...vvvvvvv] (o = object, v = value, s = special).
|
|
32
|
+
DENSE,
|
|
33
|
+
/// Like dense, but with order flipped:
|
|
34
|
+
/// [ssssvvvvvvv...ooooooo]
|
|
35
|
+
REVERSE_DENSE,
|
|
36
|
+
/// Allocate objects objects and values sequentially, intermixed.
|
|
37
|
+
SEQ,
|
|
38
|
+
/// Allocate values and objects as they come in with a single counter.
|
|
39
|
+
/// GEP objects are allocated as an offset from their base (see implementation
|
|
40
|
+
/// of allocateGepObjectId). The purpose of this allocation strategy
|
|
41
|
+
/// is human readability.
|
|
42
|
+
DBUG,
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/// These nodes, and any nodes before them are assumed allocated
|
|
46
|
+
/// as objects and values. For simplicity's sake, numObjects and
|
|
47
|
+
/// numVals thus start at 4 (and the other counters are set
|
|
48
|
+
/// appropriately).
|
|
49
|
+
///@{
|
|
50
|
+
static const NodeID blackHoleObjectId;
|
|
51
|
+
static const NodeID constantObjectId;
|
|
52
|
+
static const NodeID blackHolePointerId;
|
|
53
|
+
static const NodeID nullPointerId;
|
|
54
|
+
///@}
|
|
55
|
+
|
|
56
|
+
/// Return (singleton) allocator.
|
|
57
|
+
static NodeIDAllocator *get(void);
|
|
58
|
+
|
|
59
|
+
/// Deletes the (singleton) allocator.
|
|
60
|
+
static void unset(void);
|
|
61
|
+
|
|
62
|
+
/// Allocate an object ID as determined by the strategy.
|
|
63
|
+
NodeID allocateObjectId(void);
|
|
64
|
+
|
|
65
|
+
/// Allocate a GEP object ID as determined by the strategy.
|
|
66
|
+
/// allocateObjectId is still fine for GEP objects, but
|
|
67
|
+
/// for some strategies (DBUG, namely), GEP objects can
|
|
68
|
+
/// be allocated differently (more readable, for DBUG).
|
|
69
|
+
/// Regardless, numObjects is shared; there is no special
|
|
70
|
+
/// numGepObjects.
|
|
71
|
+
NodeID allocateGepObjectId(NodeID base, u32_t offset, u32_t maxFieldLimit);
|
|
72
|
+
|
|
73
|
+
/// Allocate a value ID as determined by the strategy.
|
|
74
|
+
NodeID allocateValueId(void);
|
|
75
|
+
|
|
76
|
+
/// Notify the allocator that all symbols have had IDs allocated.
|
|
77
|
+
NodeID endSymbolAllocation(void);
|
|
78
|
+
|
|
79
|
+
/// Returns the total number of memory objects.
|
|
80
|
+
NodeID getNumObjects(void) const
|
|
81
|
+
{
|
|
82
|
+
return numObjects;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
inline void increaseNumOfObjAndNodes()
|
|
86
|
+
{
|
|
87
|
+
++numObjects;
|
|
88
|
+
++numNodes;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
private:
|
|
92
|
+
/// Builds a node ID allocator with the strategy specified on the command line.
|
|
93
|
+
NodeIDAllocator(void);
|
|
94
|
+
|
|
95
|
+
private:
|
|
96
|
+
/// These are moreso counters than amounts.
|
|
97
|
+
///@{
|
|
98
|
+
/// Number of memory objects allocated, including specials.
|
|
99
|
+
NodeID numObjects;
|
|
100
|
+
/// Number of values allocated, including specials.
|
|
101
|
+
NodeID numValues;
|
|
102
|
+
/// Number of explicit symbols allocated (e.g., llvm::Values), including specials.
|
|
103
|
+
NodeID numSymbols;
|
|
104
|
+
/// Total number of objects and values allocated.
|
|
105
|
+
NodeID numNodes;
|
|
106
|
+
///@}
|
|
107
|
+
|
|
108
|
+
/// Strategy to allocate with.
|
|
109
|
+
enum Strategy strategy;
|
|
110
|
+
|
|
111
|
+
/// Single allocator.
|
|
112
|
+
static NodeIDAllocator *allocator;
|
|
113
|
+
|
|
114
|
+
public:
|
|
115
|
+
/// Perform clustering given points-to sets with nodes allocated according to the
|
|
116
|
+
/// DENSE strategy.
|
|
117
|
+
class Clusterer
|
|
118
|
+
{
|
|
119
|
+
private:
|
|
120
|
+
/// Maps a pair of nodes to their (minimum) distance and the number of
|
|
121
|
+
/// times that distance occurs in a set of *unique* points-to sets.
|
|
122
|
+
typedef Map<NodePair, std::pair<unsigned, unsigned>> DistOccMap;
|
|
123
|
+
|
|
124
|
+
/// Statistics strings.
|
|
125
|
+
///@{
|
|
126
|
+
static const std::string NumObjects;
|
|
127
|
+
static const std::string RegioningTime;
|
|
128
|
+
static const std::string DistanceMatrixTime;
|
|
129
|
+
static const std::string FastClusterTime;
|
|
130
|
+
static const std::string DendrogramTraversalTime;
|
|
131
|
+
static const std::string EvalTime;
|
|
132
|
+
static const std::string TotalTime;
|
|
133
|
+
static const std::string TheoreticalNumWords;
|
|
134
|
+
static const std::string OriginalBvNumWords;
|
|
135
|
+
static const std::string OriginalSbvNumWords;
|
|
136
|
+
static const std::string NewBvNumWords;
|
|
137
|
+
static const std::string NewSbvNumWords;
|
|
138
|
+
static const std::string NumRegions;
|
|
139
|
+
static const std::string NumGtIntRegions;
|
|
140
|
+
static const std::string LargestRegion;
|
|
141
|
+
static const std::string BestCandidate;
|
|
142
|
+
static const std::string NumNonTrivialRegionObjects;
|
|
143
|
+
///@}
|
|
144
|
+
|
|
145
|
+
public:
|
|
146
|
+
/// Returns vector mapping previously allocated node IDs to a smarter allocation
|
|
147
|
+
/// based on the points-to sets in pta accessed through keys.
|
|
148
|
+
/// The second part of the keys pairs are the number of (potential) occurrences of that points-to set
|
|
149
|
+
/// or a subset, depending on the client's wish.
|
|
150
|
+
/// TODO: interfaces are getting unwieldy, an initialised object may be better.
|
|
151
|
+
/// TODO: kind of sucks pta can't be const here because getPts isn't.
|
|
152
|
+
static std::vector<NodeID> cluster(BVDataPTAImpl *pta, const std::vector<std::pair<NodeID, unsigned>> keys, std::vector<std::pair<hclust_fast_methods, std::vector<NodeID>>> &candidates, std::string evalSubtitle="");
|
|
153
|
+
|
|
154
|
+
// Returns a reverse node mapping for mapping generated by cluster().
|
|
155
|
+
static std::vector<NodeID> getReverseNodeMapping(const std::vector<NodeID> &nodeMapping);
|
|
156
|
+
|
|
157
|
+
/// Fills in *NumWords statistics in stats..
|
|
158
|
+
static void evaluate(const std::vector<NodeID> &nodeMap, const Map<PointsTo, unsigned> pointsToSets, Map<std::string, std::string> &stats, bool accountForOcc);
|
|
159
|
+
|
|
160
|
+
/// Prints statistics to SVFUtil::outs().
|
|
161
|
+
/// TODO: make stats const.
|
|
162
|
+
static void printStats(std::string title, Map<std::string, std::string> &stats);
|
|
163
|
+
|
|
164
|
+
private:
|
|
165
|
+
/// Returns an index into a condensed matrix (upper triangle, excluding diagonals) corresponding
|
|
166
|
+
/// to an nxn matrix.
|
|
167
|
+
static inline size_t condensedIndex(size_t n, size_t i, size_t j);
|
|
168
|
+
|
|
169
|
+
/// Returns the minimum number of bits required to represent pts in a perfect world.
|
|
170
|
+
static inline unsigned requiredBits(const PointsTo &pts);
|
|
171
|
+
|
|
172
|
+
/// Returns the minimum number of bits required to represent n items in a perfect world.
|
|
173
|
+
static inline unsigned requiredBits(const size_t n);
|
|
174
|
+
|
|
175
|
+
/// Builds the upper triangle of the distance matrix, as an array of length
|
|
176
|
+
/// (numObjects * (numObjects - 1)) / 2, as required by fastcluster.
|
|
177
|
+
/// Responsibility of caller to `delete`.
|
|
178
|
+
static inline double *getDistanceMatrix(const std::vector<std::pair<const PointsTo *, unsigned>> pointsToSets,
|
|
179
|
+
const size_t numObjects, const Map<NodeID, unsigned> &nodeMap,
|
|
180
|
+
double &distanceMatrixTime);
|
|
181
|
+
|
|
182
|
+
/// Traverses the dendrogram produced by fastcluster, making node o, where o is the nth leaf (per
|
|
183
|
+
/// recursive DFS) map to n. index is the dendrogram node to work off. The traversal should start
|
|
184
|
+
/// at the top, which is the "last" (consider that it is 2D) element of the dendrogram, numObjects - 1.
|
|
185
|
+
static inline void traverseDendrogram(std::vector<NodeID> &nodeMap, const int *dendrogram, const size_t numObjects, unsigned &allocCounter, Set<int> &visited, const int index, const std::vector<NodeID> ®ionNodeMap);
|
|
186
|
+
|
|
187
|
+
/// Returns a vector mapping object IDs to a label such that if two objects appear
|
|
188
|
+
/// in the same points-to set, they have the same label. The "appear in the same
|
|
189
|
+
/// points-to set" is encoded by graph which is an adjacency list ensuring that
|
|
190
|
+
/// x in pt(p) and y in pt(p) -> x is reachable from y.
|
|
191
|
+
static inline std::vector<unsigned> regionObjects(const Map<NodeID, Set<NodeID>> &graph, size_t numObjects, size_t &numLabels);
|
|
192
|
+
|
|
193
|
+
// From all the candidates, returns the best mapping for pointsToSets (points-to set -> # occurrences).
|
|
194
|
+
static inline std::pair<hclust_fast_methods, std::vector<NodeID>> determineBestMapping(
|
|
195
|
+
const std::vector<std::pair<hclust_fast_methods, std::vector<NodeID>>> &candidates,
|
|
196
|
+
Map<PointsTo, unsigned> pointsToSets, const std::string &evalSubtitle, double &evalTime);
|
|
197
|
+
|
|
198
|
+
};
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
} // namespace SVF
|
|
202
|
+
|
|
203
|
+
#endif // ifdef NODEIDALLOCATOR_H_
|