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,527 @@
|
|
|
1
|
+
//===- LLVMModule.h -- LLVM Module class-----------------------------------------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-> <Yulei Sui>
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
// This program is free software: you can redistribute it and/or modify
|
|
9
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
10
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
// (at your option) any later version.
|
|
12
|
+
|
|
13
|
+
// This program is distributed in the hope that it will be useful,
|
|
14
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
// GNU Affero General Public License for more details.
|
|
17
|
+
|
|
18
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
19
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
//
|
|
21
|
+
//===----------------------------------------------------------------------===//
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* LLVMModule.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: 23 Mar.2020
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef INCLUDE_SVF_FE_LLVMMODULE_H_
|
|
31
|
+
#define INCLUDE_SVF_FE_LLVMMODULE_H_
|
|
32
|
+
|
|
33
|
+
#include "SVF-LLVM/BasicTypes.h"
|
|
34
|
+
#include "Util/Options.h"
|
|
35
|
+
#include "Graphs/BasicBlockG.h"
|
|
36
|
+
|
|
37
|
+
namespace SVF
|
|
38
|
+
{
|
|
39
|
+
|
|
40
|
+
class ObjTypeInference;
|
|
41
|
+
|
|
42
|
+
class LLVMModuleSet
|
|
43
|
+
{
|
|
44
|
+
friend class SVFIRBuilder;
|
|
45
|
+
friend class ICFGBuilder;
|
|
46
|
+
friend class SymbolTableBuilder;
|
|
47
|
+
|
|
48
|
+
public:
|
|
49
|
+
|
|
50
|
+
typedef std::vector<const Function*> FunctionSetType;
|
|
51
|
+
typedef Map<const Function*, const Function*> FunDeclToDefMapTy;
|
|
52
|
+
typedef Map<const Function*, FunctionSetType> FunDefToDeclsMapTy;
|
|
53
|
+
typedef Map<const GlobalVariable*, GlobalVariable*> GlobalDefToRepMapTy;
|
|
54
|
+
|
|
55
|
+
typedef Map<const Function*, FunObjVar*> LLVMFun2FunObjVarMap;
|
|
56
|
+
typedef Map<const BasicBlock*, SVFBasicBlock*> LLVMBB2SVFBBMap;
|
|
57
|
+
typedef Map<const SVFValue*, const Value*> SVFBaseNode2LLVMValueMap;
|
|
58
|
+
typedef Map<const Type*, SVFType*> LLVMType2SVFTypeMap;
|
|
59
|
+
typedef Map<const Type*, StInfo*> Type2TypeInfoMap;
|
|
60
|
+
typedef Map<std::string, std::vector<std::string>> Fun2AnnoMap;
|
|
61
|
+
|
|
62
|
+
typedef Map<const Instruction*, CallICFGNode *> CSToCallNodeMapTy;
|
|
63
|
+
typedef Map<const Instruction*, RetICFGNode *> CSToRetNodeMapTy;
|
|
64
|
+
typedef Map<const Instruction*, IntraICFGNode *> InstToBlockNodeMapTy;
|
|
65
|
+
typedef Map<const Function*, FunEntryICFGNode *> FunToFunEntryNodeMapTy;
|
|
66
|
+
typedef Map<const Function*, FunExitICFGNode *> FunToFunExitNodeMapTy;
|
|
67
|
+
|
|
68
|
+
/// llvm value to sym id map
|
|
69
|
+
/// local (%) and global (@) identifiers are pointer types which have a value node id.
|
|
70
|
+
typedef OrderedMap<const Value*, NodeID> ValueToIDMapTy;
|
|
71
|
+
|
|
72
|
+
typedef OrderedMap<const Function*, NodeID> FunToIDMapTy;
|
|
73
|
+
|
|
74
|
+
typedef std::vector<const Function*> FunctionSet;
|
|
75
|
+
typedef Map<const Function*, const BasicBlock*> FunToExitBBMap;
|
|
76
|
+
typedef Map<const Function*, const Function *> FunToRealDefFunMap;
|
|
77
|
+
|
|
78
|
+
private:
|
|
79
|
+
static LLVMModuleSet* llvmModuleSet;
|
|
80
|
+
static bool preProcessed;
|
|
81
|
+
SVFIR* svfir;
|
|
82
|
+
std::unique_ptr<LLVMContext> owned_ctx;
|
|
83
|
+
std::vector<std::unique_ptr<Module>> owned_modules;
|
|
84
|
+
std::vector<std::reference_wrapper<Module>> modules;
|
|
85
|
+
|
|
86
|
+
/// Record some "sse_" function declarations used in other ext function definition, e.g., svf_ext_foo(), and svf_ext_foo() used in app functions
|
|
87
|
+
FunctionSetType ExtFuncsVec;
|
|
88
|
+
/// Record annotations of function in extapi.bc
|
|
89
|
+
Fun2AnnoMap ExtFun2Annotations;
|
|
90
|
+
|
|
91
|
+
// Map SVFFunction to its annotations
|
|
92
|
+
Map<const Function*, std::vector<std::string>> func2Annotations;
|
|
93
|
+
|
|
94
|
+
/// Global definition to a rep definition map
|
|
95
|
+
GlobalDefToRepMapTy GlobalDefToRepMap;
|
|
96
|
+
|
|
97
|
+
LLVMFun2FunObjVarMap LLVMFun2FunObjVar; ///< Map an LLVM Function to an SVF Funobjvar
|
|
98
|
+
LLVMBB2SVFBBMap LLVMBB2SVFBB;
|
|
99
|
+
LLVMType2SVFTypeMap LLVMType2SVFType;
|
|
100
|
+
Type2TypeInfoMap Type2TypeInfo;
|
|
101
|
+
ObjTypeInference* typeInference;
|
|
102
|
+
|
|
103
|
+
SVFBaseNode2LLVMValueMap SVFBaseNode2LLVMValue;
|
|
104
|
+
CSToCallNodeMapTy CSToCallNodeMap; ///< map a callsite to its CallICFGNode
|
|
105
|
+
CSToRetNodeMapTy CSToRetNodeMap; ///< map a callsite to its RetICFGNode
|
|
106
|
+
InstToBlockNodeMapTy InstToBlockNodeMap; ///< map a basic block to its ICFGNode
|
|
107
|
+
FunToFunEntryNodeMapTy FunToFunEntryNodeMap; ///< map a function to its FunExitICFGNode
|
|
108
|
+
FunToFunExitNodeMapTy FunToFunExitNodeMap; ///< map a function to its FunEntryICFGNode
|
|
109
|
+
|
|
110
|
+
Map<const Function*, DominatorTree> FunToDominatorTree;
|
|
111
|
+
|
|
112
|
+
ValueToIDMapTy valSymMap; ///< map a value to its sym id
|
|
113
|
+
ValueToIDMapTy objSymMap; ///< map a obj reference to its sym id
|
|
114
|
+
FunToIDMapTy returnSymMap; ///< return map
|
|
115
|
+
FunToIDMapTy varargSymMap; ///< vararg map
|
|
116
|
+
|
|
117
|
+
FunctionSet funSet;
|
|
118
|
+
FunToExitBBMap funToExitBB;
|
|
119
|
+
FunToRealDefFunMap funToRealDefFun;
|
|
120
|
+
|
|
121
|
+
/// Constructor
|
|
122
|
+
LLVMModuleSet();
|
|
123
|
+
|
|
124
|
+
void build();
|
|
125
|
+
|
|
126
|
+
public:
|
|
127
|
+
~LLVMModuleSet();
|
|
128
|
+
|
|
129
|
+
static inline LLVMModuleSet* getLLVMModuleSet()
|
|
130
|
+
{
|
|
131
|
+
if (!llvmModuleSet)
|
|
132
|
+
llvmModuleSet = new LLVMModuleSet;
|
|
133
|
+
return llvmModuleSet;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
static void releaseLLVMModuleSet()
|
|
137
|
+
{
|
|
138
|
+
delete llvmModuleSet;
|
|
139
|
+
llvmModuleSet = nullptr;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Build an SVF module from a given LLVM Module instance (for use e.g. in a LLVM pass)
|
|
143
|
+
static void buildSVFModule(Module& mod);
|
|
144
|
+
|
|
145
|
+
// Build an SVF module from the bitcode files provided in `moduleNameVec`
|
|
146
|
+
static void buildSVFModule(const std::vector<std::string>& moduleNameVec);
|
|
147
|
+
|
|
148
|
+
static void preProcessBCs(std::vector<std::string>& moduleNameVec);
|
|
149
|
+
|
|
150
|
+
u32_t getModuleNum() const
|
|
151
|
+
{
|
|
152
|
+
return modules.size();
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const std::vector<std::reference_wrapper<Module>>& getLLVMModules() const
|
|
156
|
+
{
|
|
157
|
+
return modules;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
Module *getModule(u32_t idx) const
|
|
161
|
+
{
|
|
162
|
+
return &getModuleRef(idx);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
Module &getModuleRef(u32_t idx) const
|
|
166
|
+
{
|
|
167
|
+
assert(idx < getModuleNum() && "Out of range.");
|
|
168
|
+
return modules[idx];
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Dump modules to files
|
|
172
|
+
void dumpModulesToFile(const std::string& suffix);
|
|
173
|
+
|
|
174
|
+
public:
|
|
175
|
+
|
|
176
|
+
inline const BasicBlock* getFunExitBB(const Function* fun) const
|
|
177
|
+
{
|
|
178
|
+
auto it = funToExitBB.find(fun);
|
|
179
|
+
if (it == funToExitBB.end()) return nullptr;
|
|
180
|
+
else return it->second;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
inline const Function* getRealDefFun(const Function* fun) const
|
|
184
|
+
{
|
|
185
|
+
auto it = funToRealDefFun.find(fun);
|
|
186
|
+
if (it == funToRealDefFun.end()) return nullptr;
|
|
187
|
+
else return it->second;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
inline const FunctionSet& getFunctionSet() const
|
|
191
|
+
{
|
|
192
|
+
return funSet;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
inline u32_t getValueNodeNum() const
|
|
196
|
+
{
|
|
197
|
+
return valSymMap.size();
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
inline u32_t getObjNodeNum() const
|
|
201
|
+
{
|
|
202
|
+
return objSymMap.size();
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
inline ValueToIDMapTy& valSyms()
|
|
206
|
+
{
|
|
207
|
+
return valSymMap;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
inline ValueToIDMapTy& objSyms()
|
|
211
|
+
{
|
|
212
|
+
return objSymMap;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/// Get SVFIR Node according to LLVM value
|
|
216
|
+
///getNode - Return the node corresponding to the specified pointer.
|
|
217
|
+
NodeID getValueNode(const Value* V);
|
|
218
|
+
|
|
219
|
+
bool hasValueNode(const Value* V);
|
|
220
|
+
|
|
221
|
+
/// getObject - Return the obj node id refer to the memory object for the
|
|
222
|
+
/// specified global, heap or alloca instruction according to llvm value.
|
|
223
|
+
NodeID getObjectNode(const Value* V);
|
|
224
|
+
|
|
225
|
+
void dumpSymTable();
|
|
226
|
+
|
|
227
|
+
public:
|
|
228
|
+
|
|
229
|
+
// create a SVFBasicBlock according to LLVM BasicBlock, then add it to SVFFunction's BasicBlockGraph
|
|
230
|
+
inline void addBasicBlock(FunObjVar* fun, const BasicBlock* bb)
|
|
231
|
+
{
|
|
232
|
+
SVFBasicBlock* svfBB = fun->getBasicBlockGraph()->addBasicBlock(bb->getName().str());
|
|
233
|
+
LLVMBB2SVFBB[bb] = svfBB;
|
|
234
|
+
SVFBaseNode2LLVMValue[svfBB] = bb;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
inline void addInstructionMap(const Instruction* inst, CallICFGNode* svfInst)
|
|
238
|
+
{
|
|
239
|
+
CSToCallNodeMap[inst] = svfInst;
|
|
240
|
+
addToSVFVar2LLVMValueMap(inst, svfInst);
|
|
241
|
+
}
|
|
242
|
+
inline void addInstructionMap(const Instruction* inst, RetICFGNode* svfInst)
|
|
243
|
+
{
|
|
244
|
+
CSToRetNodeMap[inst] = svfInst;
|
|
245
|
+
addToSVFVar2LLVMValueMap(inst, svfInst);
|
|
246
|
+
}
|
|
247
|
+
inline void addInstructionMap(const Instruction* inst, IntraICFGNode* svfInst)
|
|
248
|
+
{
|
|
249
|
+
InstToBlockNodeMap[inst] = svfInst;
|
|
250
|
+
addToSVFVar2LLVMValueMap(inst, svfInst);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
inline bool hasLLVMValue(const SVFValue* value) const
|
|
254
|
+
{
|
|
255
|
+
return SVFBaseNode2LLVMValue.find(value) != SVFBaseNode2LLVMValue.end();
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const Value* getLLVMValue(const SVFValue* value) const
|
|
259
|
+
{
|
|
260
|
+
SVFBaseNode2LLVMValueMap ::const_iterator it = SVFBaseNode2LLVMValue.find(value);
|
|
261
|
+
assert(it != SVFBaseNode2LLVMValue.end() && "can't find corresponding llvm value!");
|
|
262
|
+
return it->second;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
inline const FunObjVar* getFunObjVar(const Function* fun) const
|
|
266
|
+
{
|
|
267
|
+
LLVMFun2FunObjVarMap::const_iterator it = LLVMFun2FunObjVar.find(fun);
|
|
268
|
+
assert(it!=LLVMFun2FunObjVar.end() && "SVF Function not found!");
|
|
269
|
+
return it->second;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
inline FunToIDMapTy& retSyms()
|
|
273
|
+
{
|
|
274
|
+
return returnSymMap;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
inline FunToIDMapTy& varargSyms()
|
|
278
|
+
{
|
|
279
|
+
return varargSymMap;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
NodeID getReturnNode(const Function *func) const
|
|
283
|
+
{
|
|
284
|
+
FunToIDMapTy::const_iterator iter = returnSymMap.find(func);
|
|
285
|
+
assert(iter!=returnSymMap.end() && "ret sym not found");
|
|
286
|
+
return iter->second;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
NodeID getVarargNode(const Function *func) const
|
|
290
|
+
{
|
|
291
|
+
FunToIDMapTy::const_iterator iter = varargSymMap.find(func);
|
|
292
|
+
assert(iter!=varargSymMap.end() && "vararg sym not found");
|
|
293
|
+
return iter->second;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
SVFBasicBlock* getSVFBasicBlock(const BasicBlock* bb)
|
|
297
|
+
{
|
|
298
|
+
LLVMBB2SVFBBMap::const_iterator it = LLVMBB2SVFBB.find(bb);
|
|
299
|
+
assert(it!=LLVMBB2SVFBB.end() && "SVF BasicBlock not found!");
|
|
300
|
+
return it->second;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/// Get the corresponding Function based on its name
|
|
304
|
+
inline const Function* getFunction(const std::string& name)
|
|
305
|
+
{
|
|
306
|
+
Function* fun = nullptr;
|
|
307
|
+
|
|
308
|
+
for (u32_t i = 0; i < llvmModuleSet->getModuleNum(); ++i)
|
|
309
|
+
{
|
|
310
|
+
Module* mod = llvmModuleSet->getModule(i);
|
|
311
|
+
fun = mod->getFunction(name);
|
|
312
|
+
if (fun)
|
|
313
|
+
{
|
|
314
|
+
return fun;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return nullptr;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/// Get the corresponding Function based on its name
|
|
321
|
+
const FunObjVar* getFunObjVar(const std::string& name);
|
|
322
|
+
|
|
323
|
+
ICFGNode* getICFGNode(const Instruction* inst);
|
|
324
|
+
|
|
325
|
+
bool hasICFGNode(const Instruction* inst);
|
|
326
|
+
|
|
327
|
+
/// get a call node
|
|
328
|
+
CallICFGNode* getCallICFGNode(const Instruction* cs);
|
|
329
|
+
/// get a return node
|
|
330
|
+
RetICFGNode* getRetICFGNode(const Instruction* cs);
|
|
331
|
+
/// get a intra node
|
|
332
|
+
IntraICFGNode* getIntraICFGNode(const Instruction* inst);
|
|
333
|
+
|
|
334
|
+
/// Add a function entry node
|
|
335
|
+
inline FunEntryICFGNode* getFunEntryICFGNode(const Function* fun)
|
|
336
|
+
{
|
|
337
|
+
FunEntryICFGNode* b = getFunEntryBlock(fun);
|
|
338
|
+
assert(b && "Function entry not created?");
|
|
339
|
+
return b;
|
|
340
|
+
}
|
|
341
|
+
/// Add a function exit node
|
|
342
|
+
inline FunExitICFGNode* getFunExitICFGNode(const Function* fun)
|
|
343
|
+
{
|
|
344
|
+
FunExitICFGNode* b = getFunExitBlock(fun);
|
|
345
|
+
assert(b && "Function exit not created?");
|
|
346
|
+
return b;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
/// Global to rep
|
|
351
|
+
bool hasGlobalRep(const GlobalVariable* val) const
|
|
352
|
+
{
|
|
353
|
+
GlobalDefToRepMapTy::const_iterator it = GlobalDefToRepMap.find(val);
|
|
354
|
+
return it != GlobalDefToRepMap.end();
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
GlobalVariable *getGlobalRep(const GlobalVariable* val) const
|
|
358
|
+
{
|
|
359
|
+
GlobalDefToRepMapTy::const_iterator it = GlobalDefToRepMap.find(val);
|
|
360
|
+
assert(it != GlobalDefToRepMap.end() && "has no rep?");
|
|
361
|
+
return it->second;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
Module* getMainLLVMModule() const
|
|
365
|
+
{
|
|
366
|
+
assert(!empty() && "empty LLVM module!!");
|
|
367
|
+
for (size_t i = 0; i < getModuleNum(); ++i)
|
|
368
|
+
{
|
|
369
|
+
Module& module = getModuleRef(i);
|
|
370
|
+
if (module.getName().str() != ExtAPI::getExtAPI()->getExtBcPath())
|
|
371
|
+
{
|
|
372
|
+
return &module;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
assert(false && "no main module found!");
|
|
376
|
+
return nullptr;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
LLVMContext& getContext() const
|
|
380
|
+
{
|
|
381
|
+
assert(!empty() && "empty LLVM module!!");
|
|
382
|
+
return getMainLLVMModule()->getContext();
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
bool empty() const
|
|
386
|
+
{
|
|
387
|
+
return getModuleNum() == 0;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/// Get or create SVFType and typeinfo
|
|
391
|
+
SVFType* getSVFType(const Type* T);
|
|
392
|
+
/// Get LLVM Type
|
|
393
|
+
const Type* getLLVMType(const SVFType* T) const;
|
|
394
|
+
|
|
395
|
+
ObjTypeInference* getTypeInference();
|
|
396
|
+
|
|
397
|
+
DominatorTree& getDomTree(const Function* fun);
|
|
398
|
+
|
|
399
|
+
std::string getExtFuncAnnotation(const Function* fun, const std::string& funcAnnotation);
|
|
400
|
+
|
|
401
|
+
const std::vector<std::string>& getExtFuncAnnotations(const Function* fun);
|
|
402
|
+
|
|
403
|
+
// Does (F) have some annotation?
|
|
404
|
+
bool hasExtFuncAnnotation(const Function* fun, const std::string& funcAnnotation);
|
|
405
|
+
|
|
406
|
+
// Does (F) have a static var X (unavailable to us) that its return points to?
|
|
407
|
+
bool has_static(const Function *F);
|
|
408
|
+
|
|
409
|
+
// Does (F) have a memcpy_like operation?
|
|
410
|
+
bool is_memcpy(const Function *F);
|
|
411
|
+
|
|
412
|
+
// Does (F) have a memset_like operation?
|
|
413
|
+
bool is_memset(const Function *F);
|
|
414
|
+
|
|
415
|
+
// Does (F) allocate a new object and return it?
|
|
416
|
+
bool is_alloc(const Function *F);
|
|
417
|
+
|
|
418
|
+
// Does (F) allocate a new object and assign it to one of its arguments?
|
|
419
|
+
bool is_arg_alloc(const Function *F);
|
|
420
|
+
|
|
421
|
+
// Does (F) allocate a new stack object and return it?
|
|
422
|
+
bool is_alloc_stack_ret(const Function *F);
|
|
423
|
+
|
|
424
|
+
// Get the position of argument which holds the new object
|
|
425
|
+
s32_t get_alloc_arg_pos(const Function *F);
|
|
426
|
+
|
|
427
|
+
// Does (F) reallocate a new object?
|
|
428
|
+
bool is_realloc(const Function *F);
|
|
429
|
+
|
|
430
|
+
// Should (F) be considered "external" (either not defined in the program
|
|
431
|
+
// or a user-defined version of a known alloc or no-op)?
|
|
432
|
+
bool is_ext(const Function *F);
|
|
433
|
+
|
|
434
|
+
// Set the annotation of (F)
|
|
435
|
+
void setExtFuncAnnotations(const Function* fun, const std::vector<std::string>& funcAnnotations);
|
|
436
|
+
|
|
437
|
+
private:
|
|
438
|
+
inline void addFunctionSet(const Function* svfFunc)
|
|
439
|
+
{
|
|
440
|
+
funSet.push_back(svfFunc);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
inline void setFunExitBB(const Function* fun, const BasicBlock* bb)
|
|
444
|
+
{
|
|
445
|
+
funToExitBB[fun] = bb;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
inline void setFunRealDefFun(const Function* fun, const Function* realDefFun)
|
|
449
|
+
{
|
|
450
|
+
funToRealDefFun[fun] = realDefFun;
|
|
451
|
+
}
|
|
452
|
+
/// Create SVFTypes
|
|
453
|
+
SVFType* addSVFTypeInfo(const Type* t);
|
|
454
|
+
/// Collect a type info
|
|
455
|
+
StInfo* collectTypeInfo(const Type* ty);
|
|
456
|
+
/// Collect the struct info and set the number of fields after flattening
|
|
457
|
+
StInfo* collectStructInfo(const StructType* structTy, u32_t& numFields);
|
|
458
|
+
/// Collect the array info
|
|
459
|
+
StInfo* collectArrayInfo(const ArrayType* T);
|
|
460
|
+
/// Collect simple type (non-aggregate) info
|
|
461
|
+
StInfo* collectSimpleTypeInfo(const Type* T);
|
|
462
|
+
|
|
463
|
+
std::vector<const Function*> getLLVMGlobalFunctions(const GlobalVariable* global);
|
|
464
|
+
|
|
465
|
+
void loadModules(const std::vector<std::string>& moduleNameVec);
|
|
466
|
+
// Loads ExtAPI bitcode file; uses LLVMContext made while loading module bitcode files or from Module
|
|
467
|
+
void loadExtAPIModules();
|
|
468
|
+
void addSVFMain();
|
|
469
|
+
|
|
470
|
+
void createSVFDataStructure();
|
|
471
|
+
|
|
472
|
+
void addToSVFVar2LLVMValueMap(const Value* val, SVFValue* svfBaseNode);
|
|
473
|
+
void buildFunToFunMap();
|
|
474
|
+
void buildGlobalDefToRepMap();
|
|
475
|
+
/// Invoke llvm passes to modify module
|
|
476
|
+
void prePassSchedule();
|
|
477
|
+
void buildSymbolTable() const;
|
|
478
|
+
void collectExtFunAnnotations(const Module* mod);
|
|
479
|
+
|
|
480
|
+
/// Get/Add a call node
|
|
481
|
+
inline CallICFGNode* getCallBlock(const Instruction* cs)
|
|
482
|
+
{
|
|
483
|
+
CSToCallNodeMapTy::const_iterator it = CSToCallNodeMap.find(cs);
|
|
484
|
+
if (it == CSToCallNodeMap.end())
|
|
485
|
+
return nullptr;
|
|
486
|
+
return it->second;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/// Get/Add a return node
|
|
490
|
+
inline RetICFGNode* getRetBlock(const Instruction* cs)
|
|
491
|
+
{
|
|
492
|
+
CSToRetNodeMapTy::const_iterator it = CSToRetNodeMap.find(cs);
|
|
493
|
+
if (it == CSToRetNodeMap.end())
|
|
494
|
+
return nullptr;
|
|
495
|
+
return it->second;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
inline IntraICFGNode* getIntraBlock(const Instruction* inst)
|
|
499
|
+
{
|
|
500
|
+
InstToBlockNodeMapTy::const_iterator it = InstToBlockNodeMap.find(inst);
|
|
501
|
+
if (it == InstToBlockNodeMap.end())
|
|
502
|
+
return nullptr;
|
|
503
|
+
return it->second;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/// Get/Add a function entry node
|
|
507
|
+
inline FunEntryICFGNode* getFunEntryBlock(const Function* fun)
|
|
508
|
+
{
|
|
509
|
+
FunToFunEntryNodeMapTy::const_iterator it = FunToFunEntryNodeMap.find(fun);
|
|
510
|
+
if (it == FunToFunEntryNodeMap.end())
|
|
511
|
+
return nullptr;
|
|
512
|
+
return it->second;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
/// Get/Add a function exit node
|
|
516
|
+
inline FunExitICFGNode* getFunExitBlock(const Function* fun)
|
|
517
|
+
{
|
|
518
|
+
FunToFunExitNodeMapTy::const_iterator it = FunToFunExitNodeMap.find(fun);
|
|
519
|
+
if (it == FunToFunExitNodeMap.end())
|
|
520
|
+
return nullptr;
|
|
521
|
+
return it->second;
|
|
522
|
+
}
|
|
523
|
+
};
|
|
524
|
+
|
|
525
|
+
} // End namespace SVF
|
|
526
|
+
|
|
527
|
+
#endif /* INCLUDE_SVF_FE_LLVMMODULE_H_ */
|