svf-tools 1.0.905 → 1.0.907

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 (438) hide show
  1. package/SVF-doxygen/html/AbstractInterpretation_8cpp.html +217 -0
  2. package/SVF-doxygen/html/AbstractInterpretation_8cpp_source.html +2093 -0
  3. package/SVF-doxygen/html/AbstractInterpretation_8h.html +115 -0
  4. package/SVF-doxygen/html/AbstractInterpretation_8h_source.html +459 -0
  5. package/SVF-doxygen/html/AbstractState_8cpp.html +84 -0
  6. package/SVF-doxygen/html/AbstractState_8cpp_source.html +461 -0
  7. package/SVF-doxygen/html/AbstractState_8h.html +105 -0
  8. package/SVF-doxygen/html/AbstractState_8h_source.html +891 -0
  9. package/SVF-doxygen/html/AbstractValue_8h.html +3 -3
  10. package/SVF-doxygen/html/AbstractValue_8h_source.html +652 -62
  11. package/SVF-doxygen/html/AddressValue_8h.html +4 -4
  12. package/SVF-doxygen/html/AddressValue_8h_source.html +180 -177
  13. package/SVF-doxygen/html/BufOverflowChecker_8cpp_source.html +782 -776
  14. package/SVF-doxygen/html/BufOverflowChecker_8h.html +1 -1
  15. package/SVF-doxygen/html/BufOverflowChecker_8h_source.html +19 -19
  16. package/SVF-doxygen/html/CFLGraph_8h_source.html +3 -3
  17. package/SVF-doxygen/html/CSC_8h_source.html +1 -1
  18. package/SVF-doxygen/html/ConsExeState_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/ConsExeState_8h_source.html +2 -2
  20. package/SVF-doxygen/html/ExeState_8cpp.html +1 -1
  21. package/SVF-doxygen/html/ExeState_8cpp_source.html +2 -2
  22. package/SVF-doxygen/html/ExeState_8h_source.html +8 -8
  23. package/SVF-doxygen/html/ICFGSimplification_8h.html +2 -2
  24. package/SVF-doxygen/html/ICFGSimplification_8h_source.html +17 -18
  25. package/SVF-doxygen/html/ICFG_8h_source.html +1 -1
  26. package/SVF-doxygen/html/IntervalValue_8h.html +2 -2
  27. package/SVF-doxygen/html/IntervalValue_8h_source.html +846 -864
  28. package/SVF-doxygen/html/LLVMModule_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/MSSAMuChi_8h_source.html +1 -1
  30. package/SVF-doxygen/html/MemRegion_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/ObjTypeInference_8cpp_source.html +1 -1
  32. package/SVF-doxygen/html/PointsTo_8cpp_source.html +3 -3
  33. package/SVF-doxygen/html/PointsTo_8h_source.html +3 -3
  34. package/SVF-doxygen/html/RelExeState_8h_source.html +5 -5
  35. package/SVF-doxygen/html/RelationSolver_8cpp_source.html +67 -68
  36. package/SVF-doxygen/html/RelationSolver_8h.html +1 -1
  37. package/SVF-doxygen/html/RelationSolver_8h_source.html +17 -17
  38. package/SVF-doxygen/html/SVFIR2AbsState_8cpp.html +84 -0
  39. package/SVF-doxygen/html/SVFIR2AbsState_8cpp_source.html +1348 -0
  40. package/SVF-doxygen/html/SVFIR2AbsState_8h.html +100 -0
  41. package/SVF-doxygen/html/SVFIR2AbsState_8h_source.html +378 -0
  42. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +9 -8
  43. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +920 -952
  44. package/SVF-doxygen/html/SVFIR2ItvExeState_8h.html +2 -3
  45. package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +202 -207
  46. package/SVF-doxygen/html/SVFIR2Relation_8cpp.html +1 -1
  47. package/SVF-doxygen/html/SVFIR2Relation_8cpp_source.html +76 -72
  48. package/SVF-doxygen/html/SVFType_8cpp_source.html +1 -1
  49. package/SVF-doxygen/html/SVFType_8h_source.html +1 -1
  50. package/SVF-doxygen/html/SVFValue_8h_source.html +1 -1
  51. package/SVF-doxygen/html/SparseBitVector_8h_source.html +3 -3
  52. package/SVF-doxygen/html/WorkList_8h_source.html +1 -1
  53. package/SVF-doxygen/html/ae_8cpp.html +57 -57
  54. package/SVF-doxygen/html/ae_8cpp_source.html +462 -466
  55. package/SVF-doxygen/html/annotated.html +409 -418
  56. package/SVF-doxygen/html/classSVF_1_1AEStat-members.html +2 -2
  57. package/SVF-doxygen/html/classSVF_1_1AEStat.html +184 -190
  58. package/SVF-doxygen/html/classSVF_1_1AbstractInterpretation-members.html +161 -0
  59. package/SVF-doxygen/html/classSVF_1_1AbstractInterpretation.html +4325 -0
  60. package/SVF-doxygen/html/classSVF_1_1AbstractInterpretation.png +0 -0
  61. package/SVF-doxygen/html/classSVF_1_1AbstractState-members.html +134 -0
  62. package/SVF-doxygen/html/classSVF_1_1AbstractState.html +2166 -0
  63. package/SVF-doxygen/html/classSVF_1_1AbstractState.png +0 -0
  64. package/SVF-doxygen/html/classSVF_1_1AddressValue-members.html +15 -28
  65. package/SVF-doxygen/html/classSVF_1_1AddressValue.html +171 -230
  66. package/SVF-doxygen/html/classSVF_1_1BoundedZ3Expr.html +0 -1
  67. package/SVF-doxygen/html/classSVF_1_1BoundedZ3Expr.png +0 -0
  68. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker-members.html +73 -73
  69. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker.html +578 -574
  70. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker.png +0 -0
  71. package/SVF-doxygen/html/classSVF_1_1CFLNode-members.html +48 -49
  72. package/SVF-doxygen/html/classSVF_1_1CFLNode.html +25 -25
  73. package/SVF-doxygen/html/classSVF_1_1ConsExeState.html +1 -1
  74. package/SVF-doxygen/html/classSVF_1_1ExeState.html +12 -14
  75. package/SVF-doxygen/html/classSVF_1_1ExeState.png +0 -0
  76. package/SVF-doxygen/html/classSVF_1_1FILOWorkList.html +3 -3
  77. package/SVF-doxygen/html/classSVF_1_1GenericNode.html +22 -8
  78. package/SVF-doxygen/html/classSVF_1_1GenericNode.png +0 -0
  79. package/SVF-doxygen/html/classSVF_1_1ICFGSimplification.html +1 -1
  80. package/SVF-doxygen/html/classSVF_1_1IntervalValue-members.html +50 -64
  81. package/SVF-doxygen/html/classSVF_1_1IntervalValue.html +349 -459
  82. package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +1 -1
  83. package/SVF-doxygen/html/classSVF_1_1ObjTypeInference.html +1 -1
  84. package/SVF-doxygen/html/classSVF_1_1RelExeState-members.html +1 -1
  85. package/SVF-doxygen/html/classSVF_1_1RelExeState.html +8 -8
  86. package/SVF-doxygen/html/classSVF_1_1RelationSolver-members.html +8 -8
  87. package/SVF-doxygen/html/classSVF_1_1RelationSolver.html +106 -107
  88. package/SVF-doxygen/html/classSVF_1_1SVFIR2AbsState-members.html +141 -0
  89. package/SVF-doxygen/html/classSVF_1_1SVFIR2AbsState.html +3137 -0
  90. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +5 -5
  91. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState-members.html +56 -57
  92. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +1128 -1178
  93. package/SVF-doxygen/html/classSVF_1_1SVFStat.html +1 -1
  94. package/SVF-doxygen/html/classSVF_1_1SparseAbstractState-members.html +157 -0
  95. package/SVF-doxygen/html/classSVF_1_1SparseAbstractState.html +1512 -0
  96. package/SVF-doxygen/html/classSVF_1_1SparseAbstractState.png +0 -0
  97. package/SVF-doxygen/html/classSVF_1_1Z3Expr.html +0 -1
  98. package/SVF-doxygen/html/classSVF_1_1Z3Expr.png +0 -0
  99. package/SVF-doxygen/html/classSymblicAbstractionTest-members.html +3 -3
  100. package/SVF-doxygen/html/classSymblicAbstractionTest.html +400 -404
  101. package/SVF-doxygen/html/classes.html +326 -336
  102. package/SVF-doxygen/html/dir_2c6fb801affc4b3efe6e1ed5974683f6.html +2 -10
  103. package/SVF-doxygen/html/dir_81caa96ab1d3de93b353e2bbe80e6067.html +2 -4
  104. package/SVF-doxygen/html/dir_9a8e7a56f4029a0d9f62b1c6d1f6e85b.html +2 -8
  105. package/SVF-doxygen/html/dir_fbec400583b4bd6c5f2e89c86c5943a6.html +2 -4
  106. package/SVF-doxygen/html/fastcluster__dm_8cpp_8inc_source.html +1 -1
  107. package/SVF-doxygen/html/files.html +18 -27
  108. package/SVF-doxygen/html/functions.html +33 -56
  109. package/SVF-doxygen/html/functions_a.html +29 -42
  110. package/SVF-doxygen/html/functions_b.html +14 -21
  111. package/SVF-doxygen/html/functions_c.html +42 -52
  112. package/SVF-doxygen/html/functions_d.html +7 -4
  113. package/SVF-doxygen/html/functions_e.html +7 -21
  114. package/SVF-doxygen/html/functions_enum.html +4 -7
  115. package/SVF-doxygen/html/functions_eval.html +2 -2
  116. package/SVF-doxygen/html/functions_eval_c.html +0 -3
  117. package/SVF-doxygen/html/functions_eval_i.html +2 -3
  118. package/SVF-doxygen/html/functions_eval_m.html +2 -2
  119. package/SVF-doxygen/html/functions_eval_s.html +2 -5
  120. package/SVF-doxygen/html/functions_eval_u.html +4 -1
  121. package/SVF-doxygen/html/functions_f.html +6 -6
  122. package/SVF-doxygen/html/functions_func.html +24 -31
  123. package/SVF-doxygen/html/functions_func_b.html +10 -16
  124. package/SVF-doxygen/html/functions_func_c.html +30 -39
  125. package/SVF-doxygen/html/functions_func_d.html +1 -1
  126. package/SVF-doxygen/html/functions_func_e.html +7 -17
  127. package/SVF-doxygen/html/functions_func_g.html +61 -115
  128. package/SVF-doxygen/html/functions_func_h.html +22 -24
  129. package/SVF-doxygen/html/functions_func_i.html +64 -94
  130. package/SVF-doxygen/html/functions_func_j.html +4 -6
  131. package/SVF-doxygen/html/functions_func_l.html +9 -23
  132. package/SVF-doxygen/html/functions_func_m.html +7 -8
  133. package/SVF-doxygen/html/functions_func_n.html +8 -13
  134. package/SVF-doxygen/html/functions_func_o.html +57 -48
  135. package/SVF-doxygen/html/functions_func_p.html +6 -11
  136. package/SVF-doxygen/html/functions_func_r.html +4 -4
  137. package/SVF-doxygen/html/functions_func_s.html +35 -50
  138. package/SVF-doxygen/html/functions_func_t.html +26 -40
  139. package/SVF-doxygen/html/functions_func_u.html +6 -5
  140. package/SVF-doxygen/html/functions_func_v.html +2 -9
  141. package/SVF-doxygen/html/functions_func_w.html +9 -8
  142. package/SVF-doxygen/html/functions_func_z.html +1 -2
  143. package/SVF-doxygen/html/functions_func_~.html +10 -22
  144. package/SVF-doxygen/html/functions_g.html +61 -118
  145. package/SVF-doxygen/html/functions_h.html +21 -23
  146. package/SVF-doxygen/html/functions_i.html +76 -106
  147. package/SVF-doxygen/html/functions_j.html +4 -6
  148. package/SVF-doxygen/html/functions_k.html +0 -6
  149. package/SVF-doxygen/html/functions_l.html +11 -25
  150. package/SVF-doxygen/html/functions_m.html +8 -9
  151. package/SVF-doxygen/html/functions_n.html +14 -17
  152. package/SVF-doxygen/html/functions_o.html +71 -90
  153. package/SVF-doxygen/html/functions_p.html +31 -30
  154. package/SVF-doxygen/html/functions_r.html +11 -15
  155. package/SVF-doxygen/html/functions_rela.html +2 -3
  156. package/SVF-doxygen/html/functions_rela_b.html +0 -1
  157. package/SVF-doxygen/html/functions_rela_e.html +0 -1
  158. package/SVF-doxygen/html/functions_rela_i.html +0 -2
  159. package/SVF-doxygen/html/functions_rela_l.html +0 -1
  160. package/SVF-doxygen/html/functions_rela_o.html +0 -18
  161. package/SVF-doxygen/html/functions_rela_r.html +2 -2
  162. package/SVF-doxygen/html/functions_rela_s.html +4 -9
  163. package/SVF-doxygen/html/functions_s.html +45 -70
  164. package/SVF-doxygen/html/functions_t.html +29 -45
  165. package/SVF-doxygen/html/functions_type.html +0 -5
  166. package/SVF-doxygen/html/functions_type_c.html +1 -1
  167. package/SVF-doxygen/html/functions_type_k.html +0 -6
  168. package/SVF-doxygen/html/functions_type_l.html +4 -3
  169. package/SVF-doxygen/html/functions_type_t.html +0 -3
  170. package/SVF-doxygen/html/functions_type_v.html +3 -5
  171. package/SVF-doxygen/html/functions_u.html +8 -4
  172. package/SVF-doxygen/html/functions_v.html +11 -20
  173. package/SVF-doxygen/html/functions_vars.html +33 -56
  174. package/SVF-doxygen/html/functions_vars_a.html +3 -0
  175. package/SVF-doxygen/html/functions_vars_g.html +2 -5
  176. package/SVF-doxygen/html/functions_vars_i.html +3 -0
  177. package/SVF-doxygen/html/functions_vars_t.html +1 -0
  178. package/SVF-doxygen/html/functions_w.html +11 -10
  179. package/SVF-doxygen/html/functions_z.html +1 -2
  180. package/SVF-doxygen/html/functions_~.html +10 -22
  181. package/SVF-doxygen/html/globals.html +2 -2
  182. package/SVF-doxygen/html/globals_defs.html +1 -4
  183. package/SVF-doxygen/html/globals_n.html +2 -5
  184. package/SVF-doxygen/html/globals_s.html +1 -1
  185. package/SVF-doxygen/html/globals_vars.html +5 -5
  186. package/SVF-doxygen/html/globals_z.html +3 -3
  187. package/SVF-doxygen/html/hierarchy.html +622 -631
  188. package/SVF-doxygen/html/namespaceSVF.html +449 -458
  189. package/SVF-doxygen/html/search/all_0.js +155 -161
  190. package/SVF-doxygen/html/search/all_1.js +502 -503
  191. package/SVF-doxygen/html/search/all_10.js +325 -326
  192. package/SVF-doxygen/html/search/all_11.js +227 -227
  193. package/SVF-doxygen/html/search/all_12.js +563 -574
  194. package/SVF-doxygen/html/search/all_13.js +206 -208
  195. package/SVF-doxygen/html/search/all_14.js +74 -73
  196. package/SVF-doxygen/html/search/all_15.js +175 -176
  197. package/SVF-doxygen/html/search/all_16.js +77 -77
  198. package/SVF-doxygen/html/search/all_17.js +1 -1
  199. package/SVF-doxygen/html/search/all_18.js +1 -1
  200. package/SVF-doxygen/html/search/all_19.js +27 -27
  201. package/SVF-doxygen/html/search/all_1a.js +175 -179
  202. package/SVF-doxygen/html/search/all_2.js +180 -182
  203. package/SVF-doxygen/html/search/all_3.js +636 -642
  204. package/SVF-doxygen/html/search/all_4.js +237 -236
  205. package/SVF-doxygen/html/search/all_5.js +120 -126
  206. package/SVF-doxygen/html/search/all_6.js +236 -236
  207. package/SVF-doxygen/html/search/all_7.js +1040 -1056
  208. package/SVF-doxygen/html/search/all_8.js +211 -215
  209. package/SVF-doxygen/html/search/all_9.js +631 -638
  210. package/SVF-doxygen/html/search/all_a.js +46 -46
  211. package/SVF-doxygen/html/search/all_b.js +24 -26
  212. package/SVF-doxygen/html/search/all_c.js +113 -115
  213. package/SVF-doxygen/html/search/all_d.js +205 -205
  214. package/SVF-doxygen/html/search/all_e.js +207 -209
  215. package/SVF-doxygen/html/search/all_f.js +122 -122
  216. package/SVF-doxygen/html/search/classes_0.js +29 -28
  217. package/SVF-doxygen/html/search/classes_1.js +11 -11
  218. package/SVF-doxygen/html/search/classes_10.js +72 -74
  219. package/SVF-doxygen/html/search/classes_11.js +14 -14
  220. package/SVF-doxygen/html/search/classes_12.js +2 -2
  221. package/SVF-doxygen/html/search/classes_13.js +10 -10
  222. package/SVF-doxygen/html/search/classes_14.js +19 -19
  223. package/SVF-doxygen/html/search/classes_15.js +1 -1
  224. package/SVF-doxygen/html/search/classes_2.js +72 -73
  225. package/SVF-doxygen/html/search/classes_3.js +35 -35
  226. package/SVF-doxygen/html/search/classes_4.js +7 -8
  227. package/SVF-doxygen/html/search/classes_5.js +28 -28
  228. package/SVF-doxygen/html/search/classes_6.js +98 -98
  229. package/SVF-doxygen/html/search/classes_7.js +34 -38
  230. package/SVF-doxygen/html/search/classes_8.js +57 -59
  231. package/SVF-doxygen/html/search/classes_9.js +1 -1
  232. package/SVF-doxygen/html/search/classes_a.js +12 -12
  233. package/SVF-doxygen/html/search/classes_b.js +29 -29
  234. package/SVF-doxygen/html/search/classes_c.js +6 -6
  235. package/SVF-doxygen/html/search/classes_d.js +19 -19
  236. package/SVF-doxygen/html/search/classes_e.js +36 -36
  237. package/SVF-doxygen/html/search/classes_f.js +25 -25
  238. package/SVF-doxygen/html/search/defines_0.js +3 -3
  239. package/SVF-doxygen/html/search/defines_1.js +3 -3
  240. package/SVF-doxygen/html/search/defines_10.js +2 -2
  241. package/SVF-doxygen/html/search/defines_2.js +30 -30
  242. package/SVF-doxygen/html/search/defines_3.js +20 -20
  243. package/SVF-doxygen/html/search/defines_4.js +3 -3
  244. package/SVF-doxygen/html/search/defines_5.js +4 -4
  245. package/SVF-doxygen/html/search/defines_6.js +2 -2
  246. package/SVF-doxygen/html/search/defines_7.js +5 -5
  247. package/SVF-doxygen/html/search/defines_8.js +11 -11
  248. package/SVF-doxygen/html/search/defines_9.js +9 -9
  249. package/SVF-doxygen/html/search/defines_a.js +2 -2
  250. package/SVF-doxygen/html/search/defines_b.js +1 -1
  251. package/SVF-doxygen/html/search/defines_c.js +3 -4
  252. package/SVF-doxygen/html/search/defines_d.js +2 -2
  253. package/SVF-doxygen/html/search/defines_e.js +8 -8
  254. package/SVF-doxygen/html/search/defines_f.js +4 -4
  255. package/SVF-doxygen/html/search/enums_0.js +3 -4
  256. package/SVF-doxygen/html/search/enums_1.js +2 -2
  257. package/SVF-doxygen/html/search/enums_10.js +1 -1
  258. package/SVF-doxygen/html/search/enums_11.js +1 -1
  259. package/SVF-doxygen/html/search/enums_2.js +9 -9
  260. package/SVF-doxygen/html/search/enums_3.js +2 -1
  261. package/SVF-doxygen/html/search/enums_4.js +3 -4
  262. package/SVF-doxygen/html/search/enums_5.js +1 -1
  263. package/SVF-doxygen/html/search/enums_6.js +2 -2
  264. package/SVF-doxygen/html/search/enums_7.js +2 -2
  265. package/SVF-doxygen/html/search/enums_8.js +4 -4
  266. package/SVF-doxygen/html/search/enums_9.js +1 -1
  267. package/SVF-doxygen/html/search/enums_a.js +1 -1
  268. package/SVF-doxygen/html/search/enums_b.js +7 -7
  269. package/SVF-doxygen/html/search/enums_c.js +1 -1
  270. package/SVF-doxygen/html/search/enums_d.js +4 -4
  271. package/SVF-doxygen/html/search/enums_e.js +2 -2
  272. package/SVF-doxygen/html/search/enums_f.js +4 -4
  273. package/SVF-doxygen/html/search/enumvalues_0.js +15 -15
  274. package/SVF-doxygen/html/search/enumvalues_1.js +16 -16
  275. package/SVF-doxygen/html/search/enumvalues_10.js +36 -36
  276. package/SVF-doxygen/html/search/enumvalues_11.js +6 -5
  277. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  278. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  279. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  280. package/SVF-doxygen/html/search/enumvalues_15.js +4 -4
  281. package/SVF-doxygen/html/search/enumvalues_2.js +36 -37
  282. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  283. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  284. package/SVF-doxygen/html/search/enumvalues_5.js +50 -50
  285. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  286. package/SVF-doxygen/html/search/enumvalues_7.js +8 -8
  287. package/SVF-doxygen/html/search/enumvalues_8.js +24 -24
  288. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  289. package/SVF-doxygen/html/search/enumvalues_a.js +17 -17
  290. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  291. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  292. package/SVF-doxygen/html/search/enumvalues_d.js +19 -19
  293. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  294. package/SVF-doxygen/html/search/enumvalues_f.js +48 -49
  295. package/SVF-doxygen/html/search/files_0.js +18 -16
  296. package/SVF-doxygen/html/search/files_1.js +9 -9
  297. package/SVF-doxygen/html/search/files_10.js +8 -8
  298. package/SVF-doxygen/html/search/files_11.js +8 -8
  299. package/SVF-doxygen/html/search/files_12.js +2 -2
  300. package/SVF-doxygen/html/search/files_2.js +51 -53
  301. package/SVF-doxygen/html/search/files_3.js +14 -14
  302. package/SVF-doxygen/html/search/files_4.js +3 -5
  303. package/SVF-doxygen/html/search/files_5.js +13 -13
  304. package/SVF-doxygen/html/search/files_6.js +10 -10
  305. package/SVF-doxygen/html/search/files_7.js +15 -17
  306. package/SVF-doxygen/html/search/files_8.js +13 -13
  307. package/SVF-doxygen/html/search/files_9.js +18 -18
  308. package/SVF-doxygen/html/search/files_a.js +3 -3
  309. package/SVF-doxygen/html/search/files_b.js +4 -4
  310. package/SVF-doxygen/html/search/files_c.js +20 -20
  311. package/SVF-doxygen/html/search/files_d.js +4 -4
  312. package/SVF-doxygen/html/search/files_e.js +57 -62
  313. package/SVF-doxygen/html/search/files_f.js +8 -8
  314. package/SVF-doxygen/html/search/functions_0.js +13 -13
  315. package/SVF-doxygen/html/search/functions_1.js +366 -368
  316. package/SVF-doxygen/html/search/functions_10.js +139 -140
  317. package/SVF-doxygen/html/search/functions_11.js +140 -140
  318. package/SVF-doxygen/html/search/functions_12.js +294 -299
  319. package/SVF-doxygen/html/search/functions_13.js +72 -73
  320. package/SVF-doxygen/html/search/functions_14.js +41 -41
  321. package/SVF-doxygen/html/search/functions_15.js +70 -72
  322. package/SVF-doxygen/html/search/functions_16.js +38 -38
  323. package/SVF-doxygen/html/search/functions_17.js +3 -3
  324. package/SVF-doxygen/html/search/functions_18.js +175 -179
  325. package/SVF-doxygen/html/search/functions_2.js +92 -94
  326. package/SVF-doxygen/html/search/functions_3.js +258 -261
  327. package/SVF-doxygen/html/search/functions_4.js +85 -85
  328. package/SVF-doxygen/html/search/functions_5.js +54 -57
  329. package/SVF-doxygen/html/search/functions_6.js +65 -65
  330. package/SVF-doxygen/html/search/functions_7.js +857 -872
  331. package/SVF-doxygen/html/search/functions_8.js +162 -162
  332. package/SVF-doxygen/html/search/functions_9.js +440 -446
  333. package/SVF-doxygen/html/search/functions_a.js +30 -30
  334. package/SVF-doxygen/html/search/functions_b.js +2 -2
  335. package/SVF-doxygen/html/search/functions_c.js +22 -25
  336. package/SVF-doxygen/html/search/functions_d.js +82 -82
  337. package/SVF-doxygen/html/search/functions_e.js +34 -36
  338. package/SVF-doxygen/html/search/functions_f.js +58 -58
  339. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  340. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  341. package/SVF-doxygen/html/search/related_0.js +4 -4
  342. package/SVF-doxygen/html/search/related_1.js +2 -2
  343. package/SVF-doxygen/html/search/related_2.js +2 -2
  344. package/SVF-doxygen/html/search/related_3.js +2 -2
  345. package/SVF-doxygen/html/search/related_4.js +2 -2
  346. package/SVF-doxygen/html/search/related_5.js +1 -1
  347. package/SVF-doxygen/html/search/related_6.js +2 -2
  348. package/SVF-doxygen/html/search/related_7.js +5 -5
  349. package/SVF-doxygen/html/search/related_8.js +2 -2
  350. package/SVF-doxygen/html/search/related_9.js +4 -4
  351. package/SVF-doxygen/html/search/related_a.js +19 -19
  352. package/SVF-doxygen/html/search/related_b.js +4 -4
  353. package/SVF-doxygen/html/search/related_c.js +2 -2
  354. package/SVF-doxygen/html/search/related_d.js +11 -12
  355. package/SVF-doxygen/html/search/related_e.js +2 -2
  356. package/SVF-doxygen/html/search/related_f.js +2 -2
  357. package/SVF-doxygen/html/search/typedefs_0.js +18 -19
  358. package/SVF-doxygen/html/search/typedefs_1.js +27 -27
  359. package/SVF-doxygen/html/search/typedefs_10.js +65 -65
  360. package/SVF-doxygen/html/search/typedefs_11.js +12 -13
  361. package/SVF-doxygen/html/search/typedefs_12.js +13 -13
  362. package/SVF-doxygen/html/search/typedefs_13.js +40 -40
  363. package/SVF-doxygen/html/search/typedefs_14.js +11 -11
  364. package/SVF-doxygen/html/search/typedefs_2.js +125 -125
  365. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  366. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  367. package/SVF-doxygen/html/search/typedefs_5.js +42 -42
  368. package/SVF-doxygen/html/search/typedefs_6.js +54 -54
  369. package/SVF-doxygen/html/search/typedefs_7.js +47 -47
  370. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  371. package/SVF-doxygen/html/search/typedefs_9.js +4 -6
  372. package/SVF-doxygen/html/search/typedefs_a.js +30 -29
  373. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  374. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  375. package/SVF-doxygen/html/search/typedefs_d.js +15 -15
  376. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  377. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  378. package/SVF-doxygen/html/search/variables_0.js +171 -177
  379. package/SVF-doxygen/html/search/variables_1.js +78 -77
  380. package/SVF-doxygen/html/search/variables_10.js +98 -98
  381. package/SVF-doxygen/html/search/variables_11.js +47 -47
  382. package/SVF-doxygen/html/search/variables_12.js +93 -93
  383. package/SVF-doxygen/html/search/variables_13.js +76 -76
  384. package/SVF-doxygen/html/search/variables_14.js +14 -14
  385. package/SVF-doxygen/html/search/variables_15.js +49 -49
  386. package/SVF-doxygen/html/search/variables_16.js +11 -11
  387. package/SVF-doxygen/html/search/variables_17.js +1 -1
  388. package/SVF-doxygen/html/search/variables_18.js +17 -17
  389. package/SVF-doxygen/html/search/variables_2.js +40 -40
  390. package/SVF-doxygen/html/search/variables_3.js +143 -143
  391. package/SVF-doxygen/html/search/variables_4.js +51 -51
  392. package/SVF-doxygen/html/search/variables_5.js +39 -39
  393. package/SVF-doxygen/html/search/variables_6.js +66 -66
  394. package/SVF-doxygen/html/search/variables_7.js +33 -34
  395. package/SVF-doxygen/html/search/variables_8.js +8 -8
  396. package/SVF-doxygen/html/search/variables_9.js +80 -79
  397. package/SVF-doxygen/html/search/variables_a.js +4 -4
  398. package/SVF-doxygen/html/search/variables_b.js +10 -10
  399. package/SVF-doxygen/html/search/variables_c.js +44 -44
  400. package/SVF-doxygen/html/search/variables_d.js +58 -58
  401. package/SVF-doxygen/html/search/variables_e.js +123 -123
  402. package/SVF-doxygen/html/search/variables_f.js +31 -31
  403. package/SVF-doxygen/html/structSVF_1_1AbstractValue-members.html +164 -0
  404. package/SVF-doxygen/html/structSVF_1_1AbstractValue.html +2820 -0
  405. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1SparseAbstractState_01_4-members.html +84 -0
  406. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1SparseAbstractState_01_4.html +130 -0
  407. package/SVF-doxygen/html/svf-ex_8cpp.html +25 -25
  408. package/SVF-doxygen/html/svf-ex_8cpp_source.html +26 -26
  409. package/package.json +1 -1
  410. package/svf/include/AE/Core/AbstractState.h +749 -0
  411. package/svf/include/AE/Core/AbstractValue.h +514 -39
  412. package/svf/include/AE/Core/AddressValue.h +32 -25
  413. package/svf/include/AE/Core/IntervalValue.h +10 -24
  414. package/svf/include/AE/Core/RelExeState.h +1 -1
  415. package/svf/include/AE/Core/RelationSolver.h +9 -9
  416. package/svf/include/AE/Svfexe/{AbstractExecution.h → AbstractInterpretation.h} +27 -26
  417. package/svf/include/AE/Svfexe/BufOverflowChecker.h +5 -5
  418. package/svf/include/AE/Svfexe/ICFGSimplification.h +1 -2
  419. package/svf/include/AE/Svfexe/{SVFIR2ItvExeState.h → SVFIR2AbsState.h} +30 -33
  420. package/svf/lib/AE/Core/AbstractState.cpp +357 -0
  421. package/svf/lib/AE/Core/RelationSolver.cpp +31 -31
  422. package/svf/lib/AE/Core/SVFIR2Relation.cpp +17 -16
  423. package/svf/lib/AE/Svfexe/{AbstractExecution.cpp → AbstractInterpretation.cpp} +166 -156
  424. package/svf/lib/AE/Svfexe/BufOverflowChecker.cpp +51 -47
  425. package/svf/lib/AE/Svfexe/{SVFIR2ItvExeState.cpp → SVFIR2AbsState.cpp} +211 -247
  426. package/svf-llvm/tools/AE/ae.cpp +105 -108
  427. package/svf-llvm/tools/Example/svf-ex.cpp +2 -2
  428. package/svf/include/AE/Core/ConsExeState.h +0 -453
  429. package/svf/include/AE/Core/ExeState.h +0 -304
  430. package/svf/include/AE/Core/IntervalExeState.h +0 -650
  431. package/svf/include/AE/Core/SingleAbsValue.h +0 -477
  432. package/svf/include/AE/Core/SymState.h +0 -221
  433. package/svf/include/AE/Svfexe/SVFIR2ConsExeState.h +0 -148
  434. package/svf/lib/AE/Core/ConsExeState.cpp +0 -603
  435. package/svf/lib/AE/Core/ExeState.cpp +0 -117
  436. package/svf/lib/AE/Core/IntervalExeState.cpp +0 -329
  437. package/svf/lib/AE/Core/SymState.cpp +0 -37
  438. package/svf/lib/AE/Svfexe/SVFIR2ConsExeState.cpp +0 -772
@@ -1,772 +0,0 @@
1
- //===- SVFIR2ConsExeState.cpp ----SVFIR2ConsExeState-------------------------//
2
- //
3
- // SVF: Static Value-Flow Analysis
4
- //
5
- // Copyright (C) <2013-2022> <Yulei Sui>
6
- //
7
-
8
- // This program is free software: you can redistribute it and/or modify
9
- // it under the terms of the GNU Affero General Public License as published by
10
- // the Free Software Foundation, either version 3 of the License, or
11
- // (at your option) any later version.
12
-
13
- // This program is distributed in the hope that it will be useful,
14
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- // GNU Affero General Public License for more details.
17
-
18
- // You should have received a copy of the GNU Affero General Public License
19
- // along with this program. If not, see <http://www.gnu.org/licenses/>.
20
- //
21
- //===----------------------------------------------------------------------===//
22
-
23
- //
24
- // Created by jiawei and xiao on 6/1/23.
25
- //
26
-
27
-
28
- #include "AE/Svfexe/SVFIR2ConsExeState.h"
29
- #include "Util/Options.h"
30
-
31
- using namespace SVF;
32
- using namespace SVFUtil;
33
- using namespace std;
34
-
35
- SVFIR2ConsExeState::~SVFIR2ConsExeState()
36
- {
37
- ConsExeState::globalConsES._varToVal.clear();
38
- ConsExeState::globalConsES._varToAddrs.clear();
39
- ConsExeState::globalConsES._locToVal.clear();
40
- ConsExeState::globalConsES._locToAddrs.clear();
41
- }
42
- /// Translator for llvm ir
43
- //{%
44
- /*!
45
- * https://llvm.org/docs/LangRef.html#alloca-instruction
46
- * @param addr
47
- * @return
48
- */
49
- void SVFIR2ConsExeState::translateAddr(const AddrStmt *addr)
50
- {
51
- initSVFVar(addr->getRHSVarID());
52
- if (inVarToValTable(addr->getRHSVarID()))
53
- {
54
- _es->globalConsES._varToVal[addr->getLHSVarID()] = _es->globalConsES._varToVal[addr->getRHSVarID()];
55
- }
56
- else if (inVarToAddrsTable(addr->getRHSVarID()))
57
- {
58
- _es->globalConsES._varToAddrs[addr->getLHSVarID()] = _es->globalConsES._varToAddrs[addr->getRHSVarID()];
59
- }
60
- else
61
- {
62
- assert(false && "not number or virtual addrs?");
63
- }
64
- }
65
-
66
- /*!
67
- * https://llvm.org/docs/LangRef.html#binary-operations
68
- * @param binary
69
- * @return
70
- */
71
- void SVFIR2ConsExeState::translateBinary(const BinaryOPStmt *binary)
72
- {
73
- u32_t op0 = binary->getOpVarID(0);
74
- u32_t op1 = binary->getOpVarID(1);
75
- u32_t res = binary->getResID();
76
- // rhs is not initialized
77
- if (!_es->inVarToValTable(op0) || !_es->inVarToValTable(op1))
78
- return;
79
-
80
- SingleAbsValue &lhs = (*_es)[op0], &rhs = (*_es)[op1];
81
- SingleAbsValue resVal;
82
- switch (binary->getOpcode())
83
- {
84
- case BinaryOPStmt::Add:
85
- case BinaryOPStmt::FAdd:
86
- resVal = (lhs + rhs).simplify();
87
- break;
88
- case BinaryOPStmt::Sub:
89
- case BinaryOPStmt::FSub:
90
- resVal = (lhs - rhs).simplify();
91
- break;
92
- case BinaryOPStmt::Mul:
93
- case BinaryOPStmt::FMul:
94
- resVal = (lhs * rhs).simplify();
95
- break;
96
- case BinaryOPStmt::SDiv:
97
- case BinaryOPStmt::FDiv:
98
- case BinaryOPStmt::UDiv:
99
- resVal = (lhs / rhs).simplify();
100
- break;
101
- case BinaryOPStmt::SRem:
102
- case BinaryOPStmt::FRem:
103
- case BinaryOPStmt::URem:
104
- resVal = (lhs % rhs).simplify();
105
- break;
106
- case BinaryOPStmt::Xor:
107
- resVal = (lhs ^ rhs).simplify();
108
- break;
109
- case BinaryOPStmt::And:
110
- resVal = (lhs & rhs).simplify();
111
- break;
112
- case BinaryOPStmt::Or:
113
- resVal = (lhs | rhs).simplify();
114
- break;
115
- case BinaryOPStmt::AShr:
116
- resVal = ashr(lhs, rhs).simplify();
117
- break;
118
- case BinaryOPStmt::Shl:
119
- resVal = shl(lhs, rhs).simplify();
120
- break;
121
- case BinaryOPStmt::LShr:
122
- resVal = lshr(lhs, rhs).simplify();
123
- break;
124
- default:
125
- {
126
- assert(false && "undefined binary");
127
- }
128
- }
129
- (*_es)[res] = resVal;
130
- }
131
-
132
- /*!
133
- * https://llvm.org/docs/LangRef.html#icmp-instruction
134
- * @param cmp
135
- * @return
136
- */
137
- void SVFIR2ConsExeState::translateCmp(const CmpStmt *cmp)
138
- {
139
- u32_t op0 = cmp->getOpVarID(0);
140
- u32_t op1 = cmp->getOpVarID(1);
141
- u32_t res = cmp->getResID();
142
- if (inVarToValTable(op0) && inVarToValTable(op1))
143
- {
144
- SingleAbsValue &lhs = (*_es)[op0], &rhs = (*_es)[op1];
145
- SingleAbsValue resVal;
146
- auto predicate = cmp->getPredicate();
147
- switch (predicate)
148
- {
149
- case CmpStmt::ICMP_EQ:
150
- case CmpStmt::FCMP_OEQ:
151
- case CmpStmt::FCMP_UEQ:
152
- resVal = ite(lhs == rhs, 1, 0).simplify();
153
- break;
154
- case CmpStmt::ICMP_NE:
155
- case CmpStmt::FCMP_ONE:
156
- case CmpStmt::FCMP_UNE:
157
- resVal = ite(lhs != rhs, 1, 0).simplify();
158
- break;
159
- case CmpStmt::ICMP_UGT:
160
- case CmpStmt::ICMP_SGT:
161
- case CmpStmt::FCMP_OGT:
162
- case CmpStmt::FCMP_UGT:
163
- resVal = ite(lhs > rhs, 1, 0).simplify();
164
- break;
165
- case CmpStmt::ICMP_UGE:
166
- case CmpStmt::ICMP_SGE:
167
- case CmpStmt::FCMP_OGE:
168
- case CmpStmt::FCMP_UGE:
169
- resVal = ite(lhs >= rhs, 1, 0).simplify();
170
- break;
171
- case CmpStmt::ICMP_ULT:
172
- case CmpStmt::ICMP_SLT:
173
- case CmpStmt::FCMP_OLT:
174
- case CmpStmt::FCMP_ULT:
175
- resVal = ite(lhs < rhs, 1, 0).simplify();
176
- break;
177
- case CmpStmt::ICMP_ULE:
178
- case CmpStmt::ICMP_SLE:
179
- case CmpStmt::FCMP_OLE:
180
- case CmpStmt::FCMP_ULE:
181
- resVal = ite(lhs <= rhs, 1, 0).simplify();
182
- break;
183
- case CmpStmt::FCMP_FALSE:
184
- resVal = 0;
185
- break;
186
- case CmpStmt::FCMP_TRUE:
187
- resVal = 1;
188
- break;
189
- default:
190
- {
191
- assert(false && "undefined compare");
192
- }
193
- }
194
- (*_es)[res] = resVal;
195
- }
196
- else if (inVarToAddrsTable(op0) && inVarToAddrsTable(op1))
197
- {
198
-
199
- Addrs &lhs = _es->getAddrs(op0), &rhs = _es->getAddrs(op1);
200
- if (lhs.size() == 1)
201
- {
202
- (*_es)[res] = SingleAbsValue::topConstant();
203
- return;
204
- }
205
- if (rhs.size() == 1)
206
- {
207
- (*_es)[res] = SingleAbsValue::topConstant();
208
- return;
209
- }
210
- assert(!lhs.empty() && !rhs.empty() && "empty address?");
211
- auto predicate = cmp->getPredicate();
212
- switch (predicate)
213
- {
214
- case CmpStmt::ICMP_EQ:
215
- case CmpStmt::FCMP_OEQ:
216
- case CmpStmt::FCMP_UEQ:
217
- {
218
- if (lhs.size() == 1 && rhs.size() == 1)
219
- {
220
- (*_es)[res] = lhs == rhs;
221
- }
222
- else
223
- {
224
- if (lhs.hasIntersect(rhs))
225
- {
226
- (*_es)[res] = SingleAbsValue::topConstant();
227
- }
228
- else
229
- {
230
- (*_es)[res] = 0;
231
- }
232
- }
233
- return;
234
- }
235
- case CmpStmt::ICMP_NE:
236
- case CmpStmt::FCMP_ONE:
237
- case CmpStmt::FCMP_UNE:
238
- {
239
- if (lhs.size() == 1 && rhs.size() == 1)
240
- {
241
- (*_es)[res] = lhs != rhs;
242
- }
243
- else
244
- {
245
- if (lhs.hasIntersect(rhs))
246
- {
247
- (*_es)[res] = SingleAbsValue::topConstant();
248
- }
249
- else
250
- {
251
- (*_es)[res] = 1;
252
- }
253
- }
254
- return;
255
- }
256
- case CmpStmt::ICMP_UGT:
257
- case CmpStmt::ICMP_SGT:
258
- case CmpStmt::FCMP_OGT:
259
- case CmpStmt::FCMP_UGT:
260
- {
261
- if (lhs.size() == 1 && rhs.size() == 1)
262
- {
263
- (*_es)[res] = *lhs.begin() > *rhs.begin();
264
- }
265
- else
266
- {
267
- (*_es)[res] = SingleAbsValue::topConstant();
268
- }
269
- return;
270
- }
271
- case CmpStmt::ICMP_UGE:
272
- case CmpStmt::ICMP_SGE:
273
- case CmpStmt::FCMP_OGE:
274
- case CmpStmt::FCMP_UGE:
275
- {
276
- if (lhs.size() == 1 && rhs.size() == 1)
277
- {
278
- (*_es)[res] = *lhs.begin() >= *rhs.begin();
279
- }
280
- else
281
- {
282
- (*_es)[res] = SingleAbsValue::topConstant();
283
- }
284
- return;
285
- }
286
- case CmpStmt::ICMP_ULT:
287
- case CmpStmt::ICMP_SLT:
288
- case CmpStmt::FCMP_OLT:
289
- case CmpStmt::FCMP_ULT:
290
- {
291
- if (lhs.size() == 1 && rhs.size() == 1)
292
- {
293
- (*_es)[res] = *lhs.begin() < *rhs.begin();
294
- }
295
- else
296
- {
297
- (*_es)[res] = SingleAbsValue::topConstant();
298
- }
299
- return;
300
- }
301
- case CmpStmt::ICMP_ULE:
302
- case CmpStmt::ICMP_SLE:
303
- case CmpStmt::FCMP_OLE:
304
- case CmpStmt::FCMP_ULE:
305
- {
306
- if (lhs.size() == 1 && rhs.size() == 1)
307
- {
308
- (*_es)[res] = *lhs.begin() <= *rhs.begin();
309
- }
310
- else
311
- {
312
- (*_es)[res] = SingleAbsValue::topConstant();
313
- }
314
- return;
315
- }
316
- case CmpStmt::FCMP_FALSE:
317
- (*_es)[res] = 0;
318
- return;
319
- case CmpStmt::FCMP_TRUE:
320
- (*_es)[res] = 1;
321
- return;
322
- default:
323
- {
324
- assert(false && "undefined compare");
325
- }
326
- }
327
- }
328
- else if (inVarToAddrsTable(op0))
329
- {
330
- (*_es)[res] = SingleAbsValue::topConstant();
331
- }
332
- else if (inVarToAddrsTable(op1))
333
- {
334
- (*_es)[res] = SingleAbsValue::topConstant();
335
- }
336
- }
337
-
338
- /*!
339
- * https://llvm.org/docs/LangRef.html#load-instruction
340
- * @param load
341
- * @return
342
- */
343
- void SVFIR2ConsExeState::translateLoad(const LoadStmt *load)
344
- {
345
- u32_t rhs = load->getRHSVarID();
346
- u32_t lhs = load->getLHSVarID();
347
- if (inVarToAddrsTable(rhs))
348
- {
349
- const Addrs &addrs = _es->getAddrs(rhs);
350
- for (const auto &addr: addrs)
351
- {
352
- assert(isVirtualMemAddress(addr) && "not addr?");
353
- u32_t objId = getInternalID(addr);
354
- if (load->getLHSVar()->getType() && load->getLHSVar()->getType()->isPointerTy())
355
- {
356
- if (inLocToAddrsTable(objId))
357
- {
358
- _es->getAddrs(lhs).setBottom();
359
- }
360
- break;
361
- }
362
- else if (!load->getLHSVar()->getType() && inLocToAddrsTable(objId))
363
- {
364
- _es->getAddrs(lhs).setBottom();
365
- break;
366
- }
367
- else if (inLocToValTable(objId))
368
- {
369
- (*_es)[lhs] = SingleAbsValue::bottomConstant();
370
- break;
371
- }
372
- }
373
-
374
- for (const auto &addr: addrs)
375
- {
376
- assert(isVirtualMemAddress(addr) && "not addr?");
377
- u32_t objId = getInternalID(addr);
378
- if (load->getLHSVar()->getType() && load->getLHSVar()->getType()->isPointerTy())
379
- {
380
- if (inLocToAddrsTable(objId))
381
- {
382
- if (!inVarToAddrsTable(lhs))
383
- {
384
- _es->getAddrs(lhs) = _es->loadAddrs(addr);
385
- }
386
- else
387
- {
388
- _es->getAddrs(lhs).join_with(_es->loadAddrs(addr));
389
- }
390
- }
391
- }
392
- else if (!load->getLHSVar()->getType() && inLocToAddrsTable(objId))
393
- {
394
- if (!inVarToAddrsTable(lhs))
395
- {
396
- _es->getAddrs(lhs) = _es->loadAddrs(addr);
397
- }
398
- else
399
- {
400
- _es->getAddrs(lhs).join_with(_es->loadAddrs(addr));
401
- }
402
- }
403
- else if (inLocToValTable(objId))
404
- {
405
- if (!inVarToValTable(lhs))
406
- {
407
- (*_es)[lhs] = _es->load(SingleAbsValue(getVirtualMemAddress(objId)));
408
- }
409
- else
410
- {
411
- (*_es)[lhs].join_with(_es->load(SingleAbsValue(getVirtualMemAddress(objId))));
412
- }
413
- }
414
- }
415
- }
416
- }
417
-
418
- /*!
419
- * https://llvm.org/docs/LangRef.html#store-instruction
420
- * @param store
421
- * @return
422
- */
423
- void SVFIR2ConsExeState::translateStore(const StoreStmt *store)
424
- {
425
- u32_t rhs = store->getRHSVarID();
426
- u32_t lhs = store->getLHSVarID();
427
- if (inVarToAddrsTable(lhs))
428
- {
429
- if (inVarToValTable(rhs))
430
- {
431
- const Addrs &addrs = _es->getAddrs(lhs);
432
- for (const auto &addr: addrs)
433
- {
434
- assert(isVirtualMemAddress(addr) && "not addr?");
435
- _es->store(SingleAbsValue(addr), (*_es)[rhs]);
436
- }
437
- }
438
- else if (inVarToAddrsTable(rhs))
439
- {
440
- const Addrs &addrs = _es->getAddrs(lhs);
441
- for (const auto &addr: addrs)
442
- {
443
- assert(isVirtualMemAddress(addr) && "not addr?");
444
- _es->storeAddrs(addr, _es->getAddrs(rhs));
445
- }
446
- }
447
- }
448
- }
449
-
450
- /*!
451
- * https://llvm.org/docs/LangRef.html#conversion-operations
452
- * @param copy
453
- * @return
454
- */
455
- void SVFIR2ConsExeState::translateCopy(const CopyStmt *copy)
456
- {
457
- u32_t lhs = copy->getLHSVarID();
458
- u32_t rhs = copy->getRHSVarID();
459
- if (PAG::getPAG()->isBlkPtr(lhs))
460
- {
461
- _es->globalConsES._varToVal[lhs] = SingleAbsValue::topConstant();
462
- }
463
- else
464
- {
465
- if (inVarToValTable(rhs))
466
- {
467
- (*_es)[lhs] = (*_es)[rhs];
468
- }
469
- else if (inVarToAddrsTable(rhs))
470
- {
471
- _es->getAddrs(lhs) = _es->getAddrs(rhs);
472
- }
473
- }
474
- }
475
-
476
- /*!
477
- * https://llvm.org/docs/LangRef.html#call-instruction
478
- * @param callPE
479
- * @return
480
- */
481
- void SVFIR2ConsExeState::translateCall(const CallPE *callPE)
482
- {
483
- NodeID lhs = callPE->getLHSVarID();
484
- NodeID rhs = callPE->getRHSVarID();
485
- if (inVarToValTable(rhs))
486
- {
487
- (*_es)[lhs] = (*_es)[rhs];
488
- }
489
- else if (inVarToAddrsTable(rhs))
490
- {
491
- _es->getAddrs(lhs) = _es->getAddrs(rhs);
492
- }
493
- }
494
-
495
- void SVFIR2ConsExeState::translateRet(const RetPE *retPE)
496
- {
497
- NodeID lhs = retPE->getLHSVarID();
498
- NodeID rhs = retPE->getRHSVarID();
499
- if (inVarToValTable(rhs))
500
- {
501
- (*_es)[lhs] = (*_es)[rhs];
502
- }
503
- else if (inVarToAddrsTable(rhs))
504
- {
505
- _es->getAddrs(lhs) = _es->getAddrs(rhs);
506
- }
507
- }
508
-
509
- /*!
510
- * https://llvm.org/docs/LangRef.html#getelementptr-instruction
511
- * @param gep
512
- * @return
513
- */
514
- void SVFIR2ConsExeState::translateGep(const GepStmt *gep, bool isGlobal)
515
- {
516
- u32_t rhs = gep->getRHSVarID();
517
- u32_t lhs = gep->getLHSVarID();
518
- // rhs is not initialized
519
- if (!inVarToAddrsTable(rhs)) return;
520
- const Addrs &rhsVal = _es->getAddrs(rhs);
521
- if (rhsVal.empty()) return;
522
- std::pair<s32_t, s32_t> offset = getGepOffset(gep);
523
- if (offset.first == -1 && offset.second == -1) return;
524
- if (!isVirtualMemAddress(*rhsVal.begin()))
525
- {
526
- return;
527
- }
528
- Addrs gepAddrs;
529
- s32_t ub = offset.second;
530
- if (offset.second > (s32_t) Options::MaxFieldLimit() - 1)
531
- {
532
- ub = Options::MaxFieldLimit() - 1;
533
- }
534
- for (s32_t i = offset.first; i <= ub; i++)
535
- {
536
- gepAddrs.join_with(getGepObjAddress(rhs, i));
537
- }
538
- if (gepAddrs.empty()) return;
539
- _es->getAddrs(lhs) = gepAddrs;
540
- return;
541
- }
542
-
543
- /*!
544
- * https://llvm.org/docs/LangRef.html#select-instruction
545
- * @param select
546
- * @return
547
- */
548
- void SVFIR2ConsExeState::translateSelect(const SelectStmt *select)
549
- {
550
- u32_t res = select->getResID();
551
- u32_t tval = select->getTrueValue()->getId();
552
- u32_t fval = select->getFalseValue()->getId();
553
- u32_t cond = select->getCondition()->getId();
554
- _es->applySelect(res, cond, tval, fval);
555
- }
556
-
557
- /*!
558
- * https://llvm.org/docs/LangRef.html#i-phi
559
- * @param phi
560
- * @return
561
- */
562
- void SVFIR2ConsExeState::translatePhi(const PhiStmt *phi)
563
- {
564
- u32_t res = phi->getResID();
565
- std::vector<u32_t> ops;
566
- for (u32_t i = 0; i < phi->getOpVarNum(); i++)
567
- {
568
- ops.push_back(phi->getOpVarID(i));
569
- }
570
- _es->applyPhi(res, ops);
571
- }
572
-
573
- //%}
574
- //%}
575
-
576
- /*!
577
- * Return the expr of gep object given a base and offset
578
- * @param base
579
- * @param offset
580
- * @return
581
- */
582
- SVFIR2ConsExeState::Addrs SVFIR2ConsExeState::getGepObjAddress(u32_t base, s32_t offset)
583
- {
584
- const Addrs &addrs = _es->getAddrs(base);
585
- Addrs ret;
586
- for (const auto &addr: addrs)
587
- {
588
- int64_t baseObj = getInternalID(addr);
589
- if (baseObj == 0)
590
- {
591
- ret.insert(getVirtualMemAddress(0));
592
- continue;
593
- }
594
- assert(SVFUtil::isa<ObjVar>(PAG::getPAG()->getGNode(baseObj)) && "Fail to get the base object address!");
595
- NodeID gepObj = PAG::getPAG()->getGepObjVar(baseObj, offset);
596
- initSVFVar(gepObj);
597
- if (offset == 0 && baseObj != gepObj) _es->getAddrs(gepObj) = _es->getAddrs(base);
598
- ret.insert(getVirtualMemAddress(gepObj));
599
- }
600
- return ret;
601
- }
602
-
603
- /*!
604
- * Return the offset expression of a GepStmt
605
- * @param gep
606
- * @return
607
- */
608
- std::pair<s32_t, s32_t> SVFIR2ConsExeState::getGepOffset(const SVF::GepStmt *gep)
609
- {
610
- /// for instant constant index, e.g. gep arr, 1
611
- if (gep->getOffsetVarAndGepTypePairVec().empty())
612
- return std::make_pair(gep->getConstantStructFldIdx(),
613
- gep->getConstantStructFldIdx());
614
-
615
- s32_t totalOffset = 0;
616
- /// default value of MaxFieldLimit is 512
617
- u32_t maxFieldLimit = Options::MaxFieldLimit() - 1;
618
- /// for variable index and nested indexes, e.g. 1) gep arr, idx 2) gep arr idx0, idx1
619
- for (int i = gep->getOffsetVarAndGepTypePairVec().size() - 1; i >= 0; i--)
620
- {
621
- const SVFValue *value =
622
- gep->getOffsetVarAndGepTypePairVec()[i].first->getValue();
623
- const SVFType *type = gep->getOffsetVarAndGepTypePairVec()[i].second;
624
- const SVFConstantInt *op = SVFUtil::dyn_cast<SVFConstantInt>(value);
625
- s32_t offset = 0;
626
- /// offset is constant but stored in variable
627
- if (op)
628
- {
629
- offset = op->getSExtValue();
630
- }
631
- /// offset is variable, the concrete value isn't sure util runtime, and maybe not a concrete value.
632
- /// e.g.
633
- else
634
- {
635
- u32_t idx = PAG::getPAG()->getValueNode(value);
636
- if (!inVarToValTable(idx)) return std::make_pair(-1, -1);
637
- if ((*_es)[idx].isBottom() || (*_es)[idx].isTop() || (*_es)[idx].isSym())
638
- {
639
- return std::make_pair(0, (s32_t) Options::MaxFieldLimit());
640
- }
641
-
642
- // if idxVal is a concrete value
643
- offset = ConsExeState::z3Expr2NumValue((*_es)[idx]);
644
- }
645
- if (type == nullptr)
646
- {
647
- if ((long long) (totalOffset + offset) > maxFieldLimit)
648
- {
649
- totalOffset = maxFieldLimit;
650
- }
651
- else
652
- {
653
- totalOffset += offset;
654
- }
655
- continue;
656
- }
657
-
658
- if (SVFUtil::isa<SVFPointerType>(type))
659
- {
660
- offset = offset * gep->getAccessPath().getElementNum(gep->getAccessPath().gepSrcPointeeType());
661
- }
662
- else
663
- {
664
- const std::vector<u32_t> &so = SymbolTableInfo::SymbolInfo()->getTypeInfo(
665
- type)->getFlattenedElemIdxVec();
666
- if (so.empty() || (u32_t) offset >= so.size())
667
- return std::make_pair(-1, -1);
668
- offset = SymbolTableInfo::SymbolInfo()->getFlattenedElemIdx(type, offset);
669
- }
670
- if ((long long) (totalOffset + offset) > maxFieldLimit)
671
- {
672
- totalOffset = maxFieldLimit;
673
- }
674
- else
675
- {
676
- totalOffset += offset;
677
- }
678
- }
679
- std::pair<s32_t, s32_t> offSetPair;
680
- offSetPair.first = totalOffset;
681
- offSetPair.second = totalOffset;
682
- return offSetPair;
683
- }
684
-
685
-
686
- /*!
687
- * Init Z3Expr for ObjVar
688
- * @param objVar
689
- * @param valExprIdToCondValPairMap
690
- */
691
- void SVFIR2ConsExeState::initObjVar(const ObjVar *objVar, u32_t varId)
692
- {
693
- if (objVar->hasValue())
694
- {
695
- const MemObj *obj = objVar->getMemObj();
696
- /// constant data
697
- if (obj->isConstDataOrAggData() || obj->isConstantArray() || obj->isConstantStruct())
698
- {
699
- if (const SVFConstantInt *consInt = SVFUtil::dyn_cast<SVFConstantInt>(obj->getValue()))
700
- {
701
- _es->globalConsES._varToVal[varId] = consInt->getSExtValue();
702
- }
703
- else if (const SVFConstantFP *consFP = SVFUtil::dyn_cast<SVFConstantFP>(obj->getValue()))
704
- _es->globalConsES._varToVal[varId] = consFP->getFPValue();
705
- else if (SVFUtil::isa<SVFConstantNullPtr>(obj->getValue()))
706
- _es->globalConsES._varToVal[varId] = 0;
707
- else if (SVFUtil::isa<SVFGlobalValue>(obj->getValue()))
708
- _es->globalConsES._varToAddrs[varId] = getVirtualMemAddress(varId);
709
- else if (obj->isConstDataOrAggData())
710
- {
711
- // TODO
712
- // assert(false && "implement this part");
713
- _es->globalConsES._varToVal[varId] = SingleAbsValue::topConstant();
714
- }
715
- else
716
- {
717
- _es->globalConsES._varToVal[varId] = SingleAbsValue::topConstant();
718
- }
719
- }
720
- else
721
- {
722
- _es->globalConsES._varToAddrs[varId] = getVirtualMemAddress(varId);
723
- }
724
- }
725
- else
726
- {
727
- _es->globalConsES._varToAddrs[varId] = getVirtualMemAddress(varId);
728
- }
729
- }
730
-
731
-
732
- void SVFIR2ConsExeState::initSVFVar(u32_t varId)
733
- {
734
- if (_es->inVarToValTable(varId)) return;
735
- SVFIR *svfir = PAG::getPAG();
736
- SVFVar *svfVar = svfir->getGNode(varId);
737
- // write objvar into cache instead of exestate
738
- if (const ObjVar *objVar = dyn_cast<ObjVar>(svfVar))
739
- {
740
- initObjVar(objVar, varId);
741
- return;
742
- }
743
- else
744
- {
745
- assert(false && "not an obj var?");
746
- }
747
- }
748
-
749
- void SVFIR2ConsExeState::moveToGlobal()
750
- {
751
- for (const auto &it: _es->_varToVal)
752
- {
753
- ConsExeState::globalConsES._varToVal.insert(it);
754
- }
755
- for (const auto &it: _es->_locToVal)
756
- {
757
- ConsExeState::globalConsES._locToVal.insert(it);
758
- }
759
- for (const auto &it: _es->_varToAddrs)
760
- {
761
- ConsExeState::globalConsES._varToAddrs.insert(it);
762
- }
763
- for (const auto &it: _es->_locToAddrs)
764
- {
765
- ConsExeState::globalConsES._locToAddrs.insert(it);
766
- }
767
- ConsExeState::globalConsES._varToAddrs[0] = ConsExeState::getVirtualMemAddress(0);
768
- _es->_varToVal.clear();
769
- _es->_locToVal.clear();
770
- _es->_varToAddrs.clear();
771
- _es->_locToAddrs.clear();
772
- }