svf-tools 1.0.438 → 1.0.441
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-doxygen/html/html/Andersen_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/BDDExpr_8cpp.html +81 -0
- package/SVF-doxygen/html/html/BDDExpr_8cpp_source.html +122 -0
- package/SVF-doxygen/html/html/BDDExpr_8h.html +98 -0
- package/SVF-doxygen/html/html/BDDExpr_8h_source.html +131 -0
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/DPItem_8h.html +1 -1
- package/SVF-doxygen/html/html/DPItem_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ExeState_8cpp.html +82 -0
- package/SVF-doxygen/html/html/ExeState_8cpp_source.html +130 -0
- package/SVF-doxygen/html/html/ExeState_8h.html +139 -0
- package/SVF-doxygen/html/html/ExeState_8h_source.html +130 -0
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitive_8cpp.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/IRAnnotator_8h.html +2 -2
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Options_8cpp_source.html +113 -114
- package/SVF-doxygen/html/html/Options_8h.html +0 -1
- package/SVF-doxygen/html/html/Options_8h_source.html +115 -117
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +4 -5
- package/SVF-doxygen/html/html/PathCondAllocator_8h.html +1 -1
- package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +24 -24
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ProgSlice_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFUtil_8cpp.html +1 -1
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SrcSnkDDA_8h.html +3 -3
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +6 -6
- package/SVF-doxygen/html/html/SrcSnkSolver_8h.html +96 -0
- package/SVF-doxygen/html/html/SrcSnkSolver_8h_source.html +113 -0
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp.html +3 -3
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h.html +2 -2
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +2 -2
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/Z3Expr_8h.html +99 -0
- package/SVF-doxygen/html/html/Z3Expr_8h_source.html +126 -0
- package/SVF-doxygen/html/html/annotated.html +272 -275
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1BDDExprManager-members.html +117 -0
- package/SVF-doxygen/html/html/classSVF_1_1BDDExprManager.html +1318 -0
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ContextCond.html +0 -9
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1DPItem.html +3 -4
- package/SVF-doxygen/html/html/classSVF_1_1DPItem.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker-members.html +76 -76
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +64 -64
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1ExeState-members.html +113 -0
- package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +1259 -0
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker-members.html +78 -78
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +64 -64
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker-members.html +74 -74
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +68 -68
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +102 -103
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +115 -141
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +131 -132
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA-members.html +66 -66
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +86 -86
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkSolver-members.html +106 -0
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkSolver.html +937 -0
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkSolver.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1StmtDPItem.html +2 -3
- package/SVF-doxygen/html/html/classSVF_1_1StmtDPItem.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1Z3Expr-members.html +46 -15
- package/SVF-doxygen/html/html/classSVF_1_1Z3Expr.html +1451 -104
- package/SVF-doxygen/html/html/classes.html +96 -96
- package/SVF-doxygen/html/html/dir_66541c162fd98954e2c32089ba9a721f.html +2 -0
- package/SVF-doxygen/html/html/dir_770a542efe75a1b68c109cb4e4290224.html +2 -0
- package/SVF-doxygen/html/html/dir_862d3276083eaac55caed79b9120bf29.html +4 -4
- package/SVF-doxygen/html/html/dir_95e22971b5dbae2382075a3453e365b4.html +6 -10
- package/SVF-doxygen/html/html/dir_ea25a8a5b2904424d8a51916f8b475b2.html +2 -0
- package/SVF-doxygen/html/html/dir_fdb79cd259bf25322a80ea604c9317b5.html +2 -0
- package/SVF-doxygen/html/html/files.html +42 -40
- package/SVF-doxygen/html/html/functions.html +2 -2
- package/SVF-doxygen/html/html/functions_0x7e.html +9 -21
- package/SVF-doxygen/html/html/functions_a.html +8 -16
- package/SVF-doxygen/html/html/functions_b.html +21 -34
- package/SVF-doxygen/html/html/functions_c.html +33 -63
- package/SVF-doxygen/html/html/functions_d.html +3 -6
- package/SVF-doxygen/html/html/functions_e.html +14 -13
- package/SVF-doxygen/html/html/functions_enum.html +0 -6
- package/SVF-doxygen/html/html/functions_eval_b.html +0 -6
- package/SVF-doxygen/html/html/functions_f.html +9 -9
- package/SVF-doxygen/html/html/functions_func.html +8 -19
- package/SVF-doxygen/html/html/functions_func_0x7e.html +9 -21
- package/SVF-doxygen/html/html/functions_func_b.html +12 -15
- package/SVF-doxygen/html/html/functions_func_c.html +23 -38
- package/SVF-doxygen/html/html/functions_func_d.html +4 -7
- package/SVF-doxygen/html/html/functions_func_e.html +7 -3
- package/SVF-doxygen/html/html/functions_func_f.html +5 -5
- package/SVF-doxygen/html/html/functions_func_g.html +48 -49
- package/SVF-doxygen/html/html/functions_func_h.html +2 -7
- package/SVF-doxygen/html/html/functions_func_i.html +33 -21
- package/SVF-doxygen/html/html/functions_func_l.html +10 -4
- package/SVF-doxygen/html/html/functions_func_m.html +0 -1
- package/SVF-doxygen/html/html/functions_func_n.html +5 -4
- package/SVF-doxygen/html/html/functions_func_o.html +11 -13
- package/SVF-doxygen/html/html/functions_func_p.html +7 -17
- package/SVF-doxygen/html/html/functions_func_r.html +8 -5
- package/SVF-doxygen/html/html/functions_func_s.html +16 -13
- package/SVF-doxygen/html/html/functions_func_t.html +3 -1
- package/SVF-doxygen/html/html/functions_func_v.html +1 -7
- package/SVF-doxygen/html/html/functions_func_z.html +3 -3
- package/SVF-doxygen/html/html/functions_g.html +51 -52
- package/SVF-doxygen/html/html/functions_h.html +3 -8
- package/SVF-doxygen/html/html/functions_i.html +44 -32
- package/SVF-doxygen/html/html/functions_l.html +20 -6
- package/SVF-doxygen/html/html/functions_m.html +2 -3
- package/SVF-doxygen/html/html/functions_n.html +6 -8
- package/SVF-doxygen/html/html/functions_o.html +61 -21
- package/SVF-doxygen/html/html/functions_p.html +33 -41
- package/SVF-doxygen/html/html/functions_r.html +7 -6
- package/SVF-doxygen/html/html/functions_rela.html +78 -4
- package/SVF-doxygen/html/html/functions_s.html +30 -27
- package/SVF-doxygen/html/html/functions_t.html +12 -10
- package/SVF-doxygen/html/html/functions_type_b.html +2 -6
- package/SVF-doxygen/html/html/functions_type_c.html +4 -4
- package/SVF-doxygen/html/html/functions_type_e.html +0 -3
- package/SVF-doxygen/html/html/functions_type_g.html +5 -5
- package/SVF-doxygen/html/html/functions_type_i.html +4 -7
- package/SVF-doxygen/html/html/functions_type_l.html +3 -0
- package/SVF-doxygen/html/html/functions_type_n.html +2 -2
- package/SVF-doxygen/html/html/functions_type_p.html +0 -4
- package/SVF-doxygen/html/html/functions_type_v.html +3 -0
- package/SVF-doxygen/html/html/functions_type_w.html +2 -2
- package/SVF-doxygen/html/html/functions_v.html +10 -13
- package/SVF-doxygen/html/html/functions_vars.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_b.html +2 -5
- package/SVF-doxygen/html/html/functions_vars_c.html +3 -10
- package/SVF-doxygen/html/html/functions_vars_e.html +1 -4
- package/SVF-doxygen/html/html/functions_vars_f.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_i.html +1 -4
- package/SVF-doxygen/html/html/functions_vars_l.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_m.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_n.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_p.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_s.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_t.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_v.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_w.html +1 -1
- package/SVF-doxygen/html/html/functions_w.html +12 -8
- package/SVF-doxygen/html/html/functions_z.html +3 -13
- package/SVF-doxygen/html/html/globals.html +3 -0
- package/SVF-doxygen/html/html/globals_defs.html +3 -0
- package/SVF-doxygen/html/html/globals_defs_f.html +3 -0
- package/SVF-doxygen/html/html/globals_f.html +5 -2
- package/SVF-doxygen/html/html/globals_s.html +6 -6
- package/SVF-doxygen/html/html/hierarchy.html +422 -425
- package/SVF-doxygen/html/html/menudata.js +4 -4
- package/SVF-doxygen/html/html/namespaceSVF.html +10 -57
- package/SVF-doxygen/html/html/namespacemembers_c.html +1 -1
- package/SVF-doxygen/html/html/namespacemembers_type.html +1 -7
- package/SVF-doxygen/html/html/namespacemembers_v.html +0 -6
- package/SVF-doxygen/html/html/search/all_0.js +1 -1
- package/SVF-doxygen/html/html/search/all_1.js +3 -4
- package/SVF-doxygen/html/html/search/all_10.js +16 -21
- package/SVF-doxygen/html/html/search/all_12.js +4 -3
- package/SVF-doxygen/html/html/search/all_13.js +17 -16
- package/SVF-doxygen/html/html/search/all_14.js +8 -7
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +3 -6
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_1a.js +3 -5
- package/SVF-doxygen/html/html/search/all_1b.js +4 -8
- package/SVF-doxygen/html/html/search/all_2.js +13 -14
- package/SVF-doxygen/html/html/search/all_3.js +14 -24
- package/SVF-doxygen/html/html/search/all_4.js +3 -3
- package/SVF-doxygen/html/html/search/all_5.js +8 -4
- package/SVF-doxygen/html/html/search/all_6.js +6 -5
- package/SVF-doxygen/html/html/search/all_7.js +28 -25
- package/SVF-doxygen/html/html/search/all_8.js +4 -3
- package/SVF-doxygen/html/html/search/all_9.js +19 -13
- package/SVF-doxygen/html/html/search/all_c.js +5 -2
- package/SVF-doxygen/html/html/search/all_d.js +2 -2
- package/SVF-doxygen/html/html/search/all_e.js +5 -5
- package/SVF-doxygen/html/html/search/all_f.js +24 -15
- package/SVF-doxygen/html/html/search/classes_1.js +1 -2
- package/SVF-doxygen/html/html/search/classes_12.js +1 -2
- package/SVF-doxygen/html/html/search/classes_14.js +1 -2
- package/SVF-doxygen/html/html/search/classes_2.js +0 -3
- package/SVF-doxygen/html/html/search/classes_4.js +1 -0
- package/SVF-doxygen/html/html/search/classes_7.js +3 -1
- package/SVF-doxygen/html/html/search/classes_d.js +0 -1
- package/SVF-doxygen/html/html/search/classes_f.js +1 -0
- package/SVF-doxygen/html/html/search/defines_0.js +1 -0
- package/SVF-doxygen/html/html/search/defines_5.js +1 -0
- package/SVF-doxygen/html/html/search/enums_1.js +0 -2
- package/SVF-doxygen/html/html/search/enumvalues_1.js +0 -2
- package/SVF-doxygen/html/html/search/files_1.js +2 -0
- package/SVF-doxygen/html/html/search/files_12.html +26 -0
- package/SVF-doxygen/html/html/search/files_12.js +4 -0
- package/SVF-doxygen/html/html/search/files_2.js +0 -3
- package/SVF-doxygen/html/html/search/files_4.js +2 -0
- package/SVF-doxygen/html/html/search/files_c.js +0 -1
- package/SVF-doxygen/html/html/search/files_d.js +1 -0
- package/SVF-doxygen/html/html/search/functions_0.js +1 -4
- package/SVF-doxygen/html/html/search/functions_1.js +8 -9
- package/SVF-doxygen/html/html/search/functions_10.js +6 -5
- package/SVF-doxygen/html/html/search/functions_11.js +2 -1
- package/SVF-doxygen/html/html/search/functions_13.js +0 -2
- package/SVF-doxygen/html/html/search/functions_15.js +2 -2
- package/SVF-doxygen/html/html/search/functions_16.js +4 -8
- package/SVF-doxygen/html/html/search/functions_2.js +5 -8
- package/SVF-doxygen/html/html/search/functions_3.js +3 -3
- package/SVF-doxygen/html/html/search/functions_4.js +3 -1
- package/SVF-doxygen/html/html/search/functions_5.js +3 -3
- package/SVF-doxygen/html/html/search/functions_6.js +25 -22
- package/SVF-doxygen/html/html/search/functions_7.js +2 -3
- package/SVF-doxygen/html/html/search/functions_8.js +12 -6
- package/SVF-doxygen/html/html/search/functions_a.js +2 -0
- package/SVF-doxygen/html/html/search/functions_b.js +1 -1
- package/SVF-doxygen/html/html/search/functions_c.js +2 -1
- package/SVF-doxygen/html/html/search/functions_d.js +7 -7
- package/SVF-doxygen/html/html/search/functions_e.js +5 -8
- package/SVF-doxygen/html/html/search/functions_f.js +2 -1
- package/SVF-doxygen/html/html/search/related_0.js +1 -2
- package/SVF-doxygen/html/html/search/related_1.js +1 -2
- package/SVF-doxygen/html/html/search/related_2.js +1 -1
- package/SVF-doxygen/html/html/search/related_3.js +2 -1
- package/SVF-doxygen/html/html/search/related_4.js +2 -2
- package/SVF-doxygen/html/html/search/related_5.js +1 -2
- package/SVF-doxygen/html/html/search/related_6.js +4 -1
- package/SVF-doxygen/html/html/search/related_7.js +2 -4
- package/SVF-doxygen/html/html/search/related_8.js +18 -1
- package/SVF-doxygen/html/html/search/related_9.js +4 -6
- package/SVF-doxygen/html/html/search/related_a.js +1 -2
- package/SVF-doxygen/html/html/search/related_b.js +7 -2
- package/SVF-doxygen/html/html/search/related_c.html +26 -0
- package/SVF-doxygen/html/html/search/related_c.js +5 -0
- package/SVF-doxygen/html/html/search/related_d.html +26 -0
- package/SVF-doxygen/html/html/search/related_d.js +5 -0
- package/SVF-doxygen/html/html/search/searchdata.js +4 -4
- package/SVF-doxygen/html/html/search/typedefs_1.js +1 -2
- package/SVF-doxygen/html/html/search/typedefs_14.js +1 -2
- package/SVF-doxygen/html/html/search/typedefs_15.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_2.js +4 -4
- package/SVF-doxygen/html/html/search/typedefs_4.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_6.js +3 -3
- package/SVF-doxygen/html/html/search/typedefs_8.js +3 -4
- package/SVF-doxygen/html/html/search/typedefs_b.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_d.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_f.js +0 -1
- package/SVF-doxygen/html/html/search/variables_0.js +1 -1
- package/SVF-doxygen/html/html/search/variables_10.js +1 -1
- package/SVF-doxygen/html/html/search/variables_13.js +0 -1
- package/SVF-doxygen/html/html/search/variables_14.js +3 -3
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/SVF-doxygen/html/html/search/variables_16.js +1 -1
- package/SVF-doxygen/html/html/search/variables_17.js +1 -1
- package/SVF-doxygen/html/html/search/variables_2.js +1 -2
- package/SVF-doxygen/html/html/search/variables_3.js +4 -6
- package/SVF-doxygen/html/html/search/variables_5.js +1 -2
- package/SVF-doxygen/html/html/search/variables_6.js +1 -1
- package/SVF-doxygen/html/html/search/variables_9.js +1 -2
- package/SVF-doxygen/html/html/search/variables_c.js +1 -0
- package/SVF-doxygen/html/html/search/variables_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +1 -2
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1ExeState_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1ExeState_01_4.html +131 -0
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1Z3Expr_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1Z3Expr_01_4.html +131 -0
- package/include/SABER/PathCondAllocator.h +4 -4
- package/include/SABER/SrcSnkDDA.h +2 -2
- package/include/{Util/CFLSolver.h → SABER/SrcSnkSolver.h} +5 -5
- package/include/{Util → SVF-FE}/IRAnnotator.h +0 -0
- package/include/Util/BDDExpr.h +182 -0
- package/include/Util/DPItem.h +1 -1
- package/include/Util/ExeState.h +177 -0
- package/include/Util/Options.h +0 -3
- package/include/Util/Z3Expr.h +235 -0
- package/include/WPA/FlowSensitiveTBHC.h +1 -1
- package/include/{Util → WPA}/TypeBasedHeapCloning.h +0 -0
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
- package/lib/SABER/PathCondAllocator.cpp +1 -1
- package/lib/Util/BDDExpr.cpp +206 -0
- package/lib/Util/ExeState.cpp +236 -0
- package/lib/Util/Options.cpp +0 -11
- package/lib/Util/SVFUtil.cpp +1 -1
- package/lib/WPA/FlowSensitive.cpp +1 -1
- package/lib/{Util → WPA}/TypeBasedHeapCloning.cpp +1 -1
- package/package.json +1 -1
- package/include/Util/Conditions.h +0 -421
- package/include/Util/PathDPItem.h +0 -310
- package/lib/Util/Conditions.cpp +0 -440
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
//===- ExeState.h -- Execution State ----------------------------//
|
|
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 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
|
+
* ExeState.h
|
|
24
|
+
*
|
|
25
|
+
* Created on: April 29, 2022
|
|
26
|
+
* Author: Xiao
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
#ifndef SVF_EXESTATE_H
|
|
30
|
+
#define SVF_EXESTATE_H
|
|
31
|
+
#include "Util/Z3Expr.h"
|
|
32
|
+
#include "MemoryModel/SVFVariables.h"
|
|
33
|
+
|
|
34
|
+
namespace SVF {
|
|
35
|
+
|
|
36
|
+
#define AddressMask 0x7f000000
|
|
37
|
+
#define FlippedAddressMask (AddressMask^0xffffffff)
|
|
38
|
+
|
|
39
|
+
class ExeState {
|
|
40
|
+
public:
|
|
41
|
+
typedef Map<u32_t, Z3Expr> VarToValMap;
|
|
42
|
+
typedef VarToValMap LocToValMap;
|
|
43
|
+
|
|
44
|
+
protected:
|
|
45
|
+
VarToValMap varToVal;
|
|
46
|
+
LocToValMap locToVal;
|
|
47
|
+
Z3Expr pathConstraint;
|
|
48
|
+
|
|
49
|
+
public:
|
|
50
|
+
ExeState() : pathConstraint(getContext().bool_val(true)) {}
|
|
51
|
+
|
|
52
|
+
ExeState(const Z3Expr &_pc, VarToValMap &_varToValMap, LocToValMap &_locToValMap) : varToVal(_varToValMap),
|
|
53
|
+
locToVal(_locToValMap),
|
|
54
|
+
pathConstraint(_pc) {}
|
|
55
|
+
|
|
56
|
+
ExeState(const ExeState &rhs) : varToVal(rhs.getVarToVal()), locToVal(rhs.getLocToVal()),
|
|
57
|
+
pathConstraint(rhs.getPathConstraint()) {
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
virtual ~ExeState() = default;
|
|
62
|
+
|
|
63
|
+
ExeState &operator=(const ExeState &rhs);
|
|
64
|
+
|
|
65
|
+
/// Overloading Operator==
|
|
66
|
+
bool operator==(const ExeState &rhs) const;
|
|
67
|
+
|
|
68
|
+
/// Overloading Operator!=
|
|
69
|
+
inline bool operator!=(const ExeState &rhs) const {
|
|
70
|
+
return !(*this == rhs);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/// Overloading Operator==
|
|
74
|
+
bool operator<(const ExeState &rhs) const;
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
z3::context &getContext() {
|
|
79
|
+
return Z3Expr::getContext();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const VarToValMap &getVarToVal() const {
|
|
83
|
+
return varToVal;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const LocToValMap &getLocToVal() const {
|
|
87
|
+
return locToVal;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const Z3Expr &getPathConstraint() const {
|
|
91
|
+
return pathConstraint;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
void setPathConstraint(const Z3Expr &pc) {
|
|
95
|
+
pathConstraint = pc.simplify();
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
inline Z3Expr &operator[](u32_t varId) {
|
|
99
|
+
return getZ3Expr(varId);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// Init Z3Expr for ValVar
|
|
103
|
+
void initValVar(const ValVar *valVar, Z3Expr &e);
|
|
104
|
+
|
|
105
|
+
/// Init Z3Expr for ObjVar
|
|
106
|
+
void initObjVar(const ObjVar *objVar, Z3Expr &e);
|
|
107
|
+
|
|
108
|
+
/// Return Z3 expression based on SVFVar ID
|
|
109
|
+
Z3Expr &getZ3Expr(u32_t varId);
|
|
110
|
+
|
|
111
|
+
/// Store value to location
|
|
112
|
+
void store(const Z3Expr &loc, const Z3Expr &value);
|
|
113
|
+
|
|
114
|
+
/// Load value at location
|
|
115
|
+
Z3Expr &load(const Z3Expr &loc);
|
|
116
|
+
|
|
117
|
+
/// The physical address starts with 0x7f...... + idx
|
|
118
|
+
inline u32_t getVirtualMemAddress(u32_t idx) const {
|
|
119
|
+
return AddressMask + idx;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/// Check bit value of val start with 0x7F000000, filter by 0xFF000000
|
|
123
|
+
inline bool isVirtualMemAddress(u32_t val) {
|
|
124
|
+
return (val & 0xff000000) == AddressMask;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/// Return the internal index if idx is an address otherwise return the value of idx
|
|
128
|
+
inline u32_t getInternalID(u32_t idx) const {
|
|
129
|
+
return (idx & FlippedAddressMask);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/// Return int value from an expression if it is a numeral, otherwise return an approximate value
|
|
133
|
+
inline s32_t z3Expr2NumValue(const Z3Expr &e) {
|
|
134
|
+
assert(e.is_numeral() && "not numeral?");
|
|
135
|
+
return e.get_numeral_int64();
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/// Print values of all expressions
|
|
139
|
+
void printExprValues();
|
|
140
|
+
|
|
141
|
+
private:
|
|
142
|
+
bool eqVarToValMap(const VarToValMap &lhs, const VarToValMap &rhs) const;
|
|
143
|
+
bool lessThanVarToValMap(const VarToValMap &lhs, const VarToValMap &rhs) const;
|
|
144
|
+
protected:
|
|
145
|
+
inline void store(u32_t objId, const Z3Expr &z3Expr) {
|
|
146
|
+
locToVal[objId] = z3Expr.simplify();
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
inline Z3Expr &load(u32_t objId) {
|
|
150
|
+
return locToVal[objId];
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
template<>
|
|
156
|
+
struct std::hash<SVF::ExeState> {
|
|
157
|
+
size_t operator()(const SVF::ExeState &exeState) const {
|
|
158
|
+
|
|
159
|
+
size_t h = exeState.getVarToVal().size() * 2;
|
|
160
|
+
SVF::Hash<SVF::u32_t> hf;
|
|
161
|
+
for (const auto &t: exeState.getVarToVal()) {
|
|
162
|
+
h ^= hf(t.first) + 0x9e3779b9 + (h << 6) + (h >> 2);
|
|
163
|
+
h ^= hf(t.second.id()) + 0x9e3779b9 + (h << 6) + (h >> 2);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
size_t h2 = exeState.getVarToVal().size() * 2;
|
|
167
|
+
|
|
168
|
+
for (const auto &t: exeState.getLocToVal()) {
|
|
169
|
+
h2 ^= hf(t.first) + 0x9e3779b9 + (h2 << 6) + (h2 >> 2);
|
|
170
|
+
h2 ^= hf(t.second.id()) + 0x9e3779b9 + (h2 << 6) + (h2 >> 2);
|
|
171
|
+
}
|
|
172
|
+
SVF::Hash<std::pair<SVF::u32_t, SVF::u32_t>> pairH;
|
|
173
|
+
|
|
174
|
+
return pairH(make_pair(pairH(make_pair(h, h2)), exeState.getPathConstraint().id()));
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
#endif //SVF_EXESTATE_H
|
package/include/Util/Options.h
CHANGED
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
#include "Util/NodeIDAllocator.h"
|
|
11
11
|
#include "MSSA/MemSSA.h"
|
|
12
12
|
#include "WPA/WPAPass.h"
|
|
13
|
-
#include "Util/Conditions.h"
|
|
14
13
|
|
|
15
14
|
namespace SVF
|
|
16
15
|
{
|
|
@@ -255,8 +254,6 @@ public:
|
|
|
255
254
|
// DOTGraphTraits
|
|
256
255
|
static const llvm::cl::opt<bool> ShowHiddenNode;
|
|
257
256
|
|
|
258
|
-
// Conditions
|
|
259
|
-
static const llvm::cl::opt<CondManager::CondMgrKind> ConditionType;
|
|
260
257
|
};
|
|
261
258
|
} // namespace SVF
|
|
262
259
|
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
//===- Z3Expr.h -- Z3 conditions----------------------------//
|
|
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 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
|
+
* Z3Expr.h
|
|
24
|
+
*
|
|
25
|
+
* Created on: April 29, 2022
|
|
26
|
+
* Author: Xiao
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
#ifndef Z3_EXAMPLE_Z3EXPR_H
|
|
30
|
+
#define Z3_EXAMPLE_Z3EXPR_H
|
|
31
|
+
|
|
32
|
+
#include "z3++.h"
|
|
33
|
+
#include "Util/SVFBasicTypes.h"
|
|
34
|
+
|
|
35
|
+
namespace SVF {
|
|
36
|
+
|
|
37
|
+
class Z3Expr {
|
|
38
|
+
public:
|
|
39
|
+
static z3::context *ctx;
|
|
40
|
+
|
|
41
|
+
private:
|
|
42
|
+
z3::expr e;
|
|
43
|
+
|
|
44
|
+
Z3Expr(float f); // placeholder don't support floating point expression
|
|
45
|
+
Z3Expr(double f); // placeholder don't support floating point expression
|
|
46
|
+
|
|
47
|
+
public:
|
|
48
|
+
|
|
49
|
+
Z3Expr() : e(nullExpr()) {
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
Z3Expr(const z3::expr &_e) : e(_e) {
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
Z3Expr(int i) : e(getContext().int_val(i)) {
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
Z3Expr(const Z3Expr &z3Expr) : e(z3Expr.getExpr()) {
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
virtual ~Z3Expr() = default;
|
|
62
|
+
|
|
63
|
+
inline Z3Expr &operator=(const Z3Expr &rhs) {
|
|
64
|
+
if (this->id() != rhs.id()) {
|
|
65
|
+
e = rhs.getExpr();
|
|
66
|
+
}
|
|
67
|
+
return *this;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const z3::expr &getExpr() const {
|
|
71
|
+
return e;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/// Get z3 context, singleton design here to make sure we only have one context
|
|
75
|
+
static z3::context &getContext() {
|
|
76
|
+
if (ctx == nullptr) {
|
|
77
|
+
ctx = new z3::context();
|
|
78
|
+
}
|
|
79
|
+
return *ctx;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/// release z3 context
|
|
83
|
+
static void releaseContext() {
|
|
84
|
+
delete ctx;
|
|
85
|
+
ctx = nullptr;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/// null expression
|
|
89
|
+
static z3::expr nullExpr() {
|
|
90
|
+
return getContext().int_const("null");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/// get id
|
|
94
|
+
inline u32_t id() const {
|
|
95
|
+
return e.id();
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
inline const std::string to_string() const {
|
|
99
|
+
return e.to_string();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
inline bool is_numeral() const {
|
|
103
|
+
return e.is_numeral();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
inline bool is_bool() const {
|
|
107
|
+
return e.is_bool();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
inline Z3Expr simplify() const {
|
|
111
|
+
return e.simplify();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
inline int64_t get_numeral_int64() const {
|
|
115
|
+
return e.get_numeral_int64();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
inline int get_numeral_int() const {
|
|
119
|
+
return e.get_numeral_int();
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
//{% reload operator
|
|
123
|
+
friend Z3Expr operator==(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
124
|
+
return lhs.getExpr() == rhs.getExpr();
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
friend Z3Expr operator!=(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
128
|
+
return lhs.getExpr() != rhs.getExpr();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
friend Z3Expr operator>(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
132
|
+
return lhs.getExpr() > rhs.getExpr();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
friend Z3Expr operator<(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
136
|
+
return lhs.getExpr() < rhs.getExpr();
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
friend Z3Expr operator<=(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
140
|
+
return lhs.getExpr() <= rhs.getExpr();
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
friend Z3Expr operator>=(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
144
|
+
return lhs.getExpr() >= rhs.getExpr();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
friend Z3Expr operator+(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
148
|
+
return lhs.getExpr() + rhs.getExpr();
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
friend Z3Expr operator-(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
152
|
+
return lhs.getExpr() - rhs.getExpr();
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
friend Z3Expr operator*(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
156
|
+
return lhs.getExpr() * rhs.getExpr();
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
friend Z3Expr operator/(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
160
|
+
return lhs.getExpr() / rhs.getExpr();
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
friend Z3Expr operator%(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
164
|
+
return lhs.getExpr() % rhs.getExpr();
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
friend Z3Expr operator^(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
168
|
+
return lhs.getExpr() ^ rhs.getExpr();
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
friend Z3Expr operator&(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
172
|
+
return lhs.getExpr() & rhs.getExpr();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
friend Z3Expr operator|(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
176
|
+
return lhs.getExpr() | rhs.getExpr();
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
friend Z3Expr ashr(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
180
|
+
return ashr(lhs.getExpr(), rhs.getExpr());
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
friend Z3Expr shl(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
184
|
+
return shl(lhs.getExpr(), rhs.getExpr());
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
friend Z3Expr int2bv(u32_t n, const Z3Expr &e) {
|
|
188
|
+
return int2bv(n, e.getExpr());
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
friend Z3Expr bv2int(const Z3Expr &e, bool isSigned) {
|
|
192
|
+
return z3::bv2int(e.getExpr(), isSigned);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
friend Z3Expr operator&&(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
196
|
+
return lhs.getExpr() && rhs.getExpr();
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
friend Z3Expr operator||(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
200
|
+
return lhs.getExpr() || rhs.getExpr();
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
friend Z3Expr operator!(const Z3Expr &lhs) {
|
|
204
|
+
return !lhs.getExpr();
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
friend Z3Expr ite(const Z3Expr& cond, const Z3Expr& lhs, const Z3Expr& rhs) {
|
|
208
|
+
return ite(cond.getExpr(), lhs.getExpr(), rhs.getExpr());
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
friend std::ostream &operator<<(std::ostream &out, const Z3Expr &expr) {
|
|
212
|
+
out << expr.getExpr();
|
|
213
|
+
return out;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
friend bool eq(const Z3Expr &lhs, const Z3Expr &rhs) {
|
|
217
|
+
return eq(lhs.getExpr(), rhs.getExpr());
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
z3::sort get_sort() const {
|
|
221
|
+
return getExpr().get_sort();
|
|
222
|
+
}
|
|
223
|
+
//%}
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/// Specialise hash for AbsCxtDPItem.
|
|
228
|
+
template<>
|
|
229
|
+
struct std::hash<SVF::Z3Expr> {
|
|
230
|
+
size_t operator()(const SVF::Z3Expr &z3Expr) const {
|
|
231
|
+
return z3Expr.id();
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
#endif //Z3_EXAMPLE_Z3EXPR_H
|
|
File without changes
|
|
@@ -45,7 +45,7 @@ u32_t ContextCond::maximumPathLen = 0;
|
|
|
45
45
|
u32_t ContextCond::maximumPath = 0;
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
PathCondAllocator::PathCondAllocator() : condMgr(
|
|
48
|
+
PathCondAllocator::PathCondAllocator() : condMgr(BDDExprManager::getBDDExprMgr()) {
|
|
49
49
|
|
|
50
50
|
}
|
|
51
51
|
/*!
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
//===- BDDExpr.cpp -- Context/path conditions in the form of BDDs----------//
|
|
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 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
|
+
|
|
24
|
+
/*
|
|
25
|
+
* Conditions.cpp
|
|
26
|
+
*
|
|
27
|
+
* Created on: Oct 19, 2021
|
|
28
|
+
* Author: Yulei and Xiao
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
#include "Util/Options.h"
|
|
32
|
+
#include "Util/BDDExpr.h"
|
|
33
|
+
|
|
34
|
+
using namespace SVF;
|
|
35
|
+
using namespace SVFUtil;
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
BDDExprManager::BDDExpr *BDDExprManager::trueCond = nullptr;
|
|
39
|
+
BDDExprManager::BDDExpr *BDDExprManager::falseCond = nullptr;
|
|
40
|
+
BDDExprManager *BDDExprManager::bddExprMgr = nullptr;
|
|
41
|
+
u32_t BDDExprManager::totalCondNum = 0;
|
|
42
|
+
|
|
43
|
+
BDDExprManager::BDDExprManager() {
|
|
44
|
+
m_bdd_mgr = Cudd_Init(0, 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0);
|
|
45
|
+
trueCond = BddOne();
|
|
46
|
+
falseCond = BddZero();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
BDDExprManager::~BDDExprManager() {
|
|
50
|
+
Cudd_Quit(m_bdd_mgr);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
BDDExprManager *BDDExprManager::getBDDExprMgr() {
|
|
54
|
+
if (bddExprMgr == nullptr) {
|
|
55
|
+
bddExprMgr = new BDDExprManager();
|
|
56
|
+
}
|
|
57
|
+
return bddExprMgr;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
BDDExprManager::BDDExpr *BDDExprManager::createFreshBranchCond(const Instruction *inst) {
|
|
61
|
+
u32_t condCountIdx = totalCondNum++;
|
|
62
|
+
BDDExpr *bddCond = createCond(condCountIdx);
|
|
63
|
+
setCondInst(bddCond, inst);
|
|
64
|
+
auto *negCond = NEG(bddCond);
|
|
65
|
+
setCondInst(negCond, inst);
|
|
66
|
+
return bddCond;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/// Operations on conditions.
|
|
70
|
+
//@{
|
|
71
|
+
/// use Cudd_bddAndLimit interface to avoid bdds blow up
|
|
72
|
+
BDDExprManager::BDDExpr *BDDExprManager::AND(BDDExpr *lhs, BDDExpr *rhs) {
|
|
73
|
+
if (lhs == getFalseCond() || rhs == getFalseCond())
|
|
74
|
+
return getFalseCond();
|
|
75
|
+
else if (lhs == getTrueCond())
|
|
76
|
+
return rhs;
|
|
77
|
+
else if (rhs == getTrueCond())
|
|
78
|
+
return lhs;
|
|
79
|
+
else {
|
|
80
|
+
BDDExpr *tmp = Cudd_bddAndLimit(m_bdd_mgr, lhs, rhs, Options::MaxBddSize);
|
|
81
|
+
if (tmp == nullptr) {
|
|
82
|
+
SVFUtil::writeWrnMsg("exceeds max bdd size \n");
|
|
83
|
+
///drop the rhs condition
|
|
84
|
+
return lhs;
|
|
85
|
+
} else {
|
|
86
|
+
Cudd_Ref(tmp);
|
|
87
|
+
return tmp;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/*!
|
|
93
|
+
* Use Cudd_bddOrLimit interface to avoid bdds blow up
|
|
94
|
+
*/
|
|
95
|
+
BDDExprManager::BDDExpr *BDDExprManager::OR(BDDExpr *lhs, BDDExpr *rhs) {
|
|
96
|
+
if (lhs == getTrueCond() || rhs == getTrueCond())
|
|
97
|
+
return getTrueCond();
|
|
98
|
+
else if (lhs == getFalseCond())
|
|
99
|
+
return rhs;
|
|
100
|
+
else if (rhs == getFalseCond())
|
|
101
|
+
return lhs;
|
|
102
|
+
else {
|
|
103
|
+
BDDExpr *tmp = Cudd_bddOrLimit(m_bdd_mgr, lhs, rhs, Options::MaxBddSize);
|
|
104
|
+
if (tmp == nullptr) {
|
|
105
|
+
SVFUtil::writeWrnMsg("exceeds max bdd size \n");
|
|
106
|
+
/// drop the two conditions here
|
|
107
|
+
return getTrueCond();
|
|
108
|
+
} else {
|
|
109
|
+
Cudd_Ref(tmp);
|
|
110
|
+
return tmp;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
BDDExprManager::BDDExpr *BDDExprManager::NEG(BDDExpr *lhs) {
|
|
116
|
+
|
|
117
|
+
if (lhs == getTrueCond())
|
|
118
|
+
return getFalseCond();
|
|
119
|
+
else if (lhs == getFalseCond())
|
|
120
|
+
return getTrueCond();
|
|
121
|
+
else
|
|
122
|
+
return Cudd_Not(lhs);
|
|
123
|
+
}
|
|
124
|
+
//@}
|
|
125
|
+
|
|
126
|
+
/*!
|
|
127
|
+
* Whether **All Paths** are reachable
|
|
128
|
+
*/
|
|
129
|
+
bool BDDExprManager::isAllPathReachable(const BDDExpr *e) {
|
|
130
|
+
return isEquivalentBranchCond(e, getTrueCond());
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/*!
|
|
134
|
+
* Utilities for dumping conditions. These methods use global functions from CUDD
|
|
135
|
+
* package and they can be removed outside this class scope to be used by others.
|
|
136
|
+
*/
|
|
137
|
+
void BDDExprManager::ddClearFlag(BDDExpr *f) const {
|
|
138
|
+
if (!Cudd_IsComplement(f->next))
|
|
139
|
+
return;
|
|
140
|
+
/* Clear visited flag. */
|
|
141
|
+
f->next = Cudd_Regular(f->next);
|
|
142
|
+
if (cuddIsConstant(f))
|
|
143
|
+
return;
|
|
144
|
+
ddClearFlag(cuddT(f));
|
|
145
|
+
ddClearFlag(Cudd_Regular(cuddE(f)));
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
void BDDExprManager::BddSupportStep(BDDExpr *f, NodeBS &support) const {
|
|
150
|
+
if (cuddIsConstant(f) || Cudd_IsComplement(f->next))
|
|
151
|
+
return;
|
|
152
|
+
|
|
153
|
+
support.set(f->index);
|
|
154
|
+
|
|
155
|
+
BddSupportStep(cuddT(f), support);
|
|
156
|
+
BddSupportStep(Cudd_Regular(cuddE(f)), support);
|
|
157
|
+
/* Mark as visited. */
|
|
158
|
+
f->next = Cudd_Complement(f->next);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
void BDDExprManager::extractSubConds(const BDDExpr *f, NodeBS &support) const {
|
|
162
|
+
BddSupportStep(Cudd_Regular(f), support);
|
|
163
|
+
ddClearFlag(Cudd_Regular(f));
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/*!
|
|
167
|
+
* Dump BDD
|
|
168
|
+
*/
|
|
169
|
+
void BDDExprManager::dump(const BDDExpr *lhs, OutStream &O) {
|
|
170
|
+
if (lhs == getTrueCond())
|
|
171
|
+
O << "T";
|
|
172
|
+
else {
|
|
173
|
+
NodeBS support;
|
|
174
|
+
extractSubConds(lhs, support);
|
|
175
|
+
for (NodeBS::iterator iter = support.begin(); iter != support.end();
|
|
176
|
+
++iter) {
|
|
177
|
+
unsigned rid = *iter;
|
|
178
|
+
O << rid << " ";
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
/*!
|
|
185
|
+
* Dump BDD
|
|
186
|
+
*/
|
|
187
|
+
std::string BDDExprManager::dumpStr(const BDDExpr *e) const {
|
|
188
|
+
std::string str;
|
|
189
|
+
if (e == getTrueCond())
|
|
190
|
+
str += "T";
|
|
191
|
+
else {
|
|
192
|
+
NodeBS support;
|
|
193
|
+
extractSubConds(e, support);
|
|
194
|
+
for (NodeBS::iterator iter = support.begin(); iter != support.end();
|
|
195
|
+
++iter) {
|
|
196
|
+
unsigned rid = *iter;
|
|
197
|
+
char int2str[16];
|
|
198
|
+
sprintf(int2str, "%d", rid);
|
|
199
|
+
str += int2str;
|
|
200
|
+
str += " ";
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return str;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
|