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,327 @@
|
|
|
1
|
+
//===- ProgSlice.h -- Program slicing based on 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
|
+
* ProgSlice.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Apr 1, 2014
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*
|
|
29
|
+
* The implementation is based on
|
|
30
|
+
* (1) Yulei Sui, Ding Ye, and Jingling Xue. "Static Memory Leak Detection Using Full-Sparse Value-Flow Analysis".
|
|
31
|
+
* 2012 International Symposium on Software Testing and Analysis (ISSTA'12)
|
|
32
|
+
*
|
|
33
|
+
* (2) Yulei Sui, Ding Ye, and Jingling Xue. "Detecting Memory Leaks Statically with Full-Sparse Value-Flow Analysis".
|
|
34
|
+
* IEEE Transactions on Software Engineering (TSE'14)
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
#ifndef PROGSLICE_H_
|
|
38
|
+
#define PROGSLICE_H_
|
|
39
|
+
|
|
40
|
+
#include "SABER/SaberCondAllocator.h"
|
|
41
|
+
#include "Util/WorkList.h"
|
|
42
|
+
#include "Graphs/SVFG.h"
|
|
43
|
+
#include "Util/DPItem.h"
|
|
44
|
+
#include "Util/SVFBugReport.h"
|
|
45
|
+
|
|
46
|
+
namespace SVF
|
|
47
|
+
{
|
|
48
|
+
|
|
49
|
+
class ProgSlice
|
|
50
|
+
{
|
|
51
|
+
|
|
52
|
+
public:
|
|
53
|
+
typedef Set<const SVFGNode*> SVFGNodeSet;
|
|
54
|
+
typedef SVFGNodeSet::const_iterator SVFGNodeSetIter;
|
|
55
|
+
typedef SaberCondAllocator::Condition Condition;
|
|
56
|
+
typedef Map<const SVFGNode*, Condition> SVFGNodeToCondMap; ///< map a SVFGNode to its condition during value-flow guard computation
|
|
57
|
+
|
|
58
|
+
typedef FIFOWorkList<const SVFGNode*> VFWorkList; ///< worklist for value-flow guard computation
|
|
59
|
+
typedef FIFOWorkList<const SVFBasicBlock*> CFWorkList; ///< worklist for control-flow guard computation
|
|
60
|
+
|
|
61
|
+
typedef SaberCondAllocator::SVFGNodeToSVFGNodeSetMap SVFGNodeToSVFGNodeSetMap;
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
/// Constructor
|
|
65
|
+
ProgSlice(const SVFGNode* src, SaberCondAllocator* pa, const SVFG* graph):
|
|
66
|
+
root(src), partialReachable(false), fullReachable(false), reachGlob(false),
|
|
67
|
+
pathAllocator(pa), _curSVFGNode(nullptr), finalCond(pa->getFalseCond()), svfg(graph)
|
|
68
|
+
{
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/// Destructor
|
|
72
|
+
virtual ~ProgSlice()
|
|
73
|
+
{
|
|
74
|
+
destroy();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
inline u32_t getForwardSliceSize() const
|
|
78
|
+
{
|
|
79
|
+
return forwardslice.size();
|
|
80
|
+
}
|
|
81
|
+
inline u32_t getBackwardSliceSize() const
|
|
82
|
+
{
|
|
83
|
+
return backwardslice.size();
|
|
84
|
+
}
|
|
85
|
+
/// Forward and backward slice operations
|
|
86
|
+
//@{
|
|
87
|
+
inline void addToForwardSlice(const SVFGNode* node)
|
|
88
|
+
{
|
|
89
|
+
forwardslice.insert(node);
|
|
90
|
+
}
|
|
91
|
+
inline void addToBackwardSlice(const SVFGNode* node)
|
|
92
|
+
{
|
|
93
|
+
backwardslice.insert(node);
|
|
94
|
+
}
|
|
95
|
+
inline bool inForwardSlice(const SVFGNode* node)
|
|
96
|
+
{
|
|
97
|
+
return forwardslice.find(node)!=forwardslice.end();
|
|
98
|
+
}
|
|
99
|
+
inline bool inBackwardSlice(const SVFGNode* node)
|
|
100
|
+
{
|
|
101
|
+
return backwardslice.find(node)!=backwardslice.end();
|
|
102
|
+
}
|
|
103
|
+
inline SVFGNodeSetIter forwardSliceBegin() const
|
|
104
|
+
{
|
|
105
|
+
return forwardslice.begin();
|
|
106
|
+
}
|
|
107
|
+
inline SVFGNodeSetIter forwardSliceEnd() const
|
|
108
|
+
{
|
|
109
|
+
return forwardslice.end();
|
|
110
|
+
}
|
|
111
|
+
inline SVFGNodeSetIter backwardSliceBegin() const
|
|
112
|
+
{
|
|
113
|
+
return backwardslice.begin();
|
|
114
|
+
}
|
|
115
|
+
inline SVFGNodeSetIter backwardSliceEnd() const
|
|
116
|
+
{
|
|
117
|
+
return backwardslice.end();
|
|
118
|
+
}
|
|
119
|
+
//@}
|
|
120
|
+
|
|
121
|
+
/// root and sink operations
|
|
122
|
+
//@{
|
|
123
|
+
inline const SVFGNode* getSource() const
|
|
124
|
+
{
|
|
125
|
+
return root;
|
|
126
|
+
}
|
|
127
|
+
inline void addToSinks(const SVFGNode* node)
|
|
128
|
+
{
|
|
129
|
+
sinks.insert(node);
|
|
130
|
+
}
|
|
131
|
+
inline const SVFGNodeSet& getSinks() const
|
|
132
|
+
{
|
|
133
|
+
return sinks;
|
|
134
|
+
}
|
|
135
|
+
inline SVFGNodeSetIter sinksBegin() const
|
|
136
|
+
{
|
|
137
|
+
return sinks.begin();
|
|
138
|
+
}
|
|
139
|
+
inline SVFGNodeSetIter sinksEnd() const
|
|
140
|
+
{
|
|
141
|
+
return sinks.end();
|
|
142
|
+
}
|
|
143
|
+
inline void setPartialReachable()
|
|
144
|
+
{
|
|
145
|
+
partialReachable = true;
|
|
146
|
+
}
|
|
147
|
+
inline void setAllReachable()
|
|
148
|
+
{
|
|
149
|
+
fullReachable = true;
|
|
150
|
+
}
|
|
151
|
+
inline bool setReachGlobal()
|
|
152
|
+
{
|
|
153
|
+
return reachGlob = true;
|
|
154
|
+
}
|
|
155
|
+
inline bool isPartialReachable() const
|
|
156
|
+
{
|
|
157
|
+
return partialReachable || reachGlob;
|
|
158
|
+
}
|
|
159
|
+
inline bool isAllReachable() const
|
|
160
|
+
{
|
|
161
|
+
return fullReachable || reachGlob;
|
|
162
|
+
}
|
|
163
|
+
inline bool isReachGlobal() const
|
|
164
|
+
{
|
|
165
|
+
return reachGlob;
|
|
166
|
+
}
|
|
167
|
+
//@}
|
|
168
|
+
|
|
169
|
+
/// Guarded reachability solve
|
|
170
|
+
bool AllPathReachableSolve();
|
|
171
|
+
bool isSatisfiableForAll();
|
|
172
|
+
bool isSatisfiableForPairs();
|
|
173
|
+
|
|
174
|
+
/// Get callsite ID and get returnsiteID from SVFGEdge
|
|
175
|
+
//@{
|
|
176
|
+
const CallICFGNode* getCallSite(const SVFGEdge* edge) const;
|
|
177
|
+
const CallICFGNode* getRetSite(const SVFGEdge* edge) const;
|
|
178
|
+
//@}
|
|
179
|
+
|
|
180
|
+
/// Condition operations
|
|
181
|
+
//@{
|
|
182
|
+
inline Condition condAnd(const Condition &lhs, const Condition &rhs)
|
|
183
|
+
{
|
|
184
|
+
return pathAllocator->condAnd(lhs,rhs);
|
|
185
|
+
}
|
|
186
|
+
inline Condition condOr(const Condition &lhs, const Condition &rhs)
|
|
187
|
+
{
|
|
188
|
+
return pathAllocator->condOr(lhs,rhs);
|
|
189
|
+
}
|
|
190
|
+
inline Condition condNeg(const Condition &cond)
|
|
191
|
+
{
|
|
192
|
+
return pathAllocator->condNeg(cond);
|
|
193
|
+
}
|
|
194
|
+
inline Condition getTrueCond() const
|
|
195
|
+
{
|
|
196
|
+
return pathAllocator->getTrueCond();
|
|
197
|
+
}
|
|
198
|
+
inline Condition getFalseCond() const
|
|
199
|
+
{
|
|
200
|
+
return pathAllocator->getFalseCond();
|
|
201
|
+
}
|
|
202
|
+
inline std::string dumpCond(const Condition& cond) const
|
|
203
|
+
{
|
|
204
|
+
return pathAllocator->dumpCond(cond);
|
|
205
|
+
}
|
|
206
|
+
/// Evaluate final condition
|
|
207
|
+
std::string evalFinalCond() const;
|
|
208
|
+
/// Add final condition to eventStack
|
|
209
|
+
void evalFinalCond2Event(GenericBug::EventStack &eventStack) const;
|
|
210
|
+
//@}
|
|
211
|
+
|
|
212
|
+
protected:
|
|
213
|
+
inline const SVFG* getSVFG() const
|
|
214
|
+
{
|
|
215
|
+
return svfg;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/// Release memory
|
|
219
|
+
void destroy();
|
|
220
|
+
/// Clear Control flow conditions before each VF computation
|
|
221
|
+
inline void clearCFCond()
|
|
222
|
+
{
|
|
223
|
+
/// TODO: how to clean z3 memory
|
|
224
|
+
pathAllocator->clearCFCond();
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/// Get/set VF (value-flow) and CF (control-flow) conditions
|
|
228
|
+
//@{
|
|
229
|
+
inline Condition getVFCond(const SVFGNode* node) const
|
|
230
|
+
{
|
|
231
|
+
SVFGNodeToCondMap::const_iterator it = svfgNodeToCondMap.find(node);
|
|
232
|
+
if(it==svfgNodeToCondMap.end())
|
|
233
|
+
{
|
|
234
|
+
return getFalseCond();
|
|
235
|
+
}
|
|
236
|
+
return it->second;
|
|
237
|
+
}
|
|
238
|
+
inline bool setVFCond(const SVFGNode* node, const Condition &cond)
|
|
239
|
+
{
|
|
240
|
+
SVFGNodeToCondMap::iterator it = svfgNodeToCondMap.find(node);
|
|
241
|
+
// until a fixed-point is reached (condition is not changed)
|
|
242
|
+
if(it!=svfgNodeToCondMap.end() && isEquivalentBranchCond(it->second, cond))
|
|
243
|
+
return false;
|
|
244
|
+
|
|
245
|
+
svfgNodeToCondMap[node] = cond;
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
//@}
|
|
249
|
+
|
|
250
|
+
/// Compute guards for value-flows
|
|
251
|
+
//@{
|
|
252
|
+
inline Condition ComputeIntraVFGGuard(const SVFBasicBlock* src, const SVFBasicBlock* dst)
|
|
253
|
+
{
|
|
254
|
+
return pathAllocator->ComputeIntraVFGGuard(src,dst);
|
|
255
|
+
}
|
|
256
|
+
inline Condition ComputeInterCallVFGGuard(const SVFBasicBlock* src, const SVFBasicBlock* dst, const SVFBasicBlock* callBB)
|
|
257
|
+
{
|
|
258
|
+
return pathAllocator->ComputeInterCallVFGGuard(src,dst,callBB);
|
|
259
|
+
}
|
|
260
|
+
inline Condition ComputeInterRetVFGGuard(const SVFBasicBlock* src, const SVFBasicBlock* dst, const SVFBasicBlock* retBB)
|
|
261
|
+
{
|
|
262
|
+
return pathAllocator->ComputeInterRetVFGGuard(src,dst,retBB);
|
|
263
|
+
}
|
|
264
|
+
//@}
|
|
265
|
+
|
|
266
|
+
inline bool isEquivalentBranchCond(const Condition &lhs, const Condition &rhs) const
|
|
267
|
+
{
|
|
268
|
+
return pathAllocator->isEquivalentBranchCond(lhs, rhs);
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
/// Return the basic block where a SVFGNode resides in
|
|
272
|
+
/// a SVFGNode may not in a basic block if it is not a program statement
|
|
273
|
+
/// (e.g. PAGEdge is an global assignment or NullPtrSVFGNode)
|
|
274
|
+
inline const SVFBasicBlock* getSVFGNodeBB(const SVFGNode* node) const
|
|
275
|
+
{
|
|
276
|
+
const ICFGNode* icfgNode = node->getICFGNode();
|
|
277
|
+
if(SVFUtil::isa<NullPtrSVFGNode>(node) == false)
|
|
278
|
+
{
|
|
279
|
+
return icfgNode->getBB();
|
|
280
|
+
}
|
|
281
|
+
return nullptr;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/// Get/set current SVFG node
|
|
285
|
+
//@{
|
|
286
|
+
inline const SVFGNode* getCurSVFGNode() const
|
|
287
|
+
{
|
|
288
|
+
return _curSVFGNode;
|
|
289
|
+
}
|
|
290
|
+
inline void setCurSVFGNode(const SVFGNode* node)
|
|
291
|
+
{
|
|
292
|
+
_curSVFGNode = node;
|
|
293
|
+
pathAllocator->setCurEvalSVFGNode(node);
|
|
294
|
+
}
|
|
295
|
+
//@}
|
|
296
|
+
/// Set final condition after all path reachability analysis
|
|
297
|
+
inline void setFinalCond(const Condition &cond)
|
|
298
|
+
{
|
|
299
|
+
finalCond = cond;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/// Compute invalid branch condition stemming from removed strong update value-flow edges
|
|
303
|
+
Condition computeInvalidCondFromRemovedSUVFEdge(const SVFGNode * cur);
|
|
304
|
+
|
|
305
|
+
const SVFGNodeToSVFGNodeSetMap& getRemovedSUVFEdges() const
|
|
306
|
+
{
|
|
307
|
+
return pathAllocator->getRemovedSUVFEdges();
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
private:
|
|
311
|
+
SVFGNodeSet forwardslice; ///< the forward slice
|
|
312
|
+
SVFGNodeSet backwardslice; ///< the backward slice
|
|
313
|
+
SVFGNodeSet sinks; ///< a set of sink nodes
|
|
314
|
+
const SVFGNode* root; ///< root node on the slice
|
|
315
|
+
SVFGNodeToCondMap svfgNodeToCondMap; ///< map a SVFGNode to its path condition starting from root
|
|
316
|
+
bool partialReachable; ///< reachable from some paths
|
|
317
|
+
bool fullReachable; ///< reachable from all paths
|
|
318
|
+
bool reachGlob; ///< Whether slice reach a global
|
|
319
|
+
SaberCondAllocator* pathAllocator; ///< path condition allocator
|
|
320
|
+
const SVFGNode* _curSVFGNode; ///< current svfg node during guard computation
|
|
321
|
+
Condition finalCond; ///< final condition
|
|
322
|
+
const SVFG* svfg; ///< SVFG
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
} // End namespace SVF
|
|
326
|
+
|
|
327
|
+
#endif /* PROGSLICE_H_ */
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
//===- SaberCheckerAPI.h -- API for checkers in Saber-------------------------//
|
|
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
|
+
* SaberCheckerAPI.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Apr 23, 2014
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef SABERCHECKERAPI_H_
|
|
31
|
+
#define SABERCHECKERAPI_H_
|
|
32
|
+
|
|
33
|
+
#include "Util/SVFUtil.h"
|
|
34
|
+
#include "Graphs/ICFGNode.h"
|
|
35
|
+
#include "SVFIR/SVFVariables.h" // add header
|
|
36
|
+
|
|
37
|
+
namespace SVF
|
|
38
|
+
{
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
* Saber Checker API class contains interfaces for various bug checking
|
|
42
|
+
* memory leak detection e.g., alloc free
|
|
43
|
+
* incorrect file operation detection, e.g., fopen, fclose
|
|
44
|
+
*/
|
|
45
|
+
class SaberCheckerAPI
|
|
46
|
+
{
|
|
47
|
+
|
|
48
|
+
public:
|
|
49
|
+
enum CHECKER_TYPE
|
|
50
|
+
{
|
|
51
|
+
CK_DUMMY = 0, /// dummy type
|
|
52
|
+
CK_ALLOC, /// memory allocation
|
|
53
|
+
CK_FREE, /// memory deallocation
|
|
54
|
+
CK_FOPEN, /// File open
|
|
55
|
+
CK_FCLOSE /// File close
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
typedef Map<std::string, CHECKER_TYPE> TDAPIMap;
|
|
59
|
+
|
|
60
|
+
private:
|
|
61
|
+
/// API map, from a string to threadAPI type
|
|
62
|
+
TDAPIMap tdAPIMap;
|
|
63
|
+
|
|
64
|
+
/// Constructor
|
|
65
|
+
SaberCheckerAPI ()
|
|
66
|
+
{
|
|
67
|
+
init();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/// Initialize the map
|
|
71
|
+
void init();
|
|
72
|
+
|
|
73
|
+
/// Static reference
|
|
74
|
+
static SaberCheckerAPI* ckAPI;
|
|
75
|
+
|
|
76
|
+
/// Get the function type of a function
|
|
77
|
+
inline CHECKER_TYPE getType(const FunObjVar* F) const
|
|
78
|
+
{
|
|
79
|
+
if(F)
|
|
80
|
+
{
|
|
81
|
+
TDAPIMap::const_iterator it= tdAPIMap.find(F->getName());
|
|
82
|
+
if(it != tdAPIMap.end())
|
|
83
|
+
return it->second;
|
|
84
|
+
}
|
|
85
|
+
return CK_DUMMY;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public:
|
|
89
|
+
/// Return a static reference
|
|
90
|
+
static SaberCheckerAPI* getCheckerAPI()
|
|
91
|
+
{
|
|
92
|
+
if(ckAPI == nullptr)
|
|
93
|
+
{
|
|
94
|
+
ckAPI = new SaberCheckerAPI();
|
|
95
|
+
}
|
|
96
|
+
return ckAPI;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/// Return true if this call is a memory allocation
|
|
100
|
+
//@{
|
|
101
|
+
inline bool isMemAlloc(const FunObjVar* fun) const
|
|
102
|
+
{
|
|
103
|
+
return getType(fun) == CK_ALLOC;
|
|
104
|
+
}
|
|
105
|
+
inline bool isMemAlloc(const CallICFGNode* cs) const
|
|
106
|
+
{
|
|
107
|
+
return isMemAlloc(cs->getCalledFunction());
|
|
108
|
+
}
|
|
109
|
+
//@}
|
|
110
|
+
|
|
111
|
+
/// Return true if this call is a memory deallocation
|
|
112
|
+
//@{
|
|
113
|
+
inline bool isMemDealloc(const FunObjVar* fun) const
|
|
114
|
+
{
|
|
115
|
+
return getType(fun) == CK_FREE;
|
|
116
|
+
}
|
|
117
|
+
inline bool isMemDealloc(const CallICFGNode* cs) const
|
|
118
|
+
{
|
|
119
|
+
return isMemDealloc(cs->getCalledFunction());
|
|
120
|
+
}
|
|
121
|
+
//@}
|
|
122
|
+
|
|
123
|
+
/// Return true if this call is a file open
|
|
124
|
+
//@{
|
|
125
|
+
inline bool isFOpen(const FunObjVar* fun) const
|
|
126
|
+
{
|
|
127
|
+
return getType(fun) == CK_FOPEN;
|
|
128
|
+
}
|
|
129
|
+
inline bool isFOpen(const CallICFGNode* cs) const
|
|
130
|
+
{
|
|
131
|
+
return isFOpen(cs->getCalledFunction());
|
|
132
|
+
}
|
|
133
|
+
//@}
|
|
134
|
+
|
|
135
|
+
/// Return true if this call is a file close
|
|
136
|
+
//@{
|
|
137
|
+
inline bool isFClose(const FunObjVar* fun) const
|
|
138
|
+
{
|
|
139
|
+
return getType(fun) == CK_FCLOSE;
|
|
140
|
+
}
|
|
141
|
+
inline bool isFClose(const CallICFGNode* cs) const
|
|
142
|
+
{
|
|
143
|
+
return isFClose(cs->getCalledFunction());
|
|
144
|
+
}
|
|
145
|
+
//@}
|
|
146
|
+
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
} // End namespace SVF
|
|
150
|
+
|
|
151
|
+
#endif /* SABERCHECKERAPI_H_ */
|