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,164 @@
|
|
|
1
|
+
//===- ICFGStat.h ----------------------------------------------------------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-2018> <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
|
+
* ICFGStat.h
|
|
24
|
+
*
|
|
25
|
+
* Created on: 12Sep.,2018
|
|
26
|
+
* Author: yulei
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
#ifndef INCLUDE_UTIL_ICFGSTAT_H_
|
|
30
|
+
#define INCLUDE_UTIL_ICFGSTAT_H_
|
|
31
|
+
|
|
32
|
+
#include "Util/PTAStat.h"
|
|
33
|
+
#include "Graphs/ICFG.h"
|
|
34
|
+
#include <iomanip>
|
|
35
|
+
|
|
36
|
+
namespace SVF
|
|
37
|
+
{
|
|
38
|
+
|
|
39
|
+
class ICFGStat : public PTAStat
|
|
40
|
+
{
|
|
41
|
+
|
|
42
|
+
private:
|
|
43
|
+
ICFG *icfg;
|
|
44
|
+
int numOfNodes;
|
|
45
|
+
int numOfCallNodes;
|
|
46
|
+
int numOfRetNodes;
|
|
47
|
+
int numOfEntryNodes;
|
|
48
|
+
int numOfExitNodes;
|
|
49
|
+
int numOfIntraNodes;
|
|
50
|
+
|
|
51
|
+
int numOfEdges;
|
|
52
|
+
int numOfCallEdges;
|
|
53
|
+
int numOfRetEdges;
|
|
54
|
+
int numOfIntraEdges;
|
|
55
|
+
|
|
56
|
+
public:
|
|
57
|
+
typedef Set<const ICFGNode *> ICFGNodeSet;
|
|
58
|
+
|
|
59
|
+
ICFGStat(ICFG *cfg) : PTAStat(nullptr), icfg(cfg)
|
|
60
|
+
{
|
|
61
|
+
numOfNodes = 0;
|
|
62
|
+
numOfCallNodes = 0;
|
|
63
|
+
numOfRetNodes = 0;
|
|
64
|
+
numOfEntryNodes = 0;
|
|
65
|
+
numOfExitNodes = 0;
|
|
66
|
+
numOfIntraNodes = 0;
|
|
67
|
+
|
|
68
|
+
numOfEdges = 0;
|
|
69
|
+
numOfCallEdges = 0;
|
|
70
|
+
numOfRetEdges = 0;
|
|
71
|
+
numOfIntraEdges = 0;
|
|
72
|
+
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
void performStat()
|
|
76
|
+
{
|
|
77
|
+
|
|
78
|
+
countStat();
|
|
79
|
+
|
|
80
|
+
PTNumStatMap["ICFGNode"] = numOfNodes;
|
|
81
|
+
PTNumStatMap["IntraICFGNode"] = numOfIntraNodes;
|
|
82
|
+
PTNumStatMap["CallICFGNode"] = numOfCallNodes;
|
|
83
|
+
PTNumStatMap["RetICFGNode"] = numOfRetNodes;
|
|
84
|
+
PTNumStatMap["FunEntryICFGNode"] = numOfEntryNodes;
|
|
85
|
+
PTNumStatMap["FunExitICFGNode"] = numOfExitNodes;
|
|
86
|
+
|
|
87
|
+
PTNumStatMap["ICFGEdge"] = numOfEdges;
|
|
88
|
+
PTNumStatMap["CallCFGEdge"] = numOfCallEdges;
|
|
89
|
+
PTNumStatMap["RetCFGEdge"] = numOfRetEdges;
|
|
90
|
+
PTNumStatMap["IntraCFGEdge"] = numOfIntraEdges;
|
|
91
|
+
|
|
92
|
+
printStat("ICFG Stat");
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
void performStatforIFDS()
|
|
96
|
+
{
|
|
97
|
+
|
|
98
|
+
countStat();
|
|
99
|
+
PTNumStatMap["ICFGNode(N)"] = numOfNodes;
|
|
100
|
+
PTNumStatMap["CallICFGNode(Call)"] = numOfCallNodes;
|
|
101
|
+
PTNumStatMap["ICFGEdge(E)"] = numOfEdges;
|
|
102
|
+
printStat("IFDS Stat");
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
void countStat()
|
|
106
|
+
{
|
|
107
|
+
ICFG::ICFGNodeIDToNodeMapTy::iterator it = icfg->begin();
|
|
108
|
+
ICFG::ICFGNodeIDToNodeMapTy::iterator eit = icfg->end();
|
|
109
|
+
for (; it != eit; ++it)
|
|
110
|
+
{
|
|
111
|
+
numOfNodes++;
|
|
112
|
+
|
|
113
|
+
ICFGNode *node = it->second;
|
|
114
|
+
|
|
115
|
+
if (SVFUtil::isa<IntraICFGNode>(node))
|
|
116
|
+
numOfIntraNodes++;
|
|
117
|
+
else if (SVFUtil::isa<CallICFGNode>(node))
|
|
118
|
+
numOfCallNodes++;
|
|
119
|
+
else if (SVFUtil::isa<RetICFGNode>(node))
|
|
120
|
+
numOfRetNodes++;
|
|
121
|
+
else if (SVFUtil::isa<FunEntryICFGNode>(node))
|
|
122
|
+
numOfEntryNodes++;
|
|
123
|
+
else if (SVFUtil::isa<FunExitICFGNode>(node))
|
|
124
|
+
numOfExitNodes++;
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
ICFGEdge::ICFGEdgeSetTy::iterator edgeIt =
|
|
128
|
+
it->second->OutEdgeBegin();
|
|
129
|
+
ICFGEdge::ICFGEdgeSetTy::iterator edgeEit =
|
|
130
|
+
it->second->OutEdgeEnd();
|
|
131
|
+
for (; edgeIt != edgeEit; ++edgeIt)
|
|
132
|
+
{
|
|
133
|
+
const ICFGEdge *edge = *edgeIt;
|
|
134
|
+
numOfEdges++;
|
|
135
|
+
if (edge->isCallCFGEdge())
|
|
136
|
+
numOfCallEdges++;
|
|
137
|
+
else if (edge->isRetCFGEdge())
|
|
138
|
+
numOfRetEdges++;
|
|
139
|
+
else if (edge->isIntraCFGEdge())
|
|
140
|
+
numOfIntraEdges++;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
void printStat(std::string statname)
|
|
146
|
+
{
|
|
147
|
+
|
|
148
|
+
SVFUtil::outs() << "\n************ " << statname << " ***************\n";
|
|
149
|
+
SVFUtil::outs().flags(std::ios::left);
|
|
150
|
+
unsigned field_width = 20;
|
|
151
|
+
for(NUMStatMap::iterator it = PTNumStatMap.begin(), eit = PTNumStatMap.end(); it!=eit; ++it)
|
|
152
|
+
{
|
|
153
|
+
// format out put with width 20 space
|
|
154
|
+
SVFUtil::outs() << std::setw(field_width) << it->first << it->second << "\n";
|
|
155
|
+
}
|
|
156
|
+
PTNumStatMap.clear();
|
|
157
|
+
SVFUtil::outs().flush();
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
} // End namespace SVF
|
|
162
|
+
|
|
163
|
+
#endif /* INCLUDE_UTIL_ICFGSTAT_H_ */
|
|
164
|
+
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
//===- SVFIR.h -- SVF IR Graph or PAG (Program Assignment Graph)--------------//
|
|
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
|
+
* IRGraph.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Nov 1, 2013
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
#ifndef IRGRAPH_H_
|
|
32
|
+
#define IRGRAPH_H_
|
|
33
|
+
|
|
34
|
+
#include "SVFIR/SVFStatements.h"
|
|
35
|
+
#include "SVFIR/SVFVariables.h"
|
|
36
|
+
#include "Util/NodeIDAllocator.h"
|
|
37
|
+
#include "Util/SVFUtil.h"
|
|
38
|
+
#include "Graphs/ICFG.h"
|
|
39
|
+
|
|
40
|
+
namespace SVF
|
|
41
|
+
{
|
|
42
|
+
typedef SVFVar PAGNode;
|
|
43
|
+
typedef SVFStmt PAGEdge;
|
|
44
|
+
|
|
45
|
+
class ObjTypeInfo;
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
* Graph representation of SVF IR.
|
|
49
|
+
* It can be seen as a program assignment graph (PAG).
|
|
50
|
+
*/
|
|
51
|
+
class IRGraph : public GenericGraph<SVFVar, SVFStmt>
|
|
52
|
+
{
|
|
53
|
+
friend class SVFIRWriter;
|
|
54
|
+
friend class SVFIRReader;
|
|
55
|
+
friend class SVFIRBuilder;
|
|
56
|
+
friend class SymbolTableBuilder;
|
|
57
|
+
|
|
58
|
+
public:
|
|
59
|
+
|
|
60
|
+
/// Symbol types
|
|
61
|
+
enum SYMTYPE
|
|
62
|
+
{
|
|
63
|
+
NullPtr,
|
|
64
|
+
BlkPtr,
|
|
65
|
+
BlackHole,
|
|
66
|
+
ConstantObj,
|
|
67
|
+
ValSymbol,
|
|
68
|
+
ObjSymbol,
|
|
69
|
+
RetSymbol,
|
|
70
|
+
VarargSymbol
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/// various maps defined
|
|
74
|
+
//{@
|
|
75
|
+
/// sym id to obj type info map
|
|
76
|
+
typedef OrderedMap<NodeID, ObjTypeInfo*> IDToTypeInfoMapTy;
|
|
77
|
+
|
|
78
|
+
/// function to sym id map
|
|
79
|
+
typedef OrderedMap<const FunObjVar*, NodeID> FunObjVarToIDMapTy;
|
|
80
|
+
|
|
81
|
+
/// struct type to struct info map
|
|
82
|
+
typedef Set<const SVFType*> SVFTypeSet;
|
|
83
|
+
//@}
|
|
84
|
+
|
|
85
|
+
private:
|
|
86
|
+
FunObjVarToIDMapTy returnFunObjSymMap; ///< return map
|
|
87
|
+
FunObjVarToIDMapTy varargFunObjSymMap; ///< vararg map
|
|
88
|
+
IDToTypeInfoMapTy objTypeInfoMap; ///< map a memory sym id to its obj
|
|
89
|
+
|
|
90
|
+
/// (owned) All SVF Types
|
|
91
|
+
/// Every type T is mapped to StInfo
|
|
92
|
+
/// which contains size (fsize) , offset(foffset)
|
|
93
|
+
/// fsize[i] is the number of fields in the largest such struct, else fsize[i] = 1.
|
|
94
|
+
/// fsize[0] is always the size of the expanded struct.
|
|
95
|
+
SVFTypeSet svfTypes;
|
|
96
|
+
|
|
97
|
+
/// @brief (owned) All StInfo
|
|
98
|
+
Set<const StInfo*> stInfos;
|
|
99
|
+
|
|
100
|
+
/// total number of symbols
|
|
101
|
+
NodeID totalSymNum;
|
|
102
|
+
|
|
103
|
+
void destorySymTable();
|
|
104
|
+
|
|
105
|
+
public:
|
|
106
|
+
typedef Set<const SVFStmt*> SVFStmtSet;
|
|
107
|
+
|
|
108
|
+
protected:
|
|
109
|
+
SVFStmt::KindToSVFStmtMapTy KindToSVFStmtSetMap; ///< SVFIR edge map containing all PAGEdges
|
|
110
|
+
SVFStmt::KindToSVFStmtMapTy KindToPTASVFStmtSetMap; ///< SVFIR edge map containing only pointer-related edges, i.e., both LHS and RHS are of pointer type
|
|
111
|
+
bool fromFile; ///< Whether the SVFIR is built according to user specified data from a txt file
|
|
112
|
+
NodeID nodeNumAfterPAGBuild; ///< initial node number after building SVFIR, excluding later added nodes, e.g., gepobj nodes
|
|
113
|
+
u32_t totalPTAPAGEdge;
|
|
114
|
+
u32_t valVarNum;
|
|
115
|
+
u32_t objVarNum;
|
|
116
|
+
|
|
117
|
+
/// Add a node into the graph
|
|
118
|
+
inline NodeID addNode(SVFVar* node)
|
|
119
|
+
{
|
|
120
|
+
assert(node && "cannot add a null node");
|
|
121
|
+
addGNode(node->getId(),node);
|
|
122
|
+
return node->getId();
|
|
123
|
+
}
|
|
124
|
+
/// Add an edge into the graph
|
|
125
|
+
bool addEdge(SVFVar* src, SVFVar* dst, SVFStmt* edge);
|
|
126
|
+
|
|
127
|
+
//// Return true if this edge exits
|
|
128
|
+
SVFStmt* hasNonlabeledEdge(SVFVar* src, SVFVar* dst, SVFStmt::PEDGEK kind);
|
|
129
|
+
/// Return true if this labeled edge exits, including store, call and load
|
|
130
|
+
/// two store edge can have same dst and src but located in different basic
|
|
131
|
+
/// blocks, thus flags are needed to distinguish them
|
|
132
|
+
SVFStmt* hasLabeledEdge(SVFVar* src, SVFVar* dst, SVFStmt::PEDGEK kind,
|
|
133
|
+
const ICFGNode* cs);
|
|
134
|
+
/// Return MultiOpndStmt since it has more than one operands (we use operand
|
|
135
|
+
/// 2 here to make the flag)
|
|
136
|
+
SVFStmt* hasLabeledEdge(SVFVar* src, SVFVar* op1, SVFStmt::PEDGEK kind,
|
|
137
|
+
const SVFVar* op2);
|
|
138
|
+
|
|
139
|
+
public:
|
|
140
|
+
IRGraph(bool buildFromFile)
|
|
141
|
+
: totalSymNum(0), fromFile(buildFromFile), nodeNumAfterPAGBuild(0), totalPTAPAGEdge(0), valVarNum(0), objVarNum(0),
|
|
142
|
+
maxStruct(nullptr), maxStSize(0)
|
|
143
|
+
{
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
virtual ~IRGraph();
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
/// Whether this SVFIR built from a txt file
|
|
150
|
+
inline bool isBuiltFromFile()
|
|
151
|
+
{
|
|
152
|
+
return fromFile;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/// special value
|
|
156
|
+
// @{
|
|
157
|
+
static inline bool isBlkPtr(NodeID id)
|
|
158
|
+
{
|
|
159
|
+
return (id == BlkPtr);
|
|
160
|
+
}
|
|
161
|
+
static inline bool isNullPtr(NodeID id)
|
|
162
|
+
{
|
|
163
|
+
return (id == NullPtr);
|
|
164
|
+
}
|
|
165
|
+
static inline bool isBlkObj(NodeID id)
|
|
166
|
+
{
|
|
167
|
+
return (id == BlackHole);
|
|
168
|
+
}
|
|
169
|
+
static inline bool isConstantSym(NodeID id)
|
|
170
|
+
{
|
|
171
|
+
return (id == ConstantObj);
|
|
172
|
+
}
|
|
173
|
+
static inline bool isBlkObjOrConstantObj(NodeID id)
|
|
174
|
+
{
|
|
175
|
+
return (isBlkObj(id) || isConstantSym(id));
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
inline NodeID blkPtrSymID() const
|
|
179
|
+
{
|
|
180
|
+
return BlkPtr;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
inline NodeID nullPtrSymID() const
|
|
184
|
+
{
|
|
185
|
+
return NullPtr;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
inline NodeID constantSymID() const
|
|
189
|
+
{
|
|
190
|
+
return ConstantObj;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
inline NodeID blackholeSymID() const
|
|
194
|
+
{
|
|
195
|
+
return BlackHole;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/// Statistics
|
|
199
|
+
//@{
|
|
200
|
+
inline u32_t getTotalSymNum() const
|
|
201
|
+
{
|
|
202
|
+
return totalSymNum;
|
|
203
|
+
}
|
|
204
|
+
inline u32_t getMaxStructSize() const
|
|
205
|
+
{
|
|
206
|
+
return maxStSize;
|
|
207
|
+
}
|
|
208
|
+
//@}
|
|
209
|
+
|
|
210
|
+
/// Get different kinds of syms maps
|
|
211
|
+
//@{
|
|
212
|
+
inline IDToTypeInfoMapTy& idToObjTypeInfoMap()
|
|
213
|
+
{
|
|
214
|
+
return objTypeInfoMap;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
inline const IDToTypeInfoMapTy& idToObjTypeInfoMap() const
|
|
218
|
+
{
|
|
219
|
+
return objTypeInfoMap;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
inline FunObjVarToIDMapTy& retFunObjSyms()
|
|
223
|
+
{
|
|
224
|
+
return returnFunObjSymMap;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
inline FunObjVarToIDMapTy& varargFunObjSyms()
|
|
228
|
+
{
|
|
229
|
+
return varargFunObjSymMap;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
//@}
|
|
233
|
+
|
|
234
|
+
inline ObjTypeInfo* getObjTypeInfo(NodeID id) const
|
|
235
|
+
{
|
|
236
|
+
IDToTypeInfoMapTy::const_iterator iter = objTypeInfoMap.find(id);
|
|
237
|
+
assert(iter!=objTypeInfoMap.end() && "obj type info not found");
|
|
238
|
+
return iter->second;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/// GetReturnNode - Return the unique node representing the return value of a function
|
|
242
|
+
NodeID getReturnNode(const FunObjVar*func) const;
|
|
243
|
+
|
|
244
|
+
/// getVarargNode - Return the unique node representing the variadic argument of a variadic function.
|
|
245
|
+
NodeID getVarargNode(const FunObjVar*func) const;
|
|
246
|
+
|
|
247
|
+
inline NodeID getBlackHoleNode() const
|
|
248
|
+
{
|
|
249
|
+
return blackholeSymID();
|
|
250
|
+
}
|
|
251
|
+
inline NodeID getConstantNode() const
|
|
252
|
+
{
|
|
253
|
+
return constantSymID();
|
|
254
|
+
}
|
|
255
|
+
inline NodeID getBlkPtr() const
|
|
256
|
+
{
|
|
257
|
+
return blkPtrSymID();
|
|
258
|
+
}
|
|
259
|
+
inline NodeID getNullPtr() const
|
|
260
|
+
{
|
|
261
|
+
return nullPtrSymID();
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
u32_t getValueNodeNum();
|
|
265
|
+
|
|
266
|
+
u32_t getObjectNodeNum();
|
|
267
|
+
|
|
268
|
+
/// Constant reader that won't change the state of the symbol table
|
|
269
|
+
//@{
|
|
270
|
+
inline const SVFTypeSet& getSVFTypes() const
|
|
271
|
+
{
|
|
272
|
+
return svfTypes;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
inline const Set<const StInfo*>& getStInfos() const
|
|
276
|
+
{
|
|
277
|
+
return stInfos;
|
|
278
|
+
}
|
|
279
|
+
//@}
|
|
280
|
+
/// Given an offset from a Gep Instruction, return it modulus offset by considering memory layout
|
|
281
|
+
virtual APOffset getModulusOffset(const BaseObjVar* baseObj, const APOffset& apOffset);
|
|
282
|
+
/// Get struct info
|
|
283
|
+
//@{
|
|
284
|
+
///Get a reference to StructInfo.
|
|
285
|
+
const StInfo* getTypeInfo(const SVFType* T) const;
|
|
286
|
+
inline bool hasSVFTypeInfo(const SVFType* T)
|
|
287
|
+
{
|
|
288
|
+
return svfTypes.find(T) != svfTypes.end();
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/// Create an objectInfo based on LLVM type (value is null, and type could be null, representing a dummy object)
|
|
292
|
+
ObjTypeInfo* createObjTypeInfo(const SVFType* type);
|
|
293
|
+
|
|
294
|
+
const ObjTypeInfo* createDummyObjTypeInfo(NodeID symId, const SVFType* type);
|
|
295
|
+
|
|
296
|
+
///Get a reference to the components of struct_info.
|
|
297
|
+
/// Number of flattened elements of an array or struct
|
|
298
|
+
u32_t getNumOfFlattenElements(const SVFType* T);
|
|
299
|
+
/// Flattened element idx of an array or struct by considering stride
|
|
300
|
+
u32_t getFlattenedElemIdx(const SVFType* T, u32_t origId);
|
|
301
|
+
/// Return the type of a flattened element given a flattened index
|
|
302
|
+
const SVFType* getFlatternedElemType(const SVFType* baseType, u32_t flatten_idx);
|
|
303
|
+
/// struct A { int id; int salary; }; struct B { char name[20]; struct A a;} B b;
|
|
304
|
+
/// OriginalElemType of b with field_idx 1 : Struct A
|
|
305
|
+
/// FlatternedElemType of b with field_idx 1 : int
|
|
306
|
+
const SVFType* getOriginalElemType(const SVFType* baseType, u32_t origId) const;
|
|
307
|
+
//@}
|
|
308
|
+
|
|
309
|
+
/// Debug method
|
|
310
|
+
void printFlattenFields(const SVFType* type);
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
inline u32_t getNodeNumAfterPAGBuild() const
|
|
314
|
+
{
|
|
315
|
+
return nodeNumAfterPAGBuild;
|
|
316
|
+
}
|
|
317
|
+
inline void setNodeNumAfterPAGBuild(u32_t num)
|
|
318
|
+
{
|
|
319
|
+
nodeNumAfterPAGBuild = num;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
inline u32_t getPAGNodeNum() const
|
|
323
|
+
{
|
|
324
|
+
return nodeNum;
|
|
325
|
+
}
|
|
326
|
+
inline u32_t getPAGEdgeNum() const
|
|
327
|
+
{
|
|
328
|
+
return edgeNum;
|
|
329
|
+
}
|
|
330
|
+
inline u32_t getPTAPAGEdgeNum() const
|
|
331
|
+
{
|
|
332
|
+
return totalPTAPAGEdge;
|
|
333
|
+
}
|
|
334
|
+
/// Return graph name
|
|
335
|
+
inline std::string getGraphName() const
|
|
336
|
+
{
|
|
337
|
+
return "SVFIR";
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
void dumpSymTable();
|
|
341
|
+
|
|
342
|
+
/// Dump SVFIR
|
|
343
|
+
void dump(std::string name);
|
|
344
|
+
|
|
345
|
+
/// View graph from the debugger
|
|
346
|
+
void view();
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
///The struct type with the most fields
|
|
351
|
+
const SVFType* maxStruct;
|
|
352
|
+
|
|
353
|
+
///The number of fields in max_struct
|
|
354
|
+
u32_t maxStSize;
|
|
355
|
+
|
|
356
|
+
inline void addTypeInfo(const SVFType* ty)
|
|
357
|
+
{
|
|
358
|
+
bool inserted = svfTypes.insert(ty).second;
|
|
359
|
+
if(!inserted)
|
|
360
|
+
assert(false && "this type info has been added before");
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
inline void addStInfo(StInfo* stInfo)
|
|
364
|
+
{
|
|
365
|
+
stInfos.insert(stInfo);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
protected:
|
|
369
|
+
|
|
370
|
+
/// Return the flattened field type for struct type only
|
|
371
|
+
const std::vector<const SVFType*>& getFlattenFieldTypes(const SVFStructType *T);
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
namespace SVF
|
|
377
|
+
{
|
|
378
|
+
|
|
379
|
+
/* !
|
|
380
|
+
* GenericGraphTraits specializations of SVFIR to be used for the generic graph algorithms.
|
|
381
|
+
* Provide graph traits for traversing from a SVFIR node using standard graph traversals.
|
|
382
|
+
*/
|
|
383
|
+
template<> struct GenericGraphTraits<SVF::SVFVar*> : public GenericGraphTraits<SVF::GenericNode<SVF::SVFVar,SVF::SVFStmt>* >
|
|
384
|
+
{
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
/// Inverse GenericGraphTraits specializations for SVFIR node, it is used for inverse traversal.
|
|
388
|
+
template<> struct GenericGraphTraits<Inverse<SVF::SVFVar *> > : public GenericGraphTraits<Inverse<SVF::GenericNode<SVF::SVFVar,SVF::SVFStmt>* > >
|
|
389
|
+
{
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
template<> struct GenericGraphTraits<SVF::IRGraph*> : public GenericGraphTraits<SVF::GenericGraph<SVF::SVFVar,SVF::SVFStmt>* >
|
|
393
|
+
{
|
|
394
|
+
typedef SVF::SVFVar* NodeRef;
|
|
395
|
+
};
|
|
396
|
+
|
|
397
|
+
} // End namespace llvm
|
|
398
|
+
#endif /* IRGRAPH_H_ */
|