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.
Files changed (279) hide show
  1. package/SVF-doxygen/html/ConsExeState_8cpp_source.html +21 -21
  2. package/SVF-doxygen/html/ConsExeState_8h_source.html +384 -385
  3. package/SVF-doxygen/html/ExeState_8cpp_source.html +24 -24
  4. package/SVF-doxygen/html/ExeState_8h_source.html +227 -217
  5. package/SVF-doxygen/html/IntervalExeState_8cpp_source.html +8 -8
  6. package/SVF-doxygen/html/IntervalExeState_8h_source.html +412 -408
  7. package/SVF-doxygen/html/RelationSolver_8cpp_source.html +3 -3
  8. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +43 -43
  9. package/SVF-doxygen/html/SVFIR2ConsExeState_8h_source.html +18 -18
  10. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +250 -262
  11. package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +103 -101
  12. package/SVF-doxygen/html/SymState_8h_source.html +1 -1
  13. package/SVF-doxygen/html/classSVF_1_1ConsExeState-members.html +74 -74
  14. package/SVF-doxygen/html/classSVF_1_1ConsExeState.html +412 -394
  15. package/SVF-doxygen/html/classSVF_1_1ExeState-members.html +34 -34
  16. package/SVF-doxygen/html/classSVF_1_1ExeState.html +287 -272
  17. package/SVF-doxygen/html/classSVF_1_1IntervalExeState-members.html +78 -78
  18. package/SVF-doxygen/html/classSVF_1_1IntervalExeState.html +445 -434
  19. package/SVF-doxygen/html/classSVF_1_1RelationSolver.html +3 -3
  20. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState-members.html +28 -28
  21. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +77 -77
  22. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState-members.html +40 -40
  23. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +372 -372
  24. package/SVF-doxygen/html/classSVF_1_1SymState.html +2 -2
  25. package/SVF-doxygen/html/functions.html +6 -6
  26. package/SVF-doxygen/html/functions_a.html +13 -8
  27. package/SVF-doxygen/html/functions_b.html +3 -3
  28. package/SVF-doxygen/html/functions_e.html +2 -2
  29. package/SVF-doxygen/html/functions_func_e.html +2 -2
  30. package/SVF-doxygen/html/functions_func_g.html +32 -35
  31. package/SVF-doxygen/html/functions_func_i.html +11 -21
  32. package/SVF-doxygen/html/functions_func_l.html +6 -6
  33. package/SVF-doxygen/html/functions_func_n.html +3 -3
  34. package/SVF-doxygen/html/functions_func_p.html +2 -2
  35. package/SVF-doxygen/html/functions_func_s.html +7 -7
  36. package/SVF-doxygen/html/functions_func_w.html +3 -3
  37. package/SVF-doxygen/html/functions_g.html +27 -30
  38. package/SVF-doxygen/html/functions_i.html +13 -23
  39. package/SVF-doxygen/html/functions_l.html +8 -8
  40. package/SVF-doxygen/html/functions_n.html +7 -7
  41. package/SVF-doxygen/html/functions_o.html +4 -4
  42. package/SVF-doxygen/html/functions_p.html +9 -9
  43. package/SVF-doxygen/html/functions_r.html +1 -1
  44. package/SVF-doxygen/html/functions_s.html +19 -17
  45. package/SVF-doxygen/html/functions_t.html +7 -7
  46. package/SVF-doxygen/html/functions_type.html +5 -0
  47. package/SVF-doxygen/html/functions_type_v.html +3 -8
  48. package/SVF-doxygen/html/functions_v.html +13 -16
  49. package/SVF-doxygen/html/functions_vars.html +6 -6
  50. package/SVF-doxygen/html/functions_vars_g.html +2 -2
  51. package/SVF-doxygen/html/functions_w.html +3 -3
  52. package/SVF-doxygen/html/search/all_0.js +4 -4
  53. package/SVF-doxygen/html/search/all_1.js +210 -209
  54. package/SVF-doxygen/html/search/all_10.js +324 -324
  55. package/SVF-doxygen/html/search/all_11.js +222 -222
  56. package/SVF-doxygen/html/search/all_12.js +544 -544
  57. package/SVF-doxygen/html/search/all_13.js +191 -191
  58. package/SVF-doxygen/html/search/all_14.js +67 -67
  59. package/SVF-doxygen/html/search/all_15.js +167 -169
  60. package/SVF-doxygen/html/search/all_16.js +63 -63
  61. package/SVF-doxygen/html/search/all_17.js +1 -1
  62. package/SVF-doxygen/html/search/all_18.js +1 -1
  63. package/SVF-doxygen/html/search/all_19.js +11 -11
  64. package/SVF-doxygen/html/search/all_1a.js +172 -172
  65. package/SVF-doxygen/html/search/all_2.js +169 -169
  66. package/SVF-doxygen/html/search/all_3.js +642 -642
  67. package/SVF-doxygen/html/search/all_4.js +233 -233
  68. package/SVF-doxygen/html/search/all_5.js +119 -119
  69. package/SVF-doxygen/html/search/all_6.js +225 -225
  70. package/SVF-doxygen/html/search/all_7.js +946 -947
  71. package/SVF-doxygen/html/search/all_9.js +481 -486
  72. package/SVF-doxygen/html/search/all_a.js +46 -46
  73. package/SVF-doxygen/html/search/all_b.js +26 -26
  74. package/SVF-doxygen/html/search/all_c.js +116 -116
  75. package/SVF-doxygen/html/search/all_d.js +196 -196
  76. package/SVF-doxygen/html/search/all_e.js +207 -207
  77. package/SVF-doxygen/html/search/all_f.js +115 -115
  78. package/SVF-doxygen/html/search/classes_0.js +26 -26
  79. package/SVF-doxygen/html/search/classes_1.js +9 -9
  80. package/SVF-doxygen/html/search/classes_10.js +73 -73
  81. package/SVF-doxygen/html/search/classes_11.js +15 -15
  82. package/SVF-doxygen/html/search/classes_12.js +2 -2
  83. package/SVF-doxygen/html/search/classes_13.js +10 -10
  84. package/SVF-doxygen/html/search/classes_14.js +14 -14
  85. package/SVF-doxygen/html/search/classes_15.js +1 -1
  86. package/SVF-doxygen/html/search/classes_2.js +80 -80
  87. package/SVF-doxygen/html/search/classes_3.js +37 -37
  88. package/SVF-doxygen/html/search/classes_4.js +9 -9
  89. package/SVF-doxygen/html/search/classes_5.js +28 -28
  90. package/SVF-doxygen/html/search/classes_6.js +104 -104
  91. package/SVF-doxygen/html/search/classes_7.js +33 -33
  92. package/SVF-doxygen/html/search/classes_8.js +56 -56
  93. package/SVF-doxygen/html/search/classes_9.js +1 -1
  94. package/SVF-doxygen/html/search/classes_a.js +12 -12
  95. package/SVF-doxygen/html/search/classes_b.js +29 -29
  96. package/SVF-doxygen/html/search/classes_c.js +6 -6
  97. package/SVF-doxygen/html/search/classes_d.js +18 -18
  98. package/SVF-doxygen/html/search/classes_e.js +36 -36
  99. package/SVF-doxygen/html/search/classes_f.js +25 -25
  100. package/SVF-doxygen/html/search/defines_0.js +3 -3
  101. package/SVF-doxygen/html/search/defines_1.js +2 -2
  102. package/SVF-doxygen/html/search/defines_2.js +30 -30
  103. package/SVF-doxygen/html/search/defines_3.js +21 -21
  104. package/SVF-doxygen/html/search/defines_4.js +2 -2
  105. package/SVF-doxygen/html/search/defines_5.js +4 -4
  106. package/SVF-doxygen/html/search/defines_6.js +2 -2
  107. package/SVF-doxygen/html/search/defines_7.js +5 -5
  108. package/SVF-doxygen/html/search/defines_8.js +11 -11
  109. package/SVF-doxygen/html/search/defines_9.js +9 -9
  110. package/SVF-doxygen/html/search/defines_a.js +2 -2
  111. package/SVF-doxygen/html/search/defines_b.js +1 -1
  112. package/SVF-doxygen/html/search/defines_c.js +3 -3
  113. package/SVF-doxygen/html/search/defines_d.js +2 -2
  114. package/SVF-doxygen/html/search/defines_e.js +7 -7
  115. package/SVF-doxygen/html/search/defines_f.js +3 -3
  116. package/SVF-doxygen/html/search/enums_0.js +3 -3
  117. package/SVF-doxygen/html/search/enums_1.js +2 -2
  118. package/SVF-doxygen/html/search/enums_10.js +1 -1
  119. package/SVF-doxygen/html/search/enums_11.js +1 -1
  120. package/SVF-doxygen/html/search/enums_2.js +8 -8
  121. package/SVF-doxygen/html/search/enums_3.js +1 -1
  122. package/SVF-doxygen/html/search/enums_4.js +3 -3
  123. package/SVF-doxygen/html/search/enums_5.js +1 -1
  124. package/SVF-doxygen/html/search/enums_6.js +2 -2
  125. package/SVF-doxygen/html/search/enums_7.js +2 -2
  126. package/SVF-doxygen/html/search/enums_8.js +4 -4
  127. package/SVF-doxygen/html/search/enums_9.js +1 -1
  128. package/SVF-doxygen/html/search/enums_a.js +1 -1
  129. package/SVF-doxygen/html/search/enums_b.js +7 -7
  130. package/SVF-doxygen/html/search/enums_c.js +1 -1
  131. package/SVF-doxygen/html/search/enums_d.js +4 -4
  132. package/SVF-doxygen/html/search/enums_e.js +2 -2
  133. package/SVF-doxygen/html/search/enums_f.js +4 -4
  134. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  135. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  136. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  137. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  138. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  139. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  140. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  141. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  142. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  143. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  144. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  145. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  146. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  147. package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
  148. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  149. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  150. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  151. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  152. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  153. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  154. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  155. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  156. package/SVF-doxygen/html/search/files_0.js +13 -13
  157. package/SVF-doxygen/html/search/files_1.js +7 -7
  158. package/SVF-doxygen/html/search/files_10.js +8 -8
  159. package/SVF-doxygen/html/search/files_11.js +8 -8
  160. package/SVF-doxygen/html/search/files_12.js +2 -2
  161. package/SVF-doxygen/html/search/files_2.js +55 -55
  162. package/SVF-doxygen/html/search/files_3.js +14 -14
  163. package/SVF-doxygen/html/search/files_4.js +5 -5
  164. package/SVF-doxygen/html/search/files_5.js +13 -13
  165. package/SVF-doxygen/html/search/files_6.js +9 -9
  166. package/SVF-doxygen/html/search/files_7.js +14 -14
  167. package/SVF-doxygen/html/search/files_8.js +13 -13
  168. package/SVF-doxygen/html/search/files_9.js +18 -18
  169. package/SVF-doxygen/html/search/files_a.js +3 -3
  170. package/SVF-doxygen/html/search/files_b.js +2 -2
  171. package/SVF-doxygen/html/search/files_c.js +20 -20
  172. package/SVF-doxygen/html/search/files_d.js +4 -4
  173. package/SVF-doxygen/html/search/files_e.js +62 -62
  174. package/SVF-doxygen/html/search/files_f.js +8 -8
  175. package/SVF-doxygen/html/search/functions_0.js +12 -12
  176. package/SVF-doxygen/html/search/functions_1.js +360 -360
  177. package/SVF-doxygen/html/search/functions_10.js +140 -140
  178. package/SVF-doxygen/html/search/functions_11.js +138 -138
  179. package/SVF-doxygen/html/search/functions_12.js +279 -279
  180. package/SVF-doxygen/html/search/functions_13.js +59 -59
  181. package/SVF-doxygen/html/search/functions_14.js +39 -39
  182. package/SVF-doxygen/html/search/functions_15.js +71 -71
  183. package/SVF-doxygen/html/search/functions_16.js +32 -32
  184. package/SVF-doxygen/html/search/functions_17.js +3 -3
  185. package/SVF-doxygen/html/search/functions_18.js +172 -172
  186. package/SVF-doxygen/html/search/functions_2.js +87 -87
  187. package/SVF-doxygen/html/search/functions_3.js +257 -257
  188. package/SVF-doxygen/html/search/functions_4.js +75 -75
  189. package/SVF-doxygen/html/search/functions_5.js +53 -53
  190. package/SVF-doxygen/html/search/functions_6.js +59 -59
  191. package/SVF-doxygen/html/search/functions_7.js +852 -853
  192. package/SVF-doxygen/html/search/functions_8.js +149 -149
  193. package/SVF-doxygen/html/search/functions_9.js +423 -428
  194. package/SVF-doxygen/html/search/functions_a.js +30 -30
  195. package/SVF-doxygen/html/search/functions_b.js +2 -2
  196. package/SVF-doxygen/html/search/functions_c.js +26 -26
  197. package/SVF-doxygen/html/search/functions_d.js +77 -77
  198. package/SVF-doxygen/html/search/functions_e.js +35 -35
  199. package/SVF-doxygen/html/search/functions_f.js +56 -56
  200. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  201. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  202. package/SVF-doxygen/html/search/related_0.js +2 -2
  203. package/SVF-doxygen/html/search/related_1.js +2 -2
  204. package/SVF-doxygen/html/search/related_2.js +2 -2
  205. package/SVF-doxygen/html/search/related_3.js +2 -2
  206. package/SVF-doxygen/html/search/related_4.js +2 -2
  207. package/SVF-doxygen/html/search/related_5.js +1 -1
  208. package/SVF-doxygen/html/search/related_6.js +2 -2
  209. package/SVF-doxygen/html/search/related_7.js +4 -4
  210. package/SVF-doxygen/html/search/related_8.js +2 -2
  211. package/SVF-doxygen/html/search/related_9.js +4 -4
  212. package/SVF-doxygen/html/search/related_a.js +19 -19
  213. package/SVF-doxygen/html/search/related_b.js +4 -4
  214. package/SVF-doxygen/html/search/related_c.js +1 -1
  215. package/SVF-doxygen/html/search/related_d.js +12 -12
  216. package/SVF-doxygen/html/search/related_e.js +2 -2
  217. package/SVF-doxygen/html/search/related_f.js +2 -2
  218. package/SVF-doxygen/html/search/typedefs_0.js +19 -18
  219. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  220. package/SVF-doxygen/html/search/typedefs_10.js +61 -61
  221. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  222. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  223. package/SVF-doxygen/html/search/typedefs_13.js +33 -34
  224. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  225. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  226. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  227. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  228. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  229. package/SVF-doxygen/html/search/typedefs_6.js +55 -55
  230. package/SVF-doxygen/html/search/typedefs_7.js +44 -44
  231. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  232. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  233. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  234. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  235. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  236. package/SVF-doxygen/html/search/typedefs_d.js +14 -14
  237. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  238. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  239. package/SVF-doxygen/html/search/variables_0.js +151 -151
  240. package/SVF-doxygen/html/search/variables_1.js +75 -75
  241. package/SVF-doxygen/html/search/variables_10.js +97 -97
  242. package/SVF-doxygen/html/search/variables_11.js +44 -44
  243. package/SVF-doxygen/html/search/variables_12.js +92 -92
  244. package/SVF-doxygen/html/search/variables_13.js +75 -75
  245. package/SVF-doxygen/html/search/variables_14.js +14 -14
  246. package/SVF-doxygen/html/search/variables_15.js +48 -48
  247. package/SVF-doxygen/html/search/variables_16.js +9 -9
  248. package/SVF-doxygen/html/search/variables_17.js +1 -1
  249. package/SVF-doxygen/html/search/variables_18.js +2 -2
  250. package/SVF-doxygen/html/search/variables_2.js +38 -38
  251. package/SVF-doxygen/html/search/variables_3.js +142 -142
  252. package/SVF-doxygen/html/search/variables_4.js +55 -55
  253. package/SVF-doxygen/html/search/variables_5.js +37 -37
  254. package/SVF-doxygen/html/search/variables_6.js +66 -66
  255. package/SVF-doxygen/html/search/variables_7.js +33 -33
  256. package/SVF-doxygen/html/search/variables_8.js +7 -7
  257. package/SVF-doxygen/html/search/variables_9.js +78 -78
  258. package/SVF-doxygen/html/search/variables_a.js +4 -4
  259. package/SVF-doxygen/html/search/variables_b.js +10 -10
  260. package/SVF-doxygen/html/search/variables_c.js +45 -45
  261. package/SVF-doxygen/html/search/variables_d.js +56 -56
  262. package/SVF-doxygen/html/search/variables_e.js +123 -123
  263. package/SVF-doxygen/html/search/variables_f.js +29 -29
  264. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1ConsExeState_01_4.html +5 -5
  265. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1ExeState_01_4.html +5 -5
  266. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1IntervalExeState_01_4.html +5 -5
  267. package/SVF-doxygen/html/svf-ex_8cpp.html +7 -7
  268. package/SVF-doxygen/html/svf-ex_8cpp_source.html +7 -7
  269. package/package.json +1 -1
  270. package/svf/include/AbstractExecution/ConsExeState.h +99 -96
  271. package/svf/include/AbstractExecution/ExeState.h +66 -53
  272. package/svf/include/AbstractExecution/IntervalExeState.h +66 -61
  273. package/svf/include/AbstractExecution/SVFIR2ConsExeState.h +7 -7
  274. package/svf/include/AbstractExecution/SVFIR2ItvExeState.h +20 -14
  275. package/svf/lib/AbstractExecution/ConsExeState.cpp +13 -13
  276. package/svf/lib/AbstractExecution/ExeState.cpp +19 -19
  277. package/svf/lib/AbstractExecution/IntervalExeState.cpp +4 -4
  278. package/svf/lib/AbstractExecution/SVFIR2ConsExeState.cpp +36 -36
  279. package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +80 -92
@@ -49,9 +49,9 @@ class ExeState
49
49
 
50
50
  public:
51
51
 
52
- typedef AddressValue VAddrs;
53
- typedef Map<u32_t, VAddrs> VarToVAddrs;
54
- /// Execution state kind
52
+ typedef AddressValue Addrs;
53
+ typedef Map<u32_t, Addrs> VarToAddrs;
54
+ /// Execution state type
55
55
  enum ExeState_TYPE
56
56
  {
57
57
  IntervalK, SingleValueK
@@ -64,18 +64,18 @@ public:
64
64
 
65
65
  virtual ~ExeState() = default;
66
66
 
67
- ExeState(const ExeState &rhs) : _varToVAddrs(rhs._varToVAddrs),
68
- _locToVAddrs(rhs._locToVAddrs) {}
67
+ ExeState(const ExeState &rhs) : _varToAddrs(rhs._varToAddrs),
68
+ _locToAddrs(rhs._locToAddrs) {}
69
69
 
70
- ExeState(ExeState &&rhs) noexcept: _varToVAddrs(std::move(rhs._varToVAddrs)),
71
- _locToVAddrs(std::move(rhs._locToVAddrs)) {}
70
+ ExeState(ExeState &&rhs) noexcept: _varToAddrs(std::move(rhs._varToAddrs)),
71
+ _locToAddrs(std::move(rhs._locToAddrs)) {}
72
72
 
73
73
  ExeState &operator=(const ExeState &rhs)
74
74
  {
75
75
  if(*this != rhs)
76
76
  {
77
- _varToVAddrs = rhs._varToVAddrs;
78
- _locToVAddrs = rhs._locToVAddrs;
77
+ _varToAddrs = rhs._varToAddrs;
78
+ _locToAddrs = rhs._locToAddrs;
79
79
  }
80
80
  return *this;
81
81
  }
@@ -84,24 +84,49 @@ public:
84
84
  {
85
85
  if (this != &rhs)
86
86
  {
87
- _varToVAddrs = std::move(rhs._varToVAddrs);
88
- _locToVAddrs = std::move(rhs._locToVAddrs);
87
+ _varToAddrs = std::move(rhs._varToAddrs);
88
+ _locToAddrs = std::move(rhs._locToAddrs);
89
89
  }
90
90
  return *this;
91
91
  }
92
92
 
93
- virtual bool operator==(const ExeState &rhs) const;
94
93
 
95
- inline virtual bool operator!=(const ExeState &rhs) const
94
+ protected:
95
+ VarToAddrs _varToAddrs{{0, getVirtualMemAddress(0)}}; ///< Map a variable (symbol) to its memory addresses
96
+ VarToAddrs _locToAddrs; ///< Map a memory address to its stored memory addresses
97
+
98
+ public:
99
+
100
+ /// get memory addresses of variable
101
+ virtual Addrs &getAddrs(u32_t id)
96
102
  {
97
- return !(*this == rhs);
103
+ return _varToAddrs[id];
98
104
  }
99
105
 
100
- bool equals(const ExeState *other) const
106
+ /// whether the variable is in varToAddrs table
107
+ inline virtual bool inVarToAddrsTable(u32_t id) const
101
108
  {
102
- return false;
109
+ return _varToAddrs.find(id) != _varToAddrs.end();
110
+ }
111
+
112
+ /// whether the memory address stores memory addresses
113
+ inline virtual bool inLocToAddrsTable(u32_t id) const
114
+ {
115
+ return _locToAddrs.find(id) != _locToAddrs.end();
103
116
  }
104
117
 
118
+
119
+ inline virtual const VarToAddrs &getVarToAddrs() const
120
+ {
121
+ return _varToAddrs;
122
+ }
123
+
124
+ inline virtual const VarToAddrs &getLocToAddrs() const
125
+ {
126
+ return _locToAddrs;
127
+ }
128
+
129
+ public:
105
130
  /// Make all value join with the other
106
131
  bool joinWith(const ExeState &other);
107
132
 
@@ -123,44 +148,22 @@ public:
123
148
  return _kind;
124
149
  }
125
150
 
126
- inline virtual const VarToVAddrs &getVarToVAddrs() const
127
- {
128
- return _varToVAddrs;
129
- }
130
-
131
- inline virtual const VarToVAddrs &getLocToVAddrs() const
132
- {
133
- return _locToVAddrs;
134
- }
135
-
136
- inline virtual bool inVarToAddrsTable(u32_t id) const
137
- {
138
- return _varToVAddrs.find(id) != _varToVAddrs.end();
139
- }
140
151
 
141
- inline virtual bool inLocToAddrsTable(u32_t id) const
142
- {
143
- return _locToVAddrs.find(id) != _locToVAddrs.end();
144
- }
145
-
146
- virtual VAddrs &getVAddrs(u32_t id)
147
- {
148
- return _varToVAddrs[id];
149
- }
150
152
 
151
- inline virtual void storeVAddrs(u32_t addr, const VAddrs &vaddrs)
153
+ public:
154
+ inline virtual void storeAddrs(u32_t addr, const Addrs &vaddrs)
152
155
  {
153
156
  assert(isVirtualMemAddress(addr) && "not virtual address?");
154
157
  if(isNullPtr(addr)) return;
155
158
  u32_t objId = getInternalID(addr);
156
- _locToVAddrs[objId] = vaddrs;
159
+ _locToAddrs[objId] = vaddrs;
157
160
  }
158
161
 
159
- inline virtual VAddrs &loadVAddrs(u32_t addr)
162
+ inline virtual Addrs &loadAddrs(u32_t addr)
160
163
  {
161
164
  assert(isVirtualMemAddress(addr) && "not virtual address?");
162
165
  u32_t objId = getInternalID(addr);
163
- return _locToVAddrs[objId];
166
+ return _locToAddrs[objId];
164
167
  }
165
168
 
166
169
  inline bool isNullPtr(u32_t addr)
@@ -168,13 +171,23 @@ public:
168
171
  return getInternalID(addr) == 0;
169
172
  }
170
173
 
171
- protected:
172
- VarToVAddrs _varToVAddrs{{0, getVirtualMemAddress(0)}};
173
- VarToVAddrs _locToVAddrs;
174
+ public:
175
+
176
+ virtual bool operator==(const ExeState &rhs) const;
177
+
178
+ inline virtual bool operator!=(const ExeState &rhs) const
179
+ {
180
+ return !(*this == rhs);
181
+ }
182
+
183
+ bool equals(const ExeState *other) const
184
+ {
185
+ return false;
186
+ }
174
187
 
175
188
  protected:
176
189
 
177
- static bool eqVarToVAddrs(const VarToVAddrs &lhs, const VarToVAddrs &rhs)
190
+ static bool eqVarToAddrs(const VarToAddrs &lhs, const VarToAddrs &rhs)
178
191
  {
179
192
  if (lhs.size() != rhs.size()) return false;
180
193
  for (const auto &item: lhs)
@@ -195,14 +208,14 @@ public:
195
208
  virtual std::string varToAddrs(u32_t varId) const
196
209
  {
197
210
  std::stringstream exprName;
198
- auto it = _varToVAddrs.find(varId);
199
- if (it == _varToVAddrs.end())
211
+ auto it = _varToAddrs.find(varId);
212
+ if (it == _varToAddrs.end())
200
213
  {
201
214
  exprName << "Var not in varToAddrs!\n";
202
215
  }
203
216
  else
204
217
  {
205
- const VAddrs &vaddrs = it->second;
218
+ const Addrs &vaddrs = it->second;
206
219
  if (vaddrs.size() == 1)
207
220
  {
208
221
  exprName << "addr: {" << std::dec << getInternalID(*vaddrs.begin()) << "}\n";
@@ -223,14 +236,14 @@ public:
223
236
  virtual std::string locToAddrs(u32_t objId) const
224
237
  {
225
238
  std::stringstream exprName;
226
- auto it = _locToVAddrs.find(objId);
227
- if (it == _locToVAddrs.end())
239
+ auto it = _locToAddrs.find(objId);
240
+ if (it == _locToAddrs.end())
228
241
  {
229
242
  exprName << "Var not in varToAddrs!\n";
230
243
  }
231
244
  else
232
245
  {
233
- const VAddrs &vaddrs = it->second;
246
+ const Addrs &vaddrs = it->second;
234
247
  if (vaddrs.size() == 1)
235
248
  {
236
249
  exprName << "addr: {" << std::dec << getInternalID(*vaddrs.begin()) << "}\n";
@@ -63,18 +63,10 @@ public:
63
63
 
64
64
  static IntervalExeState globalES;
65
65
 
66
- protected:
67
- /// key: nodeID value: Domain Value
68
- VarToValMap _varToItvVal;
69
- /// key: nodeID value: Domain Value
70
- LocToValMap _locToItvVal;
71
-
72
-
73
66
  public:
74
- /// default constructor, default pc is true
67
+ /// default constructor
75
68
  IntervalExeState() : ExeState(ExeState::IntervalK) {}
76
69
 
77
- /// set path constraints, val2val and loc2val map
78
70
  IntervalExeState(VarToValMap &_varToValMap, LocToValMap &_locToValMap) : ExeState(ExeState::IntervalK),
79
71
  _varToItvVal(_varToValMap),
80
72
  _locToItvVal(_locToValMap) {}
@@ -86,7 +78,9 @@ public:
86
78
 
87
79
  }
88
80
 
89
- /// check two interval exe state are equal or not. _varToItvVal and _locToItvVal map should be equivalent
81
+ virtual ~IntervalExeState() = default;
82
+
83
+
90
84
  IntervalExeState &operator=(const IntervalExeState &rhs)
91
85
  {
92
86
  if (rhs != *this)
@@ -151,54 +145,63 @@ public:
151
145
  return inv;
152
146
  }
153
147
 
154
- VAddrs &getVAddrs(u32_t id) override
148
+ protected:
149
+
150
+ VarToValMap _varToItvVal; ///< Map a variable (symbol) to its interval value
151
+ LocToValMap _locToItvVal; ///< Map a memory address to its stored interval value
152
+
153
+ public:
154
+
155
+ /// get memory addresses of variable
156
+ Addrs &getAddrs(u32_t id) override
155
157
  {
156
- auto it = _varToVAddrs.find(id);
157
- if (it != _varToVAddrs.end())
158
+ auto it = _varToAddrs.find(id);
159
+ if (it != _varToAddrs.end())
158
160
  return it->second;
159
161
  else
160
- return globalES._varToVAddrs[id];
162
+ return globalES._varToAddrs[id];
161
163
  }
162
164
 
163
- inline bool inVarToIValTable(u32_t id) const
165
+ /// get interval value of variable
166
+ inline IntervalValue &operator[](u32_t varId)
164
167
  {
165
- return _varToItvVal.find(id) != _varToItvVal.end() ||
166
- globalES._varToItvVal.find(id) != globalES._varToItvVal.end();
168
+ auto localIt = _varToItvVal.find(varId);
169
+ if(localIt != _varToItvVal.end())
170
+ return localIt->second;
171
+ else
172
+ {
173
+ return globalES._varToItvVal[varId];
174
+ }
167
175
  }
168
176
 
177
+ /// whether the variable is in varToAddrs table
169
178
  inline bool inVarToAddrsTable(u32_t id) const override
170
179
  {
171
- return _varToVAddrs.find(id) != _varToVAddrs.end() ||
172
- globalES._varToVAddrs.find(id) != globalES._varToVAddrs.end();
180
+ return _varToAddrs.find(id) != _varToAddrs.end() ||
181
+ globalES._varToAddrs.find(id) != globalES._varToAddrs.end();
173
182
  }
174
183
 
175
- inline bool inLocToIValTable(u32_t id) const
184
+ /// whether the variable is in varToVal table
185
+ inline bool inVarToValTable(u32_t id) const
176
186
  {
177
- return _locToItvVal.find(id) != _locToItvVal.end() ||
178
- globalES._locToItvVal.find(id) != globalES._locToItvVal.end();
179
- }
180
-
181
- inline bool inLocalLocToIValTable(u32_t id) const
182
- {
183
- return _locToItvVal.find(id) != _locToItvVal.end();
187
+ return _varToItvVal.find(id) != _varToItvVal.end() ||
188
+ globalES._varToItvVal.find(id) != globalES._varToItvVal.end();
184
189
  }
185
190
 
191
+ /// whether the memory address stores memory addresses
186
192
  inline bool inLocToAddrsTable(u32_t id) const override
187
193
  {
188
- return _locToVAddrs.find(id) != _locToVAddrs.end() ||
189
- globalES._locToVAddrs.find(id) != globalES._locToVAddrs.end();
194
+ return _locToAddrs.find(id) != _locToAddrs.end() ||
195
+ globalES._locToAddrs.find(id) != globalES._locToAddrs.end();
190
196
  }
191
197
 
192
- inline bool inLocalLocToAddrsTable(u32_t id) const
198
+ /// whether the memory address stores interval value
199
+ inline bool inLocToValTable(u32_t id) const
193
200
  {
194
- return _locToVAddrs.find(id) != _locToVAddrs.end();
201
+ return _locToItvVal.find(id) != _locToItvVal.end() ||
202
+ globalES._locToItvVal.find(id) != globalES._locToItvVal.end();
195
203
  }
196
204
 
197
- bool equals(const IntervalExeState &other) const;
198
-
199
- virtual ~IntervalExeState() = default;
200
-
201
-
202
205
  /// get var2val map
203
206
  const VarToValMap &getVarToVal() const
204
207
  {
@@ -211,18 +214,18 @@ public:
211
214
  return _locToItvVal;
212
215
  }
213
216
 
214
- /// [], call getValueExpr()
215
- inline IntervalValue &operator[](u32_t varId)
217
+ inline bool inLocalLocToValTable(u32_t id) const
216
218
  {
217
- auto localIt = _varToItvVal.find(varId);
218
- if(localIt != _varToItvVal.end())
219
- return localIt->second;
220
- else
221
- {
222
- return globalES._varToItvVal[varId];
223
- }
219
+ return _locToItvVal.find(id) != _locToItvVal.end();
224
220
  }
225
221
 
222
+ inline bool inLocalLocToAddrsTable(u32_t id) const
223
+ {
224
+ return _locToAddrs.find(id) != _locToAddrs.end();
225
+ }
226
+
227
+ public:
228
+
226
229
  inline void cpyItvToLocal(u32_t varId)
227
230
  {
228
231
  auto localIt = _varToItvVal.find(varId);
@@ -319,24 +322,24 @@ public:
319
322
  }
320
323
  }
321
324
 
322
- inline VAddrs &loadVAddrs(u32_t addr) override
325
+ inline Addrs &loadAddrs(u32_t addr) override
323
326
  {
324
327
  assert(isVirtualMemAddress(addr) && "not virtual address?");
325
328
  u32_t objId = getInternalID(addr);
326
- auto it = _locToVAddrs.find(objId);
327
- if(it != _locToVAddrs.end())
329
+ auto it = _locToAddrs.find(objId);
330
+ if(it != _locToAddrs.end())
328
331
  return it->second;
329
332
  else
330
333
  {
331
- auto globIt = globalES._locToVAddrs.find(objId);
332
- if(globIt != globalES._locToVAddrs.end())
334
+ auto globIt = globalES._locToAddrs.find(objId);
335
+ if(globIt != globalES._locToAddrs.end())
333
336
  return globIt->second;
334
337
  else
335
- return _locToVAddrs[objId];
338
+ return _locToAddrs[objId];
336
339
  }
337
340
  }
338
341
 
339
- inline IntervalValue& getLocToItv(u32_t id)
342
+ inline IntervalValue& getLocToVal(u32_t id)
340
343
  {
341
344
  auto it = _locToItvVal.find(id);
342
345
  if(it != _locToItvVal.end())
@@ -351,18 +354,18 @@ public:
351
354
  }
352
355
  }
353
356
 
354
- inline VAddrs& getLocVAddrs(u32_t id)
357
+ inline Addrs& getLocAddrs(u32_t id)
355
358
  {
356
- auto it = _locToVAddrs.find(id);
357
- if(it != _locToVAddrs.end())
359
+ auto it = _locToAddrs.find(id);
360
+ if(it != _locToAddrs.end())
358
361
  return it->second;
359
362
  else
360
363
  {
361
- auto globIt = globalES._locToVAddrs.find(id);
362
- if(globIt != globalES._locToVAddrs.end())
364
+ auto globIt = globalES._locToAddrs.find(id);
365
+ if(globIt != globalES._locToAddrs.end())
363
366
  return globIt->second;
364
367
  else
365
- return _locToVAddrs[id];
368
+ return _locToAddrs[id];
366
369
  }
367
370
  }
368
371
 
@@ -374,6 +377,8 @@ public:
374
377
  return "";
375
378
  }
376
379
 
380
+ bool equals(const IntervalExeState &other) const;
381
+
377
382
  static bool eqVarToValMap(const VarToValMap &lhs, const VarToValMap &rhs)
378
383
  {
379
384
  if (lhs.size() != rhs.size()) return false;
@@ -446,15 +451,15 @@ public:
446
451
  {
447
452
  _locToItvVal.clear();
448
453
  _varToItvVal.clear();
449
- _locToVAddrs.clear();
450
- _varToVAddrs.clear();
454
+ _locToAddrs.clear();
455
+ _varToAddrs.clear();
451
456
  }
452
457
 
453
458
 
454
459
  private:
455
460
  void printTable(const VarToValMap &table, std::ostream &oss) const;
456
461
 
457
- void printTable(const VarToVAddrs &table, std::ostream &oss) const;
462
+ void printTable(const VarToAddrs &table, std::ostream &oss) const;
458
463
  };
459
464
  }
460
465
 
@@ -35,7 +35,7 @@ namespace SVF
35
35
  class SVFIR2ConsExeState
36
36
  {
37
37
  public:
38
- typedef ExeState::VAddrs VAddrs;
38
+ typedef ExeState::Addrs Addrs;
39
39
 
40
40
  SVFIR2ConsExeState() = default;
41
41
 
@@ -89,7 +89,7 @@ public:
89
89
  //%}
90
90
 
91
91
  /// Return the expr of gep object given a base and offset
92
- VAddrs getGepObjAddress(u32_t base, s32_t offset);
92
+ Addrs getGepObjAddress(u32_t base, s32_t offset);
93
93
 
94
94
  /// Return the offset expression of a GepStmt
95
95
  std::pair<s32_t, s32_t> getGepOffset(const GepStmt *gep);
@@ -123,17 +123,17 @@ public:
123
123
 
124
124
  inline bool inVarToValTable(u32_t id) const
125
125
  {
126
- return _es->inVarToVal(id);
126
+ return _es->inVarToValTable(id);
127
127
  }
128
128
 
129
- inline bool inLocToValTable(u32_t id) const
129
+ inline bool inVarToAddrsTable(u32_t id) const
130
130
  {
131
- return _es->inLocToVal(id);
131
+ return _es->inVarToAddrsTable(id);
132
132
  }
133
133
 
134
- inline bool inVarToAddrsTable(u32_t id) const
134
+ inline bool inLocToValTable(u32_t id) const
135
135
  {
136
- return _es->inVarToAddrsTable(id);
136
+ return _es->inLocToValTable(id);
137
137
  }
138
138
 
139
139
  inline bool inLocToAddrsTable(u32_t id) const
@@ -41,8 +41,8 @@ namespace SVF
41
41
  class SVFIR2ItvExeState
42
42
  {
43
43
  public:
44
- typedef ExeState::VAddrs VAddrs;
45
- static VAddrs globalNullVaddrs;
44
+ typedef ExeState::Addrs Addrs;
45
+ static Addrs globalNulladdrs;
46
46
  public:
47
47
  SVFIR2ItvExeState(SVFIR *ir) : _svfir(ir) {}
48
48
 
@@ -66,12 +66,12 @@ public:
66
66
  return _relEs;
67
67
  }
68
68
 
69
- void widenVAddrs(IntervalExeState &lhs, const IntervalExeState &rhs);
69
+ void widenAddrs(IntervalExeState &lhs, const IntervalExeState &rhs);
70
70
 
71
- void narrowVAddrs(IntervalExeState &lhs, const IntervalExeState &rhs);
71
+ void narrowAddrs(IntervalExeState &lhs, const IntervalExeState &rhs);
72
72
 
73
73
  /// Return the field address given a pointer points to a struct object and an offset
74
- VAddrs getGepObjAddress(u32_t pointer, APOffset offset);
74
+ Addrs getGepObjAddress(u32_t pointer, APOffset offset);
75
75
 
76
76
  /// Return the value range of Integer SVF Type, e.g. unsigned i8 Type->[0, 255], signed i8 Type->[-128, 127]
77
77
  IntervalValue getRangeLimitFromType(const SVFType* type);
@@ -103,29 +103,35 @@ public:
103
103
  /// Init SVFVar
104
104
  void initSVFVar(u32_t varId);
105
105
 
106
- inline VAddrs &getVAddrs(u32_t id)
106
+ inline Addrs &getAddrs(u32_t id)
107
107
  {
108
108
  if (inVarToAddrsTable(id))
109
- return _es.getVAddrs(id);
109
+ return _es.getAddrs(id);
110
110
  else
111
- return globalNullVaddrs;
111
+ return globalNulladdrs;
112
112
  }
113
113
 
114
- inline bool inVarToIValTable(u32_t id) const
115
- {
116
- return _es.inVarToIValTable(id);
117
- }
118
114
 
119
- inline bool inLocToIValTable(u32_t id) const
115
+ /// whether the variable is in varToVal table
116
+ inline bool inVarToValTable(u32_t id) const
120
117
  {
121
- return _es.inLocToIValTable(id);
118
+ return _es.inVarToValTable(id);
122
119
  }
123
120
 
121
+ /// whether the variable is in varToAddrs table
124
122
  inline bool inVarToAddrsTable(u32_t id) const
125
123
  {
126
124
  return _es.inVarToAddrsTable(id);
127
125
  }
128
126
 
127
+
128
+ /// whether the memory address stores a interval value
129
+ inline bool inLocToValTable(u32_t id) const
130
+ {
131
+ return _es.inLocToValTable(id);
132
+ }
133
+
134
+ /// whether the memory address stores memory addresses
129
135
  inline bool inLocToAddrsTable(u32_t id) const
130
136
  {
131
137
  return _es.inLocToAddrsTable(id);
@@ -129,7 +129,7 @@ void ConsExeState::buildGlobES(ConsExeState &globES, Set<u32_t> &vars)
129
129
  SingleAbsValue &expr = globES[varId];
130
130
  if (expr.is_numeral() && isVirtualMemAddress(expr.get_numeral_int()))
131
131
  {
132
- if (globES.inLocalLocToVal(expr))
132
+ if (globES.inLocalLocToValTable(expr))
133
133
  {
134
134
  store(expr, globES.load(expr));
135
135
  }
@@ -236,13 +236,13 @@ void ConsExeState::applySummary(const ConsExeState &summary)
236
236
  {
237
237
  _locToVal[item.first] = item.second;
238
238
  }
239
- for (const auto &item: summary._varToVAddrs)
239
+ for (const auto &item: summary._varToAddrs)
240
240
  {
241
- _varToVAddrs[item.first] = item.second;
241
+ _varToAddrs[item.first] = item.second;
242
242
  }
243
- for (const auto &item: summary._locToVAddrs)
243
+ for (const auto &item: summary._locToAddrs)
244
244
  {
245
- _locToVAddrs[item.first] = item.second;
245
+ _locToAddrs[item.first] = item.second;
246
246
  }
247
247
  }
248
248
 
@@ -445,18 +445,18 @@ std::string ConsExeState::toString() const
445
445
 
446
446
  bool ConsExeState::applySelect(u32_t res, u32_t cond, u32_t top, u32_t fop)
447
447
  {
448
- if (inVarToVal(top) && inVarToVal(fop) && inVarToVal(cond))
448
+ if (inVarToValTable(top) && inVarToValTable(fop) && inVarToValTable(cond))
449
449
  {
450
450
  SingleAbsValue &tExpr = (*this)[top], &fExpr = (*this)[fop], &condExpr = (*this)[cond];
451
451
 
452
452
  return assign((*this)[res], ite(condExpr == 1, tExpr, fExpr));
453
453
  }
454
- else if (inVarToAddrsTable(top) && inVarToAddrsTable(fop) && inVarToVal(cond))
454
+ else if (inVarToAddrsTable(top) && inVarToAddrsTable(fop) && inVarToValTable(cond))
455
455
  {
456
456
  SingleAbsValue &condExpr = (*this)[cond];
457
457
  if (condExpr.is_numeral())
458
458
  {
459
- getVAddrs(res) = condExpr.is_zero() ? getVAddrs(fop) : getVAddrs(top);
459
+ getAddrs(res) = condExpr.is_zero() ? getAddrs(fop) : getAddrs(top);
460
460
  }
461
461
  }
462
462
  return false;
@@ -467,10 +467,10 @@ bool ConsExeState::applyPhi(u32_t res, std::vector<u32_t> &ops)
467
467
  for (u32_t i = 0; i < ops.size(); i++)
468
468
  {
469
469
  NodeID curId = ops[i];
470
- if (inVarToVal(curId))
470
+ if (inVarToValTable(curId))
471
471
  {
472
472
  const SingleAbsValue &cur = (*this)[curId];
473
- if (!inVarToVal(res))
473
+ if (!inVarToValTable(res))
474
474
  {
475
475
  (*this)[res] = cur;
476
476
  }
@@ -481,14 +481,14 @@ bool ConsExeState::applyPhi(u32_t res, std::vector<u32_t> &ops)
481
481
  }
482
482
  else if (inVarToAddrsTable(curId))
483
483
  {
484
- const VAddrs &cur = getVAddrs(curId);
484
+ const Addrs &cur = getAddrs(curId);
485
485
  if (!inVarToAddrsTable(res))
486
486
  {
487
- getVAddrs(res) = cur;
487
+ getAddrs(res) = cur;
488
488
  }
489
489
  else
490
490
  {
491
- getVAddrs(res).join_with(cur);
491
+ getAddrs(res).join_with(cur);
492
492
  }
493
493
  }
494
494
  }