svf-lib 1.0.1376 → 1.0.1377
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-osx/Release-build/svf-llvm/libSvfLLVM.a +0 -0
- package/package.json +1 -1
- package/SVF-linux/svf/include/include/AbstractExecution/AbstractValue.h +0 -79
- package/SVF-linux/svf/include/include/AbstractExecution/AddressValue.h +0 -210
- package/SVF-linux/svf/include/include/AbstractExecution/ExeState.h +0 -223
- package/SVF-linux/svf/include/include/AbstractExecution/IntervalExeState.h +0 -425
- package/SVF-linux/svf/include/include/AbstractExecution/IntervalValue.h +0 -868
- package/SVF-linux/svf/include/include/AbstractExecution/NumericLiteral.h +0 -406
- package/SVF-linux/svf/include/include/AbstractExecution/RelExeState.h +0 -225
- package/SVF-linux/svf/include/include/AbstractExecution/RelationSolver.h +0 -68
- package/SVF-linux/svf/include/include/AbstractExecution/SVFIR2ItvExeState.h +0 -186
- package/SVF-linux/svf/include/include/AbstractExecution/WTO.h +0 -845
- package/SVF-linux/svf/include/include/CFL/CFGNormalizer.h +0 -84
- package/SVF-linux/svf/include/include/CFL/CFLAlias.h +0 -176
- package/SVF-linux/svf/include/include/CFL/CFLBase.h +0 -115
- package/SVF-linux/svf/include/include/CFL/CFLData.h +0 -316
- package/SVF-linux/svf/include/include/CFL/CFLDataBuilder.h +0 -91
- package/SVF-linux/svf/include/include/CFL/CFLGramGraphChecker.h +0 -74
- package/SVF-linux/svf/include/include/CFL/CFLGrammar.h +0 -468
- package/SVF-linux/svf/include/include/CFL/CFLGrammar.txt +0 -15
- package/SVF-linux/svf/include/include/CFL/CFLGraphBuilder.h +0 -193
- package/SVF-linux/svf/include/include/CFL/CFLSolver.h +0 -136
- package/SVF-linux/svf/include/include/CFL/CFLStat.h +0 -67
- package/SVF-linux/svf/include/include/CFL/CFLVF.h +0 -65
- package/SVF-linux/svf/include/include/CFL/GrammarBuilder.h +0 -100
- package/SVF-linux/svf/include/include/CFL/PEGGrammar.txt +0 -11
- package/SVF-linux/svf/include/include/CFL/VFG.txt +0 -7
- package/SVF-linux/svf/include/include/DDA/ContextDDA.h +0 -230
- package/SVF-linux/svf/include/include/DDA/DDAClient.h +0 -168
- package/SVF-linux/svf/include/include/DDA/DDAPass.h +0 -99
- package/SVF-linux/svf/include/include/DDA/DDAStat.h +0 -138
- package/SVF-linux/svf/include/include/DDA/DDAVFSolver.h +0 -789
- package/SVF-linux/svf/include/include/DDA/FlowDDA.h +0 -178
- package/SVF-linux/svf/include/include/FastCluster/LICENSE.TXT +0 -13
- package/SVF-linux/svf/include/include/FastCluster/fastcluster.h +0 -80
- package/SVF-linux/svf/include/include/Graphs/CFLGraph.h +0 -215
- package/SVF-linux/svf/include/include/Graphs/CHG.h +0 -351
- package/SVF-linux/svf/include/include/Graphs/ConsG.h +0 -408
- package/SVF-linux/svf/include/include/Graphs/ConsGEdge.h +0 -353
- package/SVF-linux/svf/include/include/Graphs/ConsGNode.h +0 -391
- package/SVF-linux/svf/include/include/Graphs/DOTGraphTraits.h +0 -188
- package/SVF-linux/svf/include/include/Graphs/GenericGraph.h +0 -620
- package/SVF-linux/svf/include/include/Graphs/GraphPrinter.h +0 -111
- package/SVF-linux/svf/include/include/Graphs/GraphTraits.h +0 -150
- package/SVF-linux/svf/include/include/Graphs/GraphWriter.h +0 -380
- package/SVF-linux/svf/include/include/Graphs/ICFG.h +0 -331
- package/SVF-linux/svf/include/include/Graphs/ICFGEdge.h +0 -264
- package/SVF-linux/svf/include/include/Graphs/ICFGNode.h +0 -523
- package/SVF-linux/svf/include/include/Graphs/ICFGStat.h +0 -164
- package/SVF-linux/svf/include/include/Graphs/IRGraph.h +0 -243
- package/SVF-linux/svf/include/include/Graphs/PTACallGraph.h +0 -471
- package/SVF-linux/svf/include/include/Graphs/SVFG.h +0 -490
- package/SVF-linux/svf/include/include/Graphs/SVFGEdge.h +0 -237
- package/SVF-linux/svf/include/include/Graphs/SVFGNode.h +0 -513
- package/SVF-linux/svf/include/include/Graphs/SVFGOPT.h +0 -362
- package/SVF-linux/svf/include/include/Graphs/SVFGStat.h +0 -273
- package/SVF-linux/svf/include/include/Graphs/ThreadCallGraph.h +0 -422
- package/SVF-linux/svf/include/include/Graphs/VFG.h +0 -664
- package/SVF-linux/svf/include/include/Graphs/VFGEdge.h +0 -295
- package/SVF-linux/svf/include/include/Graphs/VFGNode.h +0 -1197
- package/SVF-linux/svf/include/include/MSSA/MSSAMuChi.h +0 -722
- package/SVF-linux/svf/include/include/MSSA/MemPartition.h +0 -169
- package/SVF-linux/svf/include/include/MSSA/MemRegion.h +0 -491
- package/SVF-linux/svf/include/include/MSSA/MemSSA.h +0 -452
- package/SVF-linux/svf/include/include/MSSA/SVFGBuilder.h +0 -98
- package/SVF-linux/svf/include/include/MTA/FSMPTA.h +0 -270
- package/SVF-linux/svf/include/include/MTA/LockAnalysis.h +0 -517
- package/SVF-linux/svf/include/include/MTA/MHP.h +0 -565
- package/SVF-linux/svf/include/include/MTA/MTA.h +0 -101
- package/SVF-linux/svf/include/include/MTA/MTAResultValidator.h +0 -448
- package/SVF-linux/svf/include/include/MTA/MTAStat.h +0 -74
- package/SVF-linux/svf/include/include/MTA/PCG.h +0 -229
- package/SVF-linux/svf/include/include/MTA/TCT.h +0 -599
- package/SVF-linux/svf/include/include/MemoryModel/AbstractPointsToDS.h +0 -316
- package/SVF-linux/svf/include/include/MemoryModel/ConditionalPT.h +0 -878
- package/SVF-linux/svf/include/include/MemoryModel/LocationSet.h +0 -148
- package/SVF-linux/svf/include/include/MemoryModel/MutablePointsToDS.h +0 -1025
- package/SVF-linux/svf/include/include/MemoryModel/PersistentPointsToCache.h +0 -463
- package/SVF-linux/svf/include/include/MemoryModel/PersistentPointsToDS.h +0 -955
- package/SVF-linux/svf/include/include/MemoryModel/PointerAnalysis.h +0 -452
- package/SVF-linux/svf/include/include/MemoryModel/PointerAnalysisImpl.h +0 -590
- package/SVF-linux/svf/include/include/MemoryModel/PointsTo.h +0 -255
- package/SVF-linux/svf/include/include/MemoryModel/SVFLoop.h +0 -164
- package/SVF-linux/svf/include/include/SABER/DoubleFreeChecker.h +0 -76
- package/SVF-linux/svf/include/include/SABER/FileChecker.h +0 -82
- package/SVF-linux/svf/include/include/SABER/LeakChecker.h +0 -124
- package/SVF-linux/svf/include/include/SABER/ProgSlice.h +0 -313
- package/SVF-linux/svf/include/include/SABER/SaberCheckerAPI.h +0 -166
- package/SVF-linux/svf/include/include/SABER/SaberCondAllocator.h +0 -310
- package/SVF-linux/svf/include/include/SABER/SaberSVFGBuilder.h +0 -104
- package/SVF-linux/svf/include/include/SABER/SrcSnkDDA.h +0 -321
- package/SVF-linux/svf/include/include/SABER/SrcSnkSolver.h +0 -186
- package/SVF-linux/svf/include/include/SVFIR/PAGBuilderFromFile.h +0 -80
- package/SVF-linux/svf/include/include/SVFIR/SVFIR.h +0 -659
- package/SVF-linux/svf/include/include/SVFIR/SVFModule.h +0 -233
- package/SVF-linux/svf/include/include/SVFIR/SVFStatements.h +0 -1136
- package/SVF-linux/svf/include/include/SVFIR/SVFType.h +0 -527
- package/SVF-linux/svf/include/include/SVFIR/SVFValue.h +0 -1120
- package/SVF-linux/svf/include/include/SVFIR/SVFVariables.h +0 -721
- package/SVF-linux/svf/include/include/SVFIR/SymbolTableInfo.h +0 -597
- package/SVF-linux/svf/include/include/Util/Annotator.h +0 -180
- package/SVF-linux/svf/include/include/Util/BitVector.h +0 -55
- package/SVF-linux/svf/include/include/Util/CallGraphBuilder.h +0 -74
- package/SVF-linux/svf/include/include/Util/Casting.h +0 -426
- package/SVF-linux/svf/include/include/Util/CommandLine.h +0 -530
- package/SVF-linux/svf/include/include/Util/CoreBitVector.h +0 -214
- package/SVF-linux/svf/include/include/Util/CppUtil.h +0 -81
- package/SVF-linux/svf/include/include/Util/CxtStmt.h +0 -501
- package/SVF-linux/svf/include/include/Util/DPItem.h +0 -618
- package/SVF-linux/svf/include/include/Util/ExtAPI.h +0 -339
- package/SVF-linux/svf/include/include/Util/ExtAPI.json +0 -5707
- package/SVF-linux/svf/include/include/Util/GraphReachSolver.h +0 -186
- package/SVF-linux/svf/include/include/Util/NodeIDAllocator.h +0 -194
- package/SVF-linux/svf/include/include/Util/Options.h +0 -266
- package/SVF-linux/svf/include/include/Util/PTAStat.h +0 -65
- package/SVF-linux/svf/include/include/Util/SCC.h +0 -354
- package/SVF-linux/svf/include/include/Util/SVFStat.h +0 -100
- package/SVF-linux/svf/include/include/Util/SVFUtil.h +0 -660
- package/SVF-linux/svf/include/include/Util/SparseBitVector.h +0 -1202
- package/SVF-linux/svf/include/include/Util/ThreadAPI.h +0 -330
- package/SVF-linux/svf/include/include/Util/WorkList.h +0 -317
- package/SVF-linux/svf/include/include/Util/Z3Expr.h +0 -318
- package/SVF-linux/svf/include/include/Util/cJSON.h +0 -300
- package/SVF-linux/svf/include/include/Util/iterator.h +0 -407
- package/SVF-linux/svf/include/include/Util/iterator_range.h +0 -76
- package/SVF-linux/svf/include/include/WPA/Andersen.h +0 -416
- package/SVF-linux/svf/include/include/WPA/AndersenPWC.h +0 -160
- package/SVF-linux/svf/include/include/WPA/CSC.h +0 -95
- package/SVF-linux/svf/include/include/WPA/FlowSensitive.h +0 -317
- package/SVF-linux/svf/include/include/WPA/Steensgaard.h +0 -126
- package/SVF-linux/svf/include/include/WPA/TypeAnalysis.h +0 -83
- package/SVF-linux/svf/include/include/WPA/VersionedFlowSensitive.h +0 -287
- package/SVF-linux/svf/include/include/WPA/WPAFSSolver.h +0 -254
- package/SVF-linux/svf/include/include/WPA/WPAPass.h +0 -119
- package/SVF-linux/svf/include/include/WPA/WPASolver.h +0 -205
- package/SVF-linux/svf/include/include/WPA/WPAStat.h +0 -222
- package/SVF-linux/svf-llvm/include/SVF-LLVM/SVF-LLVM/BasicTypes.h +0 -250
- package/SVF-linux/svf-llvm/include/SVF-LLVM/SVF-LLVM/BreakConstantExpr.h +0 -94
- package/SVF-linux/svf-llvm/include/SVF-LLVM/SVF-LLVM/CHGBuilder.h +0 -73
- package/SVF-linux/svf-llvm/include/SVF-LLVM/SVF-LLVM/DCHG.h +0 -484
- package/SVF-linux/svf-llvm/include/SVF-LLVM/SVF-LLVM/GEPTypeBridgeIterator.h +0 -183
- package/SVF-linux/svf-llvm/include/SVF-LLVM/SVF-LLVM/ICFGBuilder.h +0 -106
- package/SVF-linux/svf-llvm/include/SVF-LLVM/SVF-LLVM/LLVMLoopAnalysis.h +0 -61
- package/SVF-linux/svf-llvm/include/SVF-LLVM/SVF-LLVM/LLVMModule.h +0 -360
- package/SVF-linux/svf-llvm/include/SVF-LLVM/SVF-LLVM/LLVMUtil.h +0 -466
- package/SVF-linux/svf-llvm/include/SVF-LLVM/SVF-LLVM/SVFIRBuilder.h +0 -417
- package/SVF-linux/svf-llvm/include/SVF-LLVM/SVF-LLVM/SymbolTableBuilder.h +0 -110
- package/SVF-osx/svf/include/include/AbstractExecution/AbstractValue.h +0 -79
- package/SVF-osx/svf/include/include/AbstractExecution/AddressValue.h +0 -210
- package/SVF-osx/svf/include/include/AbstractExecution/ExeState.h +0 -223
- package/SVF-osx/svf/include/include/AbstractExecution/IntervalExeState.h +0 -425
- package/SVF-osx/svf/include/include/AbstractExecution/IntervalValue.h +0 -868
- package/SVF-osx/svf/include/include/AbstractExecution/NumericLiteral.h +0 -406
- package/SVF-osx/svf/include/include/AbstractExecution/RelExeState.h +0 -225
- package/SVF-osx/svf/include/include/AbstractExecution/RelationSolver.h +0 -68
- package/SVF-osx/svf/include/include/AbstractExecution/SVFIR2ItvExeState.h +0 -186
- package/SVF-osx/svf/include/include/AbstractExecution/WTO.h +0 -845
- package/SVF-osx/svf/include/include/CFL/CFGNormalizer.h +0 -84
- package/SVF-osx/svf/include/include/CFL/CFLAlias.h +0 -176
- package/SVF-osx/svf/include/include/CFL/CFLBase.h +0 -115
- package/SVF-osx/svf/include/include/CFL/CFLData.h +0 -316
- package/SVF-osx/svf/include/include/CFL/CFLDataBuilder.h +0 -91
- package/SVF-osx/svf/include/include/CFL/CFLGramGraphChecker.h +0 -74
- package/SVF-osx/svf/include/include/CFL/CFLGrammar.h +0 -468
- package/SVF-osx/svf/include/include/CFL/CFLGrammar.txt +0 -15
- package/SVF-osx/svf/include/include/CFL/CFLGraphBuilder.h +0 -193
- package/SVF-osx/svf/include/include/CFL/CFLSolver.h +0 -136
- package/SVF-osx/svf/include/include/CFL/CFLStat.h +0 -67
- package/SVF-osx/svf/include/include/CFL/CFLVF.h +0 -65
- package/SVF-osx/svf/include/include/CFL/GrammarBuilder.h +0 -100
- package/SVF-osx/svf/include/include/CFL/PEGGrammar.txt +0 -11
- package/SVF-osx/svf/include/include/CFL/VFG.txt +0 -7
- package/SVF-osx/svf/include/include/DDA/ContextDDA.h +0 -230
- package/SVF-osx/svf/include/include/DDA/DDAClient.h +0 -168
- package/SVF-osx/svf/include/include/DDA/DDAPass.h +0 -99
- package/SVF-osx/svf/include/include/DDA/DDAStat.h +0 -138
- package/SVF-osx/svf/include/include/DDA/DDAVFSolver.h +0 -789
- package/SVF-osx/svf/include/include/DDA/FlowDDA.h +0 -178
- package/SVF-osx/svf/include/include/FastCluster/LICENSE.TXT +0 -13
- package/SVF-osx/svf/include/include/FastCluster/fastcluster.h +0 -80
- package/SVF-osx/svf/include/include/Graphs/CFLGraph.h +0 -215
- package/SVF-osx/svf/include/include/Graphs/CHG.h +0 -351
- package/SVF-osx/svf/include/include/Graphs/ConsG.h +0 -408
- package/SVF-osx/svf/include/include/Graphs/ConsGEdge.h +0 -353
- package/SVF-osx/svf/include/include/Graphs/ConsGNode.h +0 -391
- package/SVF-osx/svf/include/include/Graphs/DOTGraphTraits.h +0 -188
- package/SVF-osx/svf/include/include/Graphs/GenericGraph.h +0 -620
- package/SVF-osx/svf/include/include/Graphs/GraphPrinter.h +0 -111
- package/SVF-osx/svf/include/include/Graphs/GraphTraits.h +0 -150
- package/SVF-osx/svf/include/include/Graphs/GraphWriter.h +0 -380
- package/SVF-osx/svf/include/include/Graphs/ICFG.h +0 -331
- package/SVF-osx/svf/include/include/Graphs/ICFGEdge.h +0 -264
- package/SVF-osx/svf/include/include/Graphs/ICFGNode.h +0 -523
- package/SVF-osx/svf/include/include/Graphs/ICFGStat.h +0 -164
- package/SVF-osx/svf/include/include/Graphs/IRGraph.h +0 -243
- package/SVF-osx/svf/include/include/Graphs/PTACallGraph.h +0 -471
- package/SVF-osx/svf/include/include/Graphs/SVFG.h +0 -490
- package/SVF-osx/svf/include/include/Graphs/SVFGEdge.h +0 -237
- package/SVF-osx/svf/include/include/Graphs/SVFGNode.h +0 -513
- package/SVF-osx/svf/include/include/Graphs/SVFGOPT.h +0 -362
- package/SVF-osx/svf/include/include/Graphs/SVFGStat.h +0 -273
- package/SVF-osx/svf/include/include/Graphs/ThreadCallGraph.h +0 -422
- package/SVF-osx/svf/include/include/Graphs/VFG.h +0 -664
- package/SVF-osx/svf/include/include/Graphs/VFGEdge.h +0 -295
- package/SVF-osx/svf/include/include/Graphs/VFGNode.h +0 -1197
- package/SVF-osx/svf/include/include/MSSA/MSSAMuChi.h +0 -722
- package/SVF-osx/svf/include/include/MSSA/MemPartition.h +0 -169
- package/SVF-osx/svf/include/include/MSSA/MemRegion.h +0 -491
- package/SVF-osx/svf/include/include/MSSA/MemSSA.h +0 -452
- package/SVF-osx/svf/include/include/MSSA/SVFGBuilder.h +0 -98
- package/SVF-osx/svf/include/include/MTA/FSMPTA.h +0 -270
- package/SVF-osx/svf/include/include/MTA/LockAnalysis.h +0 -517
- package/SVF-osx/svf/include/include/MTA/MHP.h +0 -565
- package/SVF-osx/svf/include/include/MTA/MTA.h +0 -101
- package/SVF-osx/svf/include/include/MTA/MTAResultValidator.h +0 -448
- package/SVF-osx/svf/include/include/MTA/MTAStat.h +0 -74
- package/SVF-osx/svf/include/include/MTA/PCG.h +0 -229
- package/SVF-osx/svf/include/include/MTA/TCT.h +0 -599
- package/SVF-osx/svf/include/include/MemoryModel/AbstractPointsToDS.h +0 -316
- package/SVF-osx/svf/include/include/MemoryModel/ConditionalPT.h +0 -878
- package/SVF-osx/svf/include/include/MemoryModel/LocationSet.h +0 -148
- package/SVF-osx/svf/include/include/MemoryModel/MutablePointsToDS.h +0 -1025
- package/SVF-osx/svf/include/include/MemoryModel/PersistentPointsToCache.h +0 -463
- package/SVF-osx/svf/include/include/MemoryModel/PersistentPointsToDS.h +0 -955
- package/SVF-osx/svf/include/include/MemoryModel/PointerAnalysis.h +0 -452
- package/SVF-osx/svf/include/include/MemoryModel/PointerAnalysisImpl.h +0 -590
- package/SVF-osx/svf/include/include/MemoryModel/PointsTo.h +0 -255
- package/SVF-osx/svf/include/include/MemoryModel/SVFLoop.h +0 -164
- package/SVF-osx/svf/include/include/SABER/DoubleFreeChecker.h +0 -76
- package/SVF-osx/svf/include/include/SABER/FileChecker.h +0 -82
- package/SVF-osx/svf/include/include/SABER/LeakChecker.h +0 -124
- package/SVF-osx/svf/include/include/SABER/ProgSlice.h +0 -313
- package/SVF-osx/svf/include/include/SABER/SaberCheckerAPI.h +0 -166
- package/SVF-osx/svf/include/include/SABER/SaberCondAllocator.h +0 -310
- package/SVF-osx/svf/include/include/SABER/SaberSVFGBuilder.h +0 -104
- package/SVF-osx/svf/include/include/SABER/SrcSnkDDA.h +0 -321
- package/SVF-osx/svf/include/include/SABER/SrcSnkSolver.h +0 -186
- package/SVF-osx/svf/include/include/SVFIR/PAGBuilderFromFile.h +0 -80
- package/SVF-osx/svf/include/include/SVFIR/SVFIR.h +0 -659
- package/SVF-osx/svf/include/include/SVFIR/SVFModule.h +0 -233
- package/SVF-osx/svf/include/include/SVFIR/SVFStatements.h +0 -1136
- package/SVF-osx/svf/include/include/SVFIR/SVFType.h +0 -527
- package/SVF-osx/svf/include/include/SVFIR/SVFValue.h +0 -1120
- package/SVF-osx/svf/include/include/SVFIR/SVFVariables.h +0 -721
- package/SVF-osx/svf/include/include/SVFIR/SymbolTableInfo.h +0 -597
- package/SVF-osx/svf/include/include/Util/Annotator.h +0 -180
- package/SVF-osx/svf/include/include/Util/BitVector.h +0 -55
- package/SVF-osx/svf/include/include/Util/CallGraphBuilder.h +0 -74
- package/SVF-osx/svf/include/include/Util/Casting.h +0 -426
- package/SVF-osx/svf/include/include/Util/CommandLine.h +0 -530
- package/SVF-osx/svf/include/include/Util/CoreBitVector.h +0 -214
- package/SVF-osx/svf/include/include/Util/CppUtil.h +0 -81
- package/SVF-osx/svf/include/include/Util/CxtStmt.h +0 -501
- package/SVF-osx/svf/include/include/Util/DPItem.h +0 -618
- package/SVF-osx/svf/include/include/Util/ExtAPI.h +0 -339
- package/SVF-osx/svf/include/include/Util/ExtAPI.json +0 -5707
- package/SVF-osx/svf/include/include/Util/GraphReachSolver.h +0 -186
- package/SVF-osx/svf/include/include/Util/NodeIDAllocator.h +0 -194
- package/SVF-osx/svf/include/include/Util/Options.h +0 -266
- package/SVF-osx/svf/include/include/Util/PTAStat.h +0 -65
- package/SVF-osx/svf/include/include/Util/SCC.h +0 -354
- package/SVF-osx/svf/include/include/Util/SVFStat.h +0 -100
- package/SVF-osx/svf/include/include/Util/SVFUtil.h +0 -660
- package/SVF-osx/svf/include/include/Util/SparseBitVector.h +0 -1202
- package/SVF-osx/svf/include/include/Util/ThreadAPI.h +0 -330
- package/SVF-osx/svf/include/include/Util/WorkList.h +0 -317
- package/SVF-osx/svf/include/include/Util/Z3Expr.h +0 -318
- package/SVF-osx/svf/include/include/Util/cJSON.h +0 -300
- package/SVF-osx/svf/include/include/Util/iterator.h +0 -407
- package/SVF-osx/svf/include/include/Util/iterator_range.h +0 -76
- package/SVF-osx/svf/include/include/WPA/Andersen.h +0 -416
- package/SVF-osx/svf/include/include/WPA/AndersenPWC.h +0 -160
- package/SVF-osx/svf/include/include/WPA/CSC.h +0 -95
- package/SVF-osx/svf/include/include/WPA/FlowSensitive.h +0 -317
- package/SVF-osx/svf/include/include/WPA/Steensgaard.h +0 -126
- package/SVF-osx/svf/include/include/WPA/TypeAnalysis.h +0 -83
- package/SVF-osx/svf/include/include/WPA/VersionedFlowSensitive.h +0 -287
- package/SVF-osx/svf/include/include/WPA/WPAFSSolver.h +0 -254
- package/SVF-osx/svf/include/include/WPA/WPAPass.h +0 -119
- package/SVF-osx/svf/include/include/WPA/WPASolver.h +0 -205
- package/SVF-osx/svf/include/include/WPA/WPAStat.h +0 -222
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/BasicTypes.h +0 -250
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/BreakConstantExpr.h +0 -94
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/CHGBuilder.h +0 -73
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/DCHG.h +0 -484
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/GEPTypeBridgeIterator.h +0 -183
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/ICFGBuilder.h +0 -106
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/LLVMLoopAnalysis.h +0 -61
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/LLVMModule.h +0 -360
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/LLVMUtil.h +0 -466
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/SVFIRBuilder.h +0 -417
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/SymbolTableBuilder.h +0 -110
|
@@ -1,406 +0,0 @@
|
|
|
1
|
-
//===- NumericLiteral.h ----Number wrapper for domains------------------//
|
|
2
|
-
//
|
|
3
|
-
// SVF: Static Value-Flow Analysis
|
|
4
|
-
//
|
|
5
|
-
// Copyright (C) <2013-2022> <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 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 General Public License for more details.
|
|
17
|
-
|
|
18
|
-
// You should have received a copy of the GNU General Public License
|
|
19
|
-
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
-
//
|
|
21
|
-
//===----------------------------------------------------------------------===//
|
|
22
|
-
/*
|
|
23
|
-
* NumericLiteral.h
|
|
24
|
-
*
|
|
25
|
-
* Created on: Aug 4, 2022
|
|
26
|
-
* Author: Xiao Cheng, Jiawei Wang
|
|
27
|
-
*
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
#ifndef Z3_EXAMPLE_Number_H
|
|
31
|
-
#define Z3_EXAMPLE_Number_H
|
|
32
|
-
|
|
33
|
-
#include "SVFIR/SVFType.h"
|
|
34
|
-
|
|
35
|
-
namespace SVF
|
|
36
|
-
{
|
|
37
|
-
class NumericLiteral
|
|
38
|
-
{
|
|
39
|
-
private:
|
|
40
|
-
double _n;
|
|
41
|
-
|
|
42
|
-
public:
|
|
43
|
-
/// Default constructor
|
|
44
|
-
NumericLiteral() = delete;
|
|
45
|
-
|
|
46
|
-
/// Create a new NumericLiteral from double
|
|
47
|
-
NumericLiteral(double n) : _n(n) {}
|
|
48
|
-
|
|
49
|
-
/// Create a new NumericLiteral from s32_t
|
|
50
|
-
NumericLiteral(s32_t n) : _n(n) {}
|
|
51
|
-
|
|
52
|
-
/// Create a new NumericLiteral from s64_t
|
|
53
|
-
NumericLiteral(s64_t n) : _n(n) {}
|
|
54
|
-
|
|
55
|
-
/// Create a new NumericLiteral from u32_t
|
|
56
|
-
NumericLiteral(u32_t n) : _n(n) {}
|
|
57
|
-
|
|
58
|
-
/// Create a new NumericLiteral from u64_t
|
|
59
|
-
NumericLiteral(u64_t n) : _n(n) {}
|
|
60
|
-
|
|
61
|
-
virtual ~NumericLiteral() = default;
|
|
62
|
-
|
|
63
|
-
/// Copy Constructor
|
|
64
|
-
NumericLiteral(const NumericLiteral &) noexcept = default;
|
|
65
|
-
|
|
66
|
-
/// Move Constructor
|
|
67
|
-
NumericLiteral(NumericLiteral &&) noexcept = default;
|
|
68
|
-
|
|
69
|
-
/// Operator = , another Copy Constructor
|
|
70
|
-
inline NumericLiteral &operator=(const NumericLiteral &) noexcept = default;
|
|
71
|
-
|
|
72
|
-
/// Operator = , another Move Constructor
|
|
73
|
-
inline NumericLiteral &operator=(NumericLiteral &&) noexcept = default;
|
|
74
|
-
|
|
75
|
-
/// Get minus infinity -oo
|
|
76
|
-
static NumericLiteral minus_infinity()
|
|
77
|
-
{
|
|
78
|
-
return NumericLiteral(INT_MIN);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/// Get plus infinity +oo
|
|
82
|
-
static NumericLiteral plus_infinity()
|
|
83
|
-
{
|
|
84
|
-
return NumericLiteral(INT_MAX);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/// Check if this is minus infinity
|
|
88
|
-
inline bool is_minus_infinity() const
|
|
89
|
-
{
|
|
90
|
-
return _n == INT_MIN;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/// Check if this is plus infinity
|
|
94
|
-
inline bool is_plus_infinity() const
|
|
95
|
-
{
|
|
96
|
-
return _n == INT_MAX;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/// Check if this is infinity (either of plus/minus)
|
|
100
|
-
inline bool is_infinity() const
|
|
101
|
-
{
|
|
102
|
-
return is_minus_infinity() || is_plus_infinity();
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/// Check if this is zero
|
|
106
|
-
inline bool is_zero() const
|
|
107
|
-
{
|
|
108
|
-
return _n == 0;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/// Return Numeral
|
|
112
|
-
inline double getNumeral() const
|
|
113
|
-
{
|
|
114
|
-
return _n;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/// Check two object is equal
|
|
118
|
-
bool equal(const NumericLiteral &rhs) const
|
|
119
|
-
{
|
|
120
|
-
return eq(*this, rhs);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/// Less then or equal
|
|
124
|
-
bool leq(const NumericLiteral &rhs) const
|
|
125
|
-
{
|
|
126
|
-
if (is_infinity() ^ rhs.is_infinity())
|
|
127
|
-
{
|
|
128
|
-
if (is_infinity())
|
|
129
|
-
{
|
|
130
|
-
return is_minus_infinity();
|
|
131
|
-
}
|
|
132
|
-
else
|
|
133
|
-
{
|
|
134
|
-
return rhs.is_plus_infinity();
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return _n <= rhs._n;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// Greater than or equal
|
|
141
|
-
bool geq(const NumericLiteral &rhs) const
|
|
142
|
-
{
|
|
143
|
-
if (is_infinity() ^ rhs.is_infinity())
|
|
144
|
-
{
|
|
145
|
-
if (is_infinity())
|
|
146
|
-
{
|
|
147
|
-
return is_plus_infinity();
|
|
148
|
-
}
|
|
149
|
-
else
|
|
150
|
-
{
|
|
151
|
-
return rhs.is_minus_infinity();
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
return _n >= rhs._n;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
/// Reload operator
|
|
159
|
-
//{%
|
|
160
|
-
friend NumericLiteral operator==(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
161
|
-
{
|
|
162
|
-
return eq(lhs, rhs);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
friend NumericLiteral operator!=(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
166
|
-
{
|
|
167
|
-
return !eq(lhs, rhs);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
friend NumericLiteral operator>(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
171
|
-
{
|
|
172
|
-
return !lhs.leq(rhs);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
friend NumericLiteral operator<(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
176
|
-
{
|
|
177
|
-
return !lhs.geq(rhs);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
friend NumericLiteral operator<=(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
181
|
-
{
|
|
182
|
-
return lhs.leq(rhs);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
friend NumericLiteral operator>=(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
186
|
-
{
|
|
187
|
-
return lhs.geq(rhs);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
friend NumericLiteral operator+(const NumericLiteral& lhs, const NumericLiteral& rhs)
|
|
191
|
-
{
|
|
192
|
-
if (!lhs.is_infinity() && !rhs.is_infinity())
|
|
193
|
-
return lhs.getNumeral() + rhs.getNumeral();
|
|
194
|
-
else if (!lhs.is_infinity() && rhs.is_infinity())
|
|
195
|
-
return rhs;
|
|
196
|
-
else if (lhs.is_infinity() && !rhs.is_infinity())
|
|
197
|
-
return lhs;
|
|
198
|
-
else if (eq(lhs, rhs))
|
|
199
|
-
return lhs;
|
|
200
|
-
else
|
|
201
|
-
{
|
|
202
|
-
assert(false && "undefined operation +oo + -oo");
|
|
203
|
-
abort();
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
friend NumericLiteral operator-(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
208
|
-
{
|
|
209
|
-
if (!lhs.is_infinity() && !rhs.is_infinity())
|
|
210
|
-
return lhs.getNumeral() - rhs.getNumeral();
|
|
211
|
-
else if (!lhs.is_infinity() && rhs.is_infinity())
|
|
212
|
-
return -rhs;
|
|
213
|
-
else if (lhs.is_infinity() && !rhs.is_infinity())
|
|
214
|
-
return lhs;
|
|
215
|
-
else if (!eq(lhs, rhs))
|
|
216
|
-
return lhs;
|
|
217
|
-
else
|
|
218
|
-
{
|
|
219
|
-
assert(false && "undefined operation +oo - +oo");
|
|
220
|
-
abort();
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
friend NumericLiteral operator*(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
225
|
-
{
|
|
226
|
-
if (lhs.is_zero() || rhs.is_zero())
|
|
227
|
-
return 0;
|
|
228
|
-
else if (lhs.is_infinity() && rhs.is_infinity())
|
|
229
|
-
return eq(lhs, rhs) ? plus_infinity() : minus_infinity();
|
|
230
|
-
else if (lhs.is_infinity())
|
|
231
|
-
return rhs.getNumeral() > 0 ? lhs : -lhs;
|
|
232
|
-
else if (rhs.is_infinity())
|
|
233
|
-
return lhs.getNumeral() > 0 ? rhs : -rhs;
|
|
234
|
-
else
|
|
235
|
-
return lhs.getNumeral() * rhs.getNumeral();
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
friend NumericLiteral operator/(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
239
|
-
{
|
|
240
|
-
if (rhs.is_zero())
|
|
241
|
-
{
|
|
242
|
-
|
|
243
|
-
assert(false && "divide by zero");
|
|
244
|
-
abort();
|
|
245
|
-
}
|
|
246
|
-
else if (!lhs.is_infinity() && !rhs.is_infinity())
|
|
247
|
-
return lhs.getNumeral() / rhs.getNumeral();
|
|
248
|
-
else if (!lhs.is_infinity() && rhs.is_infinity())
|
|
249
|
-
return 0;
|
|
250
|
-
else if (lhs.is_infinity() && !rhs.is_infinity())
|
|
251
|
-
return rhs.getNumeral() > 0 ? lhs : -lhs;
|
|
252
|
-
else
|
|
253
|
-
// TODO: +oo/-oo L'Hôpital's rule?
|
|
254
|
-
return eq(lhs, rhs) ? plus_infinity() : minus_infinity();
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
friend NumericLiteral operator%(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
258
|
-
{
|
|
259
|
-
if (rhs.is_zero())
|
|
260
|
-
{
|
|
261
|
-
assert(false && "divide by zero");
|
|
262
|
-
abort();
|
|
263
|
-
}
|
|
264
|
-
else if (!lhs.is_infinity() && !rhs.is_infinity())
|
|
265
|
-
return (s32_t) lhs.getNumeral() % (s32_t) rhs.getNumeral();
|
|
266
|
-
else if (!lhs.is_infinity() && rhs.is_infinity())
|
|
267
|
-
return 0;
|
|
268
|
-
// TODO: not sure
|
|
269
|
-
else if (lhs.is_infinity() && !rhs.is_infinity())
|
|
270
|
-
return rhs.getNumeral() > 0 ? lhs : -lhs;
|
|
271
|
-
else
|
|
272
|
-
// TODO: +oo/-oo L'Hôpital's rule?
|
|
273
|
-
return eq(lhs, rhs) ? plus_infinity() : minus_infinity();
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
// TODO: logic operation for infinity?
|
|
277
|
-
friend NumericLiteral operator^(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
278
|
-
{
|
|
279
|
-
return (s32_t) lhs.getNumeral() ^ (s32_t) rhs.getNumeral();
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
friend NumericLiteral operator&(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
283
|
-
{
|
|
284
|
-
return (s32_t) lhs.getNumeral() & (s32_t) rhs.getNumeral();
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
friend NumericLiteral operator|(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
288
|
-
{
|
|
289
|
-
return (s32_t) lhs.getNumeral() | (s32_t) rhs.getNumeral();
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
friend NumericLiteral operator>>(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
293
|
-
{
|
|
294
|
-
assert(rhs.geq(0) && "rhs should be greater or equal than 0");
|
|
295
|
-
if (lhs.is_zero())
|
|
296
|
-
return lhs;
|
|
297
|
-
else if (lhs.is_infinity())
|
|
298
|
-
return lhs;
|
|
299
|
-
else if (rhs.is_infinity())
|
|
300
|
-
return lhs._n >= 0 ? 0 : -1;
|
|
301
|
-
else
|
|
302
|
-
return (s32_t) lhs.getNumeral() >> (s32_t) rhs.getNumeral();
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
friend NumericLiteral operator<<(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
306
|
-
{
|
|
307
|
-
assert(rhs.geq(0) && "rhs should be greater or equal than 0");
|
|
308
|
-
if (lhs.is_zero())
|
|
309
|
-
return lhs;
|
|
310
|
-
else if (lhs.is_infinity())
|
|
311
|
-
return lhs;
|
|
312
|
-
else if (rhs.is_infinity())
|
|
313
|
-
return lhs._n >= 0 ? plus_infinity() : minus_infinity();
|
|
314
|
-
else
|
|
315
|
-
return (s32_t) lhs.getNumeral() << (s32_t) rhs.getNumeral();
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
friend NumericLiteral operator&&(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
319
|
-
{
|
|
320
|
-
return lhs.getNumeral() && rhs.getNumeral();
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
friend NumericLiteral operator||(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
324
|
-
{
|
|
325
|
-
return lhs.getNumeral() || rhs.getNumeral();
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
friend NumericLiteral operator!(const NumericLiteral &lhs)
|
|
329
|
-
{
|
|
330
|
-
return !lhs.getNumeral();
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
friend NumericLiteral operator-(const NumericLiteral &lhs)
|
|
334
|
-
{
|
|
335
|
-
return -lhs.getNumeral();
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
/// Return ite? lhs : rhs
|
|
339
|
-
friend NumericLiteral ite(const NumericLiteral &cond, const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
340
|
-
{
|
|
341
|
-
return cond.getNumeral() ? lhs.getNumeral() : rhs.getNumeral();
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
friend std::ostream &operator<<(std::ostream &out, const NumericLiteral &expr)
|
|
345
|
-
{
|
|
346
|
-
if (expr.is_plus_infinity())
|
|
347
|
-
out << "+INF";
|
|
348
|
-
else if (expr.is_minus_infinity())
|
|
349
|
-
out << "-INF";
|
|
350
|
-
else
|
|
351
|
-
out << std::to_string(expr.getNumeral());
|
|
352
|
-
return out;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
friend bool eq(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
356
|
-
{
|
|
357
|
-
return lhs._n == rhs._n;
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
friend NumericLiteral min(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
361
|
-
{
|
|
362
|
-
return std::min(lhs.getNumeral(), rhs.getNumeral());
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
friend NumericLiteral max(const NumericLiteral &lhs, const NumericLiteral &rhs)
|
|
366
|
-
{
|
|
367
|
-
return std::max(lhs.getNumeral(), rhs.getNumeral());
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
// TODO: how to use initializer_list as argument?
|
|
371
|
-
friend NumericLiteral min(std::initializer_list<NumericLiteral> _l)
|
|
372
|
-
{
|
|
373
|
-
NumericLiteral ret(INT_MAX);
|
|
374
|
-
for (const auto &it: _l)
|
|
375
|
-
{
|
|
376
|
-
if (it.is_minus_infinity())
|
|
377
|
-
return minus_infinity();
|
|
378
|
-
else if (!it.geq(ret))
|
|
379
|
-
{
|
|
380
|
-
ret = it;
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
return ret;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
friend NumericLiteral max(std::initializer_list<NumericLiteral> _l)
|
|
387
|
-
{
|
|
388
|
-
NumericLiteral ret(INT_MIN);
|
|
389
|
-
for (const auto &it: _l)
|
|
390
|
-
{
|
|
391
|
-
if (it.is_plus_infinity())
|
|
392
|
-
return plus_infinity();
|
|
393
|
-
else if (!it.leq(ret))
|
|
394
|
-
{
|
|
395
|
-
ret = it;
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
return ret;
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
//%}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
}; // end class IntervalDouble
|
|
405
|
-
} // end namespace SVF
|
|
406
|
-
#endif //Z3_EXAMPLE_Number_H
|
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
//===- RelExeState.h ----Relation Execution States for Interval Domains-------//
|
|
2
|
-
//
|
|
3
|
-
// SVF: Static Value-Flow Analysis
|
|
4
|
-
//
|
|
5
|
-
// Copyright (C) <2013-2022> <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 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 General Public License for more details.
|
|
17
|
-
|
|
18
|
-
// You should have received a copy of the GNU General Public License
|
|
19
|
-
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
-
//
|
|
21
|
-
//===----------------------------------------------------------------------===//
|
|
22
|
-
/*
|
|
23
|
-
* RelExeState.h
|
|
24
|
-
*
|
|
25
|
-
* Created on: Aug 15, 2022
|
|
26
|
-
* Author: Jiawei Ren, Xiao Cheng
|
|
27
|
-
*
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
#ifndef Z3_EXAMPLE_RELEXESTATE_H
|
|
31
|
-
#define Z3_EXAMPLE_RELEXESTATE_H
|
|
32
|
-
|
|
33
|
-
#include "Util/Z3Expr.h"
|
|
34
|
-
#include "AbstractExecution/AddressValue.h"
|
|
35
|
-
|
|
36
|
-
namespace SVF
|
|
37
|
-
{
|
|
38
|
-
|
|
39
|
-
class RelExeState
|
|
40
|
-
{
|
|
41
|
-
friend class SVFIR2ItvExeState;
|
|
42
|
-
|
|
43
|
-
public:
|
|
44
|
-
typedef Map<u32_t, Z3Expr> VarToValMap;
|
|
45
|
-
typedef VarToValMap LocToValMap;
|
|
46
|
-
|
|
47
|
-
protected:
|
|
48
|
-
VarToValMap _varToVal;
|
|
49
|
-
LocToValMap _locToVal;
|
|
50
|
-
|
|
51
|
-
public:
|
|
52
|
-
RelExeState() = default;
|
|
53
|
-
|
|
54
|
-
RelExeState(VarToValMap &varToVal, LocToValMap &locToVal) : _varToVal(varToVal),
|
|
55
|
-
_locToVal(locToVal) {}
|
|
56
|
-
|
|
57
|
-
RelExeState(const RelExeState &rhs) : _varToVal(rhs.getVarToVal()), _locToVal(rhs.getLocToVal())
|
|
58
|
-
{
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
virtual ~RelExeState() = default;
|
|
63
|
-
|
|
64
|
-
RelExeState &operator=(const RelExeState &rhs);
|
|
65
|
-
|
|
66
|
-
RelExeState(RelExeState &&rhs) noexcept: _varToVal(std::move(rhs._varToVal)),
|
|
67
|
-
_locToVal(std::move(rhs._locToVal))
|
|
68
|
-
{
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
RelExeState &operator=(RelExeState &&rhs) noexcept
|
|
73
|
-
{
|
|
74
|
-
if (&rhs != this)
|
|
75
|
-
{
|
|
76
|
-
_varToVal = std::move(rhs._varToVal);
|
|
77
|
-
_locToVal = std::move(rhs._locToVal);
|
|
78
|
-
}
|
|
79
|
-
return *this;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/// Overloading Operator==
|
|
83
|
-
bool operator==(const RelExeState &rhs) const;
|
|
84
|
-
|
|
85
|
-
/// Overloading Operator!=
|
|
86
|
-
inline bool operator!=(const RelExeState &rhs) const
|
|
87
|
-
{
|
|
88
|
-
return !(*this == rhs);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/// Overloading Operator==
|
|
92
|
-
bool operator<(const RelExeState &rhs) const;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
static z3::context &getContext()
|
|
96
|
-
{
|
|
97
|
-
return Z3Expr::getContext();
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const VarToValMap &getVarToVal() const
|
|
101
|
-
{
|
|
102
|
-
return _varToVal;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const LocToValMap &getLocToVal() const
|
|
106
|
-
{
|
|
107
|
-
return _locToVal;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
inline Z3Expr &operator[](u32_t varId)
|
|
111
|
-
{
|
|
112
|
-
return getZ3Expr(varId);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
u32_t hash() const
|
|
116
|
-
{
|
|
117
|
-
size_t h = getVarToVal().size() * 2;
|
|
118
|
-
SVF::Hash<SVF::u32_t> hf;
|
|
119
|
-
for (const auto &t: getVarToVal())
|
|
120
|
-
{
|
|
121
|
-
h ^= hf(t.first) + 0x9e3779b9 + (h << 6) + (h >> 2);
|
|
122
|
-
h ^= hf(t.second.id()) + 0x9e3779b9 + (h << 6) + (h >> 2);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
size_t h2 = getVarToVal().size() * 2;
|
|
126
|
-
|
|
127
|
-
for (const auto &t: getLocToVal())
|
|
128
|
-
{
|
|
129
|
-
h2 ^= hf(t.first) + 0x9e3779b9 + (h2 << 6) + (h2 >> 2);
|
|
130
|
-
h2 ^= hf(t.second.id()) + 0x9e3779b9 + (h2 << 6) + (h2 >> 2);
|
|
131
|
-
}
|
|
132
|
-
SVF::Hash<std::pair<SVF::u32_t, SVF::u32_t>> pairH;
|
|
133
|
-
|
|
134
|
-
return pairH(std::make_pair(h, h2));
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/// Return true if map has varId
|
|
138
|
-
inline bool existsVar(u32_t varId) const
|
|
139
|
-
{
|
|
140
|
-
return _varToVal.count(varId);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/// Return Z3 expression eagerly based on SVFVar ID
|
|
144
|
-
virtual inline Z3Expr &getZ3Expr(u32_t varId)
|
|
145
|
-
{
|
|
146
|
-
return _varToVal[varId];
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/// Return Z3 expression lazily based on SVFVar ID
|
|
150
|
-
virtual inline Z3Expr toZ3Expr(u32_t varId) const
|
|
151
|
-
{
|
|
152
|
-
return getContext().int_const(std::to_string(varId).c_str());
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/// Extract sub SVFVar IDs of a Z3Expr
|
|
156
|
-
void extractSubVars(const Z3Expr &expr, Set<u32_t> &res);
|
|
157
|
-
|
|
158
|
-
/// Extract all related SVFVar IDs based on compare expr
|
|
159
|
-
void extractCmpVars(const Z3Expr &expr, Set<u32_t> &res);
|
|
160
|
-
|
|
161
|
-
/// Build relational Z3Expr
|
|
162
|
-
Z3Expr buildRelZ3Expr(u32_t cmp, s32_t succ, Set<u32_t> &vars, Set<u32_t> &initVars);
|
|
163
|
-
|
|
164
|
-
/// Store value to location
|
|
165
|
-
void store(const Z3Expr &loc, const Z3Expr &value);
|
|
166
|
-
|
|
167
|
-
/// Load value at location
|
|
168
|
-
Z3Expr &load(const Z3Expr &loc);
|
|
169
|
-
|
|
170
|
-
/// The physical address starts with 0x7f...... + idx
|
|
171
|
-
static inline u32_t getVirtualMemAddress(u32_t idx)
|
|
172
|
-
{
|
|
173
|
-
return AddressValue::getVirtualMemAddress(idx);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
/// Check bit value of val start with 0x7F000000, filter by 0xFF000000
|
|
177
|
-
static inline bool isVirtualMemAddress(u32_t val)
|
|
178
|
-
{
|
|
179
|
-
return AddressValue::isVirtualMemAddress(val);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/// Return the internal index if idx is an address otherwise return the value of idx
|
|
183
|
-
static inline u32_t getInternalID(u32_t idx)
|
|
184
|
-
{
|
|
185
|
-
return AddressValue::getInternalID(idx);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/// Return int value from an expression if it is a numeral, otherwise return an approximate value
|
|
189
|
-
static inline s32_t z3Expr2NumValue(const Z3Expr &e)
|
|
190
|
-
{
|
|
191
|
-
assert(e.is_numeral() && "not numeral?");
|
|
192
|
-
return e.get_numeral_int64();
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/// Print values of all expressions
|
|
196
|
-
void printExprValues();
|
|
197
|
-
|
|
198
|
-
private:
|
|
199
|
-
bool eqVarToValMap(const VarToValMap &lhs, const VarToValMap &rhs) const;
|
|
200
|
-
|
|
201
|
-
bool lessThanVarToValMap(const VarToValMap &lhs, const VarToValMap &rhs) const;
|
|
202
|
-
|
|
203
|
-
protected:
|
|
204
|
-
inline void store(u32_t objId, const Z3Expr &z3Expr)
|
|
205
|
-
{
|
|
206
|
-
_locToVal[objId] = z3Expr.simplify();
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
inline Z3Expr &load(u32_t objId)
|
|
210
|
-
{
|
|
211
|
-
return _locToVal[objId];
|
|
212
|
-
}
|
|
213
|
-
}; // end class RelExeState
|
|
214
|
-
} // end namespace SVF
|
|
215
|
-
|
|
216
|
-
template<>
|
|
217
|
-
struct std::hash<SVF::RelExeState>
|
|
218
|
-
{
|
|
219
|
-
size_t operator()(const SVF::RelExeState &exeState) const
|
|
220
|
-
{
|
|
221
|
-
return exeState.hash();
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
|
-
|
|
225
|
-
#endif //Z3_EXAMPLE_RELEXESTATE_H
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
//===- RelationSolver.h ----Relation Solver for Interval Domains-----------//
|
|
2
|
-
//
|
|
3
|
-
// SVF: Static Value-Flow Analysis
|
|
4
|
-
//
|
|
5
|
-
// Copyright (C) <2013-2022> <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 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 General Public License for more details.
|
|
17
|
-
|
|
18
|
-
// You should have received a copy of the GNU General Public License
|
|
19
|
-
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
-
//
|
|
21
|
-
//===----------------------------------------------------------------------===//
|
|
22
|
-
/*
|
|
23
|
-
* RelationSolver.h
|
|
24
|
-
*
|
|
25
|
-
* Created on: Aug 4, 2022
|
|
26
|
-
* Author: Jiawei Ren
|
|
27
|
-
*
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
#ifndef Z3_EXAMPLE_RELATIONSOLVER_H
|
|
31
|
-
#define Z3_EXAMPLE_RELATIONSOLVER_H
|
|
32
|
-
|
|
33
|
-
#include "AbstractExecution/IntervalExeState.h"
|
|
34
|
-
#include "Util/Z3Expr.h"
|
|
35
|
-
|
|
36
|
-
namespace SVF
|
|
37
|
-
{
|
|
38
|
-
class RelationSolver
|
|
39
|
-
{
|
|
40
|
-
public:
|
|
41
|
-
RelationSolver() = default;
|
|
42
|
-
|
|
43
|
-
/* gamma_hat, beta and abstract_consequence works on
|
|
44
|
-
IntervalExeState (the last element of inputs) for RSY or bilateral solver */
|
|
45
|
-
|
|
46
|
-
/// Return Z3Expr according to valToValMap
|
|
47
|
-
Z3Expr gamma_hat(IntervalExeState &exeState);
|
|
48
|
-
|
|
49
|
-
/// Return Z3Expr according to another valToValMap
|
|
50
|
-
Z3Expr gamma_hat(IntervalExeState &alpha, IntervalExeState &exeState);
|
|
51
|
-
|
|
52
|
-
/// Return Z3Expr from a NodeID
|
|
53
|
-
Z3Expr gamma_hat(u32_t id, IntervalExeState &exeState);
|
|
54
|
-
|
|
55
|
-
IntervalExeState abstract_consequence(IntervalExeState &lower, IntervalExeState &upper, IntervalExeState &domain);
|
|
56
|
-
|
|
57
|
-
IntervalExeState beta(Map<u32_t, double> &sigma, IntervalExeState &exeState);
|
|
58
|
-
|
|
59
|
-
/* two optional solvers: RSY and bilateral */
|
|
60
|
-
|
|
61
|
-
IntervalExeState bilateral(IntervalExeState domain, Z3Expr phi, u32_t descend_check = 0);
|
|
62
|
-
|
|
63
|
-
IntervalExeState RSY(IntervalExeState domain, const Z3Expr &phi);
|
|
64
|
-
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
#endif //Z3_EXAMPLE_RELATIONSOLVER_H
|