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,669 @@
|
|
|
1
|
+
//===- ICFGNode.h -- ICFG node------------------------------------------------//
|
|
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
|
+
/*
|
|
24
|
+
* ICFGNode.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Sep 11, 2018
|
|
27
|
+
* Author: Yulei
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef ICFGNODE_H_
|
|
31
|
+
#define ICFGNODE_H_
|
|
32
|
+
|
|
33
|
+
#include "Util/SVFUtil.h"
|
|
34
|
+
#include "Graphs/GenericGraph.h"
|
|
35
|
+
#include "Graphs/ICFGEdge.h"
|
|
36
|
+
|
|
37
|
+
namespace SVF
|
|
38
|
+
{
|
|
39
|
+
|
|
40
|
+
class ICFGNode;
|
|
41
|
+
class RetICFGNode;
|
|
42
|
+
class CallPE;
|
|
43
|
+
class RetPE;
|
|
44
|
+
class SVFStmt;
|
|
45
|
+
class SVFVar;
|
|
46
|
+
class VFGNode;
|
|
47
|
+
|
|
48
|
+
/*!
|
|
49
|
+
* Interprocedural control-flow graph node, representing different kinds of program statements
|
|
50
|
+
* including top-level pointers (ValVar) and address-taken objects (ObjVar)
|
|
51
|
+
*/
|
|
52
|
+
typedef GenericNode<ICFGNode, ICFGEdge> GenericICFGNodeTy;
|
|
53
|
+
|
|
54
|
+
class ICFGNode : public GenericICFGNodeTy
|
|
55
|
+
{
|
|
56
|
+
friend class SVFIRWriter;
|
|
57
|
+
friend class SVFIRReader;
|
|
58
|
+
|
|
59
|
+
public:
|
|
60
|
+
|
|
61
|
+
typedef ICFGEdge::ICFGEdgeSetTy::iterator iterator;
|
|
62
|
+
typedef ICFGEdge::ICFGEdgeSetTy::const_iterator const_iterator;
|
|
63
|
+
typedef Set<const CallPE *> CallPESet;
|
|
64
|
+
typedef Set<const RetPE *> RetPESet;
|
|
65
|
+
typedef std::list<const VFGNode*> VFGNodeList;
|
|
66
|
+
typedef std::list<const SVFStmt*> SVFStmtList;
|
|
67
|
+
typedef GNodeK ICFGNodeK;
|
|
68
|
+
|
|
69
|
+
public:
|
|
70
|
+
/// Constructor
|
|
71
|
+
ICFGNode(NodeID i, GNodeK k) : GenericICFGNodeTy(i, k), fun(nullptr), bb(nullptr)
|
|
72
|
+
{
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/// Return the function of this ICFGNode
|
|
76
|
+
virtual const FunObjVar* getFun() const
|
|
77
|
+
{
|
|
78
|
+
return fun;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/// Return the basic block of this ICFGNode
|
|
82
|
+
virtual const SVFBasicBlock* getBB() const
|
|
83
|
+
{
|
|
84
|
+
return bb;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
/// Overloading operator << for dumping ICFG node ID
|
|
89
|
+
//@{
|
|
90
|
+
friend OutStream &operator<<(OutStream &o, const ICFGNode &node)
|
|
91
|
+
{
|
|
92
|
+
o << node.toString();
|
|
93
|
+
return o;
|
|
94
|
+
}
|
|
95
|
+
//@}
|
|
96
|
+
|
|
97
|
+
/// Set/Get methods of VFGNodes
|
|
98
|
+
///@{
|
|
99
|
+
inline void addVFGNode(const VFGNode *vfgNode)
|
|
100
|
+
{
|
|
101
|
+
VFGNodes.push_back(vfgNode);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
inline const VFGNodeList& getVFGNodes() const
|
|
105
|
+
{
|
|
106
|
+
return VFGNodes;
|
|
107
|
+
}
|
|
108
|
+
///@}
|
|
109
|
+
|
|
110
|
+
/// Set/Get methods of VFGNodes
|
|
111
|
+
///@{
|
|
112
|
+
inline void addSVFStmt(const SVFStmt *edge)
|
|
113
|
+
{
|
|
114
|
+
pagEdges.push_back(edge);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
inline const SVFStmtList& getSVFStmts() const
|
|
118
|
+
{
|
|
119
|
+
return pagEdges;
|
|
120
|
+
}
|
|
121
|
+
///@}
|
|
122
|
+
|
|
123
|
+
virtual const std::string toString() const;
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
void dump() const;
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
static inline bool classof(const ICFGNode *)
|
|
131
|
+
{
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
static inline bool classof(const GenericICFGNodeTy* node)
|
|
136
|
+
{
|
|
137
|
+
return isICFGNodeKinds(node->getNodeKind());
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
static inline bool classof(const SVFValue* node)
|
|
141
|
+
{
|
|
142
|
+
return isICFGNodeKinds(node->getNodeKind());
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
protected:
|
|
148
|
+
const FunObjVar* fun;
|
|
149
|
+
const SVFBasicBlock* bb;
|
|
150
|
+
VFGNodeList VFGNodes; //< a list of VFGNodes
|
|
151
|
+
SVFStmtList pagEdges; //< a list of PAGEdges
|
|
152
|
+
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
/*!
|
|
156
|
+
* Unique ICFG node stands for all global initializations
|
|
157
|
+
*/
|
|
158
|
+
class GlobalICFGNode : public ICFGNode
|
|
159
|
+
{
|
|
160
|
+
|
|
161
|
+
public:
|
|
162
|
+
GlobalICFGNode(NodeID id) : ICFGNode(id, GlobalBlock)
|
|
163
|
+
{
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
167
|
+
//@{
|
|
168
|
+
static inline bool classof(const GlobalICFGNode *)
|
|
169
|
+
{
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
static inline bool classof(const ICFGNode *node)
|
|
174
|
+
{
|
|
175
|
+
return node->getNodeKind() == GlobalBlock;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
static inline bool classof(const GenericICFGNodeTy *node)
|
|
179
|
+
{
|
|
180
|
+
return node->getNodeKind() == GlobalBlock;
|
|
181
|
+
}
|
|
182
|
+
//@}
|
|
183
|
+
|
|
184
|
+
const std::string toString() const override;
|
|
185
|
+
|
|
186
|
+
const std::string getSourceLoc() const override
|
|
187
|
+
{
|
|
188
|
+
return "Global ICFGNode";
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
/*!
|
|
193
|
+
* ICFG node stands for a program statement
|
|
194
|
+
*/
|
|
195
|
+
class IntraICFGNode : public ICFGNode
|
|
196
|
+
{
|
|
197
|
+
friend class SVFIRWriter;
|
|
198
|
+
friend class SVFIRReader;
|
|
199
|
+
private:
|
|
200
|
+
bool isRet;
|
|
201
|
+
|
|
202
|
+
/// Constructor to create empty IntraICFGNode (for SVFIRReader/deserialization)
|
|
203
|
+
IntraICFGNode(NodeID id) : ICFGNode(id, IntraBlock), isRet(false) {}
|
|
204
|
+
|
|
205
|
+
public:
|
|
206
|
+
IntraICFGNode(NodeID id, const SVFBasicBlock* b, bool isReturn) : ICFGNode(id, IntraBlock), isRet(isReturn)
|
|
207
|
+
{
|
|
208
|
+
fun = b->getFunction();
|
|
209
|
+
bb = b;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
213
|
+
//@{
|
|
214
|
+
static inline bool classof(const IntraICFGNode *)
|
|
215
|
+
{
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
static inline bool classof(const ICFGNode *node)
|
|
220
|
+
{
|
|
221
|
+
return node->getNodeKind() == IntraBlock;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
static inline bool classof(const GenericICFGNodeTy *node)
|
|
225
|
+
{
|
|
226
|
+
return node->getNodeKind() == IntraBlock;
|
|
227
|
+
}
|
|
228
|
+
//@}
|
|
229
|
+
|
|
230
|
+
const std::string toString() const override;
|
|
231
|
+
|
|
232
|
+
inline bool isRetInst() const
|
|
233
|
+
{
|
|
234
|
+
return isRet;
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
class InterICFGNode : public ICFGNode
|
|
239
|
+
{
|
|
240
|
+
|
|
241
|
+
public:
|
|
242
|
+
/// Constructor
|
|
243
|
+
InterICFGNode(NodeID id, ICFGNodeK k) : ICFGNode(id, k)
|
|
244
|
+
{
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
248
|
+
//@{
|
|
249
|
+
static inline bool classof(const InterICFGNode *)
|
|
250
|
+
{
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
static inline bool classof(const ICFGNode* node)
|
|
255
|
+
{
|
|
256
|
+
return isInterICFGNodeKind(node->getNodeKind());
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
static inline bool classof(const GenericICFGNodeTy* node)
|
|
260
|
+
{
|
|
261
|
+
return isInterICFGNodeKind(node->getNodeKind());
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
static inline bool classof(const SVFValue* node)
|
|
265
|
+
{
|
|
266
|
+
return isInterICFGNodeKind(node->getNodeKind());
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
//@}
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
/*!
|
|
276
|
+
* Function entry ICFGNode containing a set of FormalParmVFGNodes of a function
|
|
277
|
+
*/
|
|
278
|
+
class FunEntryICFGNode : public InterICFGNode
|
|
279
|
+
{
|
|
280
|
+
friend class SVFIRWriter;
|
|
281
|
+
friend class SVFIRReader;
|
|
282
|
+
|
|
283
|
+
public:
|
|
284
|
+
typedef std::vector<const SVFVar *> FormalParmNodeVec;
|
|
285
|
+
private:
|
|
286
|
+
FormalParmNodeVec FPNodes;
|
|
287
|
+
|
|
288
|
+
/// Constructor to create empty FunEntryICFGNode (for SVFIRReader/deserialization)
|
|
289
|
+
FunEntryICFGNode(NodeID id) : InterICFGNode(id, FunEntryBlock) {}
|
|
290
|
+
|
|
291
|
+
public:
|
|
292
|
+
FunEntryICFGNode(NodeID id, const FunObjVar* f);
|
|
293
|
+
|
|
294
|
+
/// Return function
|
|
295
|
+
inline const FunObjVar* getFun() const override
|
|
296
|
+
{
|
|
297
|
+
return fun;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/// Return the set of formal parameters
|
|
301
|
+
inline const FormalParmNodeVec &getFormalParms() const
|
|
302
|
+
{
|
|
303
|
+
return FPNodes;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/// Add formal parameters
|
|
307
|
+
inline void addFormalParms(const SVFVar *fp)
|
|
308
|
+
{
|
|
309
|
+
FPNodes.push_back(fp);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
///Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
313
|
+
//@{
|
|
314
|
+
static inline bool classof(const FunEntryICFGNode *)
|
|
315
|
+
{
|
|
316
|
+
return true;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
static inline bool classof(const InterICFGNode *node)
|
|
320
|
+
{
|
|
321
|
+
return node->getNodeKind() == FunEntryBlock;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
static inline bool classof(const ICFGNode *node)
|
|
325
|
+
{
|
|
326
|
+
return node->getNodeKind() == FunEntryBlock;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
static inline bool classof(const GenericICFGNodeTy *node)
|
|
330
|
+
{
|
|
331
|
+
return node->getNodeKind() == FunEntryBlock;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
static inline bool classof(const SVFValue*node)
|
|
335
|
+
{
|
|
336
|
+
return node->getNodeKind() == FunEntryBlock;
|
|
337
|
+
}
|
|
338
|
+
//@}
|
|
339
|
+
|
|
340
|
+
const std::string toString() const override;
|
|
341
|
+
|
|
342
|
+
const std::string getSourceLoc() const override;
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
/*!
|
|
346
|
+
* Function exit ICFGNode containing (at most one) FormalRetVFGNodes of a function
|
|
347
|
+
*/
|
|
348
|
+
class FunExitICFGNode : public InterICFGNode
|
|
349
|
+
{
|
|
350
|
+
friend class SVFIRWriter;
|
|
351
|
+
friend class SVFIRReader;
|
|
352
|
+
|
|
353
|
+
private:
|
|
354
|
+
const SVFVar *formalRet;
|
|
355
|
+
|
|
356
|
+
/// Constructor to create empty FunExitICFGNode (for SVFIRReader/deserialization)
|
|
357
|
+
FunExitICFGNode(NodeID id) : InterICFGNode(id, FunExitBlock), formalRet{} {}
|
|
358
|
+
|
|
359
|
+
public:
|
|
360
|
+
FunExitICFGNode(NodeID id, const FunObjVar* f);
|
|
361
|
+
|
|
362
|
+
/// Return function
|
|
363
|
+
inline const FunObjVar* getFun() const override
|
|
364
|
+
{
|
|
365
|
+
return fun;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/// Return formal return parameter
|
|
369
|
+
inline const SVFVar *getFormalRet() const
|
|
370
|
+
{
|
|
371
|
+
return formalRet;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/// Add formal return parameter
|
|
375
|
+
inline void addFormalRet(const SVFVar *fr)
|
|
376
|
+
{
|
|
377
|
+
formalRet = fr;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
///Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
381
|
+
//@{
|
|
382
|
+
static inline bool classof(const FunEntryICFGNode *)
|
|
383
|
+
{
|
|
384
|
+
return true;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
static inline bool classof(const ICFGNode *node)
|
|
388
|
+
{
|
|
389
|
+
return node->getNodeKind() == FunExitBlock;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
static inline bool classof(const InterICFGNode *node)
|
|
393
|
+
{
|
|
394
|
+
return node->getNodeKind() == FunExitBlock;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
static inline bool classof(const GenericICFGNodeTy *node)
|
|
398
|
+
{
|
|
399
|
+
return node->getNodeKind() == FunExitBlock;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
static inline bool classof(const SVFValue*node)
|
|
403
|
+
{
|
|
404
|
+
return node->getNodeKind() == FunExitBlock;
|
|
405
|
+
}
|
|
406
|
+
//@}
|
|
407
|
+
|
|
408
|
+
const std::string toString() const override;
|
|
409
|
+
|
|
410
|
+
const std::string getSourceLoc() const override;
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
/*!
|
|
414
|
+
* Call ICFGNode containing a set of ActualParmVFGNodes at a callsite
|
|
415
|
+
*/
|
|
416
|
+
class CallICFGNode : public InterICFGNode
|
|
417
|
+
{
|
|
418
|
+
friend class SVFIRWriter;
|
|
419
|
+
friend class SVFIRReader;
|
|
420
|
+
|
|
421
|
+
public:
|
|
422
|
+
typedef std::vector<const ValVar *> ActualParmNodeVec;
|
|
423
|
+
|
|
424
|
+
protected:
|
|
425
|
+
const RetICFGNode* ret;
|
|
426
|
+
ActualParmNodeVec APNodes; /// arguments
|
|
427
|
+
const FunObjVar* calledFunc; /// called function
|
|
428
|
+
bool isvararg; /// is variable argument
|
|
429
|
+
bool isVirCallInst; /// is virtual call inst
|
|
430
|
+
SVFVar* vtabPtr; /// virtual table pointer
|
|
431
|
+
s32_t virtualFunIdx; /// virtual function index of the virtual table(s) at a virtual call
|
|
432
|
+
std::string funNameOfVcall; /// the function name of this virtual call
|
|
433
|
+
|
|
434
|
+
/// Constructor to create empty CallICFGNode (for SVFIRReader/deserialization)
|
|
435
|
+
CallICFGNode(NodeID id) : InterICFGNode(id, FunCallBlock), ret{} {}
|
|
436
|
+
|
|
437
|
+
public:
|
|
438
|
+
CallICFGNode(NodeID id, const SVFBasicBlock* b, const SVFType* ty,
|
|
439
|
+
const FunObjVar* cf, bool iv, bool ivc, s32_t vfi,
|
|
440
|
+
const std::string& fnv)
|
|
441
|
+
: InterICFGNode(id, FunCallBlock), ret(nullptr), calledFunc(cf),
|
|
442
|
+
isvararg(iv), isVirCallInst(ivc), vtabPtr(nullptr),
|
|
443
|
+
virtualFunIdx(vfi), funNameOfVcall(fnv)
|
|
444
|
+
{
|
|
445
|
+
fun = b->getFunction();
|
|
446
|
+
bb = b;
|
|
447
|
+
type = ty;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/// Return callsite
|
|
451
|
+
inline const RetICFGNode* getRetICFGNode() const
|
|
452
|
+
{
|
|
453
|
+
assert(ret && "RetICFGNode not set?");
|
|
454
|
+
return ret;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/// Return callsite
|
|
458
|
+
inline void setRetICFGNode(const RetICFGNode* r)
|
|
459
|
+
{
|
|
460
|
+
ret = r;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/// Return callsite
|
|
464
|
+
inline const FunObjVar* getCaller() const
|
|
465
|
+
{
|
|
466
|
+
return getFun();
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
/// Return Basic Block
|
|
470
|
+
inline const SVFBasicBlock* getParent() const
|
|
471
|
+
{
|
|
472
|
+
return getBB();
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/// Return true if this is an indirect call
|
|
476
|
+
inline bool isIndirectCall() const
|
|
477
|
+
{
|
|
478
|
+
return nullptr == calledFunc;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/// Return the set of actual parameters
|
|
482
|
+
inline const ActualParmNodeVec &getActualParms() const
|
|
483
|
+
{
|
|
484
|
+
return APNodes;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/// Add actual parameters
|
|
488
|
+
inline void addActualParms(const ValVar *ap)
|
|
489
|
+
{
|
|
490
|
+
APNodes.push_back(ap);
|
|
491
|
+
}
|
|
492
|
+
/// Parameter operations
|
|
493
|
+
//@{
|
|
494
|
+
inline const ValVar* getArgument(u32_t ArgNo) const
|
|
495
|
+
{
|
|
496
|
+
return getActualParms()[ArgNo];
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
inline u32_t arg_size() const
|
|
500
|
+
{
|
|
501
|
+
return APNodes.size();
|
|
502
|
+
}
|
|
503
|
+
inline bool arg_empty() const
|
|
504
|
+
{
|
|
505
|
+
return APNodes.empty();
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
inline u32_t getNumArgOperands() const
|
|
509
|
+
{
|
|
510
|
+
return arg_size();
|
|
511
|
+
}
|
|
512
|
+
inline const FunObjVar* getCalledFunction() const
|
|
513
|
+
{
|
|
514
|
+
return calledFunc;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
inline bool isVarArg() const
|
|
518
|
+
{
|
|
519
|
+
return isvararg;
|
|
520
|
+
}
|
|
521
|
+
inline bool isVirtualCall() const
|
|
522
|
+
{
|
|
523
|
+
return isVirCallInst;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
inline void setVtablePtr(SVFVar* v)
|
|
527
|
+
{
|
|
528
|
+
vtabPtr = v;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
inline const SVFVar* getVtablePtr() const
|
|
532
|
+
{
|
|
533
|
+
assert(isVirtualCall() && "not a virtual call?");
|
|
534
|
+
return vtabPtr;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
inline s32_t getFunIdxInVtable() const
|
|
539
|
+
{
|
|
540
|
+
assert(isVirtualCall() && "not a virtual call?");
|
|
541
|
+
assert(virtualFunIdx >=0 && "virtual function idx is less than 0? not set yet?");
|
|
542
|
+
return virtualFunIdx;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
inline const std::string& getFunNameOfVirtualCall() const
|
|
546
|
+
{
|
|
547
|
+
assert(isVirtualCall() && "not a virtual call?");
|
|
548
|
+
return funNameOfVcall;
|
|
549
|
+
}
|
|
550
|
+
//@}
|
|
551
|
+
|
|
552
|
+
///Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
553
|
+
//@{
|
|
554
|
+
static inline bool classof(const CallICFGNode *)
|
|
555
|
+
{
|
|
556
|
+
return true;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
static inline bool classof(const ICFGNode *node)
|
|
560
|
+
{
|
|
561
|
+
return node->getNodeKind() == FunCallBlock;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
static inline bool classof(const InterICFGNode *node)
|
|
565
|
+
{
|
|
566
|
+
return node->getNodeKind() == FunCallBlock;
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
static inline bool classof(const GenericICFGNodeTy *node)
|
|
570
|
+
{
|
|
571
|
+
return node->getNodeKind() == FunCallBlock;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
static inline bool classof(const SVFValue*node)
|
|
575
|
+
{
|
|
576
|
+
return node->getNodeKind() == FunCallBlock;
|
|
577
|
+
}
|
|
578
|
+
//@}
|
|
579
|
+
|
|
580
|
+
const std::string toString() const override;
|
|
581
|
+
|
|
582
|
+
const std::string getSourceLoc() const override
|
|
583
|
+
{
|
|
584
|
+
return "CallICFGNode: " + ICFGNode::getSourceLoc();
|
|
585
|
+
}
|
|
586
|
+
};
|
|
587
|
+
|
|
588
|
+
|
|
589
|
+
/*!
|
|
590
|
+
* Return ICFGNode containing (at most one) ActualRetVFGNode at a callsite
|
|
591
|
+
*/
|
|
592
|
+
class RetICFGNode : public InterICFGNode
|
|
593
|
+
{
|
|
594
|
+
friend class SVFIRWriter;
|
|
595
|
+
friend class SVFIRReader;
|
|
596
|
+
|
|
597
|
+
private:
|
|
598
|
+
const SVFVar *actualRet;
|
|
599
|
+
const CallICFGNode* callBlockNode;
|
|
600
|
+
|
|
601
|
+
/// Constructor to create empty RetICFGNode (for SVFIRReader/deserialization)
|
|
602
|
+
RetICFGNode(NodeID id)
|
|
603
|
+
: InterICFGNode(id, FunRetBlock), actualRet{}, callBlockNode{}
|
|
604
|
+
{
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
public:
|
|
608
|
+
RetICFGNode(NodeID id, CallICFGNode* cb) :
|
|
609
|
+
InterICFGNode(id, FunRetBlock), actualRet(nullptr), callBlockNode(cb)
|
|
610
|
+
{
|
|
611
|
+
fun = cb->getFun();
|
|
612
|
+
bb = cb->getBB();
|
|
613
|
+
type = cb->getType();
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
inline const CallICFGNode* getCallICFGNode() const
|
|
617
|
+
{
|
|
618
|
+
return callBlockNode;
|
|
619
|
+
}
|
|
620
|
+
/// Return actual return parameter
|
|
621
|
+
inline const SVFVar *getActualRet() const
|
|
622
|
+
{
|
|
623
|
+
return actualRet;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/// Add actual return parameter
|
|
627
|
+
inline void addActualRet(const SVFVar *ar)
|
|
628
|
+
{
|
|
629
|
+
actualRet = ar;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
///Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
633
|
+
//@{
|
|
634
|
+
static inline bool classof(const RetICFGNode *)
|
|
635
|
+
{
|
|
636
|
+
return true;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
static inline bool classof(const InterICFGNode *node)
|
|
640
|
+
{
|
|
641
|
+
return node->getNodeKind() == FunRetBlock;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
static inline bool classof(const ICFGNode *node)
|
|
645
|
+
{
|
|
646
|
+
return node->getNodeKind() == FunRetBlock;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
static inline bool classof(const GenericICFGNodeTy *node)
|
|
650
|
+
{
|
|
651
|
+
return node->getNodeKind() == FunRetBlock;
|
|
652
|
+
}
|
|
653
|
+
static inline bool classof(const SVFValue*node)
|
|
654
|
+
{
|
|
655
|
+
return node->getNodeKind() == FunRetBlock;
|
|
656
|
+
}
|
|
657
|
+
//@}
|
|
658
|
+
|
|
659
|
+
const std::string toString() const override;
|
|
660
|
+
|
|
661
|
+
const std::string getSourceLoc() const override
|
|
662
|
+
{
|
|
663
|
+
return "RetICFGNode: " + ICFGNode::getSourceLoc();
|
|
664
|
+
}
|
|
665
|
+
};
|
|
666
|
+
|
|
667
|
+
} // End namespace SVF
|
|
668
|
+
|
|
669
|
+
#endif /* ICFGNode_H_ */
|