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
|
@@ -34,17 +34,17 @@ using namespace SVF;
|
|
|
34
34
|
|
|
35
35
|
bool ExeState::operator==(const ExeState &rhs) const
|
|
36
36
|
{
|
|
37
|
-
return
|
|
37
|
+
return eqVarToAddrs(_varToAddrs, rhs._varToAddrs) && eqVarToAddrs(_locToAddrs, rhs._locToAddrs);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
bool ExeState::joinWith(const ExeState &other)
|
|
41
41
|
{
|
|
42
42
|
bool changed = false;
|
|
43
|
-
for (auto it = other.
|
|
43
|
+
for (auto it = other._varToAddrs.begin(); it != other._varToAddrs.end(); ++it)
|
|
44
44
|
{
|
|
45
45
|
auto key = it->first;
|
|
46
|
-
auto oit =
|
|
47
|
-
if (oit !=
|
|
46
|
+
auto oit = _varToAddrs.find(key);
|
|
47
|
+
if (oit != _varToAddrs.end())
|
|
48
48
|
{
|
|
49
49
|
if(oit->second.join_with(it->second))
|
|
50
50
|
changed = true;
|
|
@@ -52,14 +52,14 @@ bool ExeState::joinWith(const ExeState &other)
|
|
|
52
52
|
else
|
|
53
53
|
{
|
|
54
54
|
changed = true;
|
|
55
|
-
|
|
55
|
+
_varToAddrs.emplace(key, it->second);
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
for (auto it = other.
|
|
58
|
+
for (auto it = other._locToAddrs.begin(); it != other._locToAddrs.end(); ++it)
|
|
59
59
|
{
|
|
60
60
|
auto key = it->first;
|
|
61
|
-
auto oit =
|
|
62
|
-
if (oit !=
|
|
61
|
+
auto oit = _locToAddrs.find(key);
|
|
62
|
+
if (oit != _locToAddrs.end())
|
|
63
63
|
{
|
|
64
64
|
if(oit->second.join_with(it->second))
|
|
65
65
|
changed = true;
|
|
@@ -67,7 +67,7 @@ bool ExeState::joinWith(const ExeState &other)
|
|
|
67
67
|
else
|
|
68
68
|
{
|
|
69
69
|
changed = true;
|
|
70
|
-
|
|
70
|
+
_locToAddrs.emplace(key, it->second);
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
return changed;
|
|
@@ -76,21 +76,21 @@ bool ExeState::joinWith(const ExeState &other)
|
|
|
76
76
|
bool ExeState::meetWith(const ExeState &other)
|
|
77
77
|
{
|
|
78
78
|
bool changed = false;
|
|
79
|
-
for (auto it = other.
|
|
79
|
+
for (auto it = other._varToAddrs.begin(); it != other._varToAddrs.end(); ++it)
|
|
80
80
|
{
|
|
81
81
|
auto key = it->first;
|
|
82
|
-
auto oit =
|
|
83
|
-
if (oit !=
|
|
82
|
+
auto oit = _varToAddrs.find(key);
|
|
83
|
+
if (oit != _varToAddrs.end())
|
|
84
84
|
{
|
|
85
85
|
if(oit->second.meet_with(it->second))
|
|
86
86
|
changed = true;
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
for (auto it = other.
|
|
89
|
+
for (auto it = other._locToAddrs.begin(); it != other._locToAddrs.end(); ++it)
|
|
90
90
|
{
|
|
91
91
|
auto key = it->first;
|
|
92
|
-
auto oit =
|
|
93
|
-
if (oit !=
|
|
92
|
+
auto oit = _locToAddrs.find(key);
|
|
93
|
+
if (oit != _locToAddrs.end())
|
|
94
94
|
{
|
|
95
95
|
if(oit->second.meet_with(it->second))
|
|
96
96
|
changed = true;
|
|
@@ -101,14 +101,14 @@ bool ExeState::meetWith(const ExeState &other)
|
|
|
101
101
|
|
|
102
102
|
u32_t ExeState::hash() const
|
|
103
103
|
{
|
|
104
|
-
size_t h =
|
|
104
|
+
size_t h = getVarToAddrs().size() * 2;
|
|
105
105
|
Hash<u32_t> hf;
|
|
106
|
-
for (const auto &t:
|
|
106
|
+
for (const auto &t: getVarToAddrs())
|
|
107
107
|
{
|
|
108
108
|
h ^= hf(t.first) + 0x9e3779b9 + (h << 6) + (h >> 2);
|
|
109
109
|
}
|
|
110
|
-
size_t h2 =
|
|
111
|
-
for (const auto &t:
|
|
110
|
+
size_t h2 = getLocToAddrs().size() * 2;
|
|
111
|
+
for (const auto &t: getLocToAddrs())
|
|
112
112
|
{
|
|
113
113
|
h2 ^= hf(t.first) + 0x9e3779b9 + (h2 << 6) + (h2 >> 2);
|
|
114
114
|
}
|
|
@@ -191,8 +191,8 @@ void IntervalExeState::printExprValues(std::ostream &oss) const
|
|
|
191
191
|
oss << "-----------Var and Value-----------\n";
|
|
192
192
|
printTable(_varToItvVal, oss);
|
|
193
193
|
printTable(_locToItvVal, oss);
|
|
194
|
-
printTable(
|
|
195
|
-
printTable(
|
|
194
|
+
printTable(_varToAddrs, oss);
|
|
195
|
+
printTable(_locToAddrs, oss);
|
|
196
196
|
oss << "-----------------------------------------\n";
|
|
197
197
|
}
|
|
198
198
|
|
|
@@ -219,7 +219,7 @@ void IntervalExeState::printTable(const VarToValMap &table, std::ostream &oss) c
|
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
-
void IntervalExeState::printTable(const
|
|
222
|
+
void IntervalExeState::printTable(const VarToAddrs &table, std::ostream &oss) const
|
|
223
223
|
{
|
|
224
224
|
oss.flags(std::ios::left);
|
|
225
225
|
std::set<NodeID> ordered;
|
|
@@ -230,7 +230,7 @@ void IntervalExeState::printTable(const VarToVAddrs &table, std::ostream &oss) c
|
|
|
230
230
|
for (const auto &item: ordered)
|
|
231
231
|
{
|
|
232
232
|
oss << "Var" << std::to_string(item);
|
|
233
|
-
|
|
233
|
+
Addrs sim = table.at(item);
|
|
234
234
|
oss << "\t Value: " << std::hex << "[ ";
|
|
235
235
|
for (auto it = sim.begin(); it != sim.end(); ++it)
|
|
236
236
|
{
|
|
@@ -35,9 +35,9 @@ using namespace std;
|
|
|
35
35
|
SVFIR2ConsExeState::~SVFIR2ConsExeState()
|
|
36
36
|
{
|
|
37
37
|
ConsExeState::globalConsES._varToVal.clear();
|
|
38
|
-
ConsExeState::globalConsES.
|
|
38
|
+
ConsExeState::globalConsES._varToAddrs.clear();
|
|
39
39
|
ConsExeState::globalConsES._locToVal.clear();
|
|
40
|
-
ConsExeState::globalConsES.
|
|
40
|
+
ConsExeState::globalConsES._locToAddrs.clear();
|
|
41
41
|
}
|
|
42
42
|
/// Translator for llvm ir
|
|
43
43
|
//{%
|
|
@@ -55,7 +55,7 @@ void SVFIR2ConsExeState::translateAddr(const AddrStmt *addr)
|
|
|
55
55
|
}
|
|
56
56
|
else if (inVarToAddrsTable(addr->getRHSVarID()))
|
|
57
57
|
{
|
|
58
|
-
_es->globalConsES.
|
|
58
|
+
_es->globalConsES._varToAddrs[addr->getLHSVarID()] = _es->globalConsES._varToAddrs[addr->getRHSVarID()];
|
|
59
59
|
}
|
|
60
60
|
else
|
|
61
61
|
{
|
|
@@ -74,7 +74,7 @@ void SVFIR2ConsExeState::translateBinary(const BinaryOPStmt *binary)
|
|
|
74
74
|
u32_t op1 = binary->getOpVarID(1);
|
|
75
75
|
u32_t res = binary->getResID();
|
|
76
76
|
// rhs is not initialized
|
|
77
|
-
if (!_es->
|
|
77
|
+
if (!_es->inVarToValTable(op0) || !_es->inVarToValTable(op1))
|
|
78
78
|
return;
|
|
79
79
|
|
|
80
80
|
SingleAbsValue &lhs = (*_es)[op0], &rhs = (*_es)[op1];
|
|
@@ -196,7 +196,7 @@ void SVFIR2ConsExeState::translateCmp(const CmpStmt *cmp)
|
|
|
196
196
|
else if (inVarToAddrsTable(op0) && inVarToAddrsTable(op1))
|
|
197
197
|
{
|
|
198
198
|
|
|
199
|
-
|
|
199
|
+
Addrs &lhs = _es->getAddrs(op0), &rhs = _es->getAddrs(op1);
|
|
200
200
|
if (lhs.size() == 1)
|
|
201
201
|
{
|
|
202
202
|
(*_es)[res] = SingleAbsValue::topConstant();
|
|
@@ -346,7 +346,7 @@ void SVFIR2ConsExeState::translateLoad(const LoadStmt *load)
|
|
|
346
346
|
u32_t lhs = load->getLHSVarID();
|
|
347
347
|
if (inVarToAddrsTable(rhs))
|
|
348
348
|
{
|
|
349
|
-
const
|
|
349
|
+
const Addrs &addrs = _es->getAddrs(rhs);
|
|
350
350
|
for (const auto &addr: addrs)
|
|
351
351
|
{
|
|
352
352
|
assert(isVirtualMemAddress(addr) && "not addr?");
|
|
@@ -355,13 +355,13 @@ void SVFIR2ConsExeState::translateLoad(const LoadStmt *load)
|
|
|
355
355
|
{
|
|
356
356
|
if (inLocToAddrsTable(objId))
|
|
357
357
|
{
|
|
358
|
-
_es->
|
|
358
|
+
_es->getAddrs(lhs).setBottom();
|
|
359
359
|
}
|
|
360
360
|
break;
|
|
361
361
|
}
|
|
362
362
|
else if (!load->getLHSVar()->getType() && inLocToAddrsTable(objId))
|
|
363
363
|
{
|
|
364
|
-
_es->
|
|
364
|
+
_es->getAddrs(lhs).setBottom();
|
|
365
365
|
break;
|
|
366
366
|
}
|
|
367
367
|
else if (inLocToValTable(objId))
|
|
@@ -381,11 +381,11 @@ void SVFIR2ConsExeState::translateLoad(const LoadStmt *load)
|
|
|
381
381
|
{
|
|
382
382
|
if (!inVarToAddrsTable(lhs))
|
|
383
383
|
{
|
|
384
|
-
_es->
|
|
384
|
+
_es->getAddrs(lhs) = _es->loadAddrs(addr);
|
|
385
385
|
}
|
|
386
386
|
else
|
|
387
387
|
{
|
|
388
|
-
_es->
|
|
388
|
+
_es->getAddrs(lhs).join_with(_es->loadAddrs(addr));
|
|
389
389
|
}
|
|
390
390
|
}
|
|
391
391
|
}
|
|
@@ -393,11 +393,11 @@ void SVFIR2ConsExeState::translateLoad(const LoadStmt *load)
|
|
|
393
393
|
{
|
|
394
394
|
if (!inVarToAddrsTable(lhs))
|
|
395
395
|
{
|
|
396
|
-
_es->
|
|
396
|
+
_es->getAddrs(lhs) = _es->loadAddrs(addr);
|
|
397
397
|
}
|
|
398
398
|
else
|
|
399
399
|
{
|
|
400
|
-
_es->
|
|
400
|
+
_es->getAddrs(lhs).join_with(_es->loadAddrs(addr));
|
|
401
401
|
}
|
|
402
402
|
}
|
|
403
403
|
else if (inLocToValTable(objId))
|
|
@@ -428,7 +428,7 @@ void SVFIR2ConsExeState::translateStore(const StoreStmt *store)
|
|
|
428
428
|
{
|
|
429
429
|
if (inVarToValTable(rhs))
|
|
430
430
|
{
|
|
431
|
-
const
|
|
431
|
+
const Addrs &addrs = _es->getAddrs(lhs);
|
|
432
432
|
for (const auto &addr: addrs)
|
|
433
433
|
{
|
|
434
434
|
assert(isVirtualMemAddress(addr) && "not addr?");
|
|
@@ -437,11 +437,11 @@ void SVFIR2ConsExeState::translateStore(const StoreStmt *store)
|
|
|
437
437
|
}
|
|
438
438
|
else if (inVarToAddrsTable(rhs))
|
|
439
439
|
{
|
|
440
|
-
const
|
|
440
|
+
const Addrs &addrs = _es->getAddrs(lhs);
|
|
441
441
|
for (const auto &addr: addrs)
|
|
442
442
|
{
|
|
443
443
|
assert(isVirtualMemAddress(addr) && "not addr?");
|
|
444
|
-
_es->
|
|
444
|
+
_es->storeAddrs(addr, _es->getAddrs(rhs));
|
|
445
445
|
}
|
|
446
446
|
}
|
|
447
447
|
}
|
|
@@ -468,7 +468,7 @@ void SVFIR2ConsExeState::translateCopy(const CopyStmt *copy)
|
|
|
468
468
|
}
|
|
469
469
|
else if (inVarToAddrsTable(rhs))
|
|
470
470
|
{
|
|
471
|
-
_es->
|
|
471
|
+
_es->getAddrs(lhs) = _es->getAddrs(rhs);
|
|
472
472
|
}
|
|
473
473
|
}
|
|
474
474
|
}
|
|
@@ -488,7 +488,7 @@ void SVFIR2ConsExeState::translateCall(const CallPE *callPE)
|
|
|
488
488
|
}
|
|
489
489
|
else if (inVarToAddrsTable(rhs))
|
|
490
490
|
{
|
|
491
|
-
_es->
|
|
491
|
+
_es->getAddrs(lhs) = _es->getAddrs(rhs);
|
|
492
492
|
}
|
|
493
493
|
}
|
|
494
494
|
|
|
@@ -502,7 +502,7 @@ void SVFIR2ConsExeState::translateRet(const RetPE *retPE)
|
|
|
502
502
|
}
|
|
503
503
|
else if (inVarToAddrsTable(rhs))
|
|
504
504
|
{
|
|
505
|
-
_es->
|
|
505
|
+
_es->getAddrs(lhs) = _es->getAddrs(rhs);
|
|
506
506
|
}
|
|
507
507
|
}
|
|
508
508
|
|
|
@@ -517,7 +517,7 @@ void SVFIR2ConsExeState::translateGep(const GepStmt *gep, bool isGlobal)
|
|
|
517
517
|
u32_t lhs = gep->getLHSVarID();
|
|
518
518
|
// rhs is not initialized
|
|
519
519
|
if (!inVarToAddrsTable(rhs)) return;
|
|
520
|
-
const
|
|
520
|
+
const Addrs &rhsVal = _es->getAddrs(rhs);
|
|
521
521
|
if (rhsVal.empty()) return;
|
|
522
522
|
std::pair<s32_t, s32_t> offset = getGepOffset(gep);
|
|
523
523
|
if (offset.first == -1 && offset.second == -1) return;
|
|
@@ -525,7 +525,7 @@ void SVFIR2ConsExeState::translateGep(const GepStmt *gep, bool isGlobal)
|
|
|
525
525
|
{
|
|
526
526
|
return;
|
|
527
527
|
}
|
|
528
|
-
|
|
528
|
+
Addrs gepAddrs;
|
|
529
529
|
s32_t ub = offset.second;
|
|
530
530
|
if (offset.second > (s32_t) Options::MaxFieldLimit() - 1)
|
|
531
531
|
{
|
|
@@ -536,7 +536,7 @@ void SVFIR2ConsExeState::translateGep(const GepStmt *gep, bool isGlobal)
|
|
|
536
536
|
gepAddrs.join_with(getGepObjAddress(rhs, i));
|
|
537
537
|
}
|
|
538
538
|
if (gepAddrs.empty()) return;
|
|
539
|
-
_es->
|
|
539
|
+
_es->getAddrs(lhs) = gepAddrs;
|
|
540
540
|
return;
|
|
541
541
|
}
|
|
542
542
|
|
|
@@ -579,10 +579,10 @@ void SVFIR2ConsExeState::translatePhi(const PhiStmt *phi)
|
|
|
579
579
|
* @param offset
|
|
580
580
|
* @return
|
|
581
581
|
*/
|
|
582
|
-
SVFIR2ConsExeState::
|
|
582
|
+
SVFIR2ConsExeState::Addrs SVFIR2ConsExeState::getGepObjAddress(u32_t base, s32_t offset)
|
|
583
583
|
{
|
|
584
|
-
const
|
|
585
|
-
|
|
584
|
+
const Addrs &addrs = _es->getAddrs(base);
|
|
585
|
+
Addrs ret;
|
|
586
586
|
for (const auto &addr: addrs)
|
|
587
587
|
{
|
|
588
588
|
int64_t baseObj = getInternalID(addr);
|
|
@@ -594,7 +594,7 @@ SVFIR2ConsExeState::VAddrs SVFIR2ConsExeState::getGepObjAddress(u32_t base, s32_
|
|
|
594
594
|
assert(SVFUtil::isa<ObjVar>(PAG::getPAG()->getGNode(baseObj)) && "Fail to get the base object address!");
|
|
595
595
|
NodeID gepObj = PAG::getPAG()->getGepObjVar(baseObj, offset);
|
|
596
596
|
initSVFVar(gepObj);
|
|
597
|
-
if (offset == 0 && baseObj != gepObj) _es->
|
|
597
|
+
if (offset == 0 && baseObj != gepObj) _es->getAddrs(gepObj) = _es->getAddrs(base);
|
|
598
598
|
ret.insert(getVirtualMemAddress(gepObj));
|
|
599
599
|
}
|
|
600
600
|
return ret;
|
|
@@ -736,7 +736,7 @@ void SVFIR2ConsExeState::initObjVar(const ObjVar *objVar, u32_t varId)
|
|
|
736
736
|
else if (SVFUtil::isa<SVFConstantNullPtr>(obj->getValue()))
|
|
737
737
|
_es->globalConsES._varToVal[varId] = 0;
|
|
738
738
|
else if (SVFUtil::isa<SVFGlobalValue>(obj->getValue()))
|
|
739
|
-
_es->globalConsES.
|
|
739
|
+
_es->globalConsES._varToAddrs[varId] = getVirtualMemAddress(varId);
|
|
740
740
|
else if (obj->isConstDataOrAggData())
|
|
741
741
|
{
|
|
742
742
|
// TODO
|
|
@@ -750,19 +750,19 @@ void SVFIR2ConsExeState::initObjVar(const ObjVar *objVar, u32_t varId)
|
|
|
750
750
|
}
|
|
751
751
|
else
|
|
752
752
|
{
|
|
753
|
-
_es->globalConsES.
|
|
753
|
+
_es->globalConsES._varToAddrs[varId] = getVirtualMemAddress(varId);
|
|
754
754
|
}
|
|
755
755
|
}
|
|
756
756
|
else
|
|
757
757
|
{
|
|
758
|
-
_es->globalConsES.
|
|
758
|
+
_es->globalConsES._varToAddrs[varId] = getVirtualMemAddress(varId);
|
|
759
759
|
}
|
|
760
760
|
}
|
|
761
761
|
|
|
762
762
|
|
|
763
763
|
void SVFIR2ConsExeState::initSVFVar(u32_t varId)
|
|
764
764
|
{
|
|
765
|
-
if (_es->
|
|
765
|
+
if (_es->inVarToValTable(varId)) return;
|
|
766
766
|
SVFIR *svfir = PAG::getPAG();
|
|
767
767
|
SVFVar *svfVar = svfir->getGNode(varId);
|
|
768
768
|
// write objvar into cache instead of exestate
|
|
@@ -793,17 +793,17 @@ void SVFIR2ConsExeState::moveToGlobal()
|
|
|
793
793
|
{
|
|
794
794
|
ConsExeState::globalConsES._locToVal.insert(it);
|
|
795
795
|
}
|
|
796
|
-
for (const auto &it: _es->
|
|
796
|
+
for (const auto &it: _es->_varToAddrs)
|
|
797
797
|
{
|
|
798
|
-
ConsExeState::globalConsES.
|
|
798
|
+
ConsExeState::globalConsES._varToAddrs.insert(it);
|
|
799
799
|
}
|
|
800
|
-
for (const auto &it: _es->
|
|
800
|
+
for (const auto &it: _es->_locToAddrs)
|
|
801
801
|
{
|
|
802
|
-
ConsExeState::globalConsES.
|
|
802
|
+
ConsExeState::globalConsES._locToAddrs.insert(it);
|
|
803
803
|
}
|
|
804
|
-
ConsExeState::globalConsES.
|
|
804
|
+
ConsExeState::globalConsES._varToAddrs[0] = ConsExeState::getVirtualMemAddress(0);
|
|
805
805
|
_es->_varToVal.clear();
|
|
806
806
|
_es->_locToVal.clear();
|
|
807
|
-
_es->
|
|
808
|
-
_es->
|
|
807
|
+
_es->_varToAddrs.clear();
|
|
808
|
+
_es->_locToAddrs.clear();
|
|
809
809
|
}
|