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,374 @@
|
|
|
1
|
+
//===----- CFLSolver.h -- Context-free language reachability solver--------------//
|
|
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
|
+
* CFLSolver.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: March 5, 2022
|
|
27
|
+
* Author: Yulei Sui, Yuxiang Lei
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef INCLUDE_CFL_CFLSolver_H_
|
|
31
|
+
#define INCLUDE_CFL_CFLSolver_H_
|
|
32
|
+
|
|
33
|
+
#include "Graphs/CFLGraph.h"
|
|
34
|
+
#include "CFL/CFGrammar.h"
|
|
35
|
+
#include "Util/WorkList.h"
|
|
36
|
+
|
|
37
|
+
using namespace std;
|
|
38
|
+
|
|
39
|
+
namespace SVF
|
|
40
|
+
{
|
|
41
|
+
typedef GrammarBase::Symbol Label;
|
|
42
|
+
|
|
43
|
+
class CFLSolver
|
|
44
|
+
{
|
|
45
|
+
|
|
46
|
+
public:
|
|
47
|
+
/// Define worklist
|
|
48
|
+
typedef FIFOWorkList<const CFLEdge*> WorkList;
|
|
49
|
+
typedef CFGrammar::Production Production;
|
|
50
|
+
typedef CFGrammar::Symbol Symbol;
|
|
51
|
+
|
|
52
|
+
static double numOfChecks;
|
|
53
|
+
|
|
54
|
+
CFLSolver(CFLGraph* _graph, CFGrammar* _grammar): graph(_graph), grammar(_grammar)
|
|
55
|
+
{
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
virtual ~CFLSolver()
|
|
59
|
+
{
|
|
60
|
+
delete graph;
|
|
61
|
+
delete grammar;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/// Initialize worklist
|
|
65
|
+
virtual void initialize();
|
|
66
|
+
|
|
67
|
+
/// Process CFLEdge
|
|
68
|
+
virtual void processCFLEdge(const CFLEdge* Y_edge);
|
|
69
|
+
|
|
70
|
+
/// Start solving
|
|
71
|
+
virtual void solve();
|
|
72
|
+
|
|
73
|
+
/// Return CFL Graph
|
|
74
|
+
inline const CFLGraph* getGraph() const
|
|
75
|
+
{
|
|
76
|
+
return graph;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/// Return CFL Grammar
|
|
80
|
+
inline const CFGrammar* getGrammar() const
|
|
81
|
+
{
|
|
82
|
+
return grammar;
|
|
83
|
+
}
|
|
84
|
+
virtual inline bool pushIntoWorklist(const CFLEdge* item)
|
|
85
|
+
{
|
|
86
|
+
return worklist.push(item);
|
|
87
|
+
}
|
|
88
|
+
virtual inline bool isWorklistEmpty()
|
|
89
|
+
{
|
|
90
|
+
return worklist.empty();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
protected:
|
|
94
|
+
/// Worklist operations
|
|
95
|
+
//@{
|
|
96
|
+
inline const CFLEdge* popFromWorklist()
|
|
97
|
+
{
|
|
98
|
+
return worklist.pop();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
inline bool isInWorklist(const CFLEdge* item)
|
|
102
|
+
{
|
|
103
|
+
return worklist.find(item);
|
|
104
|
+
}
|
|
105
|
+
//@}
|
|
106
|
+
|
|
107
|
+
protected:
|
|
108
|
+
CFLGraph* graph;
|
|
109
|
+
CFGrammar* grammar;
|
|
110
|
+
/// Worklist for resolution
|
|
111
|
+
WorkList worklist;
|
|
112
|
+
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/// Solver Utilize CFLData
|
|
116
|
+
class POCRSolver : public CFLSolver
|
|
117
|
+
{
|
|
118
|
+
public:
|
|
119
|
+
typedef std::map<const Label, NodeBS> TypeMap; // Label with SparseBitVector of NodeID
|
|
120
|
+
typedef std::unordered_map<NodeID, TypeMap> DataMap; // Each Node has a TypeMap
|
|
121
|
+
typedef typename DataMap::iterator iterator; // iterator for each node
|
|
122
|
+
typedef typename DataMap::const_iterator const_iterator;
|
|
123
|
+
|
|
124
|
+
protected:
|
|
125
|
+
DataMap succMap; // succ map for nodes contains Label: Edgeset
|
|
126
|
+
DataMap predMap; // pred map for nodes contains Label: edgeset
|
|
127
|
+
const NodeBS emptyData; // ??
|
|
128
|
+
NodeBS diff;
|
|
129
|
+
// union/add data
|
|
130
|
+
//@{
|
|
131
|
+
inline bool addPred(const NodeID key, const NodeID src, const Label ty)
|
|
132
|
+
{
|
|
133
|
+
return predMap[key][ty].test_and_set(src);
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
inline bool addSucc(const NodeID key, const NodeID dst, const Label ty)
|
|
137
|
+
{
|
|
138
|
+
return succMap[key][ty].test_and_set(dst);
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
inline bool addPreds(const NodeID key, const NodeBS& data, const Label ty)
|
|
142
|
+
{
|
|
143
|
+
if (data.empty())
|
|
144
|
+
return false;
|
|
145
|
+
return predMap[key][ty] |= data; // union of sparsebitvector (add to LHS)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
inline bool addSuccs(const NodeID key, const NodeBS& data, const Label ty)
|
|
149
|
+
{
|
|
150
|
+
if (data.empty())
|
|
151
|
+
return false;
|
|
152
|
+
return succMap[key][ty] |= data; // // union of sparsebitvector (add to LHS)
|
|
153
|
+
}
|
|
154
|
+
//@}
|
|
155
|
+
public:
|
|
156
|
+
|
|
157
|
+
virtual void clear()
|
|
158
|
+
{
|
|
159
|
+
succMap.clear();
|
|
160
|
+
predMap.clear();
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
inline const_iterator begin() const
|
|
164
|
+
{
|
|
165
|
+
return succMap.begin();
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
inline const_iterator end() const
|
|
169
|
+
{
|
|
170
|
+
return succMap.end();
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
inline iterator begin()
|
|
174
|
+
{
|
|
175
|
+
return succMap.begin();
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
inline iterator end()
|
|
179
|
+
{
|
|
180
|
+
return succMap.end();
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
inline DataMap& getSuccMap()
|
|
184
|
+
{
|
|
185
|
+
return succMap;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
inline DataMap& getPredMap()
|
|
189
|
+
{
|
|
190
|
+
return predMap;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
inline TypeMap& getSuccMap(const NodeID key)
|
|
194
|
+
{
|
|
195
|
+
return succMap[key];
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
inline TypeMap& getPredMap(const NodeID key)
|
|
199
|
+
{
|
|
200
|
+
return predMap[key];
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
inline NodeBS& getSuccs(const NodeID key, const Label ty)
|
|
204
|
+
{
|
|
205
|
+
return succMap[key][ty];
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
inline NodeBS& getPreds(const NodeID key, const Label ty)
|
|
209
|
+
{
|
|
210
|
+
return predMap[key][ty];
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Alias data operations
|
|
214
|
+
//@{
|
|
215
|
+
inline bool addEdge(const NodeID src, const NodeID dst, const Label ty)
|
|
216
|
+
{
|
|
217
|
+
addSucc(src, dst, ty);
|
|
218
|
+
return addPred(dst, src, ty);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/// add edges and return the set of added edges (dst) for src
|
|
222
|
+
inline NodeBS addEdges(const NodeID src, const NodeBS& dstData, const Label ty)
|
|
223
|
+
{
|
|
224
|
+
NodeBS newDsts;
|
|
225
|
+
if (addSuccs(src, dstData, ty))
|
|
226
|
+
{
|
|
227
|
+
for (const NodeID datum: dstData)
|
|
228
|
+
if (addPred(datum, src, ty))
|
|
229
|
+
newDsts.set(datum);
|
|
230
|
+
}
|
|
231
|
+
return newDsts;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/// add edges and return the set of added edges (src) for dst
|
|
235
|
+
inline NodeBS addEdges(const NodeBS& srcData, const NodeID dst, const Label ty)
|
|
236
|
+
{
|
|
237
|
+
NodeBS newSrcs;
|
|
238
|
+
if (addPreds(dst, srcData, ty))
|
|
239
|
+
{
|
|
240
|
+
for (const NodeID datum: srcData)
|
|
241
|
+
if (addSucc(datum, dst, ty))
|
|
242
|
+
newSrcs.set(datum);
|
|
243
|
+
}
|
|
244
|
+
return newSrcs;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/// find src -> find src[ty] -> find dst in set
|
|
248
|
+
inline bool hasEdge(const NodeID src, const NodeID dst, const Label ty)
|
|
249
|
+
{
|
|
250
|
+
const_iterator iter1 = succMap.find(src);
|
|
251
|
+
if (iter1 == succMap.end())
|
|
252
|
+
return false;
|
|
253
|
+
|
|
254
|
+
auto iter2 = iter1->second.find(ty);
|
|
255
|
+
if (iter2 == iter1->second.end())
|
|
256
|
+
return false;
|
|
257
|
+
|
|
258
|
+
return iter2->second.test(dst);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/* This is a dataset version, to be modified to a cflData version */
|
|
262
|
+
inline void clearEdges(const NodeID key)
|
|
263
|
+
{
|
|
264
|
+
succMap[key].clear();
|
|
265
|
+
predMap[key].clear();
|
|
266
|
+
}
|
|
267
|
+
//@}
|
|
268
|
+
|
|
269
|
+
POCRSolver(CFLGraph* _graph, CFGrammar* _grammar) : CFLSolver(_graph, _grammar)
|
|
270
|
+
{
|
|
271
|
+
buildCFLData();
|
|
272
|
+
}
|
|
273
|
+
/// Destructor
|
|
274
|
+
virtual ~POCRSolver()
|
|
275
|
+
{
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/// Process CFLEdge
|
|
279
|
+
virtual void processCFLEdge(const CFLEdge* Y_edge);
|
|
280
|
+
|
|
281
|
+
/// Init CFLData
|
|
282
|
+
virtual void buildCFLData();
|
|
283
|
+
|
|
284
|
+
virtual void initialize();
|
|
285
|
+
};
|
|
286
|
+
/*!
|
|
287
|
+
* Hybrid graph representation for transitive relations
|
|
288
|
+
* The implementation is based on
|
|
289
|
+
* Yuxiang Lei, Yulei Sui, Shuo Ding, and Qirun Zhang.
|
|
290
|
+
* Taming Transitive Redundancy for Context-Free Language Reachability.
|
|
291
|
+
* ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications
|
|
292
|
+
*/
|
|
293
|
+
/// Solver Utilize Hybrid Representation of Graph
|
|
294
|
+
class POCRHybridSolver : public POCRSolver
|
|
295
|
+
{
|
|
296
|
+
//Hybrid
|
|
297
|
+
//{@
|
|
298
|
+
public:
|
|
299
|
+
struct TreeNode
|
|
300
|
+
{
|
|
301
|
+
NodeID id;
|
|
302
|
+
std::unordered_set<TreeNode*> children;
|
|
303
|
+
|
|
304
|
+
TreeNode(NodeID nId) : id(nId)
|
|
305
|
+
{}
|
|
306
|
+
|
|
307
|
+
~TreeNode()
|
|
308
|
+
{
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
inline bool operator==(const TreeNode& rhs) const
|
|
312
|
+
{
|
|
313
|
+
return id == rhs.id;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
inline bool operator<(const TreeNode& rhs) const
|
|
317
|
+
{
|
|
318
|
+
return id < rhs.id;
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
public:
|
|
323
|
+
Map<NodeID, std::unordered_map<NodeID, TreeNode*>> indMap; // indMap[v][u] points to node v in tree(u)
|
|
324
|
+
|
|
325
|
+
bool hasInd_h(NodeID src, NodeID dst);
|
|
326
|
+
|
|
327
|
+
/// Add a node dst to tree(src)
|
|
328
|
+
TreeNode* addInd_h(NodeID src, NodeID dst);
|
|
329
|
+
|
|
330
|
+
/// Get the node dst in tree(src)
|
|
331
|
+
TreeNode* getNode_h(NodeID src, NodeID dst)
|
|
332
|
+
{
|
|
333
|
+
return indMap[dst][src];
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/// add v into desc(x) as a child of u
|
|
337
|
+
void insertEdge_h(TreeNode* u, TreeNode* v)
|
|
338
|
+
{
|
|
339
|
+
u->children.insert(v);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
void addArc_h(NodeID src, NodeID dst);
|
|
343
|
+
|
|
344
|
+
void meld_h(NodeID x, TreeNode* uNode, TreeNode* vNode);
|
|
345
|
+
//@}
|
|
346
|
+
public:
|
|
347
|
+
POCRHybridSolver(CFLGraph* _graph, CFGrammar* _grammar) : POCRSolver(_graph, _grammar)
|
|
348
|
+
{
|
|
349
|
+
}
|
|
350
|
+
/// Destructor
|
|
351
|
+
virtual ~POCRHybridSolver()
|
|
352
|
+
{
|
|
353
|
+
for (auto iter1: indMap)
|
|
354
|
+
{
|
|
355
|
+
for (auto iter2: iter1.second)
|
|
356
|
+
{
|
|
357
|
+
delete iter2.second;
|
|
358
|
+
iter2.second = NULL;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/// Process CFLEdge
|
|
364
|
+
virtual void processCFLEdge(const CFLEdge* Y_edge);
|
|
365
|
+
|
|
366
|
+
virtual void initialize();
|
|
367
|
+
|
|
368
|
+
public:
|
|
369
|
+
void addArc(NodeID src, NodeID dst);
|
|
370
|
+
void meld(NodeID x, TreeNode* uNode, TreeNode* vNode);
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
#endif /* INCLUDE_CFL_CFLSolver_H_*/
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
//===- CFLStat.h -- CFL statistics--------------------------------------------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-2017> <Yulei Sui>
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
// This program is free software: you can redistribute it and/or modify
|
|
9
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
10
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
// (at your option) any later version.
|
|
12
|
+
|
|
13
|
+
// This program is distributed in the hope that it will be useful,
|
|
14
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
// GNU Affero General Public License for more details.
|
|
17
|
+
|
|
18
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
19
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
//
|
|
21
|
+
//===----------------------------------------------------------------------===//
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
/*
|
|
25
|
+
* CFLStat.h
|
|
26
|
+
*
|
|
27
|
+
* Created on: 17/9/2022
|
|
28
|
+
* Author: Pei Xu
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
#ifndef CFL_CFLSTAT_H_
|
|
32
|
+
#define CFL_CFLSTAT_H_
|
|
33
|
+
|
|
34
|
+
#include "Util/PTAStat.h"
|
|
35
|
+
#include "CFL/CFLAlias.h"
|
|
36
|
+
#include "CFL/CFLVF.h"
|
|
37
|
+
|
|
38
|
+
namespace SVF
|
|
39
|
+
{
|
|
40
|
+
|
|
41
|
+
/*!
|
|
42
|
+
* Statistics of CFL's analysis
|
|
43
|
+
*/
|
|
44
|
+
class CFLStat : public PTAStat
|
|
45
|
+
{
|
|
46
|
+
private:
|
|
47
|
+
CFLBase* pta;
|
|
48
|
+
|
|
49
|
+
public:
|
|
50
|
+
CFLStat(CFLBase* p);
|
|
51
|
+
|
|
52
|
+
virtual ~CFLStat()
|
|
53
|
+
{
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
virtual void performStat();
|
|
57
|
+
|
|
58
|
+
void CFLGraphStat();
|
|
59
|
+
|
|
60
|
+
void CFLGrammarStat();
|
|
61
|
+
|
|
62
|
+
void CFLSolverStat();
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
} // End namespace SVF
|
|
66
|
+
|
|
67
|
+
#endif /* CFL_CFLSTAT_H_ */
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
//===----- CFLVF.h -- CFL Value-Flow Client--------------//
|
|
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
|
+
* CFLVF.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: September 5, 2022
|
|
27
|
+
* Author: Pei Xu
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef INCLUDE_CFL_CFLVF_H_
|
|
31
|
+
#define INCLUDE_CFL_CFLVF_H_
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
#include "CFL/CFLBase.h"
|
|
35
|
+
#include "CFL/CFLStat.h"
|
|
36
|
+
#include "CFL/CFLSVFGBuilder.h"
|
|
37
|
+
#include "WPA/Andersen.h"
|
|
38
|
+
|
|
39
|
+
namespace SVF
|
|
40
|
+
{
|
|
41
|
+
class CFLVF : public CFLBase
|
|
42
|
+
{
|
|
43
|
+
|
|
44
|
+
public:
|
|
45
|
+
CFLVF(SVFIR* ir) : CFLBase(ir, PointerAnalysis::CFLFSCS_WPA)
|
|
46
|
+
{
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/// Parameter Checking
|
|
50
|
+
virtual void checkParameter();
|
|
51
|
+
|
|
52
|
+
/// Initialize the grammar, graph, solver
|
|
53
|
+
virtual void initialize();
|
|
54
|
+
|
|
55
|
+
/// Print grammar and graph
|
|
56
|
+
virtual void finalize();
|
|
57
|
+
|
|
58
|
+
/// Build CFLGraph via VFG
|
|
59
|
+
void buildCFLGraph();
|
|
60
|
+
|
|
61
|
+
private:
|
|
62
|
+
CFLSVFGBuilder memSSA;
|
|
63
|
+
SVFG* svfg;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
} // End namespace SVF
|
|
67
|
+
|
|
68
|
+
#endif /* INCLUDE_CFL_CFLVF_H_*/
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
//===----- GrammarBuilder.h -- CFL Grammar Builder--------------//
|
|
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
|
+
* GrammarBuilder.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: April 26, 2022
|
|
27
|
+
* Author: Pei Xu
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef INCLUDE_CFL_GRAMMARBUILDER_H_
|
|
31
|
+
#define INCLUDE_CFL_GRAMMARBUILDER_H_
|
|
32
|
+
|
|
33
|
+
#include "CFL/CFGrammar.h"
|
|
34
|
+
|
|
35
|
+
namespace SVF
|
|
36
|
+
{
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Build Grammar from a user specified grammar text
|
|
40
|
+
*
|
|
41
|
+
* Symbol Format:
|
|
42
|
+
* <kind> [bar] [ _alpha | _number ]
|
|
43
|
+
* kind: any nonspace string start with alphabet, epsilon stand for empty string
|
|
44
|
+
* bar: stand for reverse edge
|
|
45
|
+
* alpha: any single alpha
|
|
46
|
+
* number: any number
|
|
47
|
+
* start with capital: nonterminal
|
|
48
|
+
* start with noncapital: terminal
|
|
49
|
+
*
|
|
50
|
+
* Production Format:
|
|
51
|
+
* <symbol> -> <symbol> *;
|
|
52
|
+
* LHS and RHS, Separate by '->', symbol separate by ' ', end by ';'
|
|
53
|
+
* support '*', '?', '(', ')'
|
|
54
|
+
*
|
|
55
|
+
* Input Format:
|
|
56
|
+
* Start:
|
|
57
|
+
* M // Specify Start Symbol in Second Line
|
|
58
|
+
* Terminal:
|
|
59
|
+
* Addr Copy Store Load Gep Vgep // Specify the order of terminal Addr->0, Copy->1 ..
|
|
60
|
+
* Productions: // Each Symbol separate by 'Space', production end with ';'
|
|
61
|
+
* M -> V d; // Terminal in NonCapital
|
|
62
|
+
* M -> dbar V d; // NonTerminal in Capital
|
|
63
|
+
* V -> M abar M a M; // LHS and RHS, Separate by '->'
|
|
64
|
+
* V -> ( M ? abar ) * M ? ( a M ? ) *; // Support '(' ')' '?' '*' four regular expression sign
|
|
65
|
+
* Gep_j -> Gep_i F vgep; // Support variable attribute with variable attribute
|
|
66
|
+
* Gep_1 -> Gep_2; // Support fix number attribute
|
|
67
|
+
*
|
|
68
|
+
*/
|
|
69
|
+
|
|
70
|
+
class GrammarBuilder
|
|
71
|
+
{
|
|
72
|
+
private:
|
|
73
|
+
std::string fileName;
|
|
74
|
+
GrammarBase *grammar;
|
|
75
|
+
|
|
76
|
+
/// Parse start symbol and production from file string
|
|
77
|
+
const inline std::string parseProductionsString() const;
|
|
78
|
+
|
|
79
|
+
/// Parse whole production string to production vector
|
|
80
|
+
const inline std::vector<std::string> loadWordProductions() const;
|
|
81
|
+
|
|
82
|
+
/// Strip front and tail space
|
|
83
|
+
const inline std::string stripSpace(std::string s) const;
|
|
84
|
+
|
|
85
|
+
public:
|
|
86
|
+
GrammarBuilder(std::string fileName): fileName(fileName), grammar(nullptr)
|
|
87
|
+
{
|
|
88
|
+
grammar = new GrammarBase();
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/// Build grammarBase from fileName
|
|
92
|
+
GrammarBase* build() const;
|
|
93
|
+
|
|
94
|
+
/// Build grammarBase from fileName with preset str2KindMap
|
|
95
|
+
GrammarBase* build(Map<std::string, SVF::GrammarBase::Symbol> &preMap) const;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
} // SVF
|
|
99
|
+
|
|
100
|
+
#endif /* INCLUDE_CFL_GRAMMARBUILDER_H_ */
|