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,427 @@
|
|
|
1
|
+
//===- SVFBugReport.h -- Base class for statistics---------------------------------//
|
|
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
|
+
// Created by JoelYang on 2023/4/19.
|
|
25
|
+
//
|
|
26
|
+
|
|
27
|
+
#ifndef SVF_BUGRECODER_H
|
|
28
|
+
#define SVF_BUGRECODER_H
|
|
29
|
+
|
|
30
|
+
#include <vector>
|
|
31
|
+
#include "SVFIR/SVFValue.h"
|
|
32
|
+
#include "SVFIR/SVFVariables.h"
|
|
33
|
+
#include "SVFIR/SVFStatements.h"
|
|
34
|
+
#include "Graphs/ICFGNode.h"
|
|
35
|
+
#include <string>
|
|
36
|
+
#include <map>
|
|
37
|
+
#include "Util/cJSON.h"
|
|
38
|
+
#include <set>
|
|
39
|
+
|
|
40
|
+
#define BRANCHFLAGMASK 0x00000010
|
|
41
|
+
#define EVENTTYPEMASK 0x0000000f
|
|
42
|
+
|
|
43
|
+
namespace SVF
|
|
44
|
+
{
|
|
45
|
+
|
|
46
|
+
/*!
|
|
47
|
+
* Bug Detector Recoder
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class SVFBugEvent
|
|
52
|
+
{
|
|
53
|
+
public:
|
|
54
|
+
enum EventType
|
|
55
|
+
{
|
|
56
|
+
Branch = 0x1,
|
|
57
|
+
Caller = 0x2,
|
|
58
|
+
CallSite = 0x3,
|
|
59
|
+
Loop = 0x4,
|
|
60
|
+
SourceInst = 0x5
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
protected:
|
|
64
|
+
u32_t typeAndInfoFlag;
|
|
65
|
+
const ICFGNode *eventInst;
|
|
66
|
+
|
|
67
|
+
public:
|
|
68
|
+
SVFBugEvent(u32_t typeAndInfoFlag, const ICFGNode *eventInst): typeAndInfoFlag(typeAndInfoFlag), eventInst(eventInst) { };
|
|
69
|
+
virtual ~SVFBugEvent() = default;
|
|
70
|
+
|
|
71
|
+
inline u32_t getEventType() const
|
|
72
|
+
{
|
|
73
|
+
return typeAndInfoFlag & EVENTTYPEMASK;
|
|
74
|
+
}
|
|
75
|
+
virtual const std::string getEventDescription() const;
|
|
76
|
+
virtual const std::string getFuncName() const;
|
|
77
|
+
virtual const std::string getEventLoc() const;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
class GenericBug
|
|
81
|
+
{
|
|
82
|
+
public:
|
|
83
|
+
typedef std::vector<SVFBugEvent> EventStack;
|
|
84
|
+
|
|
85
|
+
public:
|
|
86
|
+
enum BugType {FULLBUFOVERFLOW, PARTIALBUFOVERFLOW, NEVERFREE, PARTIALLEAK, DOUBLEFREE, FILENEVERCLOSE, FILEPARTIALCLOSE, FULLNULLPTRDEREFERENCE, PARTIALNULLPTRDEREFERENCE};
|
|
87
|
+
static const std::map<GenericBug::BugType, std::string> BugType2Str;
|
|
88
|
+
|
|
89
|
+
protected:
|
|
90
|
+
BugType bugType;
|
|
91
|
+
const EventStack bugEventStack;
|
|
92
|
+
|
|
93
|
+
public:
|
|
94
|
+
/// note: should be initialized with a bugEventStack
|
|
95
|
+
GenericBug(BugType bugType, const EventStack &bugEventStack):
|
|
96
|
+
bugType(bugType), bugEventStack(bugEventStack)
|
|
97
|
+
{
|
|
98
|
+
assert(bugEventStack.size() != 0 && "bugEventStack should NOT be empty!");
|
|
99
|
+
}
|
|
100
|
+
virtual ~GenericBug() = default;
|
|
101
|
+
//GenericBug(const GenericBug &) = delete;
|
|
102
|
+
/// returns bug type
|
|
103
|
+
inline BugType getBugType() const
|
|
104
|
+
{
|
|
105
|
+
return bugType;
|
|
106
|
+
}
|
|
107
|
+
/// returns bug location as json format string
|
|
108
|
+
const std::string getLoc() const;
|
|
109
|
+
/// return bug source function name
|
|
110
|
+
const std::string getFuncName() const;
|
|
111
|
+
|
|
112
|
+
inline const EventStack& getEventStack() const
|
|
113
|
+
{
|
|
114
|
+
return bugEventStack;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
virtual cJSON *getBugDescription() const = 0;
|
|
118
|
+
virtual void printBugToTerminal() const = 0;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
class BufferOverflowBug: public GenericBug
|
|
122
|
+
{
|
|
123
|
+
protected:
|
|
124
|
+
s64_t allocLowerBound, allocUpperBound, accessLowerBound, accessUpperBound;
|
|
125
|
+
|
|
126
|
+
public:
|
|
127
|
+
BufferOverflowBug(GenericBug::BugType bugType, const EventStack &eventStack,
|
|
128
|
+
s64_t allocLowerBound, s64_t allocUpperBound,
|
|
129
|
+
s64_t accessLowerBound, s64_t accessUpperBound):
|
|
130
|
+
GenericBug(bugType, eventStack), allocLowerBound(allocLowerBound),
|
|
131
|
+
allocUpperBound(allocUpperBound), accessLowerBound(accessLowerBound),
|
|
132
|
+
accessUpperBound(accessUpperBound) { }
|
|
133
|
+
|
|
134
|
+
cJSON *getBugDescription() const;
|
|
135
|
+
void printBugToTerminal() const;
|
|
136
|
+
|
|
137
|
+
/// ClassOf
|
|
138
|
+
static inline bool classof(const GenericBug *bug)
|
|
139
|
+
{
|
|
140
|
+
return bug->getBugType() == GenericBug::PARTIALBUFOVERFLOW || bug->getBugType() == GenericBug::FULLBUFOVERFLOW;
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
class FullBufferOverflowBug: public BufferOverflowBug
|
|
145
|
+
{
|
|
146
|
+
public:
|
|
147
|
+
FullBufferOverflowBug(const EventStack &eventStack,
|
|
148
|
+
s64_t allocLowerBound, s64_t allocUpperBound,
|
|
149
|
+
s64_t accessLowerBound, s64_t accessUpperBound):
|
|
150
|
+
BufferOverflowBug(GenericBug::FULLBUFOVERFLOW, eventStack, allocLowerBound,
|
|
151
|
+
allocUpperBound, accessLowerBound, accessUpperBound) { }
|
|
152
|
+
|
|
153
|
+
/// ClassOf
|
|
154
|
+
static inline bool classof(const GenericBug *bug)
|
|
155
|
+
{
|
|
156
|
+
return bug->getBugType() == GenericBug::FULLBUFOVERFLOW;
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
class PartialBufferOverflowBug: public BufferOverflowBug
|
|
161
|
+
{
|
|
162
|
+
public:
|
|
163
|
+
PartialBufferOverflowBug( const EventStack &eventStack,
|
|
164
|
+
s64_t allocLowerBound, s64_t allocUpperBound,
|
|
165
|
+
s64_t accessLowerBound, s64_t accessUpperBound):
|
|
166
|
+
BufferOverflowBug(GenericBug::PARTIALBUFOVERFLOW, eventStack, allocLowerBound,
|
|
167
|
+
allocUpperBound, accessLowerBound, accessUpperBound) { }
|
|
168
|
+
|
|
169
|
+
/// ClassOf
|
|
170
|
+
static inline bool classof(const GenericBug *bug)
|
|
171
|
+
{
|
|
172
|
+
return bug->getBugType() == GenericBug::PARTIALBUFOVERFLOW;
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
class NeverFreeBug : public GenericBug
|
|
177
|
+
{
|
|
178
|
+
public:
|
|
179
|
+
NeverFreeBug(const EventStack &bugEventStack):
|
|
180
|
+
GenericBug(GenericBug::NEVERFREE, bugEventStack) { };
|
|
181
|
+
|
|
182
|
+
cJSON *getBugDescription() const;
|
|
183
|
+
void printBugToTerminal() const;
|
|
184
|
+
|
|
185
|
+
/// ClassOf
|
|
186
|
+
static inline bool classof(const GenericBug *bug)
|
|
187
|
+
{
|
|
188
|
+
return bug->getBugType() == GenericBug::NEVERFREE;
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
class PartialLeakBug : public GenericBug
|
|
193
|
+
{
|
|
194
|
+
public:
|
|
195
|
+
PartialLeakBug(const EventStack &bugEventStack):
|
|
196
|
+
GenericBug(GenericBug::PARTIALLEAK, bugEventStack) { }
|
|
197
|
+
|
|
198
|
+
cJSON *getBugDescription() const;
|
|
199
|
+
void printBugToTerminal() const;
|
|
200
|
+
|
|
201
|
+
/// ClassOf
|
|
202
|
+
static inline bool classof(const GenericBug *bug)
|
|
203
|
+
{
|
|
204
|
+
return bug->getBugType() == GenericBug::PARTIALLEAK;
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
class DoubleFreeBug : public GenericBug
|
|
209
|
+
{
|
|
210
|
+
public:
|
|
211
|
+
DoubleFreeBug(const EventStack &bugEventStack):
|
|
212
|
+
GenericBug(GenericBug::DOUBLEFREE, bugEventStack) { }
|
|
213
|
+
|
|
214
|
+
cJSON *getBugDescription() const;
|
|
215
|
+
void printBugToTerminal() const;
|
|
216
|
+
|
|
217
|
+
/// ClassOf
|
|
218
|
+
static inline bool classof(const GenericBug *bug)
|
|
219
|
+
{
|
|
220
|
+
return bug->getBugType() == GenericBug::DOUBLEFREE;
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
class FileNeverCloseBug : public GenericBug
|
|
225
|
+
{
|
|
226
|
+
public:
|
|
227
|
+
FileNeverCloseBug(const EventStack &bugEventStack):
|
|
228
|
+
GenericBug(GenericBug::FILENEVERCLOSE, bugEventStack) { };
|
|
229
|
+
|
|
230
|
+
cJSON *getBugDescription() const;
|
|
231
|
+
void printBugToTerminal() const;
|
|
232
|
+
|
|
233
|
+
/// ClassOf
|
|
234
|
+
static inline bool classof(const GenericBug *bug)
|
|
235
|
+
{
|
|
236
|
+
return bug->getBugType() == GenericBug::FILENEVERCLOSE;
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
class FilePartialCloseBug : public GenericBug
|
|
241
|
+
{
|
|
242
|
+
public:
|
|
243
|
+
FilePartialCloseBug(const EventStack &bugEventStack):
|
|
244
|
+
GenericBug(GenericBug::FILEPARTIALCLOSE, bugEventStack) { }
|
|
245
|
+
|
|
246
|
+
cJSON *getBugDescription() const;
|
|
247
|
+
void printBugToTerminal() const;
|
|
248
|
+
|
|
249
|
+
/// ClassOf
|
|
250
|
+
static inline bool classof(const GenericBug *bug)
|
|
251
|
+
{
|
|
252
|
+
return bug->getBugType() == GenericBug::FILEPARTIALCLOSE;
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
class FullNullPtrDereferenceBug : public GenericBug
|
|
257
|
+
{
|
|
258
|
+
public:
|
|
259
|
+
FullNullPtrDereferenceBug(const EventStack &bugEventStack):
|
|
260
|
+
GenericBug(GenericBug::FULLNULLPTRDEREFERENCE, bugEventStack) { }
|
|
261
|
+
|
|
262
|
+
cJSON *getBugDescription() const;
|
|
263
|
+
void printBugToTerminal() const;
|
|
264
|
+
|
|
265
|
+
/// ClassOf
|
|
266
|
+
static inline bool classof(const GenericBug *bug)
|
|
267
|
+
{
|
|
268
|
+
return bug->getBugType() == GenericBug::FULLNULLPTRDEREFERENCE;
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
class PartialNullPtrDereferenceBug : public GenericBug
|
|
273
|
+
{
|
|
274
|
+
public:
|
|
275
|
+
PartialNullPtrDereferenceBug(const EventStack &bugEventStack):
|
|
276
|
+
GenericBug(GenericBug::PARTIALNULLPTRDEREFERENCE, bugEventStack) { }
|
|
277
|
+
|
|
278
|
+
cJSON *getBugDescription() const;
|
|
279
|
+
void printBugToTerminal() const;
|
|
280
|
+
|
|
281
|
+
/// ClassOf
|
|
282
|
+
static inline bool classof(const GenericBug *bug)
|
|
283
|
+
{
|
|
284
|
+
return bug->getBugType() == GenericBug::PARTIALNULLPTRDEREFERENCE;
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
class SVFBugReport
|
|
289
|
+
{
|
|
290
|
+
public:
|
|
291
|
+
SVFBugReport() = default;
|
|
292
|
+
~SVFBugReport();
|
|
293
|
+
typedef SVF::Set<const GenericBug *> BugSet;
|
|
294
|
+
|
|
295
|
+
protected:
|
|
296
|
+
BugSet bugSet; // maintain bugs
|
|
297
|
+
double time; // time (sec)
|
|
298
|
+
std::string mem; // string memory (KB)
|
|
299
|
+
double coverage; // coverage (%)
|
|
300
|
+
|
|
301
|
+
public:
|
|
302
|
+
// set time, mem and coverage
|
|
303
|
+
void setStat(double time, std::string mem, double coverage)
|
|
304
|
+
{
|
|
305
|
+
this->time = time;
|
|
306
|
+
this->mem = mem;
|
|
307
|
+
this->coverage = coverage;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/*
|
|
311
|
+
* function: pass bug type (i.e., GenericBug::NEVERFREE) and eventStack as parameter,
|
|
312
|
+
* it will add the bug into bugQueue.
|
|
313
|
+
* usage: addSaberBug(GenericBug::NEVERFREE, eventStack)
|
|
314
|
+
*/
|
|
315
|
+
void addSaberBug(GenericBug::BugType bugType, const GenericBug::EventStack &eventStack)
|
|
316
|
+
{
|
|
317
|
+
/// create and add the bug
|
|
318
|
+
GenericBug *newBug = nullptr;
|
|
319
|
+
switch(bugType)
|
|
320
|
+
{
|
|
321
|
+
case GenericBug::NEVERFREE:
|
|
322
|
+
{
|
|
323
|
+
newBug = new NeverFreeBug(eventStack);
|
|
324
|
+
bugSet.insert(newBug);
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
case GenericBug::PARTIALLEAK:
|
|
328
|
+
{
|
|
329
|
+
newBug = new PartialLeakBug(eventStack);
|
|
330
|
+
bugSet.insert(newBug);
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
case GenericBug::DOUBLEFREE:
|
|
334
|
+
{
|
|
335
|
+
newBug = new DoubleFreeBug(eventStack);
|
|
336
|
+
bugSet.insert(newBug);
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
case GenericBug::FILENEVERCLOSE:
|
|
340
|
+
{
|
|
341
|
+
newBug = new FileNeverCloseBug(eventStack);
|
|
342
|
+
bugSet.insert(newBug);
|
|
343
|
+
break;
|
|
344
|
+
}
|
|
345
|
+
case GenericBug::FILEPARTIALCLOSE:
|
|
346
|
+
{
|
|
347
|
+
newBug = new FilePartialCloseBug(eventStack);
|
|
348
|
+
bugSet.insert(newBug);
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
default:
|
|
352
|
+
{
|
|
353
|
+
assert(false && "saber does NOT have this bug type!");
|
|
354
|
+
break;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// when add a bug, also print it to terminal
|
|
359
|
+
newBug->printBugToTerminal();
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/*
|
|
363
|
+
* function: pass bug type (i.e., GenericBug::FULLBUFOVERFLOW) and eventStack as parameter,
|
|
364
|
+
* it will add the bug into bugQueue.
|
|
365
|
+
* usage: addAbsExecBug(GenericBug::FULLBUFOVERFLOW, eventStack, 0, 10, 11, 11)
|
|
366
|
+
*/
|
|
367
|
+
void addAbsExecBug(GenericBug::BugType bugType, const GenericBug::EventStack &eventStack,
|
|
368
|
+
s64_t allocLowerBound, s64_t allocUpperBound, s64_t accessLowerBound, s64_t accessUpperBound)
|
|
369
|
+
{
|
|
370
|
+
/// add bugs
|
|
371
|
+
GenericBug *newBug = nullptr;
|
|
372
|
+
switch(bugType)
|
|
373
|
+
{
|
|
374
|
+
case GenericBug::FULLBUFOVERFLOW:
|
|
375
|
+
{
|
|
376
|
+
newBug = new FullBufferOverflowBug(eventStack, allocLowerBound, allocUpperBound, accessLowerBound, accessUpperBound);
|
|
377
|
+
bugSet.insert(newBug);
|
|
378
|
+
break;
|
|
379
|
+
}
|
|
380
|
+
case GenericBug::PARTIALBUFOVERFLOW:
|
|
381
|
+
{
|
|
382
|
+
newBug = new PartialBufferOverflowBug(eventStack, allocLowerBound, allocUpperBound, accessLowerBound, accessUpperBound);
|
|
383
|
+
bugSet.insert(newBug);
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
386
|
+
case GenericBug::FULLNULLPTRDEREFERENCE:
|
|
387
|
+
{
|
|
388
|
+
newBug = new FullNullPtrDereferenceBug(eventStack);
|
|
389
|
+
bugSet.insert(newBug);
|
|
390
|
+
break;
|
|
391
|
+
}
|
|
392
|
+
case GenericBug::PARTIALNULLPTRDEREFERENCE:
|
|
393
|
+
{
|
|
394
|
+
newBug = new PartialNullPtrDereferenceBug(eventStack);
|
|
395
|
+
bugSet.insert(newBug);
|
|
396
|
+
break;
|
|
397
|
+
}
|
|
398
|
+
default:
|
|
399
|
+
{
|
|
400
|
+
assert(false && "Abstract Execution does NOT have this bug type!");
|
|
401
|
+
break;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// when add a bug, also print it to terminal
|
|
406
|
+
//newBug->printBugToTerminal();
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/*
|
|
410
|
+
* function: pass file path, open the file and dump bug report as JSON format
|
|
411
|
+
* usage: dumpToFile("/path/to/file")
|
|
412
|
+
*/
|
|
413
|
+
void dumpToJsonFile(const std::string& filePath) const;
|
|
414
|
+
|
|
415
|
+
/*
|
|
416
|
+
* function: get underlying bugset
|
|
417
|
+
* usage: getBugSet()
|
|
418
|
+
*/
|
|
419
|
+
const BugSet &getBugSet() const
|
|
420
|
+
{
|
|
421
|
+
return bugSet;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
#endif
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
//===- SVFLoopAndDomInfo.h -- ------------------------------//
|
|
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
|
+
* SVFLoopAndDomInfo.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Feb 7, 2025
|
|
27
|
+
* Author: Xiao Cheng
|
|
28
|
+
*
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
#ifndef SVFLOOPANDDOMINFO_H
|
|
32
|
+
#define SVFLOOPANDDOMINFO_H
|
|
33
|
+
|
|
34
|
+
#include "SVFIR/SVFType.h"
|
|
35
|
+
#include "Graphs/GraphPrinter.h"
|
|
36
|
+
#include "Util/Casting.h"
|
|
37
|
+
#include "Graphs/BasicBlockG.h"
|
|
38
|
+
|
|
39
|
+
namespace SVF
|
|
40
|
+
{
|
|
41
|
+
class SVFLoopAndDomInfo
|
|
42
|
+
{
|
|
43
|
+
friend class SVFIRWriter;
|
|
44
|
+
friend class SVFIRReader;
|
|
45
|
+
public:
|
|
46
|
+
typedef Set<const SVFBasicBlock*> BBSet;
|
|
47
|
+
typedef std::vector<const SVFBasicBlock*> BBList;
|
|
48
|
+
typedef BBList LoopBBs;
|
|
49
|
+
|
|
50
|
+
private:
|
|
51
|
+
BBList reachableBBs; ///< reachable BasicBlocks from the function entry.
|
|
52
|
+
Map<const SVFBasicBlock*,BBSet> dtBBsMap; ///< map a BasicBlock to BasicBlocks it Dominates
|
|
53
|
+
Map<const SVFBasicBlock*,BBSet> pdtBBsMap; ///< map a BasicBlock to BasicBlocks it PostDominates
|
|
54
|
+
Map<const SVFBasicBlock*,BBSet> dfBBsMap; ///< map a BasicBlock to its Dominate Frontier BasicBlocks
|
|
55
|
+
Map<const SVFBasicBlock*, LoopBBs> bb2LoopMap; ///< map a BasicBlock (if it is in a loop) to all the BasicBlocks in this loop
|
|
56
|
+
Map<const SVFBasicBlock*, u32_t> bb2PdomLevel; ///< map a BasicBlock to its level in pdom tree, used in findNearestCommonPDominator
|
|
57
|
+
Map<const SVFBasicBlock*, const SVFBasicBlock*> bb2PIdom; ///< map a BasicBlock to its immediate dominator in pdom tree, used in findNearestCommonPDominator
|
|
58
|
+
|
|
59
|
+
public:
|
|
60
|
+
SVFLoopAndDomInfo()
|
|
61
|
+
{
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
virtual ~SVFLoopAndDomInfo() {}
|
|
65
|
+
|
|
66
|
+
inline const Map<const SVFBasicBlock*,BBSet>& getDomFrontierMap() const
|
|
67
|
+
{
|
|
68
|
+
return dfBBsMap;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
inline Map<const SVFBasicBlock*,BBSet>& getDomFrontierMap()
|
|
72
|
+
{
|
|
73
|
+
return dfBBsMap;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
inline bool hasLoopInfo(const SVFBasicBlock* bb) const
|
|
77
|
+
{
|
|
78
|
+
return bb2LoopMap.find(bb) != bb2LoopMap.end();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const LoopBBs& getLoopInfo(const SVFBasicBlock* bb) const;
|
|
82
|
+
|
|
83
|
+
inline const SVFBasicBlock* getLoopHeader(const LoopBBs& lp) const
|
|
84
|
+
{
|
|
85
|
+
assert(!lp.empty() && "this is not a loop, empty basic block");
|
|
86
|
+
return lp.front();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
inline bool loopContainsBB(const LoopBBs& lp, const SVFBasicBlock* bb) const
|
|
90
|
+
{
|
|
91
|
+
return std::find(lp.begin(), lp.end(), bb) != lp.end();
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
inline void addToBB2LoopMap(const SVFBasicBlock* bb, const SVFBasicBlock* loopBB)
|
|
95
|
+
{
|
|
96
|
+
bb2LoopMap[bb].push_back(loopBB);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
inline const Map<const SVFBasicBlock*,BBSet>& getPostDomTreeMap() const
|
|
100
|
+
{
|
|
101
|
+
return pdtBBsMap;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
inline Map<const SVFBasicBlock*,BBSet>& getPostDomTreeMap()
|
|
105
|
+
{
|
|
106
|
+
return pdtBBsMap;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
inline const Map<const SVFBasicBlock*,u32_t>& getBBPDomLevel() const
|
|
110
|
+
{
|
|
111
|
+
return bb2PdomLevel;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
inline Map<const SVFBasicBlock*,u32_t>& getBBPDomLevel()
|
|
115
|
+
{
|
|
116
|
+
return bb2PdomLevel;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
inline const Map<const SVFBasicBlock*,const SVFBasicBlock*>& getBB2PIdom() const
|
|
120
|
+
{
|
|
121
|
+
return bb2PIdom;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
inline Map<const SVFBasicBlock*,const SVFBasicBlock*>& getBB2PIdom()
|
|
125
|
+
{
|
|
126
|
+
return bb2PIdom;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
inline Map<const SVFBasicBlock*,BBSet>& getDomTreeMap()
|
|
131
|
+
{
|
|
132
|
+
return dtBBsMap;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
inline const Map<const SVFBasicBlock*,BBSet>& getDomTreeMap() const
|
|
136
|
+
{
|
|
137
|
+
return dtBBsMap;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
inline bool isUnreachable(const SVFBasicBlock* bb) const
|
|
141
|
+
{
|
|
142
|
+
return std::find(reachableBBs.begin(), reachableBBs.end(), bb) ==
|
|
143
|
+
reachableBBs.end();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
inline const BBList& getReachableBBs() const
|
|
147
|
+
{
|
|
148
|
+
return reachableBBs;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
inline void setReachableBBs(BBList& bbs)
|
|
152
|
+
{
|
|
153
|
+
reachableBBs = bbs;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
void getExitBlocksOfLoop(const SVFBasicBlock* bb, BBList& exitbbs) const;
|
|
157
|
+
|
|
158
|
+
bool isLoopHeader(const SVFBasicBlock* bb) const;
|
|
159
|
+
|
|
160
|
+
bool dominate(const SVFBasicBlock* bbKey, const SVFBasicBlock* bbValue) const;
|
|
161
|
+
|
|
162
|
+
bool postDominate(const SVFBasicBlock* bbKey, const SVFBasicBlock* bbValue) const;
|
|
163
|
+
|
|
164
|
+
/// find nearest common post dominator of two basic blocks
|
|
165
|
+
const SVFBasicBlock *findNearestCommonPDominator(const SVFBasicBlock *A, const SVFBasicBlock *B) const;
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
#endif //SVFLOOPANDDOMINFO_H
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
//===- SVFStat.h -- Base class for 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
|
+
* SVFStat.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Sep 1, 2022
|
|
27
|
+
* Author: Xiao Cheng
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef SVF_SVFSTAT_H
|
|
31
|
+
#define SVF_SVFSTAT_H
|
|
32
|
+
|
|
33
|
+
namespace SVF
|
|
34
|
+
{
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
/*!
|
|
38
|
+
* Pointer Analysis Statistics
|
|
39
|
+
*/
|
|
40
|
+
class SVFStat
|
|
41
|
+
{
|
|
42
|
+
public:
|
|
43
|
+
|
|
44
|
+
typedef OrderedMap<std::string, u32_t> NUMStatMap;
|
|
45
|
+
|
|
46
|
+
typedef OrderedMap<std::string, double> TIMEStatMap;
|
|
47
|
+
|
|
48
|
+
enum ClockType
|
|
49
|
+
{
|
|
50
|
+
Wall,
|
|
51
|
+
CPU,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
SVFStat();
|
|
55
|
+
|
|
56
|
+
virtual ~SVFStat() {}
|
|
57
|
+
|
|
58
|
+
virtual inline void startClk()
|
|
59
|
+
{
|
|
60
|
+
startTime = getClk(true);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
virtual inline void endClk()
|
|
64
|
+
{
|
|
65
|
+
endTime = getClk(true);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/// When mark is true, real clock is always returned. When mark is false, it is
|
|
69
|
+
/// only returned when Options::MarkedClocksOnly is not set.
|
|
70
|
+
/// Default call for getClk is unmarked, while MarkedClocksOnly is false by default.
|
|
71
|
+
static double getClk(bool mark = false);
|
|
72
|
+
|
|
73
|
+
/// SVF's general statistics are only printed once even if you run multiple anayses
|
|
74
|
+
static bool printGeneralStats;
|
|
75
|
+
|
|
76
|
+
NUMStatMap generalNumMap;
|
|
77
|
+
NUMStatMap PTNumStatMap;
|
|
78
|
+
TIMEStatMap timeStatMap;
|
|
79
|
+
|
|
80
|
+
double startTime;
|
|
81
|
+
double endTime;
|
|
82
|
+
|
|
83
|
+
virtual void performStat() = 0;
|
|
84
|
+
|
|
85
|
+
virtual void printStat(std::string str = "");
|
|
86
|
+
|
|
87
|
+
virtual void performStatPerQuery(NodeID) {}
|
|
88
|
+
|
|
89
|
+
virtual void printStatPerQuery(NodeID, const PointsTo &) {}
|
|
90
|
+
|
|
91
|
+
virtual void callgraphStat() {}
|
|
92
|
+
|
|
93
|
+
static double timeOfBuildingLLVMModule;
|
|
94
|
+
static double timeOfBuildingSymbolTable;
|
|
95
|
+
static double timeOfBuildingSVFIR;
|
|
96
|
+
|
|
97
|
+
private:
|
|
98
|
+
void branchStat();
|
|
99
|
+
std::string moduleName;
|
|
100
|
+
}; // End class SVFStat
|
|
101
|
+
|
|
102
|
+
} // End namespace SVF
|
|
103
|
+
#endif //SVF_SVFSTAT_H
|