svf-tools 1.0.812 → 1.0.813
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/ConsExeState_8cpp_source.html +21 -21
- package/SVF-doxygen/html/ConsExeState_8h_source.html +384 -385
- package/SVF-doxygen/html/ExeState_8cpp_source.html +24 -24
- package/SVF-doxygen/html/ExeState_8h_source.html +227 -217
- package/SVF-doxygen/html/IntervalExeState_8cpp_source.html +8 -8
- package/SVF-doxygen/html/IntervalExeState_8h_source.html +412 -408
- package/SVF-doxygen/html/RelationSolver_8cpp_source.html +3 -3
- package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +43 -43
- package/SVF-doxygen/html/SVFIR2ConsExeState_8h_source.html +18 -18
- package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +250 -262
- package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +103 -101
- package/SVF-doxygen/html/SymState_8h_source.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ConsExeState-members.html +74 -74
- package/SVF-doxygen/html/classSVF_1_1ConsExeState.html +412 -394
- package/SVF-doxygen/html/classSVF_1_1ExeState-members.html +34 -34
- package/SVF-doxygen/html/classSVF_1_1ExeState.html +287 -272
- package/SVF-doxygen/html/classSVF_1_1IntervalExeState-members.html +78 -78
- package/SVF-doxygen/html/classSVF_1_1IntervalExeState.html +445 -434
- package/SVF-doxygen/html/classSVF_1_1RelationSolver.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState-members.html +28 -28
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +77 -77
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState-members.html +40 -40
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +372 -372
- package/SVF-doxygen/html/classSVF_1_1SymState.html +2 -2
- package/SVF-doxygen/html/functions.html +6 -6
- package/SVF-doxygen/html/functions_a.html +13 -8
- package/SVF-doxygen/html/functions_b.html +3 -3
- package/SVF-doxygen/html/functions_e.html +2 -2
- package/SVF-doxygen/html/functions_func_e.html +2 -2
- package/SVF-doxygen/html/functions_func_g.html +32 -35
- package/SVF-doxygen/html/functions_func_i.html +11 -21
- package/SVF-doxygen/html/functions_func_l.html +6 -6
- package/SVF-doxygen/html/functions_func_n.html +3 -3
- package/SVF-doxygen/html/functions_func_p.html +2 -2
- package/SVF-doxygen/html/functions_func_s.html +7 -7
- package/SVF-doxygen/html/functions_func_w.html +3 -3
- package/SVF-doxygen/html/functions_g.html +27 -30
- package/SVF-doxygen/html/functions_i.html +13 -23
- package/SVF-doxygen/html/functions_l.html +8 -8
- package/SVF-doxygen/html/functions_n.html +7 -7
- package/SVF-doxygen/html/functions_o.html +4 -4
- package/SVF-doxygen/html/functions_p.html +9 -9
- package/SVF-doxygen/html/functions_r.html +1 -1
- package/SVF-doxygen/html/functions_s.html +19 -17
- package/SVF-doxygen/html/functions_t.html +7 -7
- package/SVF-doxygen/html/functions_type.html +5 -0
- package/SVF-doxygen/html/functions_type_v.html +3 -8
- package/SVF-doxygen/html/functions_v.html +13 -16
- package/SVF-doxygen/html/functions_vars.html +6 -6
- package/SVF-doxygen/html/functions_vars_g.html +2 -2
- package/SVF-doxygen/html/functions_w.html +3 -3
- package/SVF-doxygen/html/search/all_0.js +4 -4
- package/SVF-doxygen/html/search/all_1.js +210 -209
- package/SVF-doxygen/html/search/all_10.js +324 -324
- package/SVF-doxygen/html/search/all_11.js +222 -222
- package/SVF-doxygen/html/search/all_12.js +544 -544
- package/SVF-doxygen/html/search/all_13.js +191 -191
- package/SVF-doxygen/html/search/all_14.js +67 -67
- package/SVF-doxygen/html/search/all_15.js +167 -169
- 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 +169 -169
- package/SVF-doxygen/html/search/all_3.js +642 -642
- package/SVF-doxygen/html/search/all_4.js +233 -233
- package/SVF-doxygen/html/search/all_5.js +119 -119
- package/SVF-doxygen/html/search/all_6.js +225 -225
- package/SVF-doxygen/html/search/all_7.js +946 -947
- package/SVF-doxygen/html/search/all_9.js +481 -486
- 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 +115 -115
- 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 -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 +12 -12
- package/SVF-doxygen/html/search/functions_1.js +360 -360
- 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 +279 -279
- 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 +172 -172
- package/SVF-doxygen/html/search/functions_2.js +87 -87
- 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 +852 -853
- package/SVF-doxygen/html/search/functions_8.js +149 -149
- package/SVF-doxygen/html/search/functions_9.js +423 -428
- 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 +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_0.js +19 -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 +33 -34
- 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 +44 -44
- 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 +14 -14
- 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 -151
- 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 +44 -44
- 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 +38 -38
- 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 +37 -37
- 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 +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 +56 -56
- package/SVF-doxygen/html/search/variables_e.js +123 -123
- package/SVF-doxygen/html/search/variables_f.js +29 -29
- package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1ConsExeState_01_4.html +5 -5
- package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1ExeState_01_4.html +5 -5
- package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1IntervalExeState_01_4.html +5 -5
- package/SVF-doxygen/html/svf-ex_8cpp.html +7 -7
- package/SVF-doxygen/html/svf-ex_8cpp_source.html +7 -7
- package/package.json +1 -1
- package/svf/include/AbstractExecution/ConsExeState.h +99 -96
- package/svf/include/AbstractExecution/ExeState.h +66 -53
- package/svf/include/AbstractExecution/IntervalExeState.h +66 -61
- package/svf/include/AbstractExecution/SVFIR2ConsExeState.h +7 -7
- package/svf/include/AbstractExecution/SVFIR2ItvExeState.h +20 -14
- package/svf/lib/AbstractExecution/ConsExeState.cpp +13 -13
- package/svf/lib/AbstractExecution/ExeState.cpp +19 -19
- package/svf/lib/AbstractExecution/IntervalExeState.cpp +4 -4
- package/svf/lib/AbstractExecution/SVFIR2ConsExeState.cpp +36 -36
- package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +80 -92
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
using namespace SVF;
|
|
34
34
|
using namespace SVFUtil;
|
|
35
35
|
|
|
36
|
-
SVF::SVFIR2ItvExeState::
|
|
36
|
+
SVF::SVFIR2ItvExeState::Addrs SVF::SVFIR2ItvExeState::globalNulladdrs =
|
|
37
37
|
AddressValue();
|
|
38
38
|
|
|
39
39
|
/**
|
|
@@ -112,13 +112,13 @@ void SVFIR2ItvExeState::applySummary(IntervalExeState &es)
|
|
|
112
112
|
{
|
|
113
113
|
_es._locToItvVal[item.first] = item.second;
|
|
114
114
|
}
|
|
115
|
-
for (const auto &item: es.
|
|
115
|
+
for (const auto &item: es._varToAddrs)
|
|
116
116
|
{
|
|
117
|
-
_es.
|
|
117
|
+
_es._varToAddrs[item.first] = item.second;
|
|
118
118
|
}
|
|
119
|
-
for (const auto &item: es.
|
|
119
|
+
for (const auto &item: es._locToAddrs)
|
|
120
120
|
{
|
|
121
|
-
_es.
|
|
121
|
+
_es._locToAddrs[item.first] = item.second;
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
|
|
@@ -132,29 +132,29 @@ void SVFIR2ItvExeState::moveToGlobal()
|
|
|
132
132
|
{
|
|
133
133
|
IntervalExeState::globalES._locToItvVal.insert(it);
|
|
134
134
|
}
|
|
135
|
-
for (const auto &_varToVAddr: _es.
|
|
135
|
+
for (const auto &_varToVAddr: _es._varToAddrs)
|
|
136
136
|
{
|
|
137
|
-
IntervalExeState::globalES.
|
|
137
|
+
IntervalExeState::globalES._varToAddrs.insert(_varToVAddr);
|
|
138
138
|
}
|
|
139
|
-
for (const auto &_locToVAddr: _es.
|
|
139
|
+
for (const auto &_locToVAddr: _es._locToAddrs)
|
|
140
140
|
{
|
|
141
|
-
IntervalExeState::globalES.
|
|
141
|
+
IntervalExeState::globalES._locToAddrs.insert(_locToVAddr);
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
_es._varToItvVal.clear();
|
|
145
145
|
IntervalExeState::globalES._varToItvVal.erase(PAG::getPAG()->getBlkPtr());
|
|
146
146
|
_es._varToItvVal[PAG::getPAG()->getBlkPtr()] = IntervalValue::top();
|
|
147
147
|
_es._locToItvVal.clear();
|
|
148
|
-
_es.
|
|
149
|
-
_es.
|
|
148
|
+
_es._varToAddrs.clear();
|
|
149
|
+
_es._locToAddrs.clear();
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
void SVFIR2ItvExeState::
|
|
152
|
+
void SVFIR2ItvExeState::widenAddrs(IntervalExeState &lhs, const IntervalExeState &rhs)
|
|
153
153
|
{
|
|
154
|
-
for (const auto &rhsItem: rhs.
|
|
154
|
+
for (const auto &rhsItem: rhs._varToAddrs)
|
|
155
155
|
{
|
|
156
|
-
auto lhsIter = lhs.
|
|
157
|
-
if (lhsIter != lhs.
|
|
156
|
+
auto lhsIter = lhs._varToAddrs.find(rhsItem.first);
|
|
157
|
+
if (lhsIter != lhs._varToAddrs.end())
|
|
158
158
|
{
|
|
159
159
|
for (const auto &addr: rhsItem.second)
|
|
160
160
|
{
|
|
@@ -168,10 +168,10 @@ void SVFIR2ItvExeState::widenVAddrs(IntervalExeState &lhs, const IntervalExeStat
|
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
|
-
for (const auto &rhsItem: rhs.
|
|
171
|
+
for (const auto &rhsItem: rhs._locToAddrs)
|
|
172
172
|
{
|
|
173
|
-
auto lhsIter = lhs.
|
|
174
|
-
if (lhsIter != lhs.
|
|
173
|
+
auto lhsIter = lhs._locToAddrs.find(rhsItem.first);
|
|
174
|
+
if (lhsIter != lhs._locToAddrs.end())
|
|
175
175
|
{
|
|
176
176
|
for (const auto &addr: rhsItem.second)
|
|
177
177
|
{
|
|
@@ -187,12 +187,12 @@ void SVFIR2ItvExeState::widenVAddrs(IntervalExeState &lhs, const IntervalExeStat
|
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
void SVFIR2ItvExeState::
|
|
190
|
+
void SVFIR2ItvExeState::narrowAddrs(IntervalExeState &lhs, const IntervalExeState &rhs)
|
|
191
191
|
{
|
|
192
|
-
for (const auto &rhsItem: rhs.
|
|
192
|
+
for (const auto &rhsItem: rhs._varToAddrs)
|
|
193
193
|
{
|
|
194
|
-
auto lhsIter = lhs.
|
|
195
|
-
if (lhsIter != lhs.
|
|
194
|
+
auto lhsIter = lhs._varToAddrs.find(rhsItem.first);
|
|
195
|
+
if (lhsIter != lhs._varToAddrs.end())
|
|
196
196
|
{
|
|
197
197
|
for (const auto &addr: lhsIter->second)
|
|
198
198
|
{
|
|
@@ -204,10 +204,10 @@ void SVFIR2ItvExeState::narrowVAddrs(IntervalExeState &lhs, const IntervalExeSta
|
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
|
-
for (const auto &rhsItem: rhs.
|
|
207
|
+
for (const auto &rhsItem: rhs._locToAddrs)
|
|
208
208
|
{
|
|
209
|
-
auto lhsIter = lhs.
|
|
210
|
-
if (lhsIter != lhs.
|
|
209
|
+
auto lhsIter = lhs._locToAddrs.find(rhsItem.first);
|
|
210
|
+
if (lhsIter != lhs._locToAddrs.end())
|
|
211
211
|
{
|
|
212
212
|
for (const auto &addr: lhsIter->second)
|
|
213
213
|
{
|
|
@@ -221,11 +221,11 @@ void SVFIR2ItvExeState::narrowVAddrs(IntervalExeState &lhs, const IntervalExeSta
|
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
-
SVFIR2ItvExeState::
|
|
224
|
+
SVFIR2ItvExeState::Addrs SVFIR2ItvExeState::getGepObjAddress(u32_t pointer, APOffset offset)
|
|
225
225
|
{
|
|
226
|
-
assert(!
|
|
227
|
-
|
|
228
|
-
|
|
226
|
+
assert(!getAddrs(pointer).empty());
|
|
227
|
+
Addrs &addrs = getAddrs(pointer);
|
|
228
|
+
Addrs ret;
|
|
229
229
|
for (const auto &addr: addrs)
|
|
230
230
|
{
|
|
231
231
|
int64_t baseObj = getInternalID(addr);
|
|
@@ -458,22 +458,22 @@ void SVFIR2ItvExeState::initObjVar(const ObjVar *objVar, u32_t varId)
|
|
|
458
458
|
else if (SVFUtil::isa<SVFConstantNullPtr>(obj->getValue()))
|
|
459
459
|
IntervalExeState::globalES[varId] = IntervalValue(0, 0);
|
|
460
460
|
else if (SVFUtil::isa<SVFGlobalValue>(obj->getValue()))
|
|
461
|
-
IntervalExeState::globalES.
|
|
461
|
+
IntervalExeState::globalES.getAddrs(varId).insert(getVirtualMemAddress(varId));
|
|
462
462
|
else if (obj->isConstantArray() || obj->isConstantStruct())
|
|
463
463
|
IntervalExeState::globalES[varId] = IntervalValue::top();
|
|
464
464
|
else
|
|
465
465
|
IntervalExeState::globalES[varId] = IntervalValue::top();
|
|
466
466
|
}
|
|
467
467
|
else
|
|
468
|
-
IntervalExeState::globalES.
|
|
468
|
+
IntervalExeState::globalES.getAddrs(varId).insert(getVirtualMemAddress(varId));
|
|
469
469
|
}
|
|
470
470
|
else
|
|
471
|
-
IntervalExeState::globalES.
|
|
471
|
+
IntervalExeState::globalES.getAddrs(varId).insert(getVirtualMemAddress(varId));
|
|
472
472
|
}
|
|
473
473
|
|
|
474
474
|
void SVFIR2ItvExeState::initSVFVar(u32_t varId)
|
|
475
475
|
{
|
|
476
|
-
if (
|
|
476
|
+
if (inVarToValTable(varId) || _es.inVarToAddrsTable(varId)) return;
|
|
477
477
|
SVFIR *svfir = PAG::getPAG();
|
|
478
478
|
SVFVar *svfVar = svfir->getGNode(varId);
|
|
479
479
|
// write objvar into cache instead of exestate
|
|
@@ -498,7 +498,7 @@ void SVFIR2ItvExeState::initSVFVar(u32_t varId)
|
|
|
498
498
|
void SVFIR2ItvExeState::translateAddr(const AddrStmt *addr)
|
|
499
499
|
{
|
|
500
500
|
initSVFVar(addr->getRHSVarID());
|
|
501
|
-
if (
|
|
501
|
+
if (inVarToValTable(addr->getRHSVarID()))
|
|
502
502
|
{
|
|
503
503
|
// if addr RHS is integerType(i8 i32 etc), value should be limited.
|
|
504
504
|
if (addr->getRHSVar()->getType()->getKind() == SVFType::SVFIntegerTy)
|
|
@@ -511,7 +511,7 @@ void SVFIR2ItvExeState::translateAddr(const AddrStmt *addr)
|
|
|
511
511
|
}
|
|
512
512
|
else if (inVarToAddrsTable(addr->getRHSVarID()))
|
|
513
513
|
{
|
|
514
|
-
IntervalExeState::globalES.
|
|
514
|
+
IntervalExeState::globalES.getAddrs(addr->getLHSVarID()) = IntervalExeState::globalES.getAddrs(
|
|
515
515
|
addr->getRHSVarID());
|
|
516
516
|
}
|
|
517
517
|
else
|
|
@@ -526,9 +526,9 @@ void SVFIR2ItvExeState::translateBinary(const BinaryOPStmt *binary)
|
|
|
526
526
|
u32_t op0 = binary->getOpVarID(0);
|
|
527
527
|
u32_t op1 = binary->getOpVarID(1);
|
|
528
528
|
u32_t res = binary->getResID();
|
|
529
|
-
if (!
|
|
530
|
-
if (!
|
|
531
|
-
if (
|
|
529
|
+
if (!inVarToValTable(op0)) _es[op0] = IntervalValue::top();
|
|
530
|
+
if (!inVarToValTable(op1)) _es[op1] = IntervalValue::top();
|
|
531
|
+
if (inVarToValTable(op0) && inVarToValTable(op1))
|
|
532
532
|
{
|
|
533
533
|
IntervalValue &lhs = _es[op0], &rhs = _es[op1];
|
|
534
534
|
IntervalValue resVal;
|
|
@@ -588,7 +588,7 @@ void SVFIR2ItvExeState::translateCmp(const CmpStmt *cmp)
|
|
|
588
588
|
u32_t op0 = cmp->getOpVarID(0);
|
|
589
589
|
u32_t op1 = cmp->getOpVarID(1);
|
|
590
590
|
u32_t res = cmp->getResID();
|
|
591
|
-
if (
|
|
591
|
+
if (inVarToValTable(op0) && inVarToValTable(op1))
|
|
592
592
|
{
|
|
593
593
|
IntervalValue resVal;
|
|
594
594
|
IntervalValue &lhs = _es[op0], &rhs = _es[op1];
|
|
@@ -645,7 +645,7 @@ void SVFIR2ItvExeState::translateCmp(const CmpStmt *cmp)
|
|
|
645
645
|
else if (inVarToAddrsTable(op0) && inVarToAddrsTable(op1))
|
|
646
646
|
{
|
|
647
647
|
IntervalValue resVal;
|
|
648
|
-
|
|
648
|
+
Addrs &lhs = getAddrs(op0), &rhs = getAddrs(op1);
|
|
649
649
|
assert(!lhs.empty() && !rhs.empty() && "empty address?");
|
|
650
650
|
auto predicate = cmp->getPredicate();
|
|
651
651
|
switch (predicate)
|
|
@@ -773,30 +773,26 @@ void SVFIR2ItvExeState::translateLoad(const LoadStmt *load)
|
|
|
773
773
|
u32_t lhs = load->getLHSVarID();
|
|
774
774
|
if (inVarToAddrsTable(rhs))
|
|
775
775
|
{
|
|
776
|
-
|
|
776
|
+
Addrs &addrs = getAddrs(rhs);
|
|
777
777
|
assert(!addrs.empty());
|
|
778
778
|
IntervalValue rhsItv = IntervalValue::bottom();
|
|
779
779
|
AddressValue rhsAddr;
|
|
780
|
-
bool
|
|
780
|
+
bool isVal = false, isAddr = false;
|
|
781
781
|
for (const auto &addr: addrs)
|
|
782
782
|
{
|
|
783
783
|
u32_t objId = getInternalID(addr);
|
|
784
|
-
if (
|
|
784
|
+
if (inLocToValTable(objId))
|
|
785
785
|
{
|
|
786
786
|
rhsItv.join_with(_es.load(addr));
|
|
787
|
-
|
|
787
|
+
isVal = true;
|
|
788
788
|
}
|
|
789
789
|
else if (inLocToAddrsTable(objId))
|
|
790
790
|
{
|
|
791
|
-
rhsAddr.join_with(_es.
|
|
791
|
+
rhsAddr.join_with(_es.loadAddrs(addr));
|
|
792
792
|
isAddr = true;
|
|
793
793
|
}
|
|
794
|
-
else
|
|
795
|
-
{
|
|
796
|
-
// rhs not in table
|
|
797
|
-
}
|
|
798
794
|
}
|
|
799
|
-
if (
|
|
795
|
+
if (isVal)
|
|
800
796
|
{
|
|
801
797
|
// lhs var is an integer
|
|
802
798
|
_es[lhs] = rhsItv;
|
|
@@ -804,11 +800,11 @@ void SVFIR2ItvExeState::translateLoad(const LoadStmt *load)
|
|
|
804
800
|
else if (isAddr)
|
|
805
801
|
{
|
|
806
802
|
// lhs var is an address
|
|
807
|
-
_es.
|
|
803
|
+
_es.getAddrs(lhs) = rhsAddr;
|
|
808
804
|
}
|
|
809
805
|
else
|
|
810
806
|
{
|
|
811
|
-
// rhs not
|
|
807
|
+
// rhs not initialized, e.g., absence of a store before load
|
|
812
808
|
}
|
|
813
809
|
}
|
|
814
810
|
}
|
|
@@ -819,10 +815,10 @@ void SVFIR2ItvExeState::translateStore(const StoreStmt *store)
|
|
|
819
815
|
u32_t lhs = store->getLHSVarID();
|
|
820
816
|
if (inVarToAddrsTable(lhs))
|
|
821
817
|
{
|
|
822
|
-
if (
|
|
818
|
+
if (inVarToValTable(rhs))
|
|
823
819
|
{
|
|
824
|
-
assert(!
|
|
825
|
-
|
|
820
|
+
assert(!getAddrs(lhs).empty());
|
|
821
|
+
Addrs &addrs = getAddrs(lhs);
|
|
826
822
|
for (const auto &addr: addrs)
|
|
827
823
|
{
|
|
828
824
|
_es.store(addr, _es[rhs]);
|
|
@@ -830,12 +826,12 @@ void SVFIR2ItvExeState::translateStore(const StoreStmt *store)
|
|
|
830
826
|
}
|
|
831
827
|
else if (inVarToAddrsTable(rhs))
|
|
832
828
|
{
|
|
833
|
-
assert(!
|
|
834
|
-
|
|
829
|
+
assert(!getAddrs(lhs).empty());
|
|
830
|
+
Addrs &addrs = getAddrs(lhs);
|
|
835
831
|
for (const auto &addr: addrs)
|
|
836
832
|
{
|
|
837
|
-
assert(!
|
|
838
|
-
_es.
|
|
833
|
+
assert(!getAddrs(rhs).empty());
|
|
834
|
+
_es.storeAddrs(addr, getAddrs(rhs));
|
|
839
835
|
}
|
|
840
836
|
|
|
841
837
|
}
|
|
@@ -852,7 +848,7 @@ void SVFIR2ItvExeState::translateCopy(const CopyStmt *copy)
|
|
|
852
848
|
}
|
|
853
849
|
else
|
|
854
850
|
{
|
|
855
|
-
if (
|
|
851
|
+
if (inVarToValTable(rhs))
|
|
856
852
|
{
|
|
857
853
|
_es[lhs] = _es[rhs];
|
|
858
854
|
// if copy LHS is integerType(i8 i32 etc), value should be limited.
|
|
@@ -866,8 +862,8 @@ void SVFIR2ItvExeState::translateCopy(const CopyStmt *copy)
|
|
|
866
862
|
}
|
|
867
863
|
else if (inVarToAddrsTable(rhs))
|
|
868
864
|
{
|
|
869
|
-
assert(!
|
|
870
|
-
_es.
|
|
865
|
+
assert(!getAddrs(rhs).empty());
|
|
866
|
+
_es.getAddrs(lhs) = getAddrs(rhs);
|
|
871
867
|
}
|
|
872
868
|
}
|
|
873
869
|
}
|
|
@@ -877,15 +873,15 @@ void SVFIR2ItvExeState::translateGep(const GepStmt *gep)
|
|
|
877
873
|
u32_t rhs = gep->getRHSVarID();
|
|
878
874
|
u32_t lhs = gep->getLHSVarID();
|
|
879
875
|
if (!inVarToAddrsTable(rhs)) return;
|
|
880
|
-
assert(!
|
|
881
|
-
|
|
876
|
+
assert(!getAddrs(rhs).empty());
|
|
877
|
+
Addrs &rhsVal = getAddrs(rhs);
|
|
882
878
|
if (rhsVal.empty()) return;
|
|
883
879
|
IntervalValue offsetPair = getItvOfFlattenedElemIndex(gep);
|
|
884
880
|
if (!isVirtualMemAddress(*rhsVal.begin()))
|
|
885
881
|
return;
|
|
886
882
|
else
|
|
887
883
|
{
|
|
888
|
-
|
|
884
|
+
Addrs gepAddrs;
|
|
889
885
|
APOffset lb = offsetPair.lb().getNumeral() < Options::MaxFieldLimit()?
|
|
890
886
|
offsetPair.lb().getNumeral(): Options::MaxFieldLimit();
|
|
891
887
|
APOffset ub = offsetPair.ub().getNumeral() < Options::MaxFieldLimit()?
|
|
@@ -893,7 +889,7 @@ void SVFIR2ItvExeState::translateGep(const GepStmt *gep)
|
|
|
893
889
|
for (APOffset i = lb; i <= ub; i++)
|
|
894
890
|
gepAddrs.join_with(getGepObjAddress(rhs, i));
|
|
895
891
|
if(gepAddrs.empty()) return;
|
|
896
|
-
_es.
|
|
892
|
+
_es.getAddrs(lhs) = gepAddrs;
|
|
897
893
|
return;
|
|
898
894
|
}
|
|
899
895
|
}
|
|
@@ -904,7 +900,7 @@ void SVFIR2ItvExeState::translateSelect(const SelectStmt *select)
|
|
|
904
900
|
u32_t tval = select->getTrueValue()->getId();
|
|
905
901
|
u32_t fval = select->getFalseValue()->getId();
|
|
906
902
|
u32_t cond = select->getCondition()->getId();
|
|
907
|
-
if (
|
|
903
|
+
if (inVarToValTable(tval) && inVarToValTable(fval) && inVarToValTable(cond))
|
|
908
904
|
{
|
|
909
905
|
if (_es[cond].is_numeral())
|
|
910
906
|
{
|
|
@@ -915,13 +911,13 @@ void SVFIR2ItvExeState::translateSelect(const SelectStmt *select)
|
|
|
915
911
|
_es[res] = _es[cond];
|
|
916
912
|
}
|
|
917
913
|
}
|
|
918
|
-
else if (inVarToAddrsTable(tval) && inVarToAddrsTable(fval) &&
|
|
914
|
+
else if (inVarToAddrsTable(tval) && inVarToAddrsTable(fval) && inVarToValTable(cond))
|
|
919
915
|
{
|
|
920
916
|
if (_es[cond].is_numeral())
|
|
921
917
|
{
|
|
922
|
-
assert(!
|
|
923
|
-
assert(!
|
|
924
|
-
_es.
|
|
918
|
+
assert(!getAddrs(fval).empty());
|
|
919
|
+
assert(!getAddrs(tval).empty());
|
|
920
|
+
_es.getAddrs(res) = _es[cond].is_zero() ? getAddrs(fval) : getAddrs(tval);
|
|
925
921
|
}
|
|
926
922
|
}
|
|
927
923
|
}
|
|
@@ -931,27 +927,23 @@ void SVFIR2ItvExeState::translatePhi(const PhiStmt *phi)
|
|
|
931
927
|
u32_t res = phi->getResID();
|
|
932
928
|
IntervalValue rhsItv = IntervalValue::bottom();
|
|
933
929
|
AddressValue rhsAddr;
|
|
934
|
-
bool
|
|
930
|
+
bool isVal = false, isAddr = false;
|
|
935
931
|
for (u32_t i = 0; i < phi->getOpVarNum(); i++)
|
|
936
932
|
{
|
|
937
933
|
NodeID curId = phi->getOpVarID(i);
|
|
938
|
-
if (
|
|
934
|
+
if (inVarToValTable(curId))
|
|
939
935
|
{
|
|
940
936
|
rhsItv.join_with(_es[curId]);
|
|
941
|
-
|
|
937
|
+
isVal = true;
|
|
942
938
|
}
|
|
943
939
|
else if (inVarToAddrsTable(curId))
|
|
944
940
|
{
|
|
945
|
-
assert(!
|
|
946
|
-
rhsAddr.join_with(
|
|
941
|
+
assert(!getAddrs(curId).empty());
|
|
942
|
+
rhsAddr.join_with(getAddrs(curId));
|
|
947
943
|
isAddr = true;
|
|
948
944
|
}
|
|
949
|
-
else
|
|
950
|
-
{
|
|
951
|
-
// rhs not in the table
|
|
952
|
-
}
|
|
953
945
|
}
|
|
954
|
-
if (
|
|
946
|
+
if (isVal)
|
|
955
947
|
{
|
|
956
948
|
// res var is an integer
|
|
957
949
|
_es[res] = rhsItv;
|
|
@@ -959,11 +951,7 @@ void SVFIR2ItvExeState::translatePhi(const PhiStmt *phi)
|
|
|
959
951
|
else if (isAddr)
|
|
960
952
|
{
|
|
961
953
|
// res var is an address
|
|
962
|
-
_es.
|
|
963
|
-
}
|
|
964
|
-
else
|
|
965
|
-
{
|
|
966
|
-
// rhs not in table
|
|
954
|
+
_es.getAddrs(res) = rhsAddr;
|
|
967
955
|
}
|
|
968
956
|
}
|
|
969
957
|
|
|
@@ -972,14 +960,14 @@ void SVFIR2ItvExeState::translateCall(const CallPE *callPE)
|
|
|
972
960
|
{
|
|
973
961
|
NodeID lhs = callPE->getLHSVarID();
|
|
974
962
|
NodeID rhs = callPE->getRHSVarID();
|
|
975
|
-
if (
|
|
963
|
+
if (inVarToValTable(rhs))
|
|
976
964
|
{
|
|
977
965
|
_es[lhs] = _es[rhs];
|
|
978
966
|
}
|
|
979
967
|
else if (inVarToAddrsTable(rhs))
|
|
980
968
|
{
|
|
981
|
-
assert(!
|
|
982
|
-
_es.
|
|
969
|
+
assert(!getAddrs(rhs).empty());
|
|
970
|
+
_es.getAddrs(lhs) = getAddrs(rhs);
|
|
983
971
|
}
|
|
984
972
|
}
|
|
985
973
|
|
|
@@ -987,13 +975,13 @@ void SVFIR2ItvExeState::translateRet(const RetPE *retPE)
|
|
|
987
975
|
{
|
|
988
976
|
NodeID lhs = retPE->getLHSVarID();
|
|
989
977
|
NodeID rhs = retPE->getRHSVarID();
|
|
990
|
-
if (
|
|
978
|
+
if (inVarToValTable(rhs))
|
|
991
979
|
{
|
|
992
980
|
_es[lhs] = _es[rhs];
|
|
993
981
|
}
|
|
994
982
|
else if (inVarToAddrsTable(rhs))
|
|
995
983
|
{
|
|
996
|
-
assert(!
|
|
997
|
-
_es.
|
|
984
|
+
assert(!getAddrs(rhs).empty());
|
|
985
|
+
_es.getAddrs(lhs) = getAddrs(rhs);
|
|
998
986
|
}
|
|
999
987
|
}
|