svf-tools 1.0.913 → 1.0.915
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/AbstractInterpretation_8cpp.html +7 -5
- package/SVF-doxygen/html/AbstractInterpretation_8cpp_source.html +1593 -1610
- package/SVF-doxygen/html/AbstractInterpretation_8h_source.html +157 -144
- package/SVF-doxygen/html/BufOverflowChecker_8cpp_source.html +797 -786
- package/SVF-doxygen/html/BufOverflowChecker_8h_source.html +7 -7
- package/SVF-doxygen/html/SVFIR2AbsState_8cpp_source.html +815 -826
- package/SVF-doxygen/html/SVFIR2AbsState_8h_source.html +153 -196
- package/SVF-doxygen/html/classSVF_1_1AEStat.html +116 -120
- package/SVF-doxygen/html/classSVF_1_1AbstractInterpretation-members.html +33 -33
- package/SVF-doxygen/html/classSVF_1_1AbstractInterpretation.html +1739 -1684
- package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker-members.html +33 -33
- package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker.html +471 -462
- package/SVF-doxygen/html/classSVF_1_1SVFIR2AbsState-members.html +35 -47
- package/SVF-doxygen/html/classSVF_1_1SVFIR2AbsState.html +1261 -1546
- package/SVF-doxygen/html/dir_9a8e7a56f4029a0d9f62b1c6d1f6e85b.html +0 -2
- package/SVF-doxygen/html/files.html +0 -1
- package/SVF-doxygen/html/functions.html +4 -7
- package/SVF-doxygen/html/functions_a.html +2 -2
- package/SVF-doxygen/html/functions_f.html +3 -3
- package/SVF-doxygen/html/functions_func.html +2 -2
- package/SVF-doxygen/html/functions_func_g.html +16 -16
- package/SVF-doxygen/html/functions_func_h.html +21 -57
- package/SVF-doxygen/html/functions_func_i.html +21 -12
- package/SVF-doxygen/html/functions_func_n.html +1 -1
- package/SVF-doxygen/html/functions_func_s.html +13 -19
- package/SVF-doxygen/html/functions_func_t.html +1 -1
- package/SVF-doxygen/html/functions_func_w.html +1 -1
- package/SVF-doxygen/html/functions_g.html +16 -16
- package/SVF-doxygen/html/functions_h.html +18 -54
- package/SVF-doxygen/html/functions_i.html +32 -23
- package/SVF-doxygen/html/functions_l.html +3 -3
- package/SVF-doxygen/html/functions_n.html +1 -1
- package/SVF-doxygen/html/functions_o.html +4 -4
- package/SVF-doxygen/html/functions_p.html +19 -17
- package/SVF-doxygen/html/functions_r.html +6 -6
- package/SVF-doxygen/html/functions_s.html +18 -26
- package/SVF-doxygen/html/functions_t.html +4 -4
- package/SVF-doxygen/html/functions_v.html +6 -6
- package/SVF-doxygen/html/functions_vars.html +4 -7
- package/SVF-doxygen/html/functions_w.html +1 -1
- package/SVF-doxygen/html/search/all_0.js +131 -132
- package/SVF-doxygen/html/search/all_1.js +504 -504
- package/SVF-doxygen/html/search/all_10.js +326 -326
- package/SVF-doxygen/html/search/all_11.js +227 -227
- package/SVF-doxygen/html/search/all_12.js +559 -562
- package/SVF-doxygen/html/search/all_13.js +186 -186
- package/SVF-doxygen/html/search/all_14.js +74 -74
- package/SVF-doxygen/html/search/all_15.js +175 -175
- package/SVF-doxygen/html/search/all_16.js +77 -77
- 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 +27 -27
- package/SVF-doxygen/html/search/all_1a.js +174 -174
- package/SVF-doxygen/html/search/all_2.js +180 -180
- package/SVF-doxygen/html/search/all_3.js +635 -635
- package/SVF-doxygen/html/search/all_4.js +237 -237
- package/SVF-doxygen/html/search/all_5.js +120 -120
- package/SVF-doxygen/html/search/all_6.js +236 -236
- package/SVF-doxygen/html/search/all_7.js +1039 -1039
- package/SVF-doxygen/html/search/all_8.js +212 -224
- package/SVF-doxygen/html/search/all_9.js +630 -627
- package/SVF-doxygen/html/search/all_a.js +46 -46
- package/SVF-doxygen/html/search/all_b.js +24 -24
- package/SVF-doxygen/html/search/all_c.js +111 -111
- package/SVF-doxygen/html/search/all_d.js +204 -204
- package/SVF-doxygen/html/search/all_e.js +207 -207
- package/SVF-doxygen/html/search/all_f.js +122 -122
- package/SVF-doxygen/html/search/classes_0.js +29 -29
- package/SVF-doxygen/html/search/classes_1.js +11 -11
- package/SVF-doxygen/html/search/classes_10.js +71 -71
- package/SVF-doxygen/html/search/classes_11.js +14 -14
- 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 +19 -19
- package/SVF-doxygen/html/search/classes_15.js +1 -1
- package/SVF-doxygen/html/search/classes_2.js +72 -72
- package/SVF-doxygen/html/search/classes_3.js +35 -35
- package/SVF-doxygen/html/search/classes_4.js +7 -7
- package/SVF-doxygen/html/search/classes_5.js +28 -28
- package/SVF-doxygen/html/search/classes_6.js +98 -98
- package/SVF-doxygen/html/search/classes_7.js +33 -33
- package/SVF-doxygen/html/search/classes_8.js +57 -57
- 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 +19 -19
- 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 +3 -3
- package/SVF-doxygen/html/search/defines_10.js +2 -2
- package/SVF-doxygen/html/search/defines_2.js +30 -30
- package/SVF-doxygen/html/search/defines_3.js +20 -20
- package/SVF-doxygen/html/search/defines_4.js +3 -3
- 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 +8 -8
- package/SVF-doxygen/html/search/defines_f.js +4 -4
- 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 +9 -9
- package/SVF-doxygen/html/search/enums_3.js +2 -2
- 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 +15 -15
- package/SVF-doxygen/html/search/enumvalues_1.js +16 -16
- package/SVF-doxygen/html/search/enumvalues_10.js +36 -36
- package/SVF-doxygen/html/search/enumvalues_11.js +6 -6
- 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 +4 -4
- 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 +50 -50
- package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_7.js +8 -8
- package/SVF-doxygen/html/search/enumvalues_8.js +24 -24
- package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_a.js +17 -17
- 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 +19 -19
- package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
- package/SVF-doxygen/html/search/enumvalues_f.js +48 -48
- package/SVF-doxygen/html/search/files_0.js +18 -18
- package/SVF-doxygen/html/search/files_1.js +9 -9
- 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 +51 -51
- package/SVF-doxygen/html/search/files_3.js +14 -14
- package/SVF-doxygen/html/search/files_4.js +3 -3
- package/SVF-doxygen/html/search/files_5.js +13 -13
- package/SVF-doxygen/html/search/files_6.js +10 -10
- package/SVF-doxygen/html/search/files_7.js +15 -15
- 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 +4 -4
- 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 +56 -57
- package/SVF-doxygen/html/search/files_f.js +8 -8
- package/SVF-doxygen/html/search/functions_0.js +13 -13
- package/SVF-doxygen/html/search/functions_1.js +366 -366
- package/SVF-doxygen/html/search/functions_10.js +140 -140
- package/SVF-doxygen/html/search/functions_11.js +140 -140
- package/SVF-doxygen/html/search/functions_12.js +291 -293
- package/SVF-doxygen/html/search/functions_13.js +52 -52
- package/SVF-doxygen/html/search/functions_14.js +41 -41
- package/SVF-doxygen/html/search/functions_15.js +70 -70
- package/SVF-doxygen/html/search/functions_16.js +38 -38
- package/SVF-doxygen/html/search/functions_17.js +3 -3
- package/SVF-doxygen/html/search/functions_18.js +174 -174
- package/SVF-doxygen/html/search/functions_2.js +92 -92
- package/SVF-doxygen/html/search/functions_3.js +257 -257
- package/SVF-doxygen/html/search/functions_4.js +85 -85
- package/SVF-doxygen/html/search/functions_5.js +54 -54
- package/SVF-doxygen/html/search/functions_6.js +65 -65
- package/SVF-doxygen/html/search/functions_7.js +857 -857
- package/SVF-doxygen/html/search/functions_8.js +164 -176
- package/SVF-doxygen/html/search/functions_9.js +439 -436
- 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 +22 -22
- package/SVF-doxygen/html/search/functions_d.js +81 -81
- package/SVF-doxygen/html/search/functions_e.js +34 -34
- package/SVF-doxygen/html/search/functions_f.js +58 -58
- 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 +4 -4
- 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 +5 -5
- package/SVF-doxygen/html/search/related_8.js +2 -2
- package/SVF-doxygen/html/search/related_9.js +4 -4
- package/SVF-doxygen/html/search/related_a.js +19 -19
- package/SVF-doxygen/html/search/related_b.js +4 -4
- package/SVF-doxygen/html/search/related_c.js +2 -2
- package/SVF-doxygen/html/search/related_d.js +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 +20 -20
- package/SVF-doxygen/html/search/typedefs_1.js +27 -27
- package/SVF-doxygen/html/search/typedefs_10.js +65 -65
- package/SVF-doxygen/html/search/typedefs_11.js +12 -12
- package/SVF-doxygen/html/search/typedefs_12.js +13 -13
- package/SVF-doxygen/html/search/typedefs_13.js +40 -40
- package/SVF-doxygen/html/search/typedefs_14.js +11 -11
- package/SVF-doxygen/html/search/typedefs_2.js +125 -125
- 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 +42 -42
- package/SVF-doxygen/html/search/typedefs_6.js +54 -54
- package/SVF-doxygen/html/search/typedefs_7.js +47 -47
- package/SVF-doxygen/html/search/typedefs_8.js +1 -1
- package/SVF-doxygen/html/search/typedefs_9.js +4 -4
- package/SVF-doxygen/html/search/typedefs_a.js +28 -28
- 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 +169 -170
- package/SVF-doxygen/html/search/variables_1.js +78 -78
- package/SVF-doxygen/html/search/variables_10.js +98 -98
- package/SVF-doxygen/html/search/variables_11.js +47 -47
- package/SVF-doxygen/html/search/variables_12.js +93 -93
- package/SVF-doxygen/html/search/variables_13.js +76 -76
- package/SVF-doxygen/html/search/variables_14.js +14 -14
- package/SVF-doxygen/html/search/variables_15.js +49 -49
- package/SVF-doxygen/html/search/variables_16.js +11 -11
- package/SVF-doxygen/html/search/variables_17.js +1 -1
- package/SVF-doxygen/html/search/variables_18.js +17 -17
- package/SVF-doxygen/html/search/variables_2.js +40 -40
- package/SVF-doxygen/html/search/variables_3.js +143 -143
- package/SVF-doxygen/html/search/variables_4.js +51 -51
- 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 +32 -32
- package/SVF-doxygen/html/search/variables_8.js +8 -8
- package/SVF-doxygen/html/search/variables_9.js +80 -80
- 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 +44 -44
- package/SVF-doxygen/html/search/variables_d.js +58 -58
- package/SVF-doxygen/html/search/variables_e.js +123 -123
- package/SVF-doxygen/html/search/variables_f.js +31 -31
- package/SVF-doxygen/html/svf-ex_8cpp.html +199 -197
- package/SVF-doxygen/html/svf-ex_8cpp_source.html +204 -202
- package/package.json +1 -1
- package/svf/include/AE/Svfexe/AbstractInterpretation.h +28 -21
- package/svf/include/AE/Svfexe/SVFIR2AbsState.h +37 -67
- package/svf/lib/AE/Svfexe/AbstractInterpretation.cpp +153 -169
- package/svf/lib/AE/Svfexe/BufOverflowChecker.cpp +64 -54
- package/svf/lib/AE/Svfexe/SVFIR2AbsState.cpp +134 -146
- package/svf-llvm/tools/Example/svf-ex.cpp +13 -12
- package/svf/lib/AE/Core/SVFIR2Relation.cpp +0 -193
|
@@ -77,32 +77,33 @@ std::string printPts(PointerAnalysis* pta, const SVFValue* svfval)
|
|
|
77
77
|
*/
|
|
78
78
|
void traverseOnSVFStmt(const ICFGNode* node)
|
|
79
79
|
{
|
|
80
|
-
|
|
80
|
+
AbstractState es;
|
|
81
|
+
SVFIR2AbsState* svfir2AbsState = new SVFIR2AbsState(SVFIR::getPAG());
|
|
81
82
|
for (const SVFStmt* stmt: node->getSVFStmts())
|
|
82
83
|
{
|
|
83
84
|
if (const AddrStmt *addr = SVFUtil::dyn_cast<AddrStmt>(stmt))
|
|
84
85
|
{
|
|
85
|
-
|
|
86
|
+
svfir2AbsState->handleAddr(es, addr);
|
|
86
87
|
}
|
|
87
88
|
else if (const BinaryOPStmt *binary = SVFUtil::dyn_cast<BinaryOPStmt>(stmt))
|
|
88
89
|
{
|
|
89
|
-
|
|
90
|
+
svfir2AbsState->handleBinary(es, binary);
|
|
90
91
|
}
|
|
91
92
|
else if (const CmpStmt *cmp = SVFUtil::dyn_cast<CmpStmt>(stmt))
|
|
92
93
|
{
|
|
93
|
-
|
|
94
|
+
svfir2AbsState->handleCmp(es, cmp);
|
|
94
95
|
}
|
|
95
96
|
else if (const LoadStmt *load = SVFUtil::dyn_cast<LoadStmt>(stmt))
|
|
96
97
|
{
|
|
97
|
-
|
|
98
|
+
svfir2AbsState->handleLoad(es, load);
|
|
98
99
|
}
|
|
99
100
|
else if (const StoreStmt *store = SVFUtil::dyn_cast<StoreStmt>(stmt))
|
|
100
101
|
{
|
|
101
|
-
|
|
102
|
+
svfir2AbsState->handleStore(es, store);
|
|
102
103
|
}
|
|
103
104
|
else if (const CopyStmt *copy = SVFUtil::dyn_cast<CopyStmt>(stmt))
|
|
104
105
|
{
|
|
105
|
-
|
|
106
|
+
svfir2AbsState->handleCopy(es, copy);
|
|
106
107
|
}
|
|
107
108
|
else if (const GepStmt *gep = SVFUtil::dyn_cast<GepStmt>(stmt))
|
|
108
109
|
{
|
|
@@ -111,24 +112,24 @@ void traverseOnSVFStmt(const ICFGNode* node)
|
|
|
111
112
|
gep->accumulateConstantByteOffset();
|
|
112
113
|
gep->accumulateConstantOffset();
|
|
113
114
|
}
|
|
114
|
-
|
|
115
|
+
svfir2AbsState->handleGep(es, gep);
|
|
115
116
|
}
|
|
116
117
|
else if (const SelectStmt *select = SVFUtil::dyn_cast<SelectStmt>(stmt))
|
|
117
118
|
{
|
|
118
|
-
|
|
119
|
+
svfir2AbsState->handleSelect(es, select);
|
|
119
120
|
}
|
|
120
121
|
else if (const PhiStmt *phi = SVFUtil::dyn_cast<PhiStmt>(stmt))
|
|
121
122
|
{
|
|
122
|
-
|
|
123
|
+
svfir2AbsState->handlePhi(es, phi);
|
|
123
124
|
}
|
|
124
125
|
else if (const CallPE *callPE = SVFUtil::dyn_cast<CallPE>(stmt))
|
|
125
126
|
{
|
|
126
127
|
// To handle Call Edge
|
|
127
|
-
|
|
128
|
+
svfir2AbsState->handleCall(es, callPE);
|
|
128
129
|
}
|
|
129
130
|
else if (const RetPE *retPE = SVFUtil::dyn_cast<RetPE>(stmt))
|
|
130
131
|
{
|
|
131
|
-
|
|
132
|
+
svfir2AbsState->handleRet(es, retPE);
|
|
132
133
|
}
|
|
133
134
|
else
|
|
134
135
|
assert(false && "implement this part");
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Created by Xiao on 2022/8/18.
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
#include "AE/Svfexe/SVFIR2AbsState.h"
|
|
6
|
-
|
|
7
|
-
using namespace SVF;
|
|
8
|
-
using namespace SVFUtil;
|
|
9
|
-
|
|
10
|
-
void SVFIR2AbsState::handleBinaryRel(const BinaryOPStmt *binary)
|
|
11
|
-
{
|
|
12
|
-
NodeID op0 = binary->getOpVarID(0);
|
|
13
|
-
NodeID op1 = binary->getOpVarID(1);
|
|
14
|
-
NodeID res = binary->getResID();
|
|
15
|
-
Z3Expr &rel_res = _relEs[res];
|
|
16
|
-
const Z3Expr &rel_value0 = _relEs.toZ3Expr(op0);
|
|
17
|
-
const Z3Expr &rel_value1 = _relEs.toZ3Expr(op1);
|
|
18
|
-
switch (binary->getOpcode())
|
|
19
|
-
{
|
|
20
|
-
case BinaryOPStmt::Add:
|
|
21
|
-
{
|
|
22
|
-
rel_res = rel_value0 + rel_value1;
|
|
23
|
-
break;
|
|
24
|
-
}
|
|
25
|
-
case BinaryOPStmt::Sub:
|
|
26
|
-
{
|
|
27
|
-
rel_res = rel_value0 - rel_value1;
|
|
28
|
-
break;
|
|
29
|
-
}
|
|
30
|
-
case BinaryOPStmt::Mul:
|
|
31
|
-
{
|
|
32
|
-
rel_res = rel_value0 * rel_value1;
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
35
|
-
case BinaryOPStmt::SDiv:
|
|
36
|
-
{
|
|
37
|
-
rel_res = rel_value0 / rel_value1;
|
|
38
|
-
break;
|
|
39
|
-
}
|
|
40
|
-
case BinaryOPStmt::SRem:
|
|
41
|
-
break;
|
|
42
|
-
case BinaryOPStmt::Xor:
|
|
43
|
-
break;
|
|
44
|
-
case BinaryOPStmt::And:
|
|
45
|
-
break;
|
|
46
|
-
case BinaryOPStmt::Or:
|
|
47
|
-
break;
|
|
48
|
-
case BinaryOPStmt::AShr:
|
|
49
|
-
break;
|
|
50
|
-
case BinaryOPStmt::Shl:
|
|
51
|
-
break;
|
|
52
|
-
default:
|
|
53
|
-
{
|
|
54
|
-
assert(false && "implement this part");
|
|
55
|
-
abort();
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
void SVFIR2AbsState::handleCmpRel(const CmpStmt *cmp)
|
|
61
|
-
{
|
|
62
|
-
NodeID op0 = cmp->getOpVarID(0);
|
|
63
|
-
NodeID op1 = cmp->getOpVarID(1);
|
|
64
|
-
NodeID res_id = cmp->getResID();
|
|
65
|
-
u32_t predicate = cmp->getPredicate();
|
|
66
|
-
Z3Expr &rel_res = _relEs[res_id];
|
|
67
|
-
const Z3Expr &rel_value0 = _relEs.toZ3Expr(op0);
|
|
68
|
-
const Z3Expr &rel_value1 = _relEs.toZ3Expr(op1);
|
|
69
|
-
switch (predicate)
|
|
70
|
-
{
|
|
71
|
-
case CmpStmt::ICMP_EQ:
|
|
72
|
-
{
|
|
73
|
-
rel_res = ite(rel_value0 == rel_value1, 1, 0);
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
case CmpStmt::ICMP_NE:
|
|
77
|
-
{
|
|
78
|
-
rel_res = ite(rel_value0 != rel_value1, 1, 0);
|
|
79
|
-
break;
|
|
80
|
-
}
|
|
81
|
-
case CmpStmt::ICMP_UGT:
|
|
82
|
-
case CmpStmt::ICMP_SGT:
|
|
83
|
-
{
|
|
84
|
-
rel_res = ite(rel_value0 > rel_value1, 1, 0);
|
|
85
|
-
break;
|
|
86
|
-
}
|
|
87
|
-
case CmpStmt::ICMP_UGE:
|
|
88
|
-
case CmpStmt::ICMP_SGE:
|
|
89
|
-
{
|
|
90
|
-
rel_res = ite(rel_value0 >= rel_value1, 1, 0);
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
case CmpStmt::ICMP_ULT:
|
|
94
|
-
case CmpStmt::ICMP_SLT:
|
|
95
|
-
{
|
|
96
|
-
rel_res = ite(rel_value0 < rel_value1, 1, 0);
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
case CmpStmt::ICMP_ULE:
|
|
100
|
-
case CmpStmt::ICMP_SLE:
|
|
101
|
-
{
|
|
102
|
-
rel_res = ite(rel_value0 <= rel_value1, 1, 0);
|
|
103
|
-
break;
|
|
104
|
-
}
|
|
105
|
-
default:
|
|
106
|
-
assert(false && "implement this part");
|
|
107
|
-
abort();
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
void SVFIR2AbsState::handleLoadRel(const LoadStmt *load)
|
|
112
|
-
{
|
|
113
|
-
u32_t rhs = load->getRHSVarID();
|
|
114
|
-
u32_t lhs = load->getLHSVarID();
|
|
115
|
-
_relEs[lhs] = _relEs.load(Z3Expr((int) _es[rhs].getInterval().lb().getNumeral()));
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
void SVFIR2AbsState::handleStoreRel(const StoreStmt *store)
|
|
119
|
-
{
|
|
120
|
-
u32_t rhs = store->getRHSVarID();
|
|
121
|
-
u32_t lhs = store->getLHSVarID();
|
|
122
|
-
assert(_es[lhs].getInterval().is_numeral() && "loc not numeral?");
|
|
123
|
-
_relEs.store(Z3Expr((int) _es[lhs].getInterval().lb().getNumeral()), _relEs.toZ3Expr(rhs));
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
void SVFIR2AbsState::handleCopyRel(const CopyStmt *copy)
|
|
128
|
-
{
|
|
129
|
-
u32_t rhs = copy->getRHSVarID();
|
|
130
|
-
u32_t lhs = copy->getLHSVarID();
|
|
131
|
-
_relEs[lhs] = _relEs.toZ3Expr(rhs);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
void SVFIR2AbsState::handleSelectRel(const SelectStmt *select)
|
|
135
|
-
{
|
|
136
|
-
u32_t res = select->getResID();
|
|
137
|
-
u32_t tval = select->getTrueValue()->getId();
|
|
138
|
-
u32_t fval = select->getFalseValue()->getId();
|
|
139
|
-
u32_t cond = select->getCondition()->getId();
|
|
140
|
-
IntervalValue& condVal = _es[cond].getInterval();
|
|
141
|
-
if (condVal.is_numeral())
|
|
142
|
-
{
|
|
143
|
-
_relEs[res] = condVal.is_zero() ? _relEs.toZ3Expr(fval) : _relEs.toZ3Expr(tval);
|
|
144
|
-
}
|
|
145
|
-
else
|
|
146
|
-
{
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
void SVFIR2AbsState::handlePhiRel(const PhiStmt *phi, const ICFGNode *srcNode,
|
|
152
|
-
const std::vector<const ICFGEdge *> &path)
|
|
153
|
-
{
|
|
154
|
-
u32_t res = phi->getResID();
|
|
155
|
-
std::unordered_map<const ICFGNode *, NodeID> candidate_ids;
|
|
156
|
-
for (u32_t i = 0; i < phi->getOpVarNum(); i++)
|
|
157
|
-
{
|
|
158
|
-
candidate_ids[phi->getOpICFGNode(i)] = phi->getOpVarID(i);
|
|
159
|
-
}
|
|
160
|
-
for (auto it = path.end() - 1; it != path.begin(); --it)
|
|
161
|
-
{
|
|
162
|
-
auto cur_node = (*it)->getDstNode();
|
|
163
|
-
if (candidate_ids.find(cur_node) != candidate_ids.end())
|
|
164
|
-
{
|
|
165
|
-
if (_es.getVarToVal().find(res) == _es.getVarToVal().end())
|
|
166
|
-
{
|
|
167
|
-
_relEs[res] = _relEs.toZ3Expr(candidate_ids[cur_node]);
|
|
168
|
-
}
|
|
169
|
-
else
|
|
170
|
-
{
|
|
171
|
-
|
|
172
|
-
}
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
assert(false && "predecessor ICFGNode of this PhiStmt not found?");
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
void SVFIR2AbsState::handleCallRel(const CallPE *callPE)
|
|
180
|
-
{
|
|
181
|
-
u32_t rhs = callPE->getRHSVarID();
|
|
182
|
-
u32_t lhs = callPE->getLHSVarID();
|
|
183
|
-
_relEs[lhs] = _relEs.toZ3Expr(rhs);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
void SVFIR2AbsState::handleRetRel(const RetPE *retPE)
|
|
187
|
-
{
|
|
188
|
-
u32_t lhs = retPE->getLHSVarID();
|
|
189
|
-
u32_t rhs = retPE->getRHSVarID();
|
|
190
|
-
_relEs[lhs] = _relEs.toZ3Expr(rhs);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
|