svf-tools 1.0.780 → 1.0.781

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 (268) hide show
  1. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +2 -2
  2. package/SVF-doxygen/html/html/CFLBase_8cpp_source.html +4 -4
  3. package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/html/CFLVF_8cpp_source.html +4 -4
  5. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/ExtAPI_8cpp.html +51 -49
  7. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +216 -184
  8. package/SVF-doxygen/html/html/ExtAPI_8h.html +6 -6
  9. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +55 -47
  10. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +1 -1
  12. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
  13. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
  14. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
  15. package/SVF-doxygen/html/html/Options_8cpp_source.html +140 -132
  16. package/SVF-doxygen/html/html/Options_8h_source.html +46 -44
  17. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +8 -8
  20. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
  22. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +2 -2
  23. package/SVF-doxygen/html/html/classSVF_1_1CFLBase.html +4 -4
  24. package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +1 -1
  25. package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +4 -4
  26. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI-members.html +15 -13
  27. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +180 -100
  28. package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +1 -1
  29. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +2 -2
  30. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +89 -88
  31. package/SVF-doxygen/html/html/classSVF_1_1Options.html +43 -17
  32. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +1 -1
  33. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +1 -1
  34. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
  35. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +4 -4
  36. package/SVF-doxygen/html/html/functions_e.html +7 -1
  37. package/SVF-doxygen/html/html/functions_f.html +3 -3
  38. package/SVF-doxygen/html/html/functions_func_s.html +19 -16
  39. package/SVF-doxygen/html/html/functions_l.html +5 -5
  40. package/SVF-doxygen/html/html/functions_n.html +3 -3
  41. package/SVF-doxygen/html/html/functions_o.html +17 -17
  42. package/SVF-doxygen/html/html/functions_p.html +15 -15
  43. package/SVF-doxygen/html/html/functions_r.html +1 -1
  44. package/SVF-doxygen/html/html/functions_s.html +26 -21
  45. package/SVF-doxygen/html/html/functions_t.html +3 -3
  46. package/SVF-doxygen/html/html/functions_v.html +6 -6
  47. package/SVF-doxygen/html/html/functions_vars_e.html +6 -0
  48. package/SVF-doxygen/html/html/functions_w.html +1 -1
  49. package/SVF-doxygen/html/html/globals_d.html +3 -0
  50. package/SVF-doxygen/html/html/globals_defs.html +3 -3
  51. package/SVF-doxygen/html/html/globals_e.html +0 -3
  52. package/SVF-doxygen/html/html/search/all_10.js +324 -324
  53. package/SVF-doxygen/html/html/search/all_11.js +224 -224
  54. package/SVF-doxygen/html/html/search/all_12.js +546 -545
  55. package/SVF-doxygen/html/html/search/all_13.js +190 -190
  56. package/SVF-doxygen/html/html/search/all_14.js +67 -67
  57. package/SVF-doxygen/html/html/search/all_15.js +170 -170
  58. package/SVF-doxygen/html/html/search/all_16.js +63 -63
  59. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  60. package/SVF-doxygen/html/html/search/all_18.js +1 -1
  61. package/SVF-doxygen/html/html/search/all_19.js +11 -11
  62. package/SVF-doxygen/html/html/search/all_1a.js +176 -176
  63. package/SVF-doxygen/html/html/search/all_4.js +184 -183
  64. package/SVF-doxygen/html/html/search/all_5.js +120 -119
  65. package/SVF-doxygen/html/html/search/all_6.js +225 -225
  66. package/SVF-doxygen/html/html/search/all_7.js +1056 -1056
  67. package/SVF-doxygen/html/html/search/all_8.js +195 -195
  68. package/SVF-doxygen/html/html/search/all_9.js +617 -617
  69. package/SVF-doxygen/html/html/search/all_a.js +46 -46
  70. package/SVF-doxygen/html/html/search/all_b.js +26 -26
  71. package/SVF-doxygen/html/html/search/all_c.js +116 -116
  72. package/SVF-doxygen/html/html/search/all_d.js +196 -196
  73. package/SVF-doxygen/html/html/search/all_e.js +207 -207
  74. package/SVF-doxygen/html/html/search/all_f.js +116 -116
  75. package/SVF-doxygen/html/html/search/classes_0.js +26 -26
  76. package/SVF-doxygen/html/html/search/classes_1.js +9 -9
  77. package/SVF-doxygen/html/html/search/classes_10.js +73 -73
  78. package/SVF-doxygen/html/html/search/classes_11.js +15 -15
  79. package/SVF-doxygen/html/html/search/classes_12.js +2 -2
  80. package/SVF-doxygen/html/html/search/classes_13.js +10 -10
  81. package/SVF-doxygen/html/html/search/classes_14.js +14 -14
  82. package/SVF-doxygen/html/html/search/classes_15.js +1 -1
  83. package/SVF-doxygen/html/html/search/classes_2.js +80 -80
  84. package/SVF-doxygen/html/html/search/classes_3.js +38 -38
  85. package/SVF-doxygen/html/html/search/classes_4.js +9 -9
  86. package/SVF-doxygen/html/html/search/classes_5.js +28 -28
  87. package/SVF-doxygen/html/html/search/classes_6.js +110 -110
  88. package/SVF-doxygen/html/html/search/classes_7.js +33 -33
  89. package/SVF-doxygen/html/html/search/classes_8.js +60 -60
  90. package/SVF-doxygen/html/html/search/classes_9.js +1 -1
  91. package/SVF-doxygen/html/html/search/classes_a.js +12 -12
  92. package/SVF-doxygen/html/html/search/classes_b.js +29 -29
  93. package/SVF-doxygen/html/html/search/classes_c.js +6 -6
  94. package/SVF-doxygen/html/html/search/classes_d.js +18 -18
  95. package/SVF-doxygen/html/html/search/classes_e.js +36 -36
  96. package/SVF-doxygen/html/html/search/classes_f.js +25 -25
  97. package/SVF-doxygen/html/html/search/defines_0.js +3 -3
  98. package/SVF-doxygen/html/html/search/defines_1.js +2 -2
  99. package/SVF-doxygen/html/html/search/defines_2.js +30 -30
  100. package/SVF-doxygen/html/html/search/defines_3.js +21 -20
  101. package/SVF-doxygen/html/html/search/defines_4.js +2 -3
  102. package/SVF-doxygen/html/html/search/defines_5.js +4 -4
  103. package/SVF-doxygen/html/html/search/defines_6.js +2 -2
  104. package/SVF-doxygen/html/html/search/defines_7.js +5 -5
  105. package/SVF-doxygen/html/html/search/defines_8.js +11 -11
  106. package/SVF-doxygen/html/html/search/defines_9.js +9 -9
  107. package/SVF-doxygen/html/html/search/defines_a.js +2 -2
  108. package/SVF-doxygen/html/html/search/defines_b.js +1 -1
  109. package/SVF-doxygen/html/html/search/defines_c.js +3 -3
  110. package/SVF-doxygen/html/html/search/defines_d.js +2 -2
  111. package/SVF-doxygen/html/html/search/defines_e.js +7 -7
  112. package/SVF-doxygen/html/html/search/defines_f.js +3 -3
  113. package/SVF-doxygen/html/html/search/enums_0.js +3 -3
  114. package/SVF-doxygen/html/html/search/enums_1.js +2 -2
  115. package/SVF-doxygen/html/html/search/enums_10.js +1 -1
  116. package/SVF-doxygen/html/html/search/enums_11.js +1 -1
  117. package/SVF-doxygen/html/html/search/enums_2.js +8 -8
  118. package/SVF-doxygen/html/html/search/enums_3.js +1 -1
  119. package/SVF-doxygen/html/html/search/enums_4.js +3 -3
  120. package/SVF-doxygen/html/html/search/enums_5.js +1 -1
  121. package/SVF-doxygen/html/html/search/enums_6.js +2 -2
  122. package/SVF-doxygen/html/html/search/enums_7.js +2 -2
  123. package/SVF-doxygen/html/html/search/enums_8.js +4 -4
  124. package/SVF-doxygen/html/html/search/enums_9.js +1 -1
  125. package/SVF-doxygen/html/html/search/enums_a.js +1 -1
  126. package/SVF-doxygen/html/html/search/enums_b.js +7 -7
  127. package/SVF-doxygen/html/html/search/enums_c.js +1 -1
  128. package/SVF-doxygen/html/html/search/enums_d.js +4 -4
  129. package/SVF-doxygen/html/html/search/enums_e.js +2 -2
  130. package/SVF-doxygen/html/html/search/enums_f.js +4 -4
  131. package/SVF-doxygen/html/html/search/enumvalues_0.js +14 -14
  132. package/SVF-doxygen/html/html/search/enumvalues_1.js +14 -14
  133. package/SVF-doxygen/html/html/search/enumvalues_10.js +35 -35
  134. package/SVF-doxygen/html/html/search/enumvalues_11.js +3 -3
  135. package/SVF-doxygen/html/html/search/enumvalues_12.js +10 -10
  136. package/SVF-doxygen/html/html/search/enumvalues_13.js +1 -1
  137. package/SVF-doxygen/html/html/search/enumvalues_14.js +1 -1
  138. package/SVF-doxygen/html/html/search/enumvalues_15.js +3 -3
  139. package/SVF-doxygen/html/html/search/enumvalues_2.js +36 -36
  140. package/SVF-doxygen/html/html/search/enumvalues_3.js +13 -13
  141. package/SVF-doxygen/html/html/search/enumvalues_4.js +2 -2
  142. package/SVF-doxygen/html/html/search/enumvalues_5.js +47 -47
  143. package/SVF-doxygen/html/html/search/enumvalues_6.js +6 -6
  144. package/SVF-doxygen/html/html/search/enumvalues_7.js +9 -9
  145. package/SVF-doxygen/html/html/search/enumvalues_8.js +23 -23
  146. package/SVF-doxygen/html/html/search/enumvalues_9.js +6 -6
  147. package/SVF-doxygen/html/html/search/enumvalues_a.js +15 -15
  148. package/SVF-doxygen/html/html/search/enumvalues_b.js +11 -11
  149. package/SVF-doxygen/html/html/search/enumvalues_c.js +5 -5
  150. package/SVF-doxygen/html/html/search/enumvalues_d.js +18 -18
  151. package/SVF-doxygen/html/html/search/enumvalues_e.js +9 -9
  152. package/SVF-doxygen/html/html/search/enumvalues_f.js +45 -45
  153. package/SVF-doxygen/html/html/search/files_0.js +13 -13
  154. package/SVF-doxygen/html/html/search/files_1.js +7 -7
  155. package/SVF-doxygen/html/html/search/files_10.js +8 -8
  156. package/SVF-doxygen/html/html/search/files_11.js +8 -8
  157. package/SVF-doxygen/html/html/search/files_12.js +2 -2
  158. package/SVF-doxygen/html/html/search/files_2.js +53 -53
  159. package/SVF-doxygen/html/html/search/files_3.js +14 -14
  160. package/SVF-doxygen/html/html/search/files_4.js +5 -5
  161. package/SVF-doxygen/html/html/search/files_5.js +13 -13
  162. package/SVF-doxygen/html/html/search/files_6.js +9 -9
  163. package/SVF-doxygen/html/html/search/files_7.js +16 -16
  164. package/SVF-doxygen/html/html/search/files_8.js +13 -13
  165. package/SVF-doxygen/html/html/search/files_9.js +18 -18
  166. package/SVF-doxygen/html/html/search/files_a.js +3 -3
  167. package/SVF-doxygen/html/html/search/files_b.js +2 -2
  168. package/SVF-doxygen/html/html/search/files_c.js +20 -20
  169. package/SVF-doxygen/html/html/search/files_d.js +4 -4
  170. package/SVF-doxygen/html/html/search/files_e.js +62 -62
  171. package/SVF-doxygen/html/html/search/files_f.js +8 -8
  172. package/SVF-doxygen/html/html/search/functions_0.js +12 -12
  173. package/SVF-doxygen/html/html/search/functions_1.js +357 -357
  174. package/SVF-doxygen/html/html/search/functions_10.js +140 -140
  175. package/SVF-doxygen/html/html/search/functions_11.js +138 -138
  176. package/SVF-doxygen/html/html/search/functions_12.js +279 -278
  177. package/SVF-doxygen/html/html/search/functions_13.js +58 -58
  178. package/SVF-doxygen/html/html/search/functions_14.js +39 -39
  179. package/SVF-doxygen/html/html/search/functions_15.js +71 -71
  180. package/SVF-doxygen/html/html/search/functions_16.js +32 -32
  181. package/SVF-doxygen/html/html/search/functions_17.js +3 -3
  182. package/SVF-doxygen/html/html/search/functions_18.js +176 -176
  183. package/SVF-doxygen/html/html/search/functions_2.js +86 -86
  184. package/SVF-doxygen/html/html/search/functions_3.js +257 -257
  185. package/SVF-doxygen/html/html/search/functions_4.js +75 -75
  186. package/SVF-doxygen/html/html/search/functions_5.js +53 -53
  187. package/SVF-doxygen/html/html/search/functions_6.js +59 -59
  188. package/SVF-doxygen/html/html/search/functions_7.js +858 -858
  189. package/SVF-doxygen/html/html/search/functions_8.js +147 -147
  190. package/SVF-doxygen/html/html/search/functions_9.js +429 -429
  191. package/SVF-doxygen/html/html/search/functions_a.js +30 -30
  192. package/SVF-doxygen/html/html/search/functions_b.js +2 -2
  193. package/SVF-doxygen/html/html/search/functions_c.js +26 -26
  194. package/SVF-doxygen/html/html/search/functions_d.js +77 -77
  195. package/SVF-doxygen/html/html/search/functions_e.js +35 -35
  196. package/SVF-doxygen/html/html/search/functions_f.js +56 -56
  197. package/SVF-doxygen/html/html/search/namespaces_0.js +1 -1
  198. package/SVF-doxygen/html/html/search/namespaces_1.js +7 -7
  199. package/SVF-doxygen/html/html/search/related_0.js +2 -2
  200. package/SVF-doxygen/html/html/search/related_1.js +2 -2
  201. package/SVF-doxygen/html/html/search/related_2.js +2 -2
  202. package/SVF-doxygen/html/html/search/related_3.js +2 -2
  203. package/SVF-doxygen/html/html/search/related_4.js +2 -2
  204. package/SVF-doxygen/html/html/search/related_5.js +1 -1
  205. package/SVF-doxygen/html/html/search/related_6.js +2 -2
  206. package/SVF-doxygen/html/html/search/related_7.js +4 -4
  207. package/SVF-doxygen/html/html/search/related_8.js +2 -2
  208. package/SVF-doxygen/html/html/search/related_9.js +4 -4
  209. package/SVF-doxygen/html/html/search/related_a.js +19 -19
  210. package/SVF-doxygen/html/html/search/related_b.js +4 -4
  211. package/SVF-doxygen/html/html/search/related_c.js +1 -1
  212. package/SVF-doxygen/html/html/search/related_d.js +11 -11
  213. package/SVF-doxygen/html/html/search/related_e.js +2 -2
  214. package/SVF-doxygen/html/html/search/related_f.js +2 -2
  215. package/SVF-doxygen/html/html/search/typedefs_0.js +18 -18
  216. package/SVF-doxygen/html/html/search/typedefs_1.js +26 -26
  217. package/SVF-doxygen/html/html/search/typedefs_10.js +63 -63
  218. package/SVF-doxygen/html/html/search/typedefs_11.js +13 -13
  219. package/SVF-doxygen/html/html/search/typedefs_12.js +11 -11
  220. package/SVF-doxygen/html/html/search/typedefs_13.js +35 -35
  221. package/SVF-doxygen/html/html/search/typedefs_14.js +8 -8
  222. package/SVF-doxygen/html/html/search/typedefs_2.js +128 -128
  223. package/SVF-doxygen/html/html/search/typedefs_3.js +39 -39
  224. package/SVF-doxygen/html/html/search/typedefs_4.js +17 -17
  225. package/SVF-doxygen/html/html/search/typedefs_5.js +41 -41
  226. package/SVF-doxygen/html/html/search/typedefs_6.js +58 -58
  227. package/SVF-doxygen/html/html/search/typedefs_7.js +46 -46
  228. package/SVF-doxygen/html/html/search/typedefs_8.js +1 -1
  229. package/SVF-doxygen/html/html/search/typedefs_9.js +6 -6
  230. package/SVF-doxygen/html/html/search/typedefs_a.js +29 -29
  231. package/SVF-doxygen/html/html/search/typedefs_b.js +29 -29
  232. package/SVF-doxygen/html/html/search/typedefs_c.js +41 -41
  233. package/SVF-doxygen/html/html/search/typedefs_d.js +15 -15
  234. package/SVF-doxygen/html/html/search/typedefs_e.js +52 -52
  235. package/SVF-doxygen/html/html/search/typedefs_f.js +14 -14
  236. package/SVF-doxygen/html/html/search/variables_0.js +162 -162
  237. package/SVF-doxygen/html/html/search/variables_1.js +75 -75
  238. package/SVF-doxygen/html/html/search/variables_10.js +97 -97
  239. package/SVF-doxygen/html/html/search/variables_11.js +46 -46
  240. package/SVF-doxygen/html/html/search/variables_12.js +92 -92
  241. package/SVF-doxygen/html/html/search/variables_13.js +75 -75
  242. package/SVF-doxygen/html/html/search/variables_14.js +14 -14
  243. package/SVF-doxygen/html/html/search/variables_15.js +48 -48
  244. package/SVF-doxygen/html/html/search/variables_16.js +9 -9
  245. package/SVF-doxygen/html/html/search/variables_17.js +1 -1
  246. package/SVF-doxygen/html/html/search/variables_18.js +2 -2
  247. package/SVF-doxygen/html/html/search/variables_2.js +37 -37
  248. package/SVF-doxygen/html/html/search/variables_3.js +142 -142
  249. package/SVF-doxygen/html/html/search/variables_4.js +55 -55
  250. package/SVF-doxygen/html/html/search/variables_5.js +39 -37
  251. package/SVF-doxygen/html/html/search/variables_6.js +66 -66
  252. package/SVF-doxygen/html/html/search/variables_7.js +33 -33
  253. package/SVF-doxygen/html/html/search/variables_8.js +7 -7
  254. package/SVF-doxygen/html/html/search/variables_9.js +77 -77
  255. package/SVF-doxygen/html/html/search/variables_a.js +4 -4
  256. package/SVF-doxygen/html/html/search/variables_b.js +10 -10
  257. package/SVF-doxygen/html/html/search/variables_c.js +45 -45
  258. package/SVF-doxygen/html/html/search/variables_d.js +56 -56
  259. package/SVF-doxygen/html/html/search/variables_e.js +123 -123
  260. package/SVF-doxygen/html/html/search/variables_f.js +30 -30
  261. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  262. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
  263. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +1 -1
  264. package/package.json +1 -1
  265. package/svf/include/Util/ExtAPI.h +7 -1
  266. package/svf/include/Util/Options.h +1 -0
  267. package/svf/lib/Util/ExtAPI.cpp +58 -30
  268. package/svf/lib/Util/Options.cpp +7 -0
@@ -29,11 +29,13 @@
29
29
 
30
30
  #include "Util/ExtAPI.h"
31
31
  #include "Util/SVFUtil.h"
32
+ #include "Util/Options.h"
32
33
  #include <sys/stat.h>
33
34
 
34
35
  using namespace SVF;
35
36
 
36
37
  ExtAPI* ExtAPI::extOp = nullptr;
38
+ std::string ExtAPI::extBcPath = "";
37
39
 
38
40
  ExtAPI* ExtAPI::getExtAPI()
39
41
  {
@@ -53,6 +55,12 @@ void ExtAPI::destory()
53
55
  }
54
56
  }
55
57
 
58
+ // Set extapi.bc file path
59
+ void ExtAPI::setExtBcPath(const std::string& path)
60
+ {
61
+ extBcPath = path;
62
+ }
63
+
56
64
  // Get environment variables $SVF_DIR and "npm root" through popen() method
57
65
  static std::string GetStdoutFromCommand(const std::string& command)
58
66
  {
@@ -80,55 +88,77 @@ static std::string GetStdoutFromCommand(const std::string& command)
80
88
  // Get extapi.bc file path in npm
81
89
  static std::string getFilePath(const std::string& path)
82
90
  {
83
- std::string bcFilePath = GetStdoutFromCommand(path);
84
- if (path.compare("npm root") == 0)
91
+ std::string bcFilePath = "";
92
+ if (path.compare("SVF_DIR") == 0)
85
93
  {
86
- int os_flag = 1;
94
+ bcFilePath = getenv("SVF_DIR");
95
+ }
96
+ else if (path.compare("npm root") == 0)
97
+ {
98
+ bcFilePath = GetStdoutFromCommand(path);
87
99
  // SVF installed via npm needs to determine the type of operating
88
100
  // system, otherwise the extapi.bc path may not be found.
89
101
  #ifdef linux
90
102
  // Linux os
91
- os_flag = 0;
92
103
  bcFilePath.append("/svf-lib/SVF-linux");
93
- #endif
104
+ #else
94
105
  // Mac os
95
- if (os_flag == 1)
96
- {
97
- bcFilePath.append("/svf-lib/SVF-osx");
98
- }
106
+ bcFilePath.append("/svf-lib/SVF-osx");
107
+ #endif
99
108
  }
100
109
 
101
- if (bcFilePath.back() != '/')
110
+ if (!bcFilePath.empty() && bcFilePath.back() != '/')
102
111
  bcFilePath.push_back('/');
103
- bcFilePath.append(EXTAPI_BC_PATH);
112
+ bcFilePath.append(BUILD_TYPE).append(DEFUALT_EXTAPI_BC_PATH);
104
113
  return bcFilePath;
105
114
  }
106
115
 
107
116
  // Get extapi.bc path
108
117
  std::string ExtAPI::getExtBcPath()
109
118
  {
110
- struct stat statbuf;
111
- std::string bcFilePath = std::string(EXTAPI_DIR) + "/extapi.bc";
112
- if (!stat(bcFilePath.c_str(), &statbuf))
113
- return bcFilePath;
114
-
115
- bcFilePath = getFilePath("echo $SVF_DIR");
116
- if (!stat(bcFilePath.c_str(), &statbuf))
117
- return bcFilePath;
119
+ // Five default ways to get extapi.bc path
120
+ // 1. Set extapi.bc path through setExtBcPath() method
121
+ // 2. Set extapi.bc path through the "-extapi = PATH_TO_EXTAPIFILE" option
122
+ // 3. Default path: "SVF_IR_PATH/CMAKE_BUILD_TYPE-build/svf-llvm/extapi.bc"
123
+ // 4. From $SVF_DIR
124
+ // 5. From "npm root"(If SVF is installed via npm)
118
125
 
119
- bcFilePath = getFilePath("npm root");
120
- if (!stat(bcFilePath.c_str(), &statbuf))
121
- return bcFilePath;
122
-
123
- SVFUtil::errs() << "No extapi.bc found at " << bcFilePath << " for getExtAPI(); The default path for extapi.bc is: SVF_IR_PATH/CMAKE_BUILD_TYPE-build/svf-llvm/extapi.bc !\n";
126
+ struct stat statbuf;
127
+ // 1. Set extapi.bc path through setExtBcPath() method
128
+ if (!extBcPath.empty() && !stat(extBcPath.c_str(), &statbuf))
129
+ return extBcPath;
130
+
131
+ // 2. Set extapi.bc path through the "-extapi = PATH_TO_EXTAPIFILE" option
132
+ extBcPath = Options::ExtAPIPath();
133
+ if (!extBcPath.empty() && !stat(extBcPath.c_str(), &statbuf))
134
+ return extBcPath;
135
+
136
+ // 3. Default path: "SVF_IR_PATH/CMAKE_BUILD_TYPE-build/svf-llvm/extapi.bc"
137
+ extBcPath = std::string(EXTAPI_DIR) + "/extapi.bc";
138
+ if (!stat(extBcPath.c_str(), &statbuf))
139
+ return extBcPath;
140
+
141
+ // 4. From $SVF_DIR
142
+ extBcPath = getFilePath("SVF_DIR");
143
+ if (!stat(extBcPath.c_str(), &statbuf))
144
+ return extBcPath;
145
+
146
+ // 5. From "npm root"(If SVF is installed via npm)
147
+ extBcPath = getFilePath("npm root");
148
+ if (!stat(extBcPath.c_str(), &statbuf))
149
+ return extBcPath;
150
+
151
+ SVFUtil::errs() << "No extapi.bc found at " << extBcPath << " in getExtBcPath() !!!" << "\n"
152
+ << "You can specify extapi.bc path in two ways:" << "\n"
153
+ << "1. Set it via the command line using -extapi=/path_to_extapi;" << "\n"
154
+ << "2. Use the API setExtBcPath(). Please note that setExtBcPath() should be used before buildSVFModule().\n";
124
155
  abort();
125
156
  }
126
157
 
127
158
  std::string ExtAPI::getExtFuncAnnotation(const SVFFunction* fun, const std::string& funcAnnotation)
128
159
  {
129
160
  assert(fun && "Null SVFFunction* pointer");
130
- const std::vector<std::string>& annotations = fun->getAnnotations();
131
- for (const std::string& annotation : annotations)
161
+ for (const std::string& annotation : fun->getAnnotations())
132
162
  if (annotation.find(funcAnnotation) != std::string::npos)
133
163
  return annotation;
134
164
  return "";
@@ -137,8 +167,7 @@ std::string ExtAPI::getExtFuncAnnotation(const SVFFunction* fun, const std::stri
137
167
  bool ExtAPI::hasExtFuncAnnotation(const SVFFunction* fun, const std::string& funcAnnotation)
138
168
  {
139
169
  assert(fun && "Null SVFFunction* pointer");
140
- const std::vector<std::string>& annotations = fun->getAnnotations();
141
- for (const std::string& annotation : annotations)
170
+ for (const std::string& annotation : fun->getAnnotations())
142
171
  if (annotation.find(funcAnnotation) != std::string::npos)
143
172
  return true;
144
173
  return false;
@@ -168,8 +197,7 @@ bool ExtAPI::is_arg_alloc(const SVFFunction* F)
168
197
  // Get the position of argument which holds the new object
169
198
  s32_t ExtAPI::get_alloc_arg_pos(const SVFFunction* F)
170
199
  {
171
- std::string s = "ALLOC_ARG";
172
- std::string allocArg = getExtFuncAnnotation(F, s);
200
+ std::string allocArg = getExtFuncAnnotation(F, "ALLOC_ARG");
173
201
  assert(!allocArg.empty() && "Not an alloc call via argument or incorrect extern function annotation!");
174
202
 
175
203
  std::string number;
@@ -770,6 +770,13 @@ const Option<bool> Options::VtableInSVFIR(
770
770
  false
771
771
  );
772
772
 
773
+ //WPAPass.cpp
774
+ const Option<std::string> Options::ExtAPIPath(
775
+ "extapi",
776
+ "External API extapi.bc",
777
+ ""
778
+ );
779
+
773
780
  const Option<bool> Options::AnderSVFG(
774
781
  "svfg",
775
782
  "Generate SVFG after Andersen's Analysis",