svf-tools 1.0.786 → 1.0.788
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/CDGBuilder_8cpp_source.html +128 -122
- package/SVF-doxygen/html/CDGBuilder_8h_source.html +5 -5
- package/SVF-doxygen/html/CFBasicBlockGBuilder_8cpp.html +92 -0
- package/SVF-doxygen/html/CFBasicBlockGBuilder_8cpp_source.html +291 -0
- package/SVF-doxygen/html/CFBasicBlockGBuilder_8h.html +98 -0
- package/SVF-doxygen/html/CFBasicBlockGBuilder_8h_source.html +154 -0
- package/SVF-doxygen/html/CFBasicBlockG_8cpp_source.html +49 -184
- package/SVF-doxygen/html/CFBasicBlockG_8h.html +0 -2
- package/SVF-doxygen/html/CFBasicBlockG_8h_source.html +509 -506
- package/SVF-doxygen/html/CHG_8cpp.html +2 -2
- package/SVF-doxygen/html/CHG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/MemSSA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SVFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SVFValue_8cpp_source.html +144 -141
- package/SVF-doxygen/html/SVFValue_8h_source.html +9 -9
- package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/VFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/WTO_8h_source.html +424 -372
- package/SVF-doxygen/html/classSVF_1_1CDGBuilder.html +119 -113
- package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGBuilder-members.html +4 -1
- package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGBuilder.html +302 -124
- package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO-members.html +48 -47
- package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO.html +306 -236
- package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTOCycle.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTONode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO_1_1TailBuilder-members.html +15 -14
- package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO_1_1TailBuilder.html +90 -44
- package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO_1_1WTOCycleDepthBuilder.html +26 -26
- package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGraph-members.html +32 -36
- package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGraph.html +121 -254
- package/SVF-doxygen/html/classSVF_1_1CFBasicBlockNode-members.html +46 -47
- package/SVF-doxygen/html/classSVF_1_1CFBasicBlockNode.html +185 -225
- package/SVF-doxygen/html/classSVF_1_1CHGraph.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1MemSSA.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1SVFBasicBlock.html +63 -63
- package/SVF-doxygen/html/classSVF_1_1SVFFunction.html +28 -28
- package/SVF-doxygen/html/classSVF_1_1SVFG.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SVFInstruction.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1SVFLoopAndDomInfo.html +25 -22
- package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1VFG.html +1 -1
- package/SVF-doxygen/html/dir_445b24f35a8ddd2effd3d23ee1278e0a.html +2 -0
- package/SVF-doxygen/html/dir_fee120689dee99ef16f8bfcaa7a76083.html +2 -0
- package/SVF-doxygen/html/files.html +35 -33
- package/SVF-doxygen/html/functions.html +3 -4
- package/SVF-doxygen/html/functions_a.html +19 -10
- package/SVF-doxygen/html/functions_b.html +6 -6
- package/SVF-doxygen/html/functions_c.html +29 -29
- package/SVF-doxygen/html/functions_func.html +15 -6
- package/SVF-doxygen/html/functions_func_b.html +1 -1
- package/SVF-doxygen/html/functions_func_c.html +21 -21
- package/SVF-doxygen/html/functions_func_g.html +13 -14
- package/SVF-doxygen/html/functions_func_h.html +5 -8
- package/SVF-doxygen/html/functions_func_i.html +10 -7
- package/SVF-doxygen/html/functions_func_s.html +22 -25
- package/SVF-doxygen/html/functions_func_t.html +1 -1
- package/SVF-doxygen/html/functions_g.html +10 -11
- package/SVF-doxygen/html/functions_h.html +3 -6
- package/SVF-doxygen/html/functions_i.html +10 -7
- package/SVF-doxygen/html/functions_l.html +3 -3
- package/SVF-doxygen/html/functions_n.html +4 -4
- package/SVF-doxygen/html/functions_o.html +19 -19
- package/SVF-doxygen/html/functions_p.html +21 -17
- package/SVF-doxygen/html/functions_r.html +1 -1
- package/SVF-doxygen/html/functions_s.html +14 -17
- package/SVF-doxygen/html/functions_t.html +4 -4
- package/SVF-doxygen/html/functions_v.html +3 -3
- package/SVF-doxygen/html/functions_vars.html +3 -4
- package/SVF-doxygen/html/functions_w.html +7 -7
- package/SVF-doxygen/html/namespaceSVF.html +1 -1
- package/SVF-doxygen/html/namespaceSVF_1_1SVFUtil.html +2 -2
- package/SVF-doxygen/html/search/all_0.js +123 -124
- package/SVF-doxygen/html/search/all_1.js +479 -476
- package/SVF-doxygen/html/search/all_10.js +324 -324
- package/SVF-doxygen/html/search/all_11.js +224 -224
- package/SVF-doxygen/html/search/all_12.js +541 -542
- package/SVF-doxygen/html/search/all_13.js +190 -190
- package/SVF-doxygen/html/search/all_14.js +67 -67
- package/SVF-doxygen/html/search/all_15.js +170 -170
- 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 +172 -172
- package/SVF-doxygen/html/search/all_2.js +167 -167
- package/SVF-doxygen/html/search/all_3.js +642 -640
- package/SVF-doxygen/html/search/all_4.js +233 -233
- package/SVF-doxygen/html/search/all_5.js +121 -121
- package/SVF-doxygen/html/search/all_6.js +225 -225
- package/SVF-doxygen/html/search/all_7.js +1038 -1038
- package/SVF-doxygen/html/search/all_8.js +194 -195
- package/SVF-doxygen/html/search/all_9.js +608 -607
- package/SVF-doxygen/html/search/all_a.js +46 -46
- package/SVF-doxygen/html/search/all_b.js +26 -26
- package/SVF-doxygen/html/search/all_c.js +116 -116
- package/SVF-doxygen/html/search/all_d.js +196 -196
- 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_0.js +26 -26
- package/SVF-doxygen/html/search/classes_1.js +9 -9
- 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 +80 -80
- 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 +33 -33
- 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 +21 -21
- 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 +55 -53
- 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 +12 -12
- package/SVF-doxygen/html/search/functions_1.js +359 -356
- package/SVF-doxygen/html/search/functions_10.js +140 -140
- package/SVF-doxygen/html/search/functions_11.js +138 -138
- package/SVF-doxygen/html/search/functions_12.js +276 -277
- package/SVF-doxygen/html/search/functions_13.js +58 -58
- 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 +172 -172
- package/SVF-doxygen/html/search/functions_2.js +86 -86
- package/SVF-doxygen/html/search/functions_3.js +257 -257
- package/SVF-doxygen/html/search/functions_4.js +75 -75
- package/SVF-doxygen/html/search/functions_5.js +53 -53
- package/SVF-doxygen/html/search/functions_6.js +59 -59
- package/SVF-doxygen/html/search/functions_7.js +849 -849
- package/SVF-doxygen/html/search/functions_8.js +146 -147
- package/SVF-doxygen/html/search/functions_9.js +426 -425
- 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 +26 -26
- package/SVF-doxygen/html/search/functions_d.js +77 -77
- 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 +2 -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 +1 -1
- package/SVF-doxygen/html/search/related_d.js +11 -11
- 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_0.js +18 -18
- package/SVF-doxygen/html/search/typedefs_1.js +26 -26
- package/SVF-doxygen/html/search/typedefs_10.js +61 -61
- 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 +35 -35
- package/SVF-doxygen/html/search/typedefs_14.js +8 -8
- package/SVF-doxygen/html/search/typedefs_2.js +129 -129
- package/SVF-doxygen/html/search/typedefs_3.js +39 -39
- package/SVF-doxygen/html/search/typedefs_4.js +17 -17
- package/SVF-doxygen/html/search/typedefs_5.js +41 -41
- package/SVF-doxygen/html/search/typedefs_6.js +55 -55
- package/SVF-doxygen/html/search/typedefs_7.js +42 -42
- package/SVF-doxygen/html/search/typedefs_8.js +1 -1
- package/SVF-doxygen/html/search/typedefs_9.js +6 -6
- package/SVF-doxygen/html/search/typedefs_a.js +29 -29
- package/SVF-doxygen/html/search/typedefs_b.js +29 -29
- package/SVF-doxygen/html/search/typedefs_c.js +41 -41
- package/SVF-doxygen/html/search/typedefs_d.js +15 -15
- package/SVF-doxygen/html/search/typedefs_e.js +52 -52
- package/SVF-doxygen/html/search/typedefs_f.js +14 -14
- package/SVF-doxygen/html/search/variables_0.js +151 -152
- package/SVF-doxygen/html/search/variables_1.js +75 -75
- package/SVF-doxygen/html/search/variables_10.js +97 -97
- package/SVF-doxygen/html/search/variables_11.js +46 -46
- package/SVF-doxygen/html/search/variables_12.js +92 -92
- package/SVF-doxygen/html/search/variables_13.js +75 -75
- package/SVF-doxygen/html/search/variables_14.js +14 -14
- package/SVF-doxygen/html/search/variables_15.js +48 -48
- package/SVF-doxygen/html/search/variables_16.js +9 -9
- package/SVF-doxygen/html/search/variables_17.js +1 -1
- package/SVF-doxygen/html/search/variables_18.js +2 -2
- package/SVF-doxygen/html/search/variables_2.js +37 -37
- package/SVF-doxygen/html/search/variables_3.js +142 -142
- package/SVF-doxygen/html/search/variables_4.js +55 -55
- package/SVF-doxygen/html/search/variables_5.js +39 -39
- package/SVF-doxygen/html/search/variables_6.js +66 -66
- package/SVF-doxygen/html/search/variables_7.js +33 -33
- package/SVF-doxygen/html/search/variables_8.js +7 -7
- package/SVF-doxygen/html/search/variables_9.js +77 -77
- 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 +56 -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_01SVF_1_1CFBasicBlockGraph_01_5_01_4.html +93 -40
- package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01Inverse_3_01SVF_1_1CFBasicBlockNode_01_5_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1CFBasicBlockGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1CFBasicBlockNode_01_5_01_4.html +1 -1
- package/package.json +1 -1
- package/svf/include/AbstractExecution/WTO.h +56 -10
- package/svf/include/Graphs/CFBasicBlockG.h +62 -50
- package/svf/include/Util/CFBasicBlockGBuilder.h +59 -0
- package/svf/lib/Graphs/CFBasicBlockG.cpp +0 -111
- package/svf/lib/SVFIR/SVFValue.cpp +2 -0
- package/svf/lib/Util/CDGBuilder.cpp +5 -0
- package/svf/lib/Util/CFBasicBlockGBuilder.cpp +183 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
//===- CFBasicBlockGBuilder.h ----------------------------------------------------------------//
|
|
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
|
+
* CFBasicBlockGBuilder.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: 17 Oct. 2023
|
|
27
|
+
* Author: Xiao, Jiawei
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#include "Graphs/CFBasicBlockG.h"
|
|
31
|
+
|
|
32
|
+
namespace SVF
|
|
33
|
+
{
|
|
34
|
+
|
|
35
|
+
class CFBasicBlockGBuilder
|
|
36
|
+
{
|
|
37
|
+
|
|
38
|
+
private:
|
|
39
|
+
CFBasicBlockGraph* _CFBasicBlockG;
|
|
40
|
+
|
|
41
|
+
public:
|
|
42
|
+
CFBasicBlockGBuilder() : _CFBasicBlockG() {}
|
|
43
|
+
|
|
44
|
+
virtual void build(ICFG* icfg);
|
|
45
|
+
|
|
46
|
+
inline CFBasicBlockGraph* getCFBasicBlockGraph()
|
|
47
|
+
{
|
|
48
|
+
return _CFBasicBlockG;
|
|
49
|
+
}
|
|
50
|
+
private:
|
|
51
|
+
void initCFBasicBlockGNodes(ICFG *icfg, Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes);
|
|
52
|
+
|
|
53
|
+
void addInterBBEdge(ICFG *icfg, Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes);
|
|
54
|
+
|
|
55
|
+
void addIntraBBEdge(ICFG *icfg, Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes);
|
|
56
|
+
|
|
57
|
+
void addInterProceduralEdge(ICFG *icfg, Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes);
|
|
58
|
+
};
|
|
59
|
+
}
|
|
@@ -32,21 +32,6 @@
|
|
|
32
32
|
|
|
33
33
|
namespace SVF
|
|
34
34
|
{
|
|
35
|
-
CFBasicBlockNode::CFBasicBlockNode(const SVFBasicBlock* svfBasicBlock)
|
|
36
|
-
: GenericCFBasicBlockNodeTy(
|
|
37
|
-
PAG::getPAG()
|
|
38
|
-
->getICFG()
|
|
39
|
-
->getICFGNode(*svfBasicBlock->getInstructionList().begin())
|
|
40
|
-
->getId(),
|
|
41
|
-
0)
|
|
42
|
-
{
|
|
43
|
-
for (auto it = svfBasicBlock->begin(); it != svfBasicBlock->end(); ++it)
|
|
44
|
-
{
|
|
45
|
-
const SVFInstruction* ins = *it;
|
|
46
|
-
ICFGNode* icfgNode = PAG::getPAG()->getICFG()->getICFGNode(ins);
|
|
47
|
-
_icfgNodes.push_back(icfgNode);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
35
|
|
|
51
36
|
const std::string CFBasicBlockNode::toString() const
|
|
52
37
|
{
|
|
@@ -91,101 +76,5 @@ std::vector<CFBasicBlockEdge*> CFBasicBlockGraph::getCFBasicBlockEdge(const CFBa
|
|
|
91
76
|
return SVFUtil::move(edges);
|
|
92
77
|
}
|
|
93
78
|
|
|
94
|
-
void CFBasicBlockGBuilder::build(SVFModule* module)
|
|
95
|
-
{
|
|
96
|
-
_CFBasicBlockG = new CFBasicBlockGraph();
|
|
97
|
-
Map<const SVFBasicBlock*, CFBasicBlockNode*> bbToNode;
|
|
98
|
-
for (const auto& func : *module)
|
|
99
|
-
{
|
|
100
|
-
for (const auto& bb : *func)
|
|
101
|
-
{
|
|
102
|
-
CFBasicBlockNode* pNode = new CFBasicBlockNode(bb);
|
|
103
|
-
bbToNode[bb] = pNode;
|
|
104
|
-
_CFBasicBlockG->addCFBBNode(pNode);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
for (const auto& func : *module)
|
|
109
|
-
{
|
|
110
|
-
for (const auto& bb : *func)
|
|
111
|
-
{
|
|
112
|
-
for (const auto &succ: bb->getSuccessors())
|
|
113
|
-
{
|
|
114
|
-
ICFG *icfg = PAG::getPAG()->getICFG();
|
|
115
|
-
const ICFGNode *pred = icfg->getICFGNode(bb->getTerminator());
|
|
116
|
-
const ICFGEdge *edge = nullptr;
|
|
117
|
-
for (const auto &inst: succ->getInstructionList())
|
|
118
|
-
{
|
|
119
|
-
if (const ICFGEdge *e = icfg->getICFGEdge(pred, icfg->getICFGNode(inst), ICFGEdge::ICFGEdgeK::IntraCF))
|
|
120
|
-
{
|
|
121
|
-
edge = e;
|
|
122
|
-
break;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
if (SVFUtil::isa<IntraCFGEdge>(edge))
|
|
126
|
-
{
|
|
127
|
-
CFBasicBlockEdge *pEdge = new CFBasicBlockEdge(bbToNode[bb], bbToNode[succ], edge);
|
|
128
|
-
_CFBasicBlockG->addCFBBEdge(pEdge);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
79
|
}
|
|
134
80
|
|
|
135
|
-
void CFBasicBlockGBuilder::build(ICFG* icfg)
|
|
136
|
-
{
|
|
137
|
-
_CFBasicBlockG = new CFBasicBlockGraph();
|
|
138
|
-
Map<const SVFBasicBlock*, CFBasicBlockNode*> bbToNode;
|
|
139
|
-
Map<const SVFFunction*, CFBasicBlockNode*> funToFirstNode;
|
|
140
|
-
for (const auto& node : *icfg)
|
|
141
|
-
{
|
|
142
|
-
CFBasicBlockNode* pNode = nullptr;
|
|
143
|
-
if (const SVFBasicBlock* bb = node.second->getBB())
|
|
144
|
-
{
|
|
145
|
-
if (bbToNode.find(bb) == bbToNode.end())
|
|
146
|
-
{
|
|
147
|
-
pNode = new CFBasicBlockNode({node.second});
|
|
148
|
-
bbToNode[node.second->getBB()] = pNode;
|
|
149
|
-
_CFBasicBlockG->addCFBBNode(pNode);
|
|
150
|
-
}
|
|
151
|
-
else
|
|
152
|
-
{
|
|
153
|
-
pNode = bbToNode[node.second->getBB()];
|
|
154
|
-
pNode->addNode(node.second);
|
|
155
|
-
}
|
|
156
|
-
const SVFFunction* fun = node.second->getFun();
|
|
157
|
-
if (funToFirstNode.find(fun) == funToFirstNode.end())
|
|
158
|
-
{
|
|
159
|
-
funToFirstNode[fun] = nullptr;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
for (const auto& node : *icfg)
|
|
165
|
-
{
|
|
166
|
-
for (const auto &succ: node.second->getOutEdges())
|
|
167
|
-
{
|
|
168
|
-
const SVFFunction* node_fun = node.second->getFun();
|
|
169
|
-
const SVFFunction* succ_fun = succ->getDstNode()->getFun();
|
|
170
|
-
const SVFBasicBlock* node_bb = node.second->getBB();
|
|
171
|
-
const SVFBasicBlock* succ_bb = succ->getDstNode()->getBB();
|
|
172
|
-
if (node_fun == succ_fun)
|
|
173
|
-
{
|
|
174
|
-
if (node_bb != succ_bb)
|
|
175
|
-
{
|
|
176
|
-
CFBasicBlockEdge *pEdge = new CFBasicBlockEdge(bbToNode[node_bb], bbToNode[succ_bb], succ);
|
|
177
|
-
_CFBasicBlockG->addCFBBEdge(pEdge);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
for (auto it = funToFirstNode.begin(); it != funToFirstNode.end(); ++it)
|
|
184
|
-
{
|
|
185
|
-
const SVFFunction* fun = it->first;
|
|
186
|
-
const SVFBasicBlock* bb = *fun->getBasicBlockList().begin();
|
|
187
|
-
funToFirstNode[fun] = bbToNode[bb];
|
|
188
|
-
}
|
|
189
|
-
_CFBasicBlockG->_funToFirstNode = funToFirstNode;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
@@ -121,6 +121,8 @@ const SVFBasicBlock* SVFLoopAndDomInfo::findNearestCommonPDominator(const SVFBas
|
|
|
121
121
|
// continue going up til we arrive at the same node.
|
|
122
122
|
while (A != B)
|
|
123
123
|
{
|
|
124
|
+
// no common PDominator
|
|
125
|
+
if(A == NULL) return NULL;
|
|
124
126
|
const auto lvA = getBBPDomLevel().find(A);
|
|
125
127
|
const auto lvB = getBBPDomLevel().find(B);
|
|
126
128
|
assert(lvA != getBBPDomLevel().end() && lvB != getBBPDomLevel().end());
|
|
@@ -64,6 +64,11 @@ void
|
|
|
64
64
|
CDGBuilder::extractNodesBetweenPdomNodes(const SVFBasicBlock *succ, const SVFBasicBlock *LCA,
|
|
65
65
|
std::vector<const SVFBasicBlock *> &tgtNodes)
|
|
66
66
|
{
|
|
67
|
+
if (LCA == NULL)
|
|
68
|
+
{
|
|
69
|
+
tgtNodes.push_back(succ);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
67
72
|
if (succ == LCA) return;
|
|
68
73
|
std::vector<const SVFBasicBlock *> path;
|
|
69
74
|
SVFLoopAndDomInfo *ld = const_cast<SVFFunction *>(LCA->getFunction())->getLoopAndDomInfo();
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
//===- CFBasicBlockGBuilder.cpp ----------------------------------------------------------------//
|
|
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
|
+
* CFBasicBlockGBuilder.cpp
|
|
25
|
+
*
|
|
26
|
+
* Created on: 17 Oct. 2023
|
|
27
|
+
* Author: Xiao, Jiawei
|
|
28
|
+
*/
|
|
29
|
+
#include "Util/CFBasicBlockGBuilder.h"
|
|
30
|
+
|
|
31
|
+
namespace SVF
|
|
32
|
+
{
|
|
33
|
+
|
|
34
|
+
void CFBasicBlockGBuilder::initCFBasicBlockGNodes(ICFG *icfg,
|
|
35
|
+
Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes)
|
|
36
|
+
{
|
|
37
|
+
for (const auto &node: *icfg)
|
|
38
|
+
{
|
|
39
|
+
CFBasicBlockNode *pNode;
|
|
40
|
+
if (const SVFBasicBlock *bb = node.second->getBB())
|
|
41
|
+
{
|
|
42
|
+
if (const CallICFGNode *callNode = SVFUtil::dyn_cast<CallICFGNode>(node.second))
|
|
43
|
+
{
|
|
44
|
+
pNode = new CFBasicBlockNode({callNode});
|
|
45
|
+
bbToNodes[bb].push_back(pNode);
|
|
46
|
+
_CFBasicBlockG->addCFBBNode(pNode);
|
|
47
|
+
|
|
48
|
+
auto *retNode = new CFBasicBlockNode({callNode->getRetICFGNode()});
|
|
49
|
+
bbToNodes[bb].push_back(retNode);
|
|
50
|
+
_CFBasicBlockG->addCFBBNode(retNode);
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
else if (!SVFUtil::isa<RetICFGNode>(node.second))
|
|
54
|
+
{
|
|
55
|
+
if (bbToNodes.find(bb) == bbToNodes.end())
|
|
56
|
+
{
|
|
57
|
+
pNode = new CFBasicBlockNode({node.second});
|
|
58
|
+
bbToNodes[node.second->getBB()] = {pNode};
|
|
59
|
+
_CFBasicBlockG->addCFBBNode(pNode);
|
|
60
|
+
}
|
|
61
|
+
else
|
|
62
|
+
{
|
|
63
|
+
pNode = bbToNodes[node.second->getBB()].back();
|
|
64
|
+
if (!SVFUtil::isa<RetICFGNode>(pNode->getICFGNodes()[0]))
|
|
65
|
+
{
|
|
66
|
+
pNode->addNode(node.second);
|
|
67
|
+
}
|
|
68
|
+
else
|
|
69
|
+
{
|
|
70
|
+
pNode = new CFBasicBlockNode({node.second});
|
|
71
|
+
bbToNodes[node.second->getBB()].push_back(pNode);
|
|
72
|
+
_CFBasicBlockG->addCFBBNode(pNode);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
void CFBasicBlockGBuilder::addInterBBEdge(ICFG *icfg,
|
|
81
|
+
Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes)
|
|
82
|
+
{
|
|
83
|
+
// connect inter-BB BBNodes
|
|
84
|
+
for (const auto &node: *icfg)
|
|
85
|
+
{
|
|
86
|
+
for (const auto &succ: node.second->getOutEdges())
|
|
87
|
+
{
|
|
88
|
+
const SVFFunction *node_fun = node.second->getFun();
|
|
89
|
+
const SVFFunction *succ_fun = succ->getDstNode()->getFun();
|
|
90
|
+
const SVFBasicBlock *node_bb = node.second->getBB();
|
|
91
|
+
const SVFBasicBlock *succ_bb = succ->getDstNode()->getBB();
|
|
92
|
+
if (node_fun == succ_fun)
|
|
93
|
+
{
|
|
94
|
+
if (node_bb != succ_bb)
|
|
95
|
+
{
|
|
96
|
+
CFBasicBlockEdge *pEdge = new CFBasicBlockEdge(bbToNodes[node_bb].back(),
|
|
97
|
+
bbToNodes[succ_bb].front(), succ);
|
|
98
|
+
_CFBasicBlockG->addCFBBEdge(pEdge);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
void CFBasicBlockGBuilder::addIntraBBEdge(ICFG *icfg,
|
|
106
|
+
Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes)
|
|
107
|
+
{
|
|
108
|
+
// connect intra-BB BBNodes
|
|
109
|
+
for (const auto &bbNodes: bbToNodes)
|
|
110
|
+
{
|
|
111
|
+
for (u32_t i = 0; i < bbNodes.second.size() - 1; ++i)
|
|
112
|
+
{
|
|
113
|
+
if (ICFGEdge *icfgEdge = icfg->getICFGEdge(
|
|
114
|
+
const_cast<ICFGNode *>(bbNodes.second[i]->getICFGNodes().back()),
|
|
115
|
+
const_cast<ICFGNode *>(bbNodes.second[i + 1]->getICFGNodes().front()),
|
|
116
|
+
ICFGEdge::IntraCF))
|
|
117
|
+
{
|
|
118
|
+
CFBasicBlockEdge *pEdge = new CFBasicBlockEdge(bbNodes.second[i], bbNodes.second[i + 1], icfgEdge);
|
|
119
|
+
_CFBasicBlockG->addCFBBEdge(pEdge);
|
|
120
|
+
}
|
|
121
|
+
else
|
|
122
|
+
{
|
|
123
|
+
// no intra-procedural edge, maybe ext api
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
void CFBasicBlockGBuilder::addInterProceduralEdge(ICFG *icfg,
|
|
130
|
+
Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes)
|
|
131
|
+
{
|
|
132
|
+
// connect inter-procedural BBNodes
|
|
133
|
+
for (const auto &bbNodes: bbToNodes)
|
|
134
|
+
{
|
|
135
|
+
for (u32_t i = 0; i < bbNodes.second.size(); ++i)
|
|
136
|
+
{
|
|
137
|
+
if (const CallICFGNode *callICFGNode = SVFUtil::dyn_cast<CallICFGNode>(
|
|
138
|
+
bbNodes.second[i]->getICFGNodes().front()))
|
|
139
|
+
{
|
|
140
|
+
for (const auto &icfgEdge: callICFGNode->getOutEdges())
|
|
141
|
+
{
|
|
142
|
+
if (const CallCFGEdge *callEdge = SVFUtil::dyn_cast<CallCFGEdge>(icfgEdge))
|
|
143
|
+
{
|
|
144
|
+
CFBasicBlockEdge *pEdge = new CFBasicBlockEdge(bbNodes.second[i],
|
|
145
|
+
bbToNodes[callEdge->getDstNode()->getBB()].front(),
|
|
146
|
+
callEdge);
|
|
147
|
+
_CFBasicBlockG->addCFBBEdge(pEdge);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else if (const RetICFGNode *retICFGNode = SVFUtil::dyn_cast<RetICFGNode>(
|
|
152
|
+
bbNodes.second[i]->getICFGNodes().front()))
|
|
153
|
+
{
|
|
154
|
+
for (const auto &icfgEdge: retICFGNode->getInEdges())
|
|
155
|
+
{
|
|
156
|
+
if (const RetCFGEdge *retEdge = SVFUtil::dyn_cast<RetCFGEdge>(icfgEdge))
|
|
157
|
+
{
|
|
158
|
+
CFBasicBlockEdge *pEdge = new CFBasicBlockEdge(bbToNodes[retEdge->getSrcNode()->getBB()].back(),
|
|
159
|
+
bbNodes.second[i],
|
|
160
|
+
retEdge);
|
|
161
|
+
_CFBasicBlockG->addCFBBEdge(pEdge);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else
|
|
166
|
+
{
|
|
167
|
+
// other nodes are intra-procedural
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
void CFBasicBlockGBuilder::build(ICFG* icfg)
|
|
174
|
+
{
|
|
175
|
+
_CFBasicBlockG = new CFBasicBlockGraph();
|
|
176
|
+
Map<const SVFBasicBlock*, std::vector<CFBasicBlockNode*>> bbToNodes;
|
|
177
|
+
|
|
178
|
+
initCFBasicBlockGNodes(icfg, bbToNodes);
|
|
179
|
+
addInterBBEdge(icfg, bbToNodes);
|
|
180
|
+
addIntraBBEdge(icfg, bbToNodes);
|
|
181
|
+
addInterProceduralEdge(icfg, bbToNodes);
|
|
182
|
+
}
|
|
183
|
+
}
|