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,317 @@
|
|
|
1
|
+
//===- SaberCondAllocator.h -- Path condition manipulation---------------------//
|
|
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
|
+
* PathAllocator.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Apr 3, 2014
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef PATHALLOCATOR_H_
|
|
31
|
+
#define PATHALLOCATOR_H_
|
|
32
|
+
|
|
33
|
+
#include "SVFIR/SVFValue.h"
|
|
34
|
+
#include "Util/WorkList.h"
|
|
35
|
+
#include "Graphs/SVFG.h"
|
|
36
|
+
#include "Util/Z3Expr.h"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
namespace SVF
|
|
40
|
+
{
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* SaberCondAllocator allocates conditions for each basic block of a certain CFG.
|
|
44
|
+
*/
|
|
45
|
+
class SaberCondAllocator
|
|
46
|
+
{
|
|
47
|
+
|
|
48
|
+
public:
|
|
49
|
+
|
|
50
|
+
typedef Z3Expr Condition; /// z3 condition
|
|
51
|
+
typedef Map<u32_t, const ICFGNode*> IndexToTermInstMap; /// id to instruction map for z3
|
|
52
|
+
typedef Map<u32_t,Condition> CondPosMap; ///< map a branch to its Condition
|
|
53
|
+
typedef Map<const SVFBasicBlock*, CondPosMap > BBCondMap; /// map bb to a Condition
|
|
54
|
+
typedef Set<const SVFBasicBlock*> BasicBlockSet;
|
|
55
|
+
typedef Map<const FunObjVar*, BasicBlockSet> FunToExitBBsMap; ///< map a function to all its basic blocks calling program exit
|
|
56
|
+
typedef Map<const SVFBasicBlock*, Condition> BBToCondMap; ///< map a basic block to its condition during control-flow guard computation
|
|
57
|
+
typedef FIFOWorkList<const SVFBasicBlock*> CFWorkList; ///< worklist for control-flow guard computation
|
|
58
|
+
typedef Map<const SVFGNode*, Set<const SVFGNode*>> SVFGNodeToSVFGNodeSetMap;
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
/// Constructor
|
|
62
|
+
SaberCondAllocator();
|
|
63
|
+
|
|
64
|
+
/// Destructor
|
|
65
|
+
virtual ~SaberCondAllocator()
|
|
66
|
+
{
|
|
67
|
+
}
|
|
68
|
+
/// Statistics
|
|
69
|
+
//@{
|
|
70
|
+
inline std::string getMemUsage()
|
|
71
|
+
{
|
|
72
|
+
u32_t vmrss, vmsize;
|
|
73
|
+
if (SVFUtil::getMemoryUsageKB(&vmrss, &vmsize))
|
|
74
|
+
return std::to_string(vmsize) + "KB";
|
|
75
|
+
else
|
|
76
|
+
return "cannot read memory usage";
|
|
77
|
+
}
|
|
78
|
+
inline u32_t getCondNum()
|
|
79
|
+
{
|
|
80
|
+
return totalCondNum;
|
|
81
|
+
}
|
|
82
|
+
//@}
|
|
83
|
+
|
|
84
|
+
/// Condition operations
|
|
85
|
+
//@{
|
|
86
|
+
inline Condition condAnd(const Condition& lhs, const Condition& rhs)
|
|
87
|
+
{
|
|
88
|
+
return Condition::AND(lhs,rhs);
|
|
89
|
+
}
|
|
90
|
+
inline Condition condOr(const Condition& lhs, const Condition& rhs)
|
|
91
|
+
{
|
|
92
|
+
return Condition::OR(lhs,rhs);
|
|
93
|
+
}
|
|
94
|
+
inline Condition condNeg(const Condition& cond)
|
|
95
|
+
{
|
|
96
|
+
return Condition::NEG(cond);
|
|
97
|
+
}
|
|
98
|
+
inline Condition getTrueCond() const
|
|
99
|
+
{
|
|
100
|
+
return Condition::getTrueCond();
|
|
101
|
+
}
|
|
102
|
+
inline Condition getFalseCond() const
|
|
103
|
+
{
|
|
104
|
+
return Condition::getFalseCond();
|
|
105
|
+
}
|
|
106
|
+
/// Iterator every element of the condition
|
|
107
|
+
inline NodeBS exactCondElem(const Condition& cond)
|
|
108
|
+
{
|
|
109
|
+
NodeBS elems;
|
|
110
|
+
extractSubConds(cond, elems);
|
|
111
|
+
return elems;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
inline std::string dumpCond(const Condition& cond) const
|
|
115
|
+
{
|
|
116
|
+
return Condition::dumpStr(cond);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/// Allocate a new condition
|
|
120
|
+
Condition newCond(const ICFGNode* inst);
|
|
121
|
+
|
|
122
|
+
/// Perform path allocation
|
|
123
|
+
void allocate();
|
|
124
|
+
|
|
125
|
+
/// Get/Set instruction based on Z3 expression id
|
|
126
|
+
//{@
|
|
127
|
+
inline const ICFGNode* getCondInst(u32_t id) const
|
|
128
|
+
{
|
|
129
|
+
IndexToTermInstMap::const_iterator it = idToTermInstMap.find(id);
|
|
130
|
+
assert(it != idToTermInstMap.end() && "this should be a fresh condition");
|
|
131
|
+
return it->second;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
inline void setCondInst(const Condition &condition, const ICFGNode* inst)
|
|
135
|
+
{
|
|
136
|
+
assert(idToTermInstMap.find(condition.id()) == idToTermInstMap.end() && "this should be a fresh condition");
|
|
137
|
+
idToTermInstMap[condition.id()] = inst;
|
|
138
|
+
}
|
|
139
|
+
//@}
|
|
140
|
+
|
|
141
|
+
bool isNegCond(u32_t id) const
|
|
142
|
+
{
|
|
143
|
+
return negConds.test(id);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
inline bool postDominate(const SVFBasicBlock* bbKey, const SVFBasicBlock* bbValue) const
|
|
147
|
+
{
|
|
148
|
+
const FunObjVar* keyFunc = bbKey->getParent();
|
|
149
|
+
const FunObjVar* valueFunc = bbValue->getParent();
|
|
150
|
+
bool funcEq = (keyFunc == valueFunc);
|
|
151
|
+
(void)funcEq; // Suppress warning of unused variable under release build
|
|
152
|
+
assert(funcEq && "two basicblocks should be in the same function!");
|
|
153
|
+
return keyFunc->postDominate(bbKey,bbValue);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
inline bool dominate(const SVFBasicBlock* bbKey, const SVFBasicBlock* bbValue) const
|
|
157
|
+
{
|
|
158
|
+
const FunObjVar* keyFunc = bbKey->getParent();
|
|
159
|
+
const FunObjVar* valueFunc = bbValue->getParent();
|
|
160
|
+
bool funcEq = (keyFunc == valueFunc);
|
|
161
|
+
(void)funcEq; // Suppress warning of unused variable under release build
|
|
162
|
+
assert(funcEq && "two basicblocks should be in the same function!");
|
|
163
|
+
return keyFunc->dominate(bbKey,bbValue);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/// Guard Computation for a value-flow (between two basic blocks)
|
|
167
|
+
//@{
|
|
168
|
+
virtual Condition ComputeIntraVFGGuard(const SVFBasicBlock* src, const SVFBasicBlock* dst);
|
|
169
|
+
virtual Condition ComputeInterCallVFGGuard(const SVFBasicBlock* src, const SVFBasicBlock* dst, const SVFBasicBlock* callBB);
|
|
170
|
+
virtual Condition ComputeInterRetVFGGuard(const SVFBasicBlock* src, const SVFBasicBlock* dst, const SVFBasicBlock* retBB);
|
|
171
|
+
|
|
172
|
+
/// Get complement condition (from B1 to B0) according to a complementBB (BB2) at a phi
|
|
173
|
+
/// e.g., B0: dstBB; B1:incomingBB; B2:complementBB
|
|
174
|
+
virtual Condition getPHIComplementCond(const SVFBasicBlock* BB1, const SVFBasicBlock* BB2, const SVFBasicBlock* BB0);
|
|
175
|
+
|
|
176
|
+
inline void clearCFCond()
|
|
177
|
+
{
|
|
178
|
+
bbToCondMap.clear();
|
|
179
|
+
}
|
|
180
|
+
/// Set current value for branch condition evaluation
|
|
181
|
+
inline void setCurEvalSVFGNode(const SVFGNode* node)
|
|
182
|
+
{
|
|
183
|
+
curEvalSVFGNode = node;
|
|
184
|
+
}
|
|
185
|
+
/// Get current value for branch condition evaluation
|
|
186
|
+
inline const SVFGNode* getCurEvalSVFGNode() const
|
|
187
|
+
{
|
|
188
|
+
return curEvalSVFGNode;
|
|
189
|
+
}
|
|
190
|
+
//@}
|
|
191
|
+
|
|
192
|
+
/// Print out the path condition information
|
|
193
|
+
void printPathCond();
|
|
194
|
+
|
|
195
|
+
/// whether condition is satisfiable
|
|
196
|
+
bool isSatisfiable(const Condition& condition);
|
|
197
|
+
|
|
198
|
+
/// whether condition is satisfiable for all possible boolean guards
|
|
199
|
+
inline bool isAllPathReachable(Condition& condition)
|
|
200
|
+
{
|
|
201
|
+
return isEquivalentBranchCond(condition, Condition::getTrueCond());
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/// Whether lhs and rhs are equivalent branch conditions
|
|
205
|
+
bool isEquivalentBranchCond(const Condition &lhs, const Condition &rhs) const;
|
|
206
|
+
|
|
207
|
+
inline ICFG* getICFG() const
|
|
208
|
+
{
|
|
209
|
+
return PAG::getPAG()->getICFG();
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/// Get/Set control-flow conditions
|
|
213
|
+
//@{
|
|
214
|
+
inline bool setCFCond(const SVFBasicBlock* bb, const Condition& cond)
|
|
215
|
+
{
|
|
216
|
+
BBToCondMap::iterator it = bbToCondMap.find(bb);
|
|
217
|
+
// until a fixed-point is reached (condition is not changed)
|
|
218
|
+
if(it!=bbToCondMap.end() && isEquivalentBranchCond(it->second, cond))
|
|
219
|
+
return false;
|
|
220
|
+
|
|
221
|
+
bbToCondMap[bb] = cond;
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
224
|
+
inline Condition getCFCond(const SVFBasicBlock* bb) const
|
|
225
|
+
{
|
|
226
|
+
BBToCondMap::const_iterator it = bbToCondMap.find(bb);
|
|
227
|
+
if(it==bbToCondMap.end())
|
|
228
|
+
{
|
|
229
|
+
return getFalseCond();
|
|
230
|
+
}
|
|
231
|
+
return it->second;
|
|
232
|
+
}
|
|
233
|
+
//@}
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
/// mark neg Z3 expression
|
|
237
|
+
inline void setNegCondInst(const Condition &condition, const ICFGNode* inst)
|
|
238
|
+
{
|
|
239
|
+
setCondInst(condition, inst);
|
|
240
|
+
negConds.set(condition.id());
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
SVFGNodeToSVFGNodeSetMap & getRemovedSUVFEdges()
|
|
244
|
+
{
|
|
245
|
+
return removedSUVFEdges;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
private:
|
|
249
|
+
|
|
250
|
+
/// Allocate path condition for every basic block
|
|
251
|
+
virtual void allocateForBB(const SVFBasicBlock& bb);
|
|
252
|
+
|
|
253
|
+
/// Get/Set a branch condition, and its terminator instruction
|
|
254
|
+
//@{
|
|
255
|
+
/// Set branch condition
|
|
256
|
+
void setBranchCond(const SVFBasicBlock* bb, const SVFBasicBlock* succ, const Condition& cond);
|
|
257
|
+
/// Get branch condition
|
|
258
|
+
Condition getBranchCond(const SVFBasicBlock* bb, const SVFBasicBlock* succ) const;
|
|
259
|
+
///Get a condition, evaluate the value for conditions if necessary (e.g., testNull like express)
|
|
260
|
+
Condition getEvalBrCond(const SVFBasicBlock* bb, const SVFBasicBlock* succ);
|
|
261
|
+
//@}
|
|
262
|
+
/// Evaluate branch conditions
|
|
263
|
+
//@{
|
|
264
|
+
/// Evaluate the branch condition
|
|
265
|
+
Condition evaluateBranchCond(const SVFBasicBlock* bb, const SVFBasicBlock* succ) ;
|
|
266
|
+
/// Evaluate loop exit branch
|
|
267
|
+
Condition evaluateLoopExitBranch(const SVFBasicBlock* bb, const SVFBasicBlock* succ);
|
|
268
|
+
/// Return branch condition after evaluating test null like expression
|
|
269
|
+
Condition evaluateTestNullLikeExpr(const BranchStmt* branchStmt, const SVFBasicBlock* succ);
|
|
270
|
+
/// Return condition when there is a branch calls program exit
|
|
271
|
+
Condition evaluateProgExit(const BranchStmt* branchStmt, const SVFBasicBlock* succ);
|
|
272
|
+
/// Collect basic block contains program exit function call
|
|
273
|
+
void collectBBCallingProgExit(const SVFBasicBlock& bb);
|
|
274
|
+
bool isBBCallsProgExit(const SVFBasicBlock* bb);
|
|
275
|
+
//@}
|
|
276
|
+
|
|
277
|
+
/// Evaluate test null/not null like expressions
|
|
278
|
+
//@{
|
|
279
|
+
/// Return true if the predicate of this compare instruction is equal
|
|
280
|
+
bool isEQCmp(const CmpStmt* cmp) const;
|
|
281
|
+
/// Return true if the predicate of this compare instruction is not equal
|
|
282
|
+
bool isNECmp(const CmpStmt* cmp) const;
|
|
283
|
+
/// Return true if this is a test null expression
|
|
284
|
+
bool isTestNullExpr(const ICFGNode* test) const;
|
|
285
|
+
/// Return true if this is a test not null expression
|
|
286
|
+
bool isTestNotNullExpr(const ICFGNode* test) const;
|
|
287
|
+
/// Return true if two values on the predicate are what we want
|
|
288
|
+
bool isTestContainsNullAndTheValue(const CmpStmt* cmp) const;
|
|
289
|
+
//@}
|
|
290
|
+
|
|
291
|
+
/// Release memory
|
|
292
|
+
void destroy()
|
|
293
|
+
{
|
|
294
|
+
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/// extract subexpression from a Z3 expression
|
|
298
|
+
void extractSubConds(const Condition &condition, NodeBS &support) const;
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
FunToExitBBsMap funToExitBBsMap; ///< map a function to all its basic blocks calling program exit
|
|
302
|
+
BBToCondMap bbToCondMap; ///< map a basic block to its path condition starting from root
|
|
303
|
+
const SVFGNode* curEvalSVFGNode{}; ///< current llvm value to evaluate branch condition when computing guards
|
|
304
|
+
IndexToTermInstMap idToTermInstMap; ///key: z3 expression id, value: instruction
|
|
305
|
+
NodeBS negConds; ///bit vector for distinguish neg
|
|
306
|
+
std::vector<Condition> conditionVec; /// vector storing z3expression
|
|
307
|
+
static u32_t totalCondNum; /// a counter for fresh condition
|
|
308
|
+
SVFGNodeToSVFGNodeSetMap removedSUVFEdges;
|
|
309
|
+
|
|
310
|
+
protected:
|
|
311
|
+
BBCondMap bbConds; ///< map basic block to its successors/predecessors branch conditions
|
|
312
|
+
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
} // End namespace SVF
|
|
316
|
+
|
|
317
|
+
#endif /* PATHALLOCATOR_H_ */
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
//===- SaberSVFGBuilder.h -- Building SVFG for 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
|
+
* SaberSVFGBuilder.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: May 1, 2014
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef SABERSVFGBUILDER_H_
|
|
31
|
+
#define SABERSVFGBUILDER_H_
|
|
32
|
+
|
|
33
|
+
#include "MSSA/SVFGBuilder.h"
|
|
34
|
+
#include "SVFIR/SVFValue.h"
|
|
35
|
+
#include "Util/WorkList.h"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
namespace SVF
|
|
39
|
+
{
|
|
40
|
+
|
|
41
|
+
class SaberCondAllocator;
|
|
42
|
+
|
|
43
|
+
class SaberSVFGBuilder : public SVFGBuilder
|
|
44
|
+
{
|
|
45
|
+
|
|
46
|
+
public:
|
|
47
|
+
typedef Set<const SVFGNode*> SVFGNodeSet;
|
|
48
|
+
typedef Map<NodeID, PointsTo> NodeToPTSSMap;
|
|
49
|
+
typedef FIFOWorkList<NodeID> WorkList;
|
|
50
|
+
|
|
51
|
+
/// Constructor
|
|
52
|
+
SaberSVFGBuilder(): SVFGBuilder(true) {}
|
|
53
|
+
|
|
54
|
+
/// Destructor
|
|
55
|
+
virtual ~SaberSVFGBuilder() {}
|
|
56
|
+
|
|
57
|
+
inline bool isGlobalSVFGNode(const SVFGNode* node) const
|
|
58
|
+
{
|
|
59
|
+
return globSVFGNodes.find(node)!=globSVFGNodes.end();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/// Add ActualParmVFGNode
|
|
63
|
+
inline void addActualParmVFGNode(const PAGNode* pagNode, const CallICFGNode* cs)
|
|
64
|
+
{
|
|
65
|
+
svfg->addActualParmVFGNode(pagNode, cs);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
void setSaberCondAllocator(SaberCondAllocator* allocator)
|
|
69
|
+
{
|
|
70
|
+
saberCondAllocator = allocator;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
protected:
|
|
74
|
+
/// Re-write create SVFG method
|
|
75
|
+
virtual void buildSVFG();
|
|
76
|
+
|
|
77
|
+
/// Return TRUE if this is a strong update STORE statement.
|
|
78
|
+
bool isStrongUpdate(const SVFGNode* node, NodeID& singleton, BVDataPTAImpl* pta);
|
|
79
|
+
|
|
80
|
+
protected:
|
|
81
|
+
/// Remove direct value-flow edge to a dereference point for Saber source-sink memory error detection
|
|
82
|
+
/// for example, given two statements: p = alloc; q = *p, the direct SVFG edge between them is deleted
|
|
83
|
+
/// Because those edges only stand for values used at the dereference points but they can not pass the value to other definitions
|
|
84
|
+
void rmDerefDirSVFGEdges(BVDataPTAImpl* pta);
|
|
85
|
+
|
|
86
|
+
/// Remove Incoming Edge for strong-update (SU) store instruction
|
|
87
|
+
/// Because the SU node does not receive indirect value
|
|
88
|
+
virtual void rmIncomingEdgeForSUStore(BVDataPTAImpl* pta);
|
|
89
|
+
|
|
90
|
+
/// Add actual parameter SVFGNode for 1st argument of a deallocation like external function
|
|
91
|
+
/// In order to path sensitive leak detection
|
|
92
|
+
virtual void AddExtActualParmSVFGNodes(CallGraph* callgraph);
|
|
93
|
+
|
|
94
|
+
/// Collect memory pointed global pointers,
|
|
95
|
+
/// note that this collection is recursively performed, for example gp-->obj-->obj'
|
|
96
|
+
/// obj and obj' are both considered global memory
|
|
97
|
+
void collectGlobals(BVDataPTAImpl* pta);
|
|
98
|
+
|
|
99
|
+
/// Whether points-to of a PAGNode points-to global variable
|
|
100
|
+
bool accessGlobal(BVDataPTAImpl* pta,const PAGNode* pagNode);
|
|
101
|
+
|
|
102
|
+
/// Collect objects along points-to chains
|
|
103
|
+
PointsTo& CollectPtsChain(BVDataPTAImpl* pta,NodeID id, NodeToPTSSMap& cachedPtsMap);
|
|
104
|
+
|
|
105
|
+
PointsTo globs;
|
|
106
|
+
/// Store all global SVFG nodes
|
|
107
|
+
SVFGNodeSet globSVFGNodes;
|
|
108
|
+
|
|
109
|
+
SaberCondAllocator* saberCondAllocator;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
} // End namespace SVF
|
|
113
|
+
|
|
114
|
+
#endif /* SABERSVFGBUILDER_H_ */
|