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,478 @@
|
|
|
1
|
+
//===- SVFUtil.h -- Analysis helper 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
|
+
* SVFUtil.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Apr 11, 2013
|
|
27
|
+
* Author: Yulei Sui, dye
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef AnalysisUtil_H_
|
|
31
|
+
#define AnalysisUtil_H_
|
|
32
|
+
|
|
33
|
+
#include "FastCluster/fastcluster.h"
|
|
34
|
+
#include "SVFIR/SVFValue.h"
|
|
35
|
+
#include "Util/SVFLoopAndDomInfo.h"
|
|
36
|
+
#include "Util/ExtAPI.h"
|
|
37
|
+
#include "MemoryModel/PointsTo.h"
|
|
38
|
+
#include <time.h>
|
|
39
|
+
#include "Util/NodeIDAllocator.h"
|
|
40
|
+
#include "Util/ThreadAPI.h"
|
|
41
|
+
|
|
42
|
+
namespace SVF
|
|
43
|
+
{
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* Util class to assist pointer analysis
|
|
47
|
+
*/
|
|
48
|
+
namespace SVFUtil
|
|
49
|
+
{
|
|
50
|
+
|
|
51
|
+
/// Overwrite llvm::outs()
|
|
52
|
+
inline std::ostream &outs()
|
|
53
|
+
{
|
|
54
|
+
return std::cout;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/// Overwrite llvm::errs()
|
|
58
|
+
inline std::ostream &errs()
|
|
59
|
+
{
|
|
60
|
+
return std::cerr;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/// Dump sparse bitvector set
|
|
64
|
+
void dumpSet(NodeBS To, OutStream & O = SVFUtil::outs());
|
|
65
|
+
void dumpSet(PointsTo To, OutStream & O = SVFUtil::outs());
|
|
66
|
+
|
|
67
|
+
/// Dump points-to set
|
|
68
|
+
void dumpPointsToSet(unsigned node, NodeBS To) ;
|
|
69
|
+
void dumpSparseSet(const NodeBS& To);
|
|
70
|
+
|
|
71
|
+
/// Dump alias set
|
|
72
|
+
void dumpAliasSet(unsigned node, NodeBS To) ;
|
|
73
|
+
|
|
74
|
+
/// Returns successful message by converting a string into green string output
|
|
75
|
+
std::string sucMsg(const std::string& msg);
|
|
76
|
+
|
|
77
|
+
/// Returns warning message by converting a string into yellow string output
|
|
78
|
+
std::string wrnMsg(const std::string& msg);
|
|
79
|
+
|
|
80
|
+
/// Writes a message run through wrnMsg.
|
|
81
|
+
void writeWrnMsg(const std::string& msg);
|
|
82
|
+
|
|
83
|
+
/// Print error message by converting a string into red string output
|
|
84
|
+
//@{
|
|
85
|
+
std::string errMsg(const std::string& msg);
|
|
86
|
+
std::string bugMsg1(const std::string& msg);
|
|
87
|
+
std::string bugMsg2(const std::string& msg);
|
|
88
|
+
std::string bugMsg3(const std::string& msg);
|
|
89
|
+
//@}
|
|
90
|
+
|
|
91
|
+
/// Print each pass/phase message by converting a string into blue string output
|
|
92
|
+
std::string pasMsg(const std::string& msg);
|
|
93
|
+
|
|
94
|
+
/// Print memory usage in KB.
|
|
95
|
+
void reportMemoryUsageKB(const std::string& infor,
|
|
96
|
+
OutStream& O = SVFUtil::outs());
|
|
97
|
+
|
|
98
|
+
/// Get memory usage from system file. Return TRUE if succeed.
|
|
99
|
+
bool getMemoryUsageKB(u32_t* vmrss_kb, u32_t* vmsize_kb);
|
|
100
|
+
|
|
101
|
+
/// Increase the stack size limit
|
|
102
|
+
void increaseStackSize();
|
|
103
|
+
|
|
104
|
+
/*!
|
|
105
|
+
* Compare two PointsTo according to their size and points-to elements.
|
|
106
|
+
* 1. PointsTo with smaller size is smaller than the other;
|
|
107
|
+
* 2. If the sizes are equal, comparing the points-to targets.
|
|
108
|
+
*/
|
|
109
|
+
inline bool cmpPts (const PointsTo& lpts,const PointsTo& rpts)
|
|
110
|
+
{
|
|
111
|
+
if (lpts.count() != rpts.count())
|
|
112
|
+
return (lpts.count() < rpts.count());
|
|
113
|
+
else
|
|
114
|
+
{
|
|
115
|
+
PointsTo::iterator bit = lpts.begin(), eit = lpts.end();
|
|
116
|
+
PointsTo::iterator rbit = rpts.begin(), reit = rpts.end();
|
|
117
|
+
for (; bit != eit && rbit != reit; bit++, rbit++)
|
|
118
|
+
{
|
|
119
|
+
if (*bit != *rbit)
|
|
120
|
+
return (*bit < *rbit);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
inline bool cmpNodeBS(const NodeBS& lpts,const NodeBS& rpts)
|
|
128
|
+
{
|
|
129
|
+
if (lpts.count() != rpts.count())
|
|
130
|
+
return (lpts.count() < rpts.count());
|
|
131
|
+
else
|
|
132
|
+
{
|
|
133
|
+
NodeBS::iterator bit = lpts.begin(), eit = lpts.end();
|
|
134
|
+
NodeBS::iterator rbit = rpts.begin(), reit = rpts.end();
|
|
135
|
+
for (; bit != eit && rbit != reit; bit++, rbit++)
|
|
136
|
+
{
|
|
137
|
+
if (*bit != *rbit)
|
|
138
|
+
return (*bit < *rbit);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
typedef struct equalPointsTo
|
|
146
|
+
{
|
|
147
|
+
bool operator()(const PointsTo& lhs, const PointsTo& rhs) const
|
|
148
|
+
{
|
|
149
|
+
return SVFUtil::cmpPts(lhs, rhs);
|
|
150
|
+
}
|
|
151
|
+
} equalPointsTo;
|
|
152
|
+
|
|
153
|
+
typedef struct equalNodeBS
|
|
154
|
+
{
|
|
155
|
+
bool operator()(const NodeBS& lhs, const NodeBS& rhs) const
|
|
156
|
+
{
|
|
157
|
+
return SVFUtil::cmpNodeBS(lhs, rhs);
|
|
158
|
+
}
|
|
159
|
+
} equalNodeBS;
|
|
160
|
+
|
|
161
|
+
inline NodeBS ptsToNodeBS(const PointsTo &pts)
|
|
162
|
+
{
|
|
163
|
+
NodeBS nbs;
|
|
164
|
+
for (const NodeID o : pts) nbs.set(o);
|
|
165
|
+
return nbs;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
typedef OrderedSet<PointsTo, equalPointsTo> PointsToList;
|
|
169
|
+
void dumpPointsToList(const PointsToList& ptl);
|
|
170
|
+
|
|
171
|
+
/// Return true if it is an llvm intrinsic instruction
|
|
172
|
+
bool isIntrinsicInst(const ICFGNode* inst);
|
|
173
|
+
//@}
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
bool isCallSite(const ICFGNode* inst);
|
|
177
|
+
|
|
178
|
+
bool isRetInstNode(const ICFGNode* node);
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
/// Whether an instruction is a callsite in the application code, excluding llvm intrinsic calls
|
|
182
|
+
inline bool isNonInstricCallSite(const ICFGNode* inst)
|
|
183
|
+
{
|
|
184
|
+
if(isIntrinsicInst(inst))
|
|
185
|
+
return false;
|
|
186
|
+
return isCallSite(inst);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/// Match arguments for callsite at caller and callee
|
|
190
|
+
/// if the arg size does not match then we do not need to connect this parameter
|
|
191
|
+
/// unless the callee is a variadic function (the first parameter of variadic function is its parameter number)
|
|
192
|
+
bool matchArgs(const CallICFGNode* cs, const FunObjVar* callee);
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
/// Split into two substrings around the first occurrence of a separator string.
|
|
196
|
+
inline std::vector<std::string> split(const std::string& s, char separator)
|
|
197
|
+
{
|
|
198
|
+
std::vector<std::string> output;
|
|
199
|
+
std::string::size_type prev_pos = 0, pos = 0;
|
|
200
|
+
while ((pos = s.find(separator, pos)) != std::string::npos)
|
|
201
|
+
{
|
|
202
|
+
std::string substring(s.substr(prev_pos, pos - prev_pos));
|
|
203
|
+
if (!substring.empty())
|
|
204
|
+
{
|
|
205
|
+
output.push_back(substring);
|
|
206
|
+
}
|
|
207
|
+
prev_pos = ++pos;
|
|
208
|
+
}
|
|
209
|
+
std::string lastSubstring(s.substr(prev_pos, pos - prev_pos));
|
|
210
|
+
if (!lastSubstring.empty())
|
|
211
|
+
{
|
|
212
|
+
output.push_back(lastSubstring);
|
|
213
|
+
}
|
|
214
|
+
return output;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/// Given a map mapping points-to sets to a count, adds from into to.
|
|
218
|
+
template <typename Data>
|
|
219
|
+
void mergePtsOccMaps(Map<Data, unsigned> &to, const Map<Data, unsigned> from)
|
|
220
|
+
{
|
|
221
|
+
for (const typename Map<Data, unsigned>::value_type &ptocc : from)
|
|
222
|
+
{
|
|
223
|
+
to[ptocc.first] += ptocc.second;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/// Returns a string representation of a hclust method.
|
|
228
|
+
std::string hclustMethodToString(hclust_fast_methods method);
|
|
229
|
+
|
|
230
|
+
/// Inserts an element into a Set/CondSet (with ::insert).
|
|
231
|
+
template <typename Key, typename KeySet>
|
|
232
|
+
inline void insertKey(const Key &key, KeySet &keySet)
|
|
233
|
+
{
|
|
234
|
+
keySet.insert(key);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/// Inserts a NodeID into a NodeBS.
|
|
238
|
+
inline void insertKey(const NodeID &key, NodeBS &keySet)
|
|
239
|
+
{
|
|
240
|
+
keySet.set(key);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/// Removes an element from a Set/CondSet (or anything implementing ::erase).
|
|
244
|
+
template <typename Key, typename KeySet>
|
|
245
|
+
inline void removeKey(const Key &key, KeySet &keySet)
|
|
246
|
+
{
|
|
247
|
+
keySet.erase(key);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/// Removes a NodeID from a NodeBS.
|
|
251
|
+
inline void removeKey(const NodeID &key, NodeBS &keySet)
|
|
252
|
+
{
|
|
253
|
+
keySet.reset(key);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/// Function to call when alarm for time limit hits.
|
|
257
|
+
void timeLimitReached(int signum);
|
|
258
|
+
|
|
259
|
+
/// Starts an analysis timer. If timeLimit is 0, sets no timer.
|
|
260
|
+
/// If an alarm has already been set, does not set another.
|
|
261
|
+
/// Returns whether we set a timer or not.
|
|
262
|
+
bool startAnalysisLimitTimer(unsigned timeLimit);
|
|
263
|
+
|
|
264
|
+
/// Stops an analysis timer. limitTimerSet indicates whether the caller set the
|
|
265
|
+
/// timer or not (return value of startLimitTimer).
|
|
266
|
+
void stopAnalysisLimitTimer(bool limitTimerSet);
|
|
267
|
+
|
|
268
|
+
/// Return true if the call is an external call (external library in function summary table)
|
|
269
|
+
/// If the library function is redefined in the application code (e.g., memcpy), it will return false and will not be treated as an external call.
|
|
270
|
+
//@{
|
|
271
|
+
|
|
272
|
+
bool isExtCall(const FunObjVar* fun);
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
/// Return true if the call is a heap allocator/reallocator
|
|
276
|
+
//@{
|
|
277
|
+
/// note that these two functions are not suppose to be used externally
|
|
278
|
+
|
|
279
|
+
inline bool isHeapAllocExtFunViaRet(const FunObjVar* fun)
|
|
280
|
+
{
|
|
281
|
+
return fun && (ExtAPI::getExtAPI()->is_alloc(fun)
|
|
282
|
+
|| ExtAPI::getExtAPI()->is_realloc(fun));
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
inline bool isHeapAllocExtFunViaArg(const FunObjVar* fun)
|
|
286
|
+
{
|
|
287
|
+
return fun && ExtAPI::getExtAPI()->is_arg_alloc(fun);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/// Get the position of argument that holds an allocated heap object.
|
|
291
|
+
//@{
|
|
292
|
+
|
|
293
|
+
inline u32_t getHeapAllocHoldingArgPosition(const FunObjVar* fun)
|
|
294
|
+
{
|
|
295
|
+
return ExtAPI::getExtAPI()->get_alloc_arg_pos(fun);
|
|
296
|
+
}
|
|
297
|
+
/// Return true if the call is a heap reallocator
|
|
298
|
+
//@{
|
|
299
|
+
/// note that this function is not suppose to be used externally
|
|
300
|
+
|
|
301
|
+
inline bool isReallocExtFun(const FunObjVar* fun)
|
|
302
|
+
{
|
|
303
|
+
return fun && (ExtAPI::getExtAPI()->is_realloc(fun));
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/// Program entry function e.g. main
|
|
307
|
+
//@{
|
|
308
|
+
/// Return true if this is a program entry function (e.g. main)
|
|
309
|
+
|
|
310
|
+
bool isProgEntryFunction(const FunObjVar*);
|
|
311
|
+
|
|
312
|
+
/// Get program entry function from function name.
|
|
313
|
+
const FunObjVar* getProgFunction(const std::string& funName);
|
|
314
|
+
|
|
315
|
+
/// Get program entry function.
|
|
316
|
+
const FunObjVar*getProgEntryFunction();
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
/// Return true if this is a program exit function call
|
|
320
|
+
//@{
|
|
321
|
+
bool isProgExitFunction(const FunObjVar *fun);
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
bool isArgOfUncalledFunction(const SVFVar* svfvar);
|
|
326
|
+
|
|
327
|
+
const ObjVar* getObjVarOfValVar(const ValVar* valVar);
|
|
328
|
+
|
|
329
|
+
/// Return thread fork function
|
|
330
|
+
//@{
|
|
331
|
+
inline const ValVar* getForkedFun(const CallICFGNode *inst)
|
|
332
|
+
{
|
|
333
|
+
return ThreadAPI::getThreadAPI()->getForkedFun(inst);
|
|
334
|
+
}
|
|
335
|
+
//@}
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
bool isExtCall(const CallICFGNode* cs);
|
|
339
|
+
|
|
340
|
+
bool isExtCall(const ICFGNode* node);
|
|
341
|
+
|
|
342
|
+
bool isHeapAllocExtCallViaArg(const CallICFGNode* cs);
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
/// interfaces to be used externally
|
|
346
|
+
bool isHeapAllocExtCallViaRet(const CallICFGNode* cs);
|
|
347
|
+
|
|
348
|
+
bool isHeapAllocExtCall(const ICFGNode* cs);
|
|
349
|
+
|
|
350
|
+
//@}
|
|
351
|
+
|
|
352
|
+
u32_t getHeapAllocHoldingArgPosition(const CallICFGNode* cs);
|
|
353
|
+
//@}
|
|
354
|
+
|
|
355
|
+
bool isReallocExtCall(const CallICFGNode* cs);
|
|
356
|
+
//@}
|
|
357
|
+
|
|
358
|
+
/// Return true if this is a thread creation call
|
|
359
|
+
///@{
|
|
360
|
+
inline bool isThreadForkCall(const CallICFGNode *inst)
|
|
361
|
+
{
|
|
362
|
+
return ThreadAPI::getThreadAPI()->isTDFork(inst);
|
|
363
|
+
}
|
|
364
|
+
//@}
|
|
365
|
+
|
|
366
|
+
/// Return true if this is a thread join call
|
|
367
|
+
///@{
|
|
368
|
+
inline bool isThreadJoinCall(const CallICFGNode* cs)
|
|
369
|
+
{
|
|
370
|
+
return ThreadAPI::getThreadAPI()->isTDJoin(cs);
|
|
371
|
+
}
|
|
372
|
+
//@}
|
|
373
|
+
|
|
374
|
+
/// Return true if this is a thread exit call
|
|
375
|
+
///@{
|
|
376
|
+
inline bool isThreadExitCall(const CallICFGNode* cs)
|
|
377
|
+
{
|
|
378
|
+
return ThreadAPI::getThreadAPI()->isTDExit(cs);
|
|
379
|
+
}
|
|
380
|
+
//@}
|
|
381
|
+
|
|
382
|
+
/// Return true if this is a lock acquire call
|
|
383
|
+
///@{
|
|
384
|
+
inline bool isLockAquireCall(const CallICFGNode* cs)
|
|
385
|
+
{
|
|
386
|
+
return ThreadAPI::getThreadAPI()->isTDAcquire(cs);
|
|
387
|
+
}
|
|
388
|
+
//@}
|
|
389
|
+
|
|
390
|
+
/// Return true if this is a lock acquire call
|
|
391
|
+
///@{
|
|
392
|
+
inline bool isLockReleaseCall(const CallICFGNode* cs)
|
|
393
|
+
{
|
|
394
|
+
return ThreadAPI::getThreadAPI()->isTDRelease(cs);
|
|
395
|
+
}
|
|
396
|
+
//@}
|
|
397
|
+
|
|
398
|
+
/// Return true if this is a barrier wait call
|
|
399
|
+
//@{
|
|
400
|
+
inline bool isBarrierWaitCall(const CallICFGNode* cs)
|
|
401
|
+
{
|
|
402
|
+
return ThreadAPI::getThreadAPI()->isTDBarWait(cs);
|
|
403
|
+
}
|
|
404
|
+
//@}
|
|
405
|
+
|
|
406
|
+
/// Return sole argument of the thread routine
|
|
407
|
+
//@{
|
|
408
|
+
inline const ValVar* getActualParmAtForkSite(const CallICFGNode* cs)
|
|
409
|
+
{
|
|
410
|
+
return ThreadAPI::getThreadAPI()->getActualParmAtForkSite(cs);
|
|
411
|
+
}
|
|
412
|
+
//@}
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
bool isProgExitCall(const CallICFGNode* cs);
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
template<typename T>
|
|
419
|
+
constexpr typename std::remove_reference<T>::type &&
|
|
420
|
+
move(T &&t) noexcept
|
|
421
|
+
{
|
|
422
|
+
return std::move(t);
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/// void_t is not available until C++17. We define it here for C++11/14.
|
|
426
|
+
template <typename... Ts> struct make_void
|
|
427
|
+
{
|
|
428
|
+
typedef void type;
|
|
429
|
+
};
|
|
430
|
+
template <typename... Ts> using void_t = typename make_void<Ts...>::type;
|
|
431
|
+
|
|
432
|
+
/// @brief Type trait that checks if a type is iterable
|
|
433
|
+
/// (can be applied on a range-based for loop)
|
|
434
|
+
///@{
|
|
435
|
+
template <typename T, typename = void> struct is_iterable : std::false_type {};
|
|
436
|
+
template <typename T>
|
|
437
|
+
struct is_iterable<T, void_t<decltype(std::begin(std::declval<T&>()) !=
|
|
438
|
+
std::end(std::declval<T&>()))>>
|
|
439
|
+
: std::true_type {};
|
|
440
|
+
template <typename T> constexpr bool is_iterable_v = is_iterable<T>::value;
|
|
441
|
+
///@}
|
|
442
|
+
|
|
443
|
+
/// @brief Type trait to check if a type is a map or unordered_map.
|
|
444
|
+
///@{
|
|
445
|
+
template <typename T> struct is_map : std::false_type {};
|
|
446
|
+
template <typename... Ts> struct is_map<std::map<Ts...>> : std::true_type {};
|
|
447
|
+
template <typename... Ts>
|
|
448
|
+
struct is_map<std::unordered_map<Ts...>> : std::true_type {};
|
|
449
|
+
template <typename... Ts> constexpr bool is_map_v = is_map<Ts...>::value;
|
|
450
|
+
///@}
|
|
451
|
+
|
|
452
|
+
/// @brief Type trait to check if a type is a set or unordered_set.
|
|
453
|
+
///@{
|
|
454
|
+
template <typename T> struct is_set : std::false_type {};
|
|
455
|
+
template <typename... Ts> struct is_set<std::set<Ts...>> : std::true_type {};
|
|
456
|
+
template <typename... Ts>
|
|
457
|
+
struct is_set<std::unordered_set<Ts...>> : std::true_type {};
|
|
458
|
+
template <typename... Ts> constexpr bool is_set_v = is_set<Ts...>::value;
|
|
459
|
+
///@}
|
|
460
|
+
|
|
461
|
+
/// @brief Type trait to check if a type is vector or list.
|
|
462
|
+
template <typename T> struct is_sequence_container : std::false_type {};
|
|
463
|
+
template <typename... Ts>
|
|
464
|
+
struct is_sequence_container<std::vector<Ts...>> : std::true_type {};
|
|
465
|
+
template <typename... Ts>
|
|
466
|
+
struct is_sequence_container<std::deque<Ts...>> : std::true_type {};
|
|
467
|
+
template <typename... Ts>
|
|
468
|
+
struct is_sequence_container<std::list<Ts...>> : std::true_type {};
|
|
469
|
+
template <typename... Ts>
|
|
470
|
+
constexpr bool is_sequence_container_v = is_sequence_container<Ts...>::value;
|
|
471
|
+
///@}
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
} // End namespace SVFUtil
|
|
475
|
+
|
|
476
|
+
} // End namespace SVF
|
|
477
|
+
|
|
478
|
+
#endif /* AnalysisUtil_H_ */
|