svf-tools 1.0.837 → 1.0.839
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/AndersenSCD_8cpp_source.html +1 -1
- package/SVF-doxygen/html/Andersen_8cpp_source.html +20 -16
- package/SVF-doxygen/html/Andersen_8h_source.html +2 -2
- package/SVF-doxygen/html/BoundedZ3Expr_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CFLAlias_8cpp_source.html +2 -2
- package/SVF-doxygen/html/CFLBase_8cpp_source.html +4 -4
- package/SVF-doxygen/html/CFLGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CFLSVFGBuilder_8cpp.html +86 -0
- package/SVF-doxygen/html/CFLSVFGBuilder_8cpp_source.html +195 -0
- package/SVF-doxygen/html/CFLSVFGBuilder_8h.html +98 -0
- package/SVF-doxygen/html/CFLSVFGBuilder_8h_source.html +148 -0
- package/SVF-doxygen/html/CFLVF_8cpp_source.html +4 -4
- package/SVF-doxygen/html/CFLVF_8h.html +1 -1
- package/SVF-doxygen/html/CFLVF_8h_source.html +5 -5
- package/SVF-doxygen/html/CHGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ConsG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/DCHG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/DDAPass_8cpp_source.html +9 -9
- package/SVF-doxygen/html/DDAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/DDAVFSolver_8h_source.html +1 -1
- package/SVF-doxygen/html/DoubleFreeChecker_8cpp_source.html +5 -5
- package/SVF-doxygen/html/DoubleFreeChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/ExtAPI_8cpp_source.html +1 -1
- package/SVF-doxygen/html/FSMPTA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/FileChecker_8cpp_source.html +2 -2
- package/SVF-doxygen/html/FileChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +3 -3
- package/SVF-doxygen/html/ICFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/IRGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/LLVMLoopAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/LLVMModule_8cpp_source.html +2 -2
- package/SVF-doxygen/html/LeakChecker_8cpp_source.html +3 -3
- package/SVF-doxygen/html/LeakChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MHP_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MTAResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MTAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MemRegion_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MemSSA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/Options_8cpp_source.html +825 -892
- package/SVF-doxygen/html/Options_8h_source.html +275 -297
- package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +1 -1
- package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +12 -12
- package/SVF-doxygen/html/ProgSlice_8cpp_source.html +170 -136
- package/SVF-doxygen/html/ProgSlice_8h_source.html +314 -298
- package/SVF-doxygen/html/SVFGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/SVFGOPT_8cpp_source.html +4 -4
- package/SVF-doxygen/html/SVFGOPT_8h_source.html +5 -5
- package/SVF-doxygen/html/SVFGReadWrite_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SVFG_8cpp_source.html +32 -32
- package/SVF-doxygen/html/SVFG_8h_source.html +446 -444
- package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFIR_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SVFStatements_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFVariables_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SaberCondAllocator_8h_source.html +246 -235
- package/SVF-doxygen/html/SaberSVFGBuilder_8cpp.html +1 -0
- package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +272 -266
- package/SVF-doxygen/html/SaberSVFGBuilder_8h_source.html +75 -62
- package/SVF-doxygen/html/SrcSnkDDA_8cpp_source.html +261 -260
- package/SVF-doxygen/html/SrcSnkDDA_8h_source.html +18 -18
- package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/SymbolTableInfo_8cpp_source.html +3 -3
- package/SVF-doxygen/html/TCT_8cpp_source.html +1 -1
- package/SVF-doxygen/html/TypeAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/VFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/VersionedFlowSensitive_8cpp_source.html +4 -4
- package/SVF-doxygen/html/WPAPass_8cpp_source.html +5 -5
- package/SVF-doxygen/html/Z3Expr_8cpp_source.html +1 -1
- package/SVF-doxygen/html/annotated.html +377 -376
- package/SVF-doxygen/html/classSVF_1_1AddrStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1Andersen.html +18 -14
- package/SVF-doxygen/html/classSVF_1_1AndersenBase.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1AndersenSCD.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1BVDataPTAImpl.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1BinaryOPStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1BoundedZ3Expr.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1BranchStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CFLAlias.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1CFLBase.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1CFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CFLSVFGBuilder-members.html +121 -0
- package/SVF-doxygen/html/classSVF_1_1CFLSVFGBuilder.html +473 -0
- package/SVF-doxygen/html/classSVF_1_1CFLSVFGBuilder.png +0 -0
- package/SVF-doxygen/html/classSVF_1_1CFLVF-members.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CFLVF.html +11 -11
- package/SVF-doxygen/html/classSVF_1_1CHGBuilder.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CallPE.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CmpStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ConstraintNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CopyStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1DCHGraph.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1DDAPass.html +9 -9
- package/SVF-doxygen/html/classSVF_1_1DDAStat.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1DDAVFSolver.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1DoubleFreeChecker.html +6 -6
- package/SVF-doxygen/html/classSVF_1_1ExtAPI.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1FIObjVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1FileChecker.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1GepObjVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1GepStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1GepValVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ICFG.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1LLVMLoopAnalysis.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1LeakChecker.html +6 -6
- package/SVF-doxygen/html/classSVF_1_1LoadStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1LockResultValidator.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1MHP.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1MRGenerator.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1MTAResultValidator.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1MTASVFGBuilder.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1MTAStat.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1MemSSA.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1ObjTypeInfo.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1Options-members.html +64 -73
- package/SVF-doxygen/html/classSVF_1_1Options.html +128 -362
- package/SVF-doxygen/html/classSVF_1_1PhiStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +12 -12
- package/SVF-doxygen/html/classSVF_1_1ProgSlice-members.html +25 -22
- package/SVF-doxygen/html/classSVF_1_1ProgSlice.html +493 -366
- package/SVF-doxygen/html/classSVF_1_1RetPE.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SVFG-members.html +182 -181
- package/SVF-doxygen/html/classSVF_1_1SVFG.html +326 -300
- package/SVF-doxygen/html/classSVF_1_1SVFGBuilder.html +6 -5
- package/SVF-doxygen/html/classSVF_1_1SVFGBuilder.png +0 -0
- package/SVF-doxygen/html/classSVF_1_1SVFGOPT.html +11 -11
- package/SVF-doxygen/html/classSVF_1_1SVFIR.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +7 -7
- package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator-members.html +22 -19
- package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator.html +239 -160
- package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder-members.html +11 -9
- package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.html +348 -286
- package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.png +0 -0
- package/SVF-doxygen/html/classSVF_1_1SelectStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SrcSnkDDA.html +263 -261
- package/SVF-doxygen/html/classSVF_1_1StoreStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1SymbolTableInfo.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1TCT.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1TDForkPE.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1TDJoinPE.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1TypeAnalysis.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1UnaryOPStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1VFG.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ValVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitive.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1WPAPass.html +5 -5
- package/SVF-doxygen/html/classSVF_1_1Z3Expr.html +1 -1
- package/SVF-doxygen/html/classes.html +95 -94
- package/SVF-doxygen/html/dir_1b8e404556d3e8597ae60437f0a084bf.html +2 -0
- package/SVF-doxygen/html/dir_8a9c8659eb68b9cbd3fead4690588a47.html +2 -0
- package/SVF-doxygen/html/files.html +6 -4
- package/SVF-doxygen/html/functions_b.html +7 -6
- package/SVF-doxygen/html/functions_c.html +38 -29
- package/SVF-doxygen/html/functions_d.html +0 -15
- package/SVF-doxygen/html/functions_f.html +9 -9
- package/SVF-doxygen/html/functions_func_b.html +3 -2
- package/SVF-doxygen/html/functions_func_c.html +29 -23
- package/SVF-doxygen/html/functions_func_g.html +14 -10
- package/SVF-doxygen/html/functions_func_r.html +6 -5
- package/SVF-doxygen/html/functions_func_s.html +20 -17
- package/SVF-doxygen/html/functions_func_~.html +3 -0
- package/SVF-doxygen/html/functions_g.html +10 -6
- package/SVF-doxygen/html/functions_m.html +4 -7
- package/SVF-doxygen/html/functions_n.html +6 -5
- package/SVF-doxygen/html/functions_p.html +15 -14
- package/SVF-doxygen/html/functions_r.html +10 -6
- package/SVF-doxygen/html/functions_rela_c.html +3 -0
- package/SVF-doxygen/html/functions_s.html +24 -21
- package/SVF-doxygen/html/functions_t.html +5 -11
- package/SVF-doxygen/html/functions_type_n.html +2 -1
- package/SVF-doxygen/html/functions_type_s.html +6 -1
- package/SVF-doxygen/html/functions_type_w.html +1 -0
- package/SVF-doxygen/html/functions_v.html +4 -6
- package/SVF-doxygen/html/functions_vars_d.html +0 -15
- package/SVF-doxygen/html/functions_vars_m.html +1 -4
- package/SVF-doxygen/html/functions_vars_p.html +3 -0
- package/SVF-doxygen/html/functions_vars_r.html +3 -0
- package/SVF-doxygen/html/functions_vars_s.html +2 -7
- package/SVF-doxygen/html/functions_vars_t.html +0 -6
- package/SVF-doxygen/html/functions_w.html +3 -2
- package/SVF-doxygen/html/functions_~.html +3 -0
- package/SVF-doxygen/html/hierarchy.html +2 -1
- package/SVF-doxygen/html/namespaceSVF.html +2 -0
- package/SVF-doxygen/html/search/all_10.js +207 -206
- package/SVF-doxygen/html/search/all_11.js +115 -114
- package/SVF-doxygen/html/search/all_12.js +335 -335
- package/SVF-doxygen/html/search/all_13.js +190 -192
- package/SVF-doxygen/html/search/all_14.js +67 -67
- package/SVF-doxygen/html/search/all_15.js +167 -167
- package/SVF-doxygen/html/search/all_16.js +63 -63
- package/SVF-doxygen/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/search/all_18.js +1 -1
- package/SVF-doxygen/html/search/all_19.js +11 -11
- package/SVF-doxygen/html/search/all_1a.js +26 -25
- package/SVF-doxygen/html/search/all_2.js +2 -2
- package/SVF-doxygen/html/search/all_3.js +466 -462
- package/SVF-doxygen/html/search/all_4.js +230 -235
- package/SVF-doxygen/html/search/all_5.js +119 -119
- package/SVF-doxygen/html/search/all_6.js +226 -226
- package/SVF-doxygen/html/search/all_7.js +804 -803
- package/SVF-doxygen/html/search/all_9.js +3 -3
- package/SVF-doxygen/html/search/all_b.js +1 -1
- package/SVF-doxygen/html/search/all_c.js +1 -1
- package/SVF-doxygen/html/search/all_d.js +184 -185
- package/SVF-doxygen/html/search/all_e.js +207 -207
- package/SVF-doxygen/html/search/all_f.js +116 -116
- package/SVF-doxygen/html/search/classes_10.js +73 -73
- package/SVF-doxygen/html/search/classes_11.js +15 -15
- package/SVF-doxygen/html/search/classes_12.js +2 -2
- package/SVF-doxygen/html/search/classes_13.js +10 -10
- package/SVF-doxygen/html/search/classes_14.js +14 -14
- package/SVF-doxygen/html/search/classes_15.js +1 -1
- package/SVF-doxygen/html/search/classes_2.js +37 -36
- package/SVF-doxygen/html/search/classes_3.js +37 -37
- package/SVF-doxygen/html/search/classes_4.js +9 -9
- package/SVF-doxygen/html/search/classes_5.js +28 -28
- package/SVF-doxygen/html/search/classes_6.js +104 -104
- package/SVF-doxygen/html/search/classes_7.js +34 -34
- package/SVF-doxygen/html/search/classes_8.js +56 -56
- package/SVF-doxygen/html/search/classes_9.js +1 -1
- package/SVF-doxygen/html/search/classes_a.js +12 -12
- package/SVF-doxygen/html/search/classes_b.js +29 -29
- package/SVF-doxygen/html/search/classes_c.js +6 -6
- package/SVF-doxygen/html/search/classes_d.js +18 -18
- package/SVF-doxygen/html/search/classes_e.js +36 -36
- package/SVF-doxygen/html/search/classes_f.js +25 -25
- package/SVF-doxygen/html/search/defines_0.js +3 -3
- package/SVF-doxygen/html/search/defines_1.js +2 -2
- package/SVF-doxygen/html/search/defines_2.js +30 -30
- package/SVF-doxygen/html/search/defines_3.js +20 -20
- package/SVF-doxygen/html/search/defines_4.js +2 -2
- package/SVF-doxygen/html/search/defines_5.js +4 -4
- package/SVF-doxygen/html/search/defines_6.js +2 -2
- package/SVF-doxygen/html/search/defines_7.js +5 -5
- package/SVF-doxygen/html/search/defines_8.js +11 -11
- package/SVF-doxygen/html/search/defines_9.js +9 -9
- package/SVF-doxygen/html/search/defines_a.js +2 -2
- package/SVF-doxygen/html/search/defines_b.js +1 -1
- package/SVF-doxygen/html/search/defines_c.js +3 -3
- package/SVF-doxygen/html/search/defines_d.js +2 -2
- package/SVF-doxygen/html/search/defines_e.js +7 -7
- package/SVF-doxygen/html/search/defines_f.js +3 -3
- package/SVF-doxygen/html/search/enums_0.js +3 -3
- package/SVF-doxygen/html/search/enums_1.js +2 -2
- package/SVF-doxygen/html/search/enums_10.js +1 -1
- package/SVF-doxygen/html/search/enums_11.js +1 -1
- package/SVF-doxygen/html/search/enums_2.js +8 -8
- package/SVF-doxygen/html/search/enums_3.js +1 -1
- package/SVF-doxygen/html/search/enums_4.js +3 -3
- package/SVF-doxygen/html/search/enums_5.js +1 -1
- package/SVF-doxygen/html/search/enums_6.js +2 -2
- package/SVF-doxygen/html/search/enums_7.js +2 -2
- package/SVF-doxygen/html/search/enums_8.js +4 -4
- package/SVF-doxygen/html/search/enums_9.js +1 -1
- package/SVF-doxygen/html/search/enums_a.js +1 -1
- package/SVF-doxygen/html/search/enums_b.js +7 -7
- package/SVF-doxygen/html/search/enums_c.js +1 -1
- package/SVF-doxygen/html/search/enums_d.js +4 -4
- package/SVF-doxygen/html/search/enums_e.js +2 -2
- package/SVF-doxygen/html/search/enums_f.js +4 -4
- package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
- package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
- package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
- package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
- package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
- package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
- package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
- package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
- package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
- package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
- package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
- package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
- package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
- package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
- package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
- package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
- package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
- package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
- package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
- package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
- package/SVF-doxygen/html/search/files_0.js +13 -13
- package/SVF-doxygen/html/search/files_1.js +7 -7
- package/SVF-doxygen/html/search/files_10.js +8 -8
- package/SVF-doxygen/html/search/files_11.js +8 -8
- package/SVF-doxygen/html/search/files_12.js +2 -2
- package/SVF-doxygen/html/search/files_2.js +57 -55
- package/SVF-doxygen/html/search/files_3.js +14 -14
- package/SVF-doxygen/html/search/files_4.js +5 -5
- package/SVF-doxygen/html/search/files_5.js +13 -13
- package/SVF-doxygen/html/search/files_6.js +9 -9
- package/SVF-doxygen/html/search/files_7.js +14 -14
- package/SVF-doxygen/html/search/files_8.js +13 -13
- package/SVF-doxygen/html/search/files_9.js +18 -18
- package/SVF-doxygen/html/search/files_a.js +3 -3
- package/SVF-doxygen/html/search/files_b.js +2 -2
- package/SVF-doxygen/html/search/files_c.js +20 -20
- package/SVF-doxygen/html/search/files_d.js +4 -4
- package/SVF-doxygen/html/search/files_e.js +62 -62
- package/SVF-doxygen/html/search/files_f.js +8 -8
- package/SVF-doxygen/html/search/functions_0.js +13 -13
- package/SVF-doxygen/html/search/functions_1.js +362 -362
- package/SVF-doxygen/html/search/functions_10.js +140 -140
- package/SVF-doxygen/html/search/functions_11.js +139 -139
- package/SVF-doxygen/html/search/functions_12.js +289 -288
- package/SVF-doxygen/html/search/functions_13.js +59 -59
- package/SVF-doxygen/html/search/functions_14.js +39 -39
- package/SVF-doxygen/html/search/functions_15.js +71 -71
- package/SVF-doxygen/html/search/functions_16.js +32 -32
- package/SVF-doxygen/html/search/functions_17.js +3 -3
- package/SVF-doxygen/html/search/functions_18.js +173 -172
- package/SVF-doxygen/html/search/functions_2.js +89 -89
- package/SVF-doxygen/html/search/functions_3.js +260 -258
- package/SVF-doxygen/html/search/functions_4.js +78 -78
- package/SVF-doxygen/html/search/functions_5.js +53 -53
- package/SVF-doxygen/html/search/functions_6.js +60 -60
- package/SVF-doxygen/html/search/functions_7.js +856 -855
- package/SVF-doxygen/html/search/functions_8.js +149 -149
- package/SVF-doxygen/html/search/functions_9.js +424 -424
- package/SVF-doxygen/html/search/functions_a.js +30 -30
- package/SVF-doxygen/html/search/functions_b.js +2 -2
- package/SVF-doxygen/html/search/functions_c.js +25 -25
- package/SVF-doxygen/html/search/functions_d.js +79 -79
- package/SVF-doxygen/html/search/functions_e.js +35 -35
- package/SVF-doxygen/html/search/functions_f.js +56 -56
- package/SVF-doxygen/html/search/namespaces_0.js +1 -1
- package/SVF-doxygen/html/search/namespaces_1.js +7 -7
- package/SVF-doxygen/html/search/related_0.js +2 -2
- package/SVF-doxygen/html/search/related_1.js +2 -2
- package/SVF-doxygen/html/search/related_2.js +3 -2
- package/SVF-doxygen/html/search/related_3.js +2 -2
- package/SVF-doxygen/html/search/related_4.js +2 -2
- package/SVF-doxygen/html/search/related_5.js +1 -1
- package/SVF-doxygen/html/search/related_6.js +2 -2
- package/SVF-doxygen/html/search/related_7.js +4 -4
- package/SVF-doxygen/html/search/related_8.js +2 -2
- package/SVF-doxygen/html/search/related_9.js +4 -4
- package/SVF-doxygen/html/search/related_a.js +19 -19
- package/SVF-doxygen/html/search/related_b.js +4 -4
- package/SVF-doxygen/html/search/related_c.js +2 -2
- package/SVF-doxygen/html/search/related_d.js +12 -12
- package/SVF-doxygen/html/search/related_e.js +2 -2
- package/SVF-doxygen/html/search/related_f.js +2 -2
- package/SVF-doxygen/html/search/typedefs_10.js +17 -16
- package/SVF-doxygen/html/search/typedefs_11.js +13 -13
- package/SVF-doxygen/html/search/typedefs_12.js +11 -11
- package/SVF-doxygen/html/search/typedefs_13.js +33 -33
- package/SVF-doxygen/html/search/typedefs_14.js +8 -8
- package/SVF-doxygen/html/search/typedefs_c.js +1 -1
- package/SVF-doxygen/html/search/variables_0.js +151 -151
- package/SVF-doxygen/html/search/variables_1.js +75 -75
- package/SVF-doxygen/html/search/variables_10.js +98 -97
- package/SVF-doxygen/html/search/variables_11.js +45 -44
- package/SVF-doxygen/html/search/variables_12.js +90 -92
- package/SVF-doxygen/html/search/variables_13.js +4 -6
- package/SVF-doxygen/html/search/variables_2.js +38 -38
- package/SVF-doxygen/html/search/variables_3.js +142 -142
- package/SVF-doxygen/html/search/variables_4.js +50 -55
- package/SVF-doxygen/html/search/variables_5.js +37 -37
- package/SVF-doxygen/html/search/variables_6.js +66 -66
- package/SVF-doxygen/html/search/variables_7.js +34 -34
- package/SVF-doxygen/html/search/variables_8.js +7 -7
- package/SVF-doxygen/html/search/variables_9.js +78 -78
- package/SVF-doxygen/html/search/variables_a.js +4 -4
- package/SVF-doxygen/html/search/variables_b.js +10 -10
- package/SVF-doxygen/html/search/variables_c.js +45 -45
- package/SVF-doxygen/html/search/variables_d.js +55 -56
- package/SVF-doxygen/html/search/variables_e.js +123 -123
- package/SVF-doxygen/html/search/variables_f.js +30 -30
- package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1SVFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/svf-ex_8cpp.html +1 -1
- package/SVF-doxygen/html/svf-ex_8cpp_source.html +1 -1
- package/package.json +1 -1
- package/svf/include/CFL/CFLSVFGBuilder.h +58 -0
- package/svf/include/CFL/CFLVF.h +2 -2
- package/svf/include/Graphs/SVFG.h +1 -0
- package/svf/include/SABER/ProgSlice.h +11 -0
- package/svf/include/SABER/SaberCondAllocator.h +8 -0
- package/svf/include/SABER/SaberSVFGBuilder.h +12 -2
- package/svf/include/Util/Options.h +1 -14
- package/svf/lib/CFL/CFLSVFGBuilder.cpp +100 -0
- package/svf/lib/SABER/ProgSlice.cpp +48 -1
- package/svf/lib/SABER/SaberSVFGBuilder.cpp +5 -0
- package/svf/lib/SABER/SrcSnkDDA.cpp +1 -0
- package/svf/lib/Util/Options.cpp +6 -64
- package/svf/lib/WPA/Andersen.cpp +5 -2
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
//===- CFLSVFGBuilder.h -- Building SVFG for CFL--------------------------//
|
|
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 Xiao on 30/12/23.
|
|
25
|
+
//
|
|
26
|
+
|
|
27
|
+
#ifndef SVF_CFLSVFGBUILDER_H
|
|
28
|
+
#define SVF_CFLSVFGBUILDER_H
|
|
29
|
+
|
|
30
|
+
#include "SABER/SaberSVFGBuilder.h"
|
|
31
|
+
|
|
32
|
+
namespace SVF
|
|
33
|
+
{
|
|
34
|
+
|
|
35
|
+
class CFLSVFGBuilder: public SaberSVFGBuilder
|
|
36
|
+
{
|
|
37
|
+
public:
|
|
38
|
+
typedef Set<const SVFGNode*> SVFGNodeSet;
|
|
39
|
+
typedef Map<NodeID, PointsTo> NodeToPTSSMap;
|
|
40
|
+
typedef FIFOWorkList<NodeID> WorkList;
|
|
41
|
+
|
|
42
|
+
/// Constructor
|
|
43
|
+
CFLSVFGBuilder() = default;
|
|
44
|
+
|
|
45
|
+
/// Destructor
|
|
46
|
+
virtual ~CFLSVFGBuilder() = default;
|
|
47
|
+
|
|
48
|
+
protected:
|
|
49
|
+
/// Re-write create SVFG method
|
|
50
|
+
virtual void buildSVFG();
|
|
51
|
+
|
|
52
|
+
/// Remove Incoming Edge for strong-update (SU) store instruction
|
|
53
|
+
/// Because the SU node does not receive indirect value
|
|
54
|
+
virtual void rmIncomingEdgeForSUStore(BVDataPTAImpl* pta);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
#endif //SVF_CFLSVFGBUILDER_H
|
package/svf/include/CFL/CFLVF.h
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
|
|
34
34
|
#include "CFL/CFLBase.h"
|
|
35
35
|
#include "CFL/CFLStat.h"
|
|
36
|
-
#include "
|
|
36
|
+
#include "CFL/CFLSVFGBuilder.h"
|
|
37
37
|
#include "WPA/Andersen.h"
|
|
38
38
|
|
|
39
39
|
namespace SVF
|
|
@@ -59,7 +59,7 @@ public:
|
|
|
59
59
|
void buildCFLGraph();
|
|
60
60
|
|
|
61
61
|
private:
|
|
62
|
-
|
|
62
|
+
CFLSVFGBuilder memSSA;
|
|
63
63
|
SVFG* svfg;
|
|
64
64
|
};
|
|
65
65
|
|
|
@@ -58,6 +58,9 @@ public:
|
|
|
58
58
|
typedef FIFOWorkList<const SVFGNode*> VFWorkList; ///< worklist for value-flow guard computation
|
|
59
59
|
typedef FIFOWorkList<const SVFBasicBlock*> CFWorkList; ///< worklist for control-flow guard computation
|
|
60
60
|
|
|
61
|
+
typedef SaberCondAllocator::SVFGNodeToSVFGNodeSetMap SVFGNodeToSVFGNodeSetMap;
|
|
62
|
+
|
|
63
|
+
|
|
61
64
|
/// Constructor
|
|
62
65
|
ProgSlice(const SVFGNode* src, SaberCondAllocator* pa, const SVFG* graph):
|
|
63
66
|
root(src), partialReachable(false), fullReachable(false), reachGlob(false),
|
|
@@ -296,6 +299,14 @@ protected:
|
|
|
296
299
|
finalCond = cond;
|
|
297
300
|
}
|
|
298
301
|
|
|
302
|
+
/// Compute invalid branch condition stemming from removed strong update value-flow edges
|
|
303
|
+
Condition computeInvalidCondFromRemovedSUVFEdge(const SVFGNode * cur);
|
|
304
|
+
|
|
305
|
+
const SVFGNodeToSVFGNodeSetMap& getRemovedSUVFEdges() const
|
|
306
|
+
{
|
|
307
|
+
return pathAllocator->getRemovedSUVFEdges();
|
|
308
|
+
}
|
|
309
|
+
|
|
299
310
|
private:
|
|
300
311
|
SVFGNodeSet forwardslice; ///< the forward slice
|
|
301
312
|
SVFGNodeSet backwardslice; ///< the backward slice
|
|
@@ -56,6 +56,7 @@ public:
|
|
|
56
56
|
typedef Map<const SVFFunction*, BasicBlockSet> FunToExitBBsMap; ///< map a function to all its basic blocks calling program exit
|
|
57
57
|
typedef Map<const SVFBasicBlock*, Condition> BBToCondMap; ///< map a basic block to its condition during control-flow guard computation
|
|
58
58
|
typedef FIFOWorkList<const SVFBasicBlock*> CFWorkList; ///< worklist for control-flow guard computation
|
|
59
|
+
typedef Map<const SVFGNode*, Set<const SVFGNode*>> SVFGNodeToSVFGNodeSetMap;
|
|
59
60
|
|
|
60
61
|
|
|
61
62
|
/// Constructor
|
|
@@ -239,6 +240,12 @@ public:
|
|
|
239
240
|
setCondInst(condition, inst);
|
|
240
241
|
negConds.set(condition.id());
|
|
241
242
|
}
|
|
243
|
+
|
|
244
|
+
SVFGNodeToSVFGNodeSetMap & getRemovedSUVFEdges()
|
|
245
|
+
{
|
|
246
|
+
return removedSUVFEdges;
|
|
247
|
+
}
|
|
248
|
+
|
|
242
249
|
private:
|
|
243
250
|
|
|
244
251
|
/// Allocate path condition for every basic block
|
|
@@ -299,6 +306,7 @@ private:
|
|
|
299
306
|
NodeBS negConds; ///bit vector for distinguish neg
|
|
300
307
|
std::vector<Condition> conditionVec; /// vector storing z3expression
|
|
301
308
|
static u32_t totalCondNum; /// a counter for fresh condition
|
|
309
|
+
SVFGNodeToSVFGNodeSetMap removedSUVFEdges;
|
|
302
310
|
|
|
303
311
|
protected:
|
|
304
312
|
BBCondMap bbConds; ///< map basic block to its successors/predecessors branch conditions
|
|
@@ -34,9 +34,12 @@
|
|
|
34
34
|
#include "SVFIR/SVFValue.h"
|
|
35
35
|
#include "Util/WorkList.h"
|
|
36
36
|
|
|
37
|
+
|
|
37
38
|
namespace SVF
|
|
38
39
|
{
|
|
39
40
|
|
|
41
|
+
class SaberCondAllocator;
|
|
42
|
+
|
|
40
43
|
class SaberSVFGBuilder : public SVFGBuilder
|
|
41
44
|
{
|
|
42
45
|
|
|
@@ -62,6 +65,11 @@ public:
|
|
|
62
65
|
svfg->addActualParmVFGNode(pagNode, cs);
|
|
63
66
|
}
|
|
64
67
|
|
|
68
|
+
void setSaberCondAllocator(SaberCondAllocator* allocator)
|
|
69
|
+
{
|
|
70
|
+
saberCondAllocator = allocator;
|
|
71
|
+
}
|
|
72
|
+
|
|
65
73
|
protected:
|
|
66
74
|
/// Re-write create SVFG method
|
|
67
75
|
virtual void buildSVFG();
|
|
@@ -69,7 +77,7 @@ protected:
|
|
|
69
77
|
/// Return TRUE if this is a strong update STORE statement.
|
|
70
78
|
bool isStrongUpdate(const SVFGNode* node, NodeID& singleton, BVDataPTAImpl* pta);
|
|
71
79
|
|
|
72
|
-
|
|
80
|
+
protected:
|
|
73
81
|
/// Remove direct value-flow edge to a dereference point for Saber source-sink memory error detection
|
|
74
82
|
/// for example, given two statements: p = alloc; q = *p, the direct SVFG edge between them is deleted
|
|
75
83
|
/// Because those edges only stand for values used at the dereference points but they can not pass the value to other definitions
|
|
@@ -77,7 +85,7 @@ private:
|
|
|
77
85
|
|
|
78
86
|
/// Remove Incoming Edge for strong-update (SU) store instruction
|
|
79
87
|
/// Because the SU node does not receive indirect value
|
|
80
|
-
void rmIncomingEdgeForSUStore(BVDataPTAImpl* pta);
|
|
88
|
+
virtual void rmIncomingEdgeForSUStore(BVDataPTAImpl* pta);
|
|
81
89
|
|
|
82
90
|
/// Add actual parameter SVFGNode for 1st argument of a deallocation like external function
|
|
83
91
|
/// In order to path sensitive leak detection
|
|
@@ -97,6 +105,8 @@ private:
|
|
|
97
105
|
PointsTo globs;
|
|
98
106
|
/// Store all global SVFG nodes
|
|
99
107
|
SVFGNodeSet globSVFGNodes;
|
|
108
|
+
|
|
109
|
+
SaberCondAllocator* saberCondAllocator;
|
|
100
110
|
};
|
|
101
111
|
|
|
102
112
|
} // End namespace SVF
|
|
@@ -80,17 +80,6 @@ public:
|
|
|
80
80
|
// ContextDDA.cpp
|
|
81
81
|
static const Option<u32_t> CxtBudget;
|
|
82
82
|
|
|
83
|
-
// DDAClient.cpp
|
|
84
|
-
static const Option<bool> SingleLoad;
|
|
85
|
-
static const Option<bool> DumpFree;
|
|
86
|
-
static const Option<bool> DumpUninitVar;
|
|
87
|
-
static const Option<bool> DumpUninitPtr;
|
|
88
|
-
static const Option<bool> DumpSUPts;
|
|
89
|
-
static const Option<bool> DumpSUStore;
|
|
90
|
-
static const Option<bool> MallocOnly;
|
|
91
|
-
static const Option<bool> TaintUninitHeap;
|
|
92
|
-
static const Option<bool> TaintUninitStack;
|
|
93
|
-
|
|
94
83
|
// DDAPass.cpp
|
|
95
84
|
static const Option<u32_t> MaxPathLen;
|
|
96
85
|
static const Option<u32_t> MaxContextLen;
|
|
@@ -121,14 +110,12 @@ public:
|
|
|
121
110
|
// Sparse value-flow graph (VFG.cpp)
|
|
122
111
|
static const Option<bool> DumpVFG;
|
|
123
112
|
|
|
124
|
-
// Location set for modeling abstract memory object (AccessPath.cpp)
|
|
125
|
-
static const Option<bool> SingleStride;
|
|
126
|
-
|
|
127
113
|
// Base class of pointer analyses (PointerAnalysis.cpp)
|
|
128
114
|
static const Option<bool> TypePrint;
|
|
129
115
|
static const Option<bool> FuncPointerPrint;
|
|
130
116
|
static const Option<bool> PTSPrint;
|
|
131
117
|
static const Option<bool> PTSAllPrint;
|
|
118
|
+
static const Option<bool> PrintFieldWithBasePrefix;
|
|
132
119
|
static const Option<bool> PStat;
|
|
133
120
|
static const Option<u32_t> StatBudget;
|
|
134
121
|
static const Option<bool> PAGDotGraph;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
//===- CFLSVFGBuilder.cpp -- Building SVFG for CFL--------------------------//
|
|
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 Xiao on 30/12/23.
|
|
25
|
+
//
|
|
26
|
+
#include "MemoryModel/PointerAnalysisImpl.h"
|
|
27
|
+
#include "Graphs/SVFG.h"
|
|
28
|
+
#include "Util/Options.h"
|
|
29
|
+
#include "CFL/CFLSVFGBuilder.h"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
using namespace SVF;
|
|
33
|
+
using namespace SVFUtil;
|
|
34
|
+
|
|
35
|
+
void CFLSVFGBuilder::buildSVFG()
|
|
36
|
+
{
|
|
37
|
+
|
|
38
|
+
MemSSA* mssa = svfg->getMSSA();
|
|
39
|
+
svfg->buildSVFG();
|
|
40
|
+
BVDataPTAImpl* pta = mssa->getPTA();
|
|
41
|
+
DBOUT(DGENERAL, outs() << pasMsg("\tCollect Global Variables\n"));
|
|
42
|
+
|
|
43
|
+
collectGlobals(pta);
|
|
44
|
+
|
|
45
|
+
DBOUT(DGENERAL, outs() << pasMsg("\tRemove Dereference Direct SVFG Edge\n"));
|
|
46
|
+
|
|
47
|
+
rmDerefDirSVFGEdges(pta);
|
|
48
|
+
|
|
49
|
+
rmIncomingEdgeForSUStore(pta);
|
|
50
|
+
|
|
51
|
+
DBOUT(DGENERAL, outs() << pasMsg("\tAdd Sink SVFG Nodes\n"));
|
|
52
|
+
|
|
53
|
+
AddExtActualParmSVFGNodes(pta->getPTACallGraph());
|
|
54
|
+
|
|
55
|
+
if(pta->printStat())
|
|
56
|
+
svfg->performStat();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
/*!
|
|
61
|
+
* Remove Incoming Edge for strong-update (SU) store instruction
|
|
62
|
+
* Because the SU node does not receive indirect value
|
|
63
|
+
*
|
|
64
|
+
* e.g.,
|
|
65
|
+
* L1: *p = O; (singleton)
|
|
66
|
+
* L2: *p = _; (SU here)
|
|
67
|
+
* We should remove the indirect value flow L1 -> L2
|
|
68
|
+
* Because the points-to set of O from L1 does not pass to that after L2
|
|
69
|
+
*/
|
|
70
|
+
void CFLSVFGBuilder::rmIncomingEdgeForSUStore(BVDataPTAImpl* pta)
|
|
71
|
+
{
|
|
72
|
+
|
|
73
|
+
for(SVFG::iterator it = svfg->begin(), eit = svfg->end(); it!=eit; ++it)
|
|
74
|
+
{
|
|
75
|
+
const SVFGNode* node = it->second;
|
|
76
|
+
|
|
77
|
+
if(const StoreSVFGNode* stmtNode = SVFUtil::dyn_cast<StoreSVFGNode>(node))
|
|
78
|
+
{
|
|
79
|
+
if(SVFUtil::isa<StoreStmt>(stmtNode->getPAGEdge()))
|
|
80
|
+
{
|
|
81
|
+
NodeID singleton;
|
|
82
|
+
if(isStrongUpdate(node, singleton, pta))
|
|
83
|
+
{
|
|
84
|
+
Set<SVFGEdge*> toRemove;
|
|
85
|
+
for (SVFGNode::const_iterator it2 = node->InEdgeBegin(), eit2 = node->InEdgeEnd(); it2 != eit2; ++it2)
|
|
86
|
+
{
|
|
87
|
+
if ((*it2)->isIndirectVFGEdge())
|
|
88
|
+
{
|
|
89
|
+
toRemove.insert(*it2);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
for (SVFGEdge* edge: toRemove)
|
|
93
|
+
{
|
|
94
|
+
svfg->removeSVFGEdge(edge);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -52,6 +52,8 @@ bool ProgSlice::AllPathReachableSolve()
|
|
|
52
52
|
{
|
|
53
53
|
const SVFGNode* node = worklist.pop();
|
|
54
54
|
setCurSVFGNode(node);
|
|
55
|
+
|
|
56
|
+
Condition invalidCond = computeInvalidCondFromRemovedSUVFEdge(node);
|
|
55
57
|
Condition cond = getVFCond(node);
|
|
56
58
|
for(SVFGNode::const_iterator it = node->OutEdgeBegin(), eit = node->OutEdgeEnd(); it!=eit; ++it)
|
|
57
59
|
{
|
|
@@ -75,7 +77,7 @@ bool ProgSlice::AllPathReachableSolve()
|
|
|
75
77
|
}
|
|
76
78
|
else
|
|
77
79
|
vfCond = ComputeIntraVFGGuard(nodeBB,succBB);
|
|
78
|
-
|
|
80
|
+
vfCond = condAnd(vfCond, condNeg(invalidCond));
|
|
79
81
|
Condition succPathCond = condAnd(cond, vfCond);
|
|
80
82
|
if(setVFCond(succ, condOr(getVFCond(succ), succPathCond) ))
|
|
81
83
|
worklist.push(succ);
|
|
@@ -89,6 +91,51 @@ bool ProgSlice::AllPathReachableSolve()
|
|
|
89
91
|
return isSatisfiableForAll();
|
|
90
92
|
}
|
|
91
93
|
|
|
94
|
+
/*!
|
|
95
|
+
* Compute invalid branch condition stemming from removed strong update value-flow edges
|
|
96
|
+
*
|
|
97
|
+
* Fix issue: https://github.com/SVF-tools/SVF/issues/1306
|
|
98
|
+
* Line 11->13 is removed due to a strong update at Line 13, which means Line 11 is unreachable to Line 13 on the value flow graph.
|
|
99
|
+
* However on the control flow graph they are still considered as reachable,
|
|
100
|
+
* making the vf guard on Line 11 -> Line 15 a true condition (should consider the infeasible branch Line 11 -> Line 13)
|
|
101
|
+
* Therefore, we collect this infeasible branch condition (condition on Line 11 -> Line 13, `a == b`) as an invalid condition (invalidCond),
|
|
102
|
+
* and add the negation of invalidCond when computing value flow guard starting from the source of the SU.
|
|
103
|
+
* In this example, we add `a != b` on Line 11 -> Line 15.
|
|
104
|
+
*
|
|
105
|
+
* @param cur current SVFG node
|
|
106
|
+
* @return invalid branch condition
|
|
107
|
+
*/
|
|
108
|
+
ProgSlice::Condition ProgSlice::computeInvalidCondFromRemovedSUVFEdge(const SVFGNode * cur)
|
|
109
|
+
{
|
|
110
|
+
Set<const SVFBasicBlock*> validOutBBs; // the BBs of valid successors
|
|
111
|
+
for(SVFGNode::const_iterator it = cur->OutEdgeBegin(), eit = cur->OutEdgeEnd(); it!=eit; ++it)
|
|
112
|
+
{
|
|
113
|
+
const SVFGEdge* edge = (*it);
|
|
114
|
+
const SVFGNode* succ = edge->getDstNode();
|
|
115
|
+
if(inBackwardSlice(succ))
|
|
116
|
+
{
|
|
117
|
+
validOutBBs.insert(getSVFGNodeBB(succ));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
Condition invalidCond = getFalseCond();
|
|
121
|
+
auto suVFEdgesIt = getRemovedSUVFEdges().find(cur);
|
|
122
|
+
if (suVFEdgesIt != getRemovedSUVFEdges().end())
|
|
123
|
+
{
|
|
124
|
+
for (const auto &succ: suVFEdgesIt->second)
|
|
125
|
+
{
|
|
126
|
+
if (!validOutBBs.count(getSVFGNodeBB(succ)))
|
|
127
|
+
{
|
|
128
|
+
// removed vfg node does not reside in the BBs of valid successors
|
|
129
|
+
const SVFBasicBlock *nodeBB = getSVFGNodeBB(cur);
|
|
130
|
+
const SVFBasicBlock *succBB = getSVFGNodeBB(succ);
|
|
131
|
+
clearCFCond();
|
|
132
|
+
invalidCond = condOr(invalidCond, ComputeIntraVFGGuard(nodeBB, succBB));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return invalidCond;
|
|
137
|
+
}
|
|
138
|
+
|
|
92
139
|
/*!
|
|
93
140
|
* Solve by computing disjunction of conditions from all sinks (e.g., memory leak)
|
|
94
141
|
*/
|
|
@@ -32,6 +32,8 @@
|
|
|
32
32
|
#include "MemoryModel/PointerAnalysisImpl.h"
|
|
33
33
|
#include "Graphs/SVFG.h"
|
|
34
34
|
#include "Util/Options.h"
|
|
35
|
+
#include "SABER/SaberCondAllocator.h"
|
|
36
|
+
|
|
35
37
|
|
|
36
38
|
using namespace SVF;
|
|
37
39
|
using namespace SVFUtil;
|
|
@@ -50,6 +52,7 @@ void SaberSVFGBuilder::buildSVFG()
|
|
|
50
52
|
|
|
51
53
|
rmDerefDirSVFGEdges(pta);
|
|
52
54
|
|
|
55
|
+
assert(saberCondAllocator && "saber condition allocator not set yet!");
|
|
53
56
|
rmIncomingEdgeForSUStore(pta);
|
|
54
57
|
|
|
55
58
|
DBOUT(DGENERAL, outs() << pasMsg("\tAdd Sink SVFG Nodes\n"));
|
|
@@ -276,6 +279,8 @@ void SaberSVFGBuilder::rmIncomingEdgeForSUStore(BVDataPTAImpl* pta)
|
|
|
276
279
|
}
|
|
277
280
|
for (SVFGEdge* edge: toRemove)
|
|
278
281
|
{
|
|
282
|
+
if (isa<StoreSVFGNode>(edge->getSrcNode()))
|
|
283
|
+
saberCondAllocator->getRemovedSUVFEdges()[edge->getSrcNode()].insert(edge->getDstNode());
|
|
279
284
|
svfg->removeSVFGEdge(edge);
|
|
280
285
|
}
|
|
281
286
|
}
|
|
@@ -43,6 +43,7 @@ void SrcSnkDDA::initialize(SVFModule* module)
|
|
|
43
43
|
SVFIR* pag = PAG::getPAG();
|
|
44
44
|
|
|
45
45
|
AndersenWaveDiff* ander = AndersenWaveDiff::createAndersenWaveDiff(pag);
|
|
46
|
+
memSSA.setSaberCondAllocator(getSaberCondAllocator());
|
|
46
47
|
if(Options::SABERFULLSVFG())
|
|
47
48
|
svfg = memSSA.buildFullSVFG(ander);
|
|
48
49
|
else
|
package/svf/lib/Util/Options.cpp
CHANGED
|
@@ -75,62 +75,6 @@ const Option<u32_t> Options::CxtBudget(
|
|
|
75
75
|
10000
|
|
76
76
|
);
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
// DDAClient.cpp
|
|
80
|
-
const Option<bool> Options::SingleLoad(
|
|
81
|
-
"single-load",
|
|
82
|
-
"Count load pointer with same source operand as one query",
|
|
83
|
-
true
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
const Option<bool> Options::DumpFree(
|
|
87
|
-
"dump-free",
|
|
88
|
-
"Dump use after free locations",
|
|
89
|
-
false
|
|
90
|
-
);
|
|
91
|
-
|
|
92
|
-
const Option<bool> Options::DumpUninitVar(
|
|
93
|
-
"dump-uninit-var",
|
|
94
|
-
"Dump uninitialised variables",
|
|
95
|
-
false
|
|
96
|
-
);
|
|
97
|
-
|
|
98
|
-
const Option<bool> Options::DumpUninitPtr(
|
|
99
|
-
"dump-uninit-ptr",
|
|
100
|
-
"Dump uninitialised pointers",
|
|
101
|
-
false
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
const Option<bool> Options::DumpSUPts(
|
|
105
|
-
"dump-su-pts",
|
|
106
|
-
"Dump strong updates store",
|
|
107
|
-
false
|
|
108
|
-
);
|
|
109
|
-
|
|
110
|
-
const Option<bool> Options::DumpSUStore(
|
|
111
|
-
"dump-su-store",
|
|
112
|
-
"Dump strong updates store",
|
|
113
|
-
false
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
const Option<bool> Options::MallocOnly(
|
|
117
|
-
"malloc-only",
|
|
118
|
-
"Only add tainted objects for malloc",
|
|
119
|
-
true
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
const Option<bool> Options::TaintUninitHeap(
|
|
123
|
-
"uninit-heap",
|
|
124
|
-
"detect uninitialized heap variables",
|
|
125
|
-
true
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
const Option<bool> Options::TaintUninitStack(
|
|
129
|
-
"uninit-stack",
|
|
130
|
-
"detect uninitialized stack variables",
|
|
131
|
-
true
|
|
132
|
-
);
|
|
133
|
-
|
|
134
78
|
// DDAPass.cpp
|
|
135
79
|
const Option<u32_t> Options::MaxPathLen(
|
|
136
80
|
"max-path",
|
|
@@ -254,14 +198,6 @@ const Option<bool> Options::DumpVFG(
|
|
|
254
198
|
);
|
|
255
199
|
|
|
256
200
|
|
|
257
|
-
// Location set for modeling abstract memory object (AccessPath.cpp)
|
|
258
|
-
const Option<bool> Options::SingleStride(
|
|
259
|
-
"stride-only",
|
|
260
|
-
"Only use single stride in LocMemoryModel",
|
|
261
|
-
false
|
|
262
|
-
);
|
|
263
|
-
|
|
264
|
-
|
|
265
201
|
// Base class of pointer analyses (PointerAnalysis.cpp)
|
|
266
202
|
const Option<bool> Options::TypePrint(
|
|
267
203
|
"print-type",
|
|
@@ -281,6 +217,12 @@ const Option<bool> Options::PTSPrint(
|
|
|
281
217
|
false
|
|
282
218
|
);
|
|
283
219
|
|
|
220
|
+
const Option<bool> Options::PrintFieldWithBasePrefix(
|
|
221
|
+
"print-field",
|
|
222
|
+
"Print field object with base object id as the prefix",
|
|
223
|
+
false
|
|
224
|
+
);
|
|
225
|
+
|
|
284
226
|
const Option<bool> Options::PTSAllPrint(
|
|
285
227
|
"print-all-pts",
|
|
286
228
|
"Print all points-to set of both top-level and address-taken variables",
|
package/svf/lib/WPA/Andersen.cpp
CHANGED
|
@@ -911,8 +911,11 @@ void Andersen::dumpTopLevelPtsTo()
|
|
|
911
911
|
}
|
|
912
912
|
for (multiset<u32_t>::const_iterator it = line.begin(); it != line.end(); ++it)
|
|
913
913
|
{
|
|
914
|
-
if
|
|
915
|
-
|
|
914
|
+
if(Options::PrintFieldWithBasePrefix())
|
|
915
|
+
if (auto gepNode = SVFUtil::dyn_cast<GepObjVar>(pag->getGNode(*it)))
|
|
916
|
+
outs() << gepNode->getBaseNode() << "_" << gepNode->getConstantFieldIdx() << " ";
|
|
917
|
+
else
|
|
918
|
+
outs() << *it << " ";
|
|
916
919
|
else
|
|
917
920
|
outs() << *it << " ";
|
|
918
921
|
}
|