svf-tools 1.0.786 → 1.0.788

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 (299) hide show
  1. package/SVF-doxygen/html/CDGBuilder_8cpp_source.html +128 -122
  2. package/SVF-doxygen/html/CDGBuilder_8h_source.html +5 -5
  3. package/SVF-doxygen/html/CFBasicBlockGBuilder_8cpp.html +92 -0
  4. package/SVF-doxygen/html/CFBasicBlockGBuilder_8cpp_source.html +291 -0
  5. package/SVF-doxygen/html/CFBasicBlockGBuilder_8h.html +98 -0
  6. package/SVF-doxygen/html/CFBasicBlockGBuilder_8h_source.html +154 -0
  7. package/SVF-doxygen/html/CFBasicBlockG_8cpp_source.html +49 -184
  8. package/SVF-doxygen/html/CFBasicBlockG_8h.html +0 -2
  9. package/SVF-doxygen/html/CFBasicBlockG_8h_source.html +509 -506
  10. package/SVF-doxygen/html/CHG_8cpp.html +2 -2
  11. package/SVF-doxygen/html/CHG_8cpp_source.html +3 -3
  12. package/SVF-doxygen/html/MemSSA_8cpp_source.html +1 -1
  13. package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +2 -2
  14. package/SVF-doxygen/html/SVFG_8cpp_source.html +1 -1
  15. package/SVF-doxygen/html/SVFUtil_8cpp_source.html +2 -2
  16. package/SVF-doxygen/html/SVFValue_8cpp_source.html +144 -141
  17. package/SVF-doxygen/html/SVFValue_8h_source.html +9 -9
  18. package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +2 -2
  19. package/SVF-doxygen/html/VFG_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/WTO_8h_source.html +424 -372
  21. package/SVF-doxygen/html/classSVF_1_1CDGBuilder.html +119 -113
  22. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGBuilder-members.html +4 -1
  23. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGBuilder.html +302 -124
  24. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO-members.html +48 -47
  25. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO.html +306 -236
  26. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTOCycle.html +1 -1
  27. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTONode.html +1 -1
  28. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO_1_1TailBuilder-members.html +15 -14
  29. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO_1_1TailBuilder.html +90 -44
  30. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO_1_1WTOCycleDepthBuilder.html +26 -26
  31. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGraph-members.html +32 -36
  32. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGraph.html +121 -254
  33. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockNode-members.html +46 -47
  34. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockNode.html +185 -225
  35. package/SVF-doxygen/html/classSVF_1_1CHGraph.html +2 -2
  36. package/SVF-doxygen/html/classSVF_1_1MemSSA.html +1 -1
  37. package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +2 -2
  38. package/SVF-doxygen/html/classSVF_1_1SVFBasicBlock.html +63 -63
  39. package/SVF-doxygen/html/classSVF_1_1SVFFunction.html +28 -28
  40. package/SVF-doxygen/html/classSVF_1_1SVFG.html +1 -1
  41. package/SVF-doxygen/html/classSVF_1_1SVFInstruction.html +4 -4
  42. package/SVF-doxygen/html/classSVF_1_1SVFLoopAndDomInfo.html +25 -22
  43. package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator.html +2 -2
  44. package/SVF-doxygen/html/classSVF_1_1VFG.html +1 -1
  45. package/SVF-doxygen/html/dir_445b24f35a8ddd2effd3d23ee1278e0a.html +2 -0
  46. package/SVF-doxygen/html/dir_fee120689dee99ef16f8bfcaa7a76083.html +2 -0
  47. package/SVF-doxygen/html/files.html +35 -33
  48. package/SVF-doxygen/html/functions.html +3 -4
  49. package/SVF-doxygen/html/functions_a.html +19 -10
  50. package/SVF-doxygen/html/functions_b.html +6 -6
  51. package/SVF-doxygen/html/functions_c.html +29 -29
  52. package/SVF-doxygen/html/functions_func.html +15 -6
  53. package/SVF-doxygen/html/functions_func_b.html +1 -1
  54. package/SVF-doxygen/html/functions_func_c.html +21 -21
  55. package/SVF-doxygen/html/functions_func_g.html +13 -14
  56. package/SVF-doxygen/html/functions_func_h.html +5 -8
  57. package/SVF-doxygen/html/functions_func_i.html +10 -7
  58. package/SVF-doxygen/html/functions_func_s.html +22 -25
  59. package/SVF-doxygen/html/functions_func_t.html +1 -1
  60. package/SVF-doxygen/html/functions_g.html +10 -11
  61. package/SVF-doxygen/html/functions_h.html +3 -6
  62. package/SVF-doxygen/html/functions_i.html +10 -7
  63. package/SVF-doxygen/html/functions_l.html +3 -3
  64. package/SVF-doxygen/html/functions_n.html +4 -4
  65. package/SVF-doxygen/html/functions_o.html +19 -19
  66. package/SVF-doxygen/html/functions_p.html +21 -17
  67. package/SVF-doxygen/html/functions_r.html +1 -1
  68. package/SVF-doxygen/html/functions_s.html +14 -17
  69. package/SVF-doxygen/html/functions_t.html +4 -4
  70. package/SVF-doxygen/html/functions_v.html +3 -3
  71. package/SVF-doxygen/html/functions_vars.html +3 -4
  72. package/SVF-doxygen/html/functions_w.html +7 -7
  73. package/SVF-doxygen/html/namespaceSVF.html +1 -1
  74. package/SVF-doxygen/html/namespaceSVF_1_1SVFUtil.html +2 -2
  75. package/SVF-doxygen/html/search/all_0.js +123 -124
  76. package/SVF-doxygen/html/search/all_1.js +479 -476
  77. package/SVF-doxygen/html/search/all_10.js +324 -324
  78. package/SVF-doxygen/html/search/all_11.js +224 -224
  79. package/SVF-doxygen/html/search/all_12.js +541 -542
  80. package/SVF-doxygen/html/search/all_13.js +190 -190
  81. package/SVF-doxygen/html/search/all_14.js +67 -67
  82. package/SVF-doxygen/html/search/all_15.js +170 -170
  83. package/SVF-doxygen/html/search/all_16.js +63 -63
  84. package/SVF-doxygen/html/search/all_17.js +1 -1
  85. package/SVF-doxygen/html/search/all_18.js +1 -1
  86. package/SVF-doxygen/html/search/all_19.js +11 -11
  87. package/SVF-doxygen/html/search/all_1a.js +172 -172
  88. package/SVF-doxygen/html/search/all_2.js +167 -167
  89. package/SVF-doxygen/html/search/all_3.js +642 -640
  90. package/SVF-doxygen/html/search/all_4.js +233 -233
  91. package/SVF-doxygen/html/search/all_5.js +121 -121
  92. package/SVF-doxygen/html/search/all_6.js +225 -225
  93. package/SVF-doxygen/html/search/all_7.js +1038 -1038
  94. package/SVF-doxygen/html/search/all_8.js +194 -195
  95. package/SVF-doxygen/html/search/all_9.js +608 -607
  96. package/SVF-doxygen/html/search/all_a.js +46 -46
  97. package/SVF-doxygen/html/search/all_b.js +26 -26
  98. package/SVF-doxygen/html/search/all_c.js +116 -116
  99. package/SVF-doxygen/html/search/all_d.js +196 -196
  100. package/SVF-doxygen/html/search/all_e.js +207 -207
  101. package/SVF-doxygen/html/search/all_f.js +116 -116
  102. package/SVF-doxygen/html/search/classes_0.js +26 -26
  103. package/SVF-doxygen/html/search/classes_1.js +9 -9
  104. package/SVF-doxygen/html/search/classes_10.js +73 -73
  105. package/SVF-doxygen/html/search/classes_11.js +15 -15
  106. package/SVF-doxygen/html/search/classes_12.js +2 -2
  107. package/SVF-doxygen/html/search/classes_13.js +10 -10
  108. package/SVF-doxygen/html/search/classes_14.js +14 -14
  109. package/SVF-doxygen/html/search/classes_15.js +1 -1
  110. package/SVF-doxygen/html/search/classes_2.js +80 -80
  111. package/SVF-doxygen/html/search/classes_3.js +37 -37
  112. package/SVF-doxygen/html/search/classes_4.js +9 -9
  113. package/SVF-doxygen/html/search/classes_5.js +28 -28
  114. package/SVF-doxygen/html/search/classes_6.js +104 -104
  115. package/SVF-doxygen/html/search/classes_7.js +33 -33
  116. package/SVF-doxygen/html/search/classes_8.js +56 -56
  117. package/SVF-doxygen/html/search/classes_9.js +1 -1
  118. package/SVF-doxygen/html/search/classes_a.js +12 -12
  119. package/SVF-doxygen/html/search/classes_b.js +29 -29
  120. package/SVF-doxygen/html/search/classes_c.js +6 -6
  121. package/SVF-doxygen/html/search/classes_d.js +18 -18
  122. package/SVF-doxygen/html/search/classes_e.js +36 -36
  123. package/SVF-doxygen/html/search/classes_f.js +25 -25
  124. package/SVF-doxygen/html/search/defines_0.js +3 -3
  125. package/SVF-doxygen/html/search/defines_1.js +2 -2
  126. package/SVF-doxygen/html/search/defines_2.js +30 -30
  127. package/SVF-doxygen/html/search/defines_3.js +21 -21
  128. package/SVF-doxygen/html/search/defines_4.js +2 -2
  129. package/SVF-doxygen/html/search/defines_5.js +4 -4
  130. package/SVF-doxygen/html/search/defines_6.js +2 -2
  131. package/SVF-doxygen/html/search/defines_7.js +5 -5
  132. package/SVF-doxygen/html/search/defines_8.js +11 -11
  133. package/SVF-doxygen/html/search/defines_9.js +9 -9
  134. package/SVF-doxygen/html/search/defines_a.js +2 -2
  135. package/SVF-doxygen/html/search/defines_b.js +1 -1
  136. package/SVF-doxygen/html/search/defines_c.js +3 -3
  137. package/SVF-doxygen/html/search/defines_d.js +2 -2
  138. package/SVF-doxygen/html/search/defines_e.js +7 -7
  139. package/SVF-doxygen/html/search/defines_f.js +3 -3
  140. package/SVF-doxygen/html/search/enums_0.js +3 -3
  141. package/SVF-doxygen/html/search/enums_1.js +2 -2
  142. package/SVF-doxygen/html/search/enums_10.js +1 -1
  143. package/SVF-doxygen/html/search/enums_11.js +1 -1
  144. package/SVF-doxygen/html/search/enums_2.js +8 -8
  145. package/SVF-doxygen/html/search/enums_3.js +1 -1
  146. package/SVF-doxygen/html/search/enums_4.js +3 -3
  147. package/SVF-doxygen/html/search/enums_5.js +1 -1
  148. package/SVF-doxygen/html/search/enums_6.js +2 -2
  149. package/SVF-doxygen/html/search/enums_7.js +2 -2
  150. package/SVF-doxygen/html/search/enums_8.js +4 -4
  151. package/SVF-doxygen/html/search/enums_9.js +1 -1
  152. package/SVF-doxygen/html/search/enums_a.js +1 -1
  153. package/SVF-doxygen/html/search/enums_b.js +7 -7
  154. package/SVF-doxygen/html/search/enums_c.js +1 -1
  155. package/SVF-doxygen/html/search/enums_d.js +4 -4
  156. package/SVF-doxygen/html/search/enums_e.js +2 -2
  157. package/SVF-doxygen/html/search/enums_f.js +4 -4
  158. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  159. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  160. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  161. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  162. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  163. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  164. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  165. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  166. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  167. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  168. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  169. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  170. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  171. package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
  172. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  173. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  174. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  175. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  176. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  177. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  178. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  179. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  180. package/SVF-doxygen/html/search/files_0.js +13 -13
  181. package/SVF-doxygen/html/search/files_1.js +7 -7
  182. package/SVF-doxygen/html/search/files_10.js +8 -8
  183. package/SVF-doxygen/html/search/files_11.js +8 -8
  184. package/SVF-doxygen/html/search/files_12.js +2 -2
  185. package/SVF-doxygen/html/search/files_2.js +55 -53
  186. package/SVF-doxygen/html/search/files_3.js +14 -14
  187. package/SVF-doxygen/html/search/files_4.js +5 -5
  188. package/SVF-doxygen/html/search/files_5.js +13 -13
  189. package/SVF-doxygen/html/search/files_6.js +9 -9
  190. package/SVF-doxygen/html/search/files_7.js +14 -14
  191. package/SVF-doxygen/html/search/files_8.js +13 -13
  192. package/SVF-doxygen/html/search/files_9.js +18 -18
  193. package/SVF-doxygen/html/search/files_a.js +3 -3
  194. package/SVF-doxygen/html/search/files_b.js +2 -2
  195. package/SVF-doxygen/html/search/files_c.js +20 -20
  196. package/SVF-doxygen/html/search/files_d.js +4 -4
  197. package/SVF-doxygen/html/search/files_e.js +62 -62
  198. package/SVF-doxygen/html/search/files_f.js +8 -8
  199. package/SVF-doxygen/html/search/functions_0.js +12 -12
  200. package/SVF-doxygen/html/search/functions_1.js +359 -356
  201. package/SVF-doxygen/html/search/functions_10.js +140 -140
  202. package/SVF-doxygen/html/search/functions_11.js +138 -138
  203. package/SVF-doxygen/html/search/functions_12.js +276 -277
  204. package/SVF-doxygen/html/search/functions_13.js +58 -58
  205. package/SVF-doxygen/html/search/functions_14.js +39 -39
  206. package/SVF-doxygen/html/search/functions_15.js +71 -71
  207. package/SVF-doxygen/html/search/functions_16.js +32 -32
  208. package/SVF-doxygen/html/search/functions_17.js +3 -3
  209. package/SVF-doxygen/html/search/functions_18.js +172 -172
  210. package/SVF-doxygen/html/search/functions_2.js +86 -86
  211. package/SVF-doxygen/html/search/functions_3.js +257 -257
  212. package/SVF-doxygen/html/search/functions_4.js +75 -75
  213. package/SVF-doxygen/html/search/functions_5.js +53 -53
  214. package/SVF-doxygen/html/search/functions_6.js +59 -59
  215. package/SVF-doxygen/html/search/functions_7.js +849 -849
  216. package/SVF-doxygen/html/search/functions_8.js +146 -147
  217. package/SVF-doxygen/html/search/functions_9.js +426 -425
  218. package/SVF-doxygen/html/search/functions_a.js +30 -30
  219. package/SVF-doxygen/html/search/functions_b.js +2 -2
  220. package/SVF-doxygen/html/search/functions_c.js +26 -26
  221. package/SVF-doxygen/html/search/functions_d.js +77 -77
  222. package/SVF-doxygen/html/search/functions_e.js +35 -35
  223. package/SVF-doxygen/html/search/functions_f.js +56 -56
  224. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  225. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  226. package/SVF-doxygen/html/search/related_0.js +2 -2
  227. package/SVF-doxygen/html/search/related_1.js +2 -2
  228. package/SVF-doxygen/html/search/related_2.js +2 -2
  229. package/SVF-doxygen/html/search/related_3.js +2 -2
  230. package/SVF-doxygen/html/search/related_4.js +2 -2
  231. package/SVF-doxygen/html/search/related_5.js +1 -1
  232. package/SVF-doxygen/html/search/related_6.js +2 -2
  233. package/SVF-doxygen/html/search/related_7.js +4 -4
  234. package/SVF-doxygen/html/search/related_8.js +2 -2
  235. package/SVF-doxygen/html/search/related_9.js +4 -4
  236. package/SVF-doxygen/html/search/related_a.js +19 -19
  237. package/SVF-doxygen/html/search/related_b.js +4 -4
  238. package/SVF-doxygen/html/search/related_c.js +1 -1
  239. package/SVF-doxygen/html/search/related_d.js +11 -11
  240. package/SVF-doxygen/html/search/related_e.js +2 -2
  241. package/SVF-doxygen/html/search/related_f.js +2 -2
  242. package/SVF-doxygen/html/search/typedefs_0.js +18 -18
  243. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  244. package/SVF-doxygen/html/search/typedefs_10.js +61 -61
  245. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  246. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  247. package/SVF-doxygen/html/search/typedefs_13.js +35 -35
  248. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  249. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  250. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  251. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  252. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  253. package/SVF-doxygen/html/search/typedefs_6.js +55 -55
  254. package/SVF-doxygen/html/search/typedefs_7.js +42 -42
  255. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  256. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  257. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  258. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  259. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  260. package/SVF-doxygen/html/search/typedefs_d.js +15 -15
  261. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  262. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  263. package/SVF-doxygen/html/search/variables_0.js +151 -152
  264. package/SVF-doxygen/html/search/variables_1.js +75 -75
  265. package/SVF-doxygen/html/search/variables_10.js +97 -97
  266. package/SVF-doxygen/html/search/variables_11.js +46 -46
  267. package/SVF-doxygen/html/search/variables_12.js +92 -92
  268. package/SVF-doxygen/html/search/variables_13.js +75 -75
  269. package/SVF-doxygen/html/search/variables_14.js +14 -14
  270. package/SVF-doxygen/html/search/variables_15.js +48 -48
  271. package/SVF-doxygen/html/search/variables_16.js +9 -9
  272. package/SVF-doxygen/html/search/variables_17.js +1 -1
  273. package/SVF-doxygen/html/search/variables_18.js +2 -2
  274. package/SVF-doxygen/html/search/variables_2.js +37 -37
  275. package/SVF-doxygen/html/search/variables_3.js +142 -142
  276. package/SVF-doxygen/html/search/variables_4.js +55 -55
  277. package/SVF-doxygen/html/search/variables_5.js +39 -39
  278. package/SVF-doxygen/html/search/variables_6.js +66 -66
  279. package/SVF-doxygen/html/search/variables_7.js +33 -33
  280. package/SVF-doxygen/html/search/variables_8.js +7 -7
  281. package/SVF-doxygen/html/search/variables_9.js +77 -77
  282. package/SVF-doxygen/html/search/variables_a.js +4 -4
  283. package/SVF-doxygen/html/search/variables_b.js +10 -10
  284. package/SVF-doxygen/html/search/variables_c.js +45 -45
  285. package/SVF-doxygen/html/search/variables_d.js +56 -56
  286. package/SVF-doxygen/html/search/variables_e.js +123 -123
  287. package/SVF-doxygen/html/search/variables_f.js +30 -30
  288. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01SVF_1_1CFBasicBlockGraph_01_5_01_4.html +93 -40
  289. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01Inverse_3_01SVF_1_1CFBasicBlockNode_01_5_01_4_01_4.html +1 -1
  290. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1CFBasicBlockGraph_01_5_01_4.html +2 -2
  291. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1CFBasicBlockNode_01_5_01_4.html +1 -1
  292. package/package.json +1 -1
  293. package/svf/include/AbstractExecution/WTO.h +56 -10
  294. package/svf/include/Graphs/CFBasicBlockG.h +62 -50
  295. package/svf/include/Util/CFBasicBlockGBuilder.h +59 -0
  296. package/svf/lib/Graphs/CFBasicBlockG.cpp +0 -111
  297. package/svf/lib/SVFIR/SVFValue.cpp +2 -0
  298. package/svf/lib/Util/CDGBuilder.cpp +5 -0
  299. package/svf/lib/Util/CFBasicBlockGBuilder.cpp +183 -0
@@ -0,0 +1,59 @@
1
+ //===- CFBasicBlockGBuilder.h ----------------------------------------------------------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-> <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
+ * CFBasicBlockGBuilder.h
25
+ *
26
+ * Created on: 17 Oct. 2023
27
+ * Author: Xiao, Jiawei
28
+ */
29
+
30
+ #include "Graphs/CFBasicBlockG.h"
31
+
32
+ namespace SVF
33
+ {
34
+
35
+ class CFBasicBlockGBuilder
36
+ {
37
+
38
+ private:
39
+ CFBasicBlockGraph* _CFBasicBlockG;
40
+
41
+ public:
42
+ CFBasicBlockGBuilder() : _CFBasicBlockG() {}
43
+
44
+ virtual void build(ICFG* icfg);
45
+
46
+ inline CFBasicBlockGraph* getCFBasicBlockGraph()
47
+ {
48
+ return _CFBasicBlockG;
49
+ }
50
+ private:
51
+ void initCFBasicBlockGNodes(ICFG *icfg, Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes);
52
+
53
+ void addInterBBEdge(ICFG *icfg, Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes);
54
+
55
+ void addIntraBBEdge(ICFG *icfg, Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes);
56
+
57
+ void addInterProceduralEdge(ICFG *icfg, Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes);
58
+ };
59
+ }
@@ -32,21 +32,6 @@
32
32
 
33
33
  namespace SVF
34
34
  {
35
- CFBasicBlockNode::CFBasicBlockNode(const SVFBasicBlock* svfBasicBlock)
36
- : GenericCFBasicBlockNodeTy(
37
- PAG::getPAG()
38
- ->getICFG()
39
- ->getICFGNode(*svfBasicBlock->getInstructionList().begin())
40
- ->getId(),
41
- 0)
42
- {
43
- for (auto it = svfBasicBlock->begin(); it != svfBasicBlock->end(); ++it)
44
- {
45
- const SVFInstruction* ins = *it;
46
- ICFGNode* icfgNode = PAG::getPAG()->getICFG()->getICFGNode(ins);
47
- _icfgNodes.push_back(icfgNode);
48
- }
49
- }
50
35
 
51
36
  const std::string CFBasicBlockNode::toString() const
52
37
  {
@@ -91,101 +76,5 @@ std::vector<CFBasicBlockEdge*> CFBasicBlockGraph::getCFBasicBlockEdge(const CFBa
91
76
  return SVFUtil::move(edges);
92
77
  }
93
78
 
94
- void CFBasicBlockGBuilder::build(SVFModule* module)
95
- {
96
- _CFBasicBlockG = new CFBasicBlockGraph();
97
- Map<const SVFBasicBlock*, CFBasicBlockNode*> bbToNode;
98
- for (const auto& func : *module)
99
- {
100
- for (const auto& bb : *func)
101
- {
102
- CFBasicBlockNode* pNode = new CFBasicBlockNode(bb);
103
- bbToNode[bb] = pNode;
104
- _CFBasicBlockG->addCFBBNode(pNode);
105
- }
106
- }
107
-
108
- for (const auto& func : *module)
109
- {
110
- for (const auto& bb : *func)
111
- {
112
- for (const auto &succ: bb->getSuccessors())
113
- {
114
- ICFG *icfg = PAG::getPAG()->getICFG();
115
- const ICFGNode *pred = icfg->getICFGNode(bb->getTerminator());
116
- const ICFGEdge *edge = nullptr;
117
- for (const auto &inst: succ->getInstructionList())
118
- {
119
- if (const ICFGEdge *e = icfg->getICFGEdge(pred, icfg->getICFGNode(inst), ICFGEdge::ICFGEdgeK::IntraCF))
120
- {
121
- edge = e;
122
- break;
123
- }
124
- }
125
- if (SVFUtil::isa<IntraCFGEdge>(edge))
126
- {
127
- CFBasicBlockEdge *pEdge = new CFBasicBlockEdge(bbToNode[bb], bbToNode[succ], edge);
128
- _CFBasicBlockG->addCFBBEdge(pEdge);
129
- }
130
- }
131
- }
132
- }
133
79
  }
134
80
 
135
- void CFBasicBlockGBuilder::build(ICFG* icfg)
136
- {
137
- _CFBasicBlockG = new CFBasicBlockGraph();
138
- Map<const SVFBasicBlock*, CFBasicBlockNode*> bbToNode;
139
- Map<const SVFFunction*, CFBasicBlockNode*> funToFirstNode;
140
- for (const auto& node : *icfg)
141
- {
142
- CFBasicBlockNode* pNode = nullptr;
143
- if (const SVFBasicBlock* bb = node.second->getBB())
144
- {
145
- if (bbToNode.find(bb) == bbToNode.end())
146
- {
147
- pNode = new CFBasicBlockNode({node.second});
148
- bbToNode[node.second->getBB()] = pNode;
149
- _CFBasicBlockG->addCFBBNode(pNode);
150
- }
151
- else
152
- {
153
- pNode = bbToNode[node.second->getBB()];
154
- pNode->addNode(node.second);
155
- }
156
- const SVFFunction* fun = node.second->getFun();
157
- if (funToFirstNode.find(fun) == funToFirstNode.end())
158
- {
159
- funToFirstNode[fun] = nullptr;
160
- }
161
- }
162
- }
163
-
164
- for (const auto& node : *icfg)
165
- {
166
- for (const auto &succ: node.second->getOutEdges())
167
- {
168
- const SVFFunction* node_fun = node.second->getFun();
169
- const SVFFunction* succ_fun = succ->getDstNode()->getFun();
170
- const SVFBasicBlock* node_bb = node.second->getBB();
171
- const SVFBasicBlock* succ_bb = succ->getDstNode()->getBB();
172
- if (node_fun == succ_fun)
173
- {
174
- if (node_bb != succ_bb)
175
- {
176
- CFBasicBlockEdge *pEdge = new CFBasicBlockEdge(bbToNode[node_bb], bbToNode[succ_bb], succ);
177
- _CFBasicBlockG->addCFBBEdge(pEdge);
178
- }
179
- }
180
- }
181
- }
182
-
183
- for (auto it = funToFirstNode.begin(); it != funToFirstNode.end(); ++it)
184
- {
185
- const SVFFunction* fun = it->first;
186
- const SVFBasicBlock* bb = *fun->getBasicBlockList().begin();
187
- funToFirstNode[fun] = bbToNode[bb];
188
- }
189
- _CFBasicBlockG->_funToFirstNode = funToFirstNode;
190
- }
191
- }
@@ -121,6 +121,8 @@ const SVFBasicBlock* SVFLoopAndDomInfo::findNearestCommonPDominator(const SVFBas
121
121
  // continue going up til we arrive at the same node.
122
122
  while (A != B)
123
123
  {
124
+ // no common PDominator
125
+ if(A == NULL) return NULL;
124
126
  const auto lvA = getBBPDomLevel().find(A);
125
127
  const auto lvB = getBBPDomLevel().find(B);
126
128
  assert(lvA != getBBPDomLevel().end() && lvB != getBBPDomLevel().end());
@@ -64,6 +64,11 @@ void
64
64
  CDGBuilder::extractNodesBetweenPdomNodes(const SVFBasicBlock *succ, const SVFBasicBlock *LCA,
65
65
  std::vector<const SVFBasicBlock *> &tgtNodes)
66
66
  {
67
+ if (LCA == NULL)
68
+ {
69
+ tgtNodes.push_back(succ);
70
+ return;
71
+ }
67
72
  if (succ == LCA) return;
68
73
  std::vector<const SVFBasicBlock *> path;
69
74
  SVFLoopAndDomInfo *ld = const_cast<SVFFunction *>(LCA->getFunction())->getLoopAndDomInfo();
@@ -0,0 +1,183 @@
1
+ //===- CFBasicBlockGBuilder.cpp ----------------------------------------------------------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-> <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
+ * CFBasicBlockGBuilder.cpp
25
+ *
26
+ * Created on: 17 Oct. 2023
27
+ * Author: Xiao, Jiawei
28
+ */
29
+ #include "Util/CFBasicBlockGBuilder.h"
30
+
31
+ namespace SVF
32
+ {
33
+
34
+ void CFBasicBlockGBuilder::initCFBasicBlockGNodes(ICFG *icfg,
35
+ Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes)
36
+ {
37
+ for (const auto &node: *icfg)
38
+ {
39
+ CFBasicBlockNode *pNode;
40
+ if (const SVFBasicBlock *bb = node.second->getBB())
41
+ {
42
+ if (const CallICFGNode *callNode = SVFUtil::dyn_cast<CallICFGNode>(node.second))
43
+ {
44
+ pNode = new CFBasicBlockNode({callNode});
45
+ bbToNodes[bb].push_back(pNode);
46
+ _CFBasicBlockG->addCFBBNode(pNode);
47
+
48
+ auto *retNode = new CFBasicBlockNode({callNode->getRetICFGNode()});
49
+ bbToNodes[bb].push_back(retNode);
50
+ _CFBasicBlockG->addCFBBNode(retNode);
51
+
52
+ }
53
+ else if (!SVFUtil::isa<RetICFGNode>(node.second))
54
+ {
55
+ if (bbToNodes.find(bb) == bbToNodes.end())
56
+ {
57
+ pNode = new CFBasicBlockNode({node.second});
58
+ bbToNodes[node.second->getBB()] = {pNode};
59
+ _CFBasicBlockG->addCFBBNode(pNode);
60
+ }
61
+ else
62
+ {
63
+ pNode = bbToNodes[node.second->getBB()].back();
64
+ if (!SVFUtil::isa<RetICFGNode>(pNode->getICFGNodes()[0]))
65
+ {
66
+ pNode->addNode(node.second);
67
+ }
68
+ else
69
+ {
70
+ pNode = new CFBasicBlockNode({node.second});
71
+ bbToNodes[node.second->getBB()].push_back(pNode);
72
+ _CFBasicBlockG->addCFBBNode(pNode);
73
+ }
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }
79
+
80
+ void CFBasicBlockGBuilder::addInterBBEdge(ICFG *icfg,
81
+ Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes)
82
+ {
83
+ // connect inter-BB BBNodes
84
+ for (const auto &node: *icfg)
85
+ {
86
+ for (const auto &succ: node.second->getOutEdges())
87
+ {
88
+ const SVFFunction *node_fun = node.second->getFun();
89
+ const SVFFunction *succ_fun = succ->getDstNode()->getFun();
90
+ const SVFBasicBlock *node_bb = node.second->getBB();
91
+ const SVFBasicBlock *succ_bb = succ->getDstNode()->getBB();
92
+ if (node_fun == succ_fun)
93
+ {
94
+ if (node_bb != succ_bb)
95
+ {
96
+ CFBasicBlockEdge *pEdge = new CFBasicBlockEdge(bbToNodes[node_bb].back(),
97
+ bbToNodes[succ_bb].front(), succ);
98
+ _CFBasicBlockG->addCFBBEdge(pEdge);
99
+ }
100
+ }
101
+ }
102
+ }
103
+ }
104
+
105
+ void CFBasicBlockGBuilder::addIntraBBEdge(ICFG *icfg,
106
+ Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes)
107
+ {
108
+ // connect intra-BB BBNodes
109
+ for (const auto &bbNodes: bbToNodes)
110
+ {
111
+ for (u32_t i = 0; i < bbNodes.second.size() - 1; ++i)
112
+ {
113
+ if (ICFGEdge *icfgEdge = icfg->getICFGEdge(
114
+ const_cast<ICFGNode *>(bbNodes.second[i]->getICFGNodes().back()),
115
+ const_cast<ICFGNode *>(bbNodes.second[i + 1]->getICFGNodes().front()),
116
+ ICFGEdge::IntraCF))
117
+ {
118
+ CFBasicBlockEdge *pEdge = new CFBasicBlockEdge(bbNodes.second[i], bbNodes.second[i + 1], icfgEdge);
119
+ _CFBasicBlockG->addCFBBEdge(pEdge);
120
+ }
121
+ else
122
+ {
123
+ // no intra-procedural edge, maybe ext api
124
+ }
125
+ }
126
+ }
127
+ }
128
+
129
+ void CFBasicBlockGBuilder::addInterProceduralEdge(ICFG *icfg,
130
+ Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> &bbToNodes)
131
+ {
132
+ // connect inter-procedural BBNodes
133
+ for (const auto &bbNodes: bbToNodes)
134
+ {
135
+ for (u32_t i = 0; i < bbNodes.second.size(); ++i)
136
+ {
137
+ if (const CallICFGNode *callICFGNode = SVFUtil::dyn_cast<CallICFGNode>(
138
+ bbNodes.second[i]->getICFGNodes().front()))
139
+ {
140
+ for (const auto &icfgEdge: callICFGNode->getOutEdges())
141
+ {
142
+ if (const CallCFGEdge *callEdge = SVFUtil::dyn_cast<CallCFGEdge>(icfgEdge))
143
+ {
144
+ CFBasicBlockEdge *pEdge = new CFBasicBlockEdge(bbNodes.second[i],
145
+ bbToNodes[callEdge->getDstNode()->getBB()].front(),
146
+ callEdge);
147
+ _CFBasicBlockG->addCFBBEdge(pEdge);
148
+ }
149
+ }
150
+ }
151
+ else if (const RetICFGNode *retICFGNode = SVFUtil::dyn_cast<RetICFGNode>(
152
+ bbNodes.second[i]->getICFGNodes().front()))
153
+ {
154
+ for (const auto &icfgEdge: retICFGNode->getInEdges())
155
+ {
156
+ if (const RetCFGEdge *retEdge = SVFUtil::dyn_cast<RetCFGEdge>(icfgEdge))
157
+ {
158
+ CFBasicBlockEdge *pEdge = new CFBasicBlockEdge(bbToNodes[retEdge->getSrcNode()->getBB()].back(),
159
+ bbNodes.second[i],
160
+ retEdge);
161
+ _CFBasicBlockG->addCFBBEdge(pEdge);
162
+ }
163
+ }
164
+ }
165
+ else
166
+ {
167
+ // other nodes are intra-procedural
168
+ }
169
+ }
170
+ }
171
+ }
172
+
173
+ void CFBasicBlockGBuilder::build(ICFG* icfg)
174
+ {
175
+ _CFBasicBlockG = new CFBasicBlockGraph();
176
+ Map<const SVFBasicBlock*, std::vector<CFBasicBlockNode*>> bbToNodes;
177
+
178
+ initCFBasicBlockGNodes(icfg, bbToNodes);
179
+ addInterBBEdge(icfg, bbToNodes);
180
+ addIntraBBEdge(icfg, bbToNodes);
181
+ addInterProceduralEdge(icfg, bbToNodes);
182
+ }
183
+ }