svf-tools 1.0.758 → 1.0.760

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 (666) hide show
  1. package/CMakeLists.txt +7 -0
  2. package/SVF-doxygen/html/html/AccessPath_8cpp_source.html +2 -2
  3. package/SVF-doxygen/html/html/AddressValue_8h_source.html +1 -1
  4. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +5 -5
  6. package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
  7. package/SVF-doxygen/html/html/CFBasicBlockG_8cpp_source.html +4 -4
  8. package/SVF-doxygen/html/html/CFBasicBlockG_8h_source.html +2 -2
  9. package/SVF-doxygen/html/html/CFGrammar_8cpp_source.html +11 -8
  10. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +7 -7
  11. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +1 -1
  12. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +17 -17
  13. package/SVF-doxygen/html/html/CHG_8cpp.html +2 -2
  14. package/SVF-doxygen/html/html/CHG_8cpp_source.html +7 -7
  15. package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
  16. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +6 -6
  17. package/SVF-doxygen/html/html/CallGraphBuilder_8h_source.html +1 -1
  18. package/SVF-doxygen/html/html/CommandLine_8h_source.html +2 -1
  19. package/SVF-doxygen/html/html/ConsExeState_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/html/ConsExeState_8h_source.html +1 -1
  21. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
  22. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +1 -1
  23. package/SVF-doxygen/html/html/CoreBitVector_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +2 -2
  25. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +11 -11
  26. package/SVF-doxygen/html/html/DCHG_8h_source.html +3 -3
  27. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +3 -3
  28. package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
  29. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  30. package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
  31. package/SVF-doxygen/html/html/DPItem_8h_source.html +1 -1
  32. package/SVF-doxygen/html/html/ExeState_8h_source.html +1 -1
  33. package/SVF-doxygen/html/html/ExtAPI_8cpp.html +0 -196
  34. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +121 -786
  35. package/SVF-doxygen/html/html/ExtAPI_8h.html +2 -67
  36. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +69 -654
  37. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +2 -2
  38. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  39. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +1 -1
  40. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +1 -1
  41. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +11 -11
  42. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +2 -2
  43. package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +1 -1
  44. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +4 -4
  45. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +7 -7
  46. package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
  47. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
  48. package/SVF-doxygen/html/html/IntervalExeState_8h_source.html +1 -1
  49. package/SVF-doxygen/html/html/IntervalValue_8h_source.html +1 -1
  50. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +6 -6
  51. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8h_source.html +1 -1
  52. package/SVF-doxygen/html/html/LLVMModule_8cpp.html +3 -4
  53. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1408 -1289
  54. package/SVF-doxygen/html/html/LLVMModule_8h.html +1 -0
  55. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +418 -400
  56. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +744 -616
  57. package/SVF-doxygen/html/html/LLVMUtil_8h.html +9 -1
  58. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +485 -472
  59. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
  60. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +14 -14
  61. package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +2 -2
  62. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +8 -8
  63. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +5 -5
  64. package/SVF-doxygen/html/html/MHP_8cpp_source.html +14 -14
  65. package/SVF-doxygen/html/html/MHP_8h_source.html +3 -3
  66. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
  67. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +5 -5
  68. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +4 -4
  69. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +5 -5
  70. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +7 -7
  71. package/SVF-doxygen/html/html/MTA_8cpp_source.html +4 -4
  72. package/SVF-doxygen/html/html/MTA_8h_source.html +1 -1
  73. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +13 -13
  74. package/SVF-doxygen/html/html/MemRegion_8h_source.html +1 -1
  75. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +20 -20
  76. package/SVF-doxygen/html/html/MemSSA_8h_source.html +1 -1
  77. package/SVF-doxygen/html/html/NumericLiteral_8h_source.html +1 -1
  78. package/SVF-doxygen/html/html/Options_8cpp_source.html +2 -1
  79. package/SVF-doxygen/html/html/PCG_8cpp_source.html +13 -13
  80. package/SVF-doxygen/html/html/PCG_8h_source.html +3 -3
  81. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +2 -2
  82. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
  83. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -3
  84. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +12 -12
  85. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +1 -1
  86. package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +1 -1
  87. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +2 -2
  88. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +1 -1
  89. package/SVF-doxygen/html/html/RelExeState_8h_source.html +1 -1
  90. package/SVF-doxygen/html/html/SVFBugReport_8cpp_source.html +362 -365
  91. package/SVF-doxygen/html/html/SVFBugReport_8h_source.html +24 -24
  92. package/SVF-doxygen/html/html/SVFFileSystem_8cpp_source.html +2087 -2084
  93. package/SVF-doxygen/html/html/SVFFileSystem_8h.html +1 -1
  94. package/SVF-doxygen/html/html/SVFFileSystem_8h_source.html +60 -60
  95. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +5 -5
  96. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
  97. package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +1 -1
  98. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +5 -5
  99. package/SVF-doxygen/html/html/SVFIR2ConsExeState_8cpp_source.html +4 -4
  100. package/SVF-doxygen/html/html/SVFIR2ItvExeState_8cpp_source.html +4 -4
  101. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +454 -527
  102. package/SVF-doxygen/html/html/SVFIRBuilder_8h.html +1 -1
  103. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +211 -233
  104. package/SVF-doxygen/html/html/SVFIRExtAPI_8cpp.html +2 -0
  105. package/SVF-doxygen/html/html/SVFIRExtAPI_8cpp_source.html +286 -682
  106. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +2 -2
  107. package/SVF-doxygen/html/html/SVFIR_8h_source.html +1 -1
  108. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +9 -9
  109. package/SVF-doxygen/html/html/SVFModule_8h.html +0 -1
  110. package/SVF-doxygen/html/html/SVFModule_8h_source.html +258 -260
  111. package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +8 -8
  112. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  113. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +2 -2
  114. package/SVF-doxygen/html/html/SVFType_8h_source.html +1 -1
  115. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +7 -6
  116. package/SVF-doxygen/html/html/SVFUtil_8h.html +4 -9
  117. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +392 -405
  118. package/SVF-doxygen/html/html/SVFValue_8cpp_source.html +11 -10
  119. package/SVF-doxygen/html/html/SVFValue_8h_source.html +1038 -1030
  120. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
  121. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
  122. package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +14 -14
  123. package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +6 -6
  124. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
  125. package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +1 -1
  126. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
  127. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  128. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +5 -5
  129. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
  130. package/SVF-doxygen/html/html/SymState_8cpp_source.html +1 -1
  131. package/SVF-doxygen/html/html/SymState_8h_source.html +1 -1
  132. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +28 -28
  133. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
  134. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
  135. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +2 -2
  136. package/SVF-doxygen/html/html/TCT_8cpp_source.html +15 -15
  137. package/SVF-doxygen/html/html/TCT_8h_source.html +7 -7
  138. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +14 -14
  139. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +5 -5
  140. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
  141. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +3 -3
  142. package/SVF-doxygen/html/html/VFGNode_8h_source.html +1 -1
  143. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +2 -2
  144. package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
  145. package/SVF-doxygen/html/html/WTO_8h_source.html +1 -1
  146. package/SVF-doxygen/html/html/annotated.html +1 -4
  147. package/SVF-doxygen/html/html/cJSON_8cpp.html +2 -1
  148. package/SVF-doxygen/html/html/cJSON_8cpp_source.html +2 -1
  149. package/SVF-doxygen/html/html/cfl_8cpp.html +2 -2
  150. package/SVF-doxygen/html/html/cfl_8cpp_source.html +2 -2
  151. package/SVF-doxygen/html/html/classOption.html +2 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1AccessPath.html +2 -2
  153. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  154. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  155. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +1 -1
  156. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
  157. package/SVF-doxygen/html/html/classSVF_1_1AddressValue.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +1 -1
  159. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +5 -5
  160. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -1
  161. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +3 -3
  162. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
  163. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  164. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
  165. package/SVF-doxygen/html/html/classSVF_1_1BufferOverflowBug.html +50 -50
  166. package/SVF-doxygen/html/html/classSVF_1_1CFBasicBlockGWTO.html +1 -1
  167. package/SVF-doxygen/html/html/classSVF_1_1CFBasicBlockGWTOCycle.html +1 -1
  168. package/SVF-doxygen/html/html/classSVF_1_1CFBasicBlockNode.html +1 -1
  169. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +7 -7
  170. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +18 -18
  171. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +5 -5
  172. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
  173. package/SVF-doxygen/html/html/classSVF_1_1CallCHI.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +6 -6
  175. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +2 -2
  176. package/SVF-doxygen/html/html/classSVF_1_1CallMU.html +1 -1
  177. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  178. package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +95 -95
  179. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
  180. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  181. package/SVF-doxygen/html/html/classSVF_1_1ConsExeState.html +1 -1
  182. package/SVF-doxygen/html/html/classSVF_1_1ContextCond.html +1 -1
  183. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +1 -1
  184. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
  185. package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector.html +1 -1
  186. package/SVF-doxygen/html/html/classSVF_1_1CxtDPItem.html +1 -1
  187. package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
  188. package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
  189. package/SVF-doxygen/html/html/classSVF_1_1CxtThreadStmt.html +1 -1
  190. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +9 -9
  191. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeBug.html +35 -35
  192. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
  193. package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +1 -1
  194. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI-members.html +8 -77
  195. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +130 -1337
  196. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
  197. package/SVF-doxygen/html/html/classSVF_1_1FileNeverCloseBug.html +10 -10
  198. package/SVF-doxygen/html/html/classSVF_1_1FilePartialCloseBug.html +35 -35
  199. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +12 -12
  200. package/SVF-doxygen/html/html/classSVF_1_1FullNullPtrDereferenceBug.html +10 -10
  201. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +3 -3
  202. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +4 -4
  203. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +2 -2
  204. package/SVF-doxygen/html/html/classSVF_1_1GenericBug.html +9 -13
  205. package/SVF-doxygen/html/html/classSVF_1_1GenericGraphReader.html +1 -1
  206. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
  208. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
  209. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase.html +11 -8
  210. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
  211. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +11 -11
  212. package/SVF-doxygen/html/html/classSVF_1_1ICFGWriter.html +11 -11
  213. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  214. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  215. package/SVF-doxygen/html/html/classSVF_1_1IntervalExeState.html +1 -1
  216. package/SVF-doxygen/html/html/classSVF_1_1IntervalValue.html +1 -1
  217. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
  218. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +3 -3
  219. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  220. package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +5 -5
  221. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet-members.html +42 -40
  222. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1583 -1452
  223. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +4 -4
  224. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
  225. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +14 -14
  226. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +8 -8
  227. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +14 -14
  228. package/SVF-doxygen/html/html/classSVF_1_1MHPValidator.html +3 -3
  229. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +13 -13
  230. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
  231. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
  232. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +6 -6
  233. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +1 -1
  234. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +7 -7
  235. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +1 -1
  236. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +21 -21
  237. package/SVF-doxygen/html/html/classSVF_1_1NeverFreeBug.html +10 -10
  238. package/SVF-doxygen/html/html/classSVF_1_1NumericLiteral.html +1 -1
  239. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
  240. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +14 -14
  241. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  242. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +1 -1
  243. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +1 -1
  244. package/SVF-doxygen/html/html/classSVF_1_1PartialLeakBug.html +34 -34
  245. package/SVF-doxygen/html/html/classSVF_1_1PartialNullPtrDereferenceBug.html +10 -10
  246. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
  247. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +11 -11
  248. package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +1 -1
  249. package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator.html +1 -1
  250. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +2 -2
  251. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +7 -7
  252. package/SVF-doxygen/html/html/classSVF_1_1RaceValidator.html +3 -3
  253. package/SVF-doxygen/html/html/classSVF_1_1ReaderIDToObjMap.html +2 -2
  254. package/SVF-doxygen/html/html/classSVF_1_1ReaderPtrPool.html +2 -2
  255. package/SVF-doxygen/html/html/classSVF_1_1RelExeState.html +1 -1
  256. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
  257. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +2 -2
  258. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  259. package/SVF-doxygen/html/html/classSVF_1_1SVFArgument.html +30 -30
  260. package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +73 -73
  261. package/SVF-doxygen/html/html/classSVF_1_1SVFBlackHoleValue.html +15 -15
  262. package/SVF-doxygen/html/html/classSVF_1_1SVFBugEvent.html +50 -50
  263. package/SVF-doxygen/html/html/classSVF_1_1SVFBugReport.html +87 -87
  264. package/SVF-doxygen/html/html/classSVF_1_1SVFCallInst.html +67 -67
  265. package/SVF-doxygen/html/html/classSVF_1_1SVFConstant.html +17 -17
  266. package/SVF-doxygen/html/html/classSVF_1_1SVFConstantData.html +23 -23
  267. package/SVF-doxygen/html/html/classSVF_1_1SVFConstantFP.html +21 -21
  268. package/SVF-doxygen/html/html/classSVF_1_1SVFConstantInt.html +27 -27
  269. package/SVF-doxygen/html/html/classSVF_1_1SVFConstantNullPtr.html +15 -15
  270. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction-members.html +15 -13
  271. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +222 -153
  272. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +5 -5
  273. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +5 -5
  274. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +1 -1
  275. package/SVF-doxygen/html/html/classSVF_1_1SVFGlobalValue.html +34 -34
  276. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +2 -2
  277. package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ConsExeState.html +3 -3
  278. package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState.html +4 -4
  279. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +64 -73
  280. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +905 -1767
  281. package/SVF-doxygen/html/html/classSVF_1_1SVFIRReader.html +1126 -1124
  282. package/SVF-doxygen/html/html/classSVF_1_1SVFIRWriter.html +547 -546
  283. package/SVF-doxygen/html/html/classSVF_1_1SVFInstruction.html +53 -53
  284. package/SVF-doxygen/html/html/classSVF_1_1SVFLoopAndDomInfo.html +2 -2
  285. package/SVF-doxygen/html/html/classSVF_1_1SVFMetadataAsValue.html +15 -15
  286. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +173 -173
  287. package/SVF-doxygen/html/html/classSVF_1_1SVFModuleReader.html +1 -1
  288. package/SVF-doxygen/html/html/classSVF_1_1SVFModuleWriter.html +23 -23
  289. package/SVF-doxygen/html/html/classSVF_1_1SVFOtherType.html +1 -1
  290. package/SVF-doxygen/html/html/classSVF_1_1SVFOtherValue.html +11 -11
  291. package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +8 -8
  292. package/SVF-doxygen/html/html/classSVF_1_1SVFStructType.html +1 -1
  293. package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +27 -27
  294. package/SVF-doxygen/html/html/classSVF_1_1SVFVirtualCallInst.html +53 -53
  295. package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +13 -13
  296. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
  297. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
  298. package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector.html +1 -1
  299. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +5 -5
  300. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
  301. package/SVF-doxygen/html/html/classSVF_1_1SymState.html +1 -1
  302. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +27 -27
  303. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfoReader.html +1 -1
  304. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +15 -15
  305. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  306. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  307. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +8 -8
  308. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +1 -1
  309. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +5 -5
  310. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +3 -3
  311. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
  312. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  313. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
  314. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +1 -1
  315. package/SVF-doxygen/html/html/classSVF_1_1iter__adaptor__base.html +1 -1
  316. package/SVF-doxygen/html/html/classSVF_1_1iter__facade__base_1_1ReferenceProxy.html +1 -1
  317. package/SVF-doxygen/html/html/classSVF_1_1iter__range.html +1 -1
  318. package/SVF-doxygen/html/html/classSVF_1_1mapped__iter.html +1 -1
  319. package/SVF-doxygen/html/html/classSVF_1_1pointer__iterator.html +1 -1
  320. package/SVF-doxygen/html/html/classes.html +335 -338
  321. package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
  322. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  323. package/SVF-doxygen/html/html/dir_3bbf4ce25bc1411b817b5643b794c8fb.html +2 -0
  324. package/SVF-doxygen/html/html/extapi_8c.html +1950 -0
  325. package/SVF-doxygen/html/html/extapi_8c_source.html +1488 -0
  326. package/SVF-doxygen/html/html/files.html +29 -28
  327. package/SVF-doxygen/html/html/functions_a.html +17 -27
  328. package/SVF-doxygen/html/html/functions_b.html +9 -12
  329. package/SVF-doxygen/html/html/functions_c.html +26 -70
  330. package/SVF-doxygen/html/html/functions_d.html +3 -7
  331. package/SVF-doxygen/html/html/functions_e.html +4 -121
  332. package/SVF-doxygen/html/html/functions_enum.html +0 -6
  333. package/SVF-doxygen/html/html/functions_eval.html +0 -1
  334. package/SVF-doxygen/html/html/functions_eval_c.html +1 -15
  335. package/SVF-doxygen/html/html/functions_eval_e.html +0 -96
  336. package/SVF-doxygen/html/html/functions_eval_g.html +1 -2
  337. package/SVF-doxygen/html/html/functions_eval_l.html +0 -1
  338. package/SVF-doxygen/html/html/functions_eval_m.html +0 -6
  339. package/SVF-doxygen/html/html/functions_eval_o.html +0 -3
  340. package/SVF-doxygen/html/html/functions_eval_r.html +0 -6
  341. package/SVF-doxygen/html/html/functions_eval_s.html +0 -1
  342. package/SVF-doxygen/html/html/functions_f.html +16 -19
  343. package/SVF-doxygen/html/html/functions_func.html +6 -18
  344. package/SVF-doxygen/html/html/functions_func_e.html +1 -13
  345. package/SVF-doxygen/html/html/functions_func_g.html +24 -91
  346. package/SVF-doxygen/html/html/functions_func_h.html +9 -12
  347. package/SVF-doxygen/html/html/functions_func_i.html +16 -28
  348. package/SVF-doxygen/html/html/functions_func_n.html +0 -3
  349. package/SVF-doxygen/html/html/functions_func_p.html +3 -12
  350. package/SVF-doxygen/html/html/functions_func_s.html +20 -83
  351. package/SVF-doxygen/html/html/functions_g.html +32 -100
  352. package/SVF-doxygen/html/html/functions_h.html +6 -9
  353. package/SVF-doxygen/html/html/functions_i.html +16 -28
  354. package/SVF-doxygen/html/html/functions_l.html +0 -1
  355. package/SVF-doxygen/html/html/functions_m.html +1 -7
  356. package/SVF-doxygen/html/html/functions_n.html +4 -7
  357. package/SVF-doxygen/html/html/functions_o.html +31 -44
  358. package/SVF-doxygen/html/html/functions_p.html +18 -29
  359. package/SVF-doxygen/html/html/functions_r.html +9 -16
  360. package/SVF-doxygen/html/html/functions_s.html +16 -84
  361. package/SVF-doxygen/html/html/functions_t.html +4 -10
  362. package/SVF-doxygen/html/html/functions_v.html +3 -3
  363. package/SVF-doxygen/html/html/functions_vars_a.html +3 -0
  364. package/SVF-doxygen/html/html/functions_vars_b.html +0 -3
  365. package/SVF-doxygen/html/html/functions_vars_c.html +1 -23
  366. package/SVF-doxygen/html/html/functions_vars_d.html +1 -5
  367. package/SVF-doxygen/html/html/functions_vars_e.html +2 -8
  368. package/SVF-doxygen/html/html/functions_vars_f.html +0 -3
  369. package/SVF-doxygen/html/html/functions_vars_o.html +0 -9
  370. package/SVF-doxygen/html/html/functions_vars_r.html +1 -2
  371. package/SVF-doxygen/html/html/functions_vars_s.html +1 -5
  372. package/SVF-doxygen/html/html/functions_vars_t.html +0 -6
  373. package/SVF-doxygen/html/html/globals.html +22 -4
  374. package/SVF-doxygen/html/html/globals_a.html +3 -0
  375. package/SVF-doxygen/html/html/globals_b.html +3 -0
  376. package/SVF-doxygen/html/html/globals_defs.html +3 -9
  377. package/SVF-doxygen/html/html/globals_e.html +0 -3
  378. package/SVF-doxygen/html/html/globals_f.html +11 -2
  379. package/SVF-doxygen/html/html/globals_func.html +159 -15
  380. package/SVF-doxygen/html/html/globals_g.html +13 -4
  381. package/SVF-doxygen/html/html/globals_i.html +41 -2
  382. package/SVF-doxygen/html/html/globals_j.html +3 -6
  383. package/SVF-doxygen/html/html/globals_l.html +3 -0
  384. package/SVF-doxygen/html/html/globals_m.html +8 -2
  385. package/SVF-doxygen/html/html/globals_n.html +2 -1
  386. package/SVF-doxygen/html/html/globals_p.html +1 -4
  387. package/SVF-doxygen/html/html/globals_r.html +12 -6
  388. package/SVF-doxygen/html/html/globals_s.html +33 -0
  389. package/SVF-doxygen/html/html/globals_t.html +3 -0
  390. package/SVF-doxygen/html/html/hierarchy.html +526 -529
  391. package/SVF-doxygen/html/html/iterator_8h_source.html +1 -1
  392. package/SVF-doxygen/html/html/iterator__range_8h_source.html +1 -1
  393. package/SVF-doxygen/html/html/llvm2svf_8cpp.html +1 -1
  394. package/SVF-doxygen/html/html/llvm2svf_8cpp_source.html +1 -1
  395. package/SVF-doxygen/html/html/menudata.js +3 -0
  396. package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
  397. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  398. package/SVF-doxygen/html/html/namespaceSVF.html +152 -151
  399. package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +1003 -776
  400. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +298 -368
  401. package/SVF-doxygen/html/html/namespacemembers_func_g.html +11 -5
  402. package/SVF-doxygen/html/html/namespacemembers_func_i.html +11 -14
  403. package/SVF-doxygen/html/html/namespacemembers_func_r.html +6 -0
  404. package/SVF-doxygen/html/html/namespacemembers_g.html +11 -5
  405. package/SVF-doxygen/html/html/namespacemembers_i.html +8 -11
  406. package/SVF-doxygen/html/html/namespacemembers_r.html +6 -0
  407. package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
  408. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  409. package/SVF-doxygen/html/html/search/all_0.js +153 -147
  410. package/SVF-doxygen/html/html/search/all_1.js +476 -478
  411. package/SVF-doxygen/html/html/search/all_10.js +323 -327
  412. package/SVF-doxygen/html/html/search/all_11.js +212 -209
  413. package/SVF-doxygen/html/html/search/all_12.js +536 -547
  414. package/SVF-doxygen/html/html/search/all_13.js +188 -189
  415. package/SVF-doxygen/html/html/search/all_14.js +66 -66
  416. package/SVF-doxygen/html/html/search/all_15.js +170 -170
  417. package/SVF-doxygen/html/html/search/all_16.js +60 -60
  418. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  419. package/SVF-doxygen/html/html/search/all_18.js +1 -1
  420. package/SVF-doxygen/html/html/search/all_19.js +10 -10
  421. package/SVF-doxygen/html/html/search/all_1a.js +169 -169
  422. package/SVF-doxygen/html/html/search/all_2.js +159 -159
  423. package/SVF-doxygen/html/html/search/all_3.js +597 -608
  424. package/SVF-doxygen/html/html/search/all_4.js +226 -227
  425. package/SVF-doxygen/html/html/search/all_5.js +116 -156
  426. package/SVF-doxygen/html/html/search/all_6.js +225 -223
  427. package/SVF-doxygen/html/html/search/all_7.js +996 -1012
  428. package/SVF-doxygen/html/html/search/all_8.js +191 -192
  429. package/SVF-doxygen/html/html/search/all_9.js +605 -597
  430. package/SVF-doxygen/html/html/search/all_a.js +46 -47
  431. package/SVF-doxygen/html/html/search/all_b.js +26 -26
  432. package/SVF-doxygen/html/html/search/all_c.js +114 -113
  433. package/SVF-doxygen/html/html/search/all_d.js +196 -196
  434. package/SVF-doxygen/html/html/search/all_e.js +205 -206
  435. package/SVF-doxygen/html/html/search/all_f.js +116 -122
  436. package/SVF-doxygen/html/html/search/classes_0.js +26 -26
  437. package/SVF-doxygen/html/html/search/classes_1.js +9 -9
  438. package/SVF-doxygen/html/html/search/classes_10.js +73 -73
  439. package/SVF-doxygen/html/html/search/classes_11.js +15 -15
  440. package/SVF-doxygen/html/html/search/classes_12.js +2 -2
  441. package/SVF-doxygen/html/html/search/classes_13.js +10 -10
  442. package/SVF-doxygen/html/html/search/classes_14.js +14 -14
  443. package/SVF-doxygen/html/html/search/classes_15.js +1 -1
  444. package/SVF-doxygen/html/html/search/classes_2.js +76 -76
  445. package/SVF-doxygen/html/html/search/classes_3.js +35 -35
  446. package/SVF-doxygen/html/html/search/classes_4.js +8 -10
  447. package/SVF-doxygen/html/html/search/classes_5.js +28 -28
  448. package/SVF-doxygen/html/html/search/classes_6.js +98 -98
  449. package/SVF-doxygen/html/html/search/classes_7.js +33 -33
  450. package/SVF-doxygen/html/html/search/classes_8.js +56 -56
  451. package/SVF-doxygen/html/html/search/classes_9.js +1 -1
  452. package/SVF-doxygen/html/html/search/classes_a.js +12 -12
  453. package/SVF-doxygen/html/html/search/classes_b.js +29 -29
  454. package/SVF-doxygen/html/html/search/classes_c.js +6 -6
  455. package/SVF-doxygen/html/html/search/classes_d.js +18 -19
  456. package/SVF-doxygen/html/html/search/classes_e.js +36 -36
  457. package/SVF-doxygen/html/html/search/classes_f.js +25 -25
  458. package/SVF-doxygen/html/html/search/defines_0.js +3 -3
  459. package/SVF-doxygen/html/html/search/defines_1.js +2 -2
  460. package/SVF-doxygen/html/html/search/defines_2.js +30 -30
  461. package/SVF-doxygen/html/html/search/defines_3.js +20 -20
  462. package/SVF-doxygen/html/html/search/defines_4.js +2 -3
  463. package/SVF-doxygen/html/html/search/defines_5.js +4 -4
  464. package/SVF-doxygen/html/html/search/defines_6.js +2 -2
  465. package/SVF-doxygen/html/html/search/defines_7.js +5 -5
  466. package/SVF-doxygen/html/html/search/defines_8.js +11 -13
  467. package/SVF-doxygen/html/html/search/defines_9.js +9 -9
  468. package/SVF-doxygen/html/html/search/defines_a.js +2 -2
  469. package/SVF-doxygen/html/html/search/defines_b.js +1 -1
  470. package/SVF-doxygen/html/html/search/defines_c.js +3 -2
  471. package/SVF-doxygen/html/html/search/defines_d.js +2 -2
  472. package/SVF-doxygen/html/html/search/defines_e.js +6 -6
  473. package/SVF-doxygen/html/html/search/defines_f.js +3 -3
  474. package/SVF-doxygen/html/html/search/enums_0.js +3 -3
  475. package/SVF-doxygen/html/html/search/enums_1.js +2 -2
  476. package/SVF-doxygen/html/html/search/enums_10.js +1 -1
  477. package/SVF-doxygen/html/html/search/enums_11.js +1 -1
  478. package/SVF-doxygen/html/html/search/enums_2.js +8 -8
  479. package/SVF-doxygen/html/html/search/enums_3.js +1 -1
  480. package/SVF-doxygen/html/html/search/enums_4.js +3 -4
  481. package/SVF-doxygen/html/html/search/enums_5.js +1 -1
  482. package/SVF-doxygen/html/html/search/enums_6.js +2 -2
  483. package/SVF-doxygen/html/html/search/enums_7.js +2 -2
  484. package/SVF-doxygen/html/html/search/enums_8.js +4 -4
  485. package/SVF-doxygen/html/html/search/enums_9.js +1 -1
  486. package/SVF-doxygen/html/html/search/enums_a.js +1 -2
  487. package/SVF-doxygen/html/html/search/enums_b.js +7 -7
  488. package/SVF-doxygen/html/html/search/enums_c.js +1 -1
  489. package/SVF-doxygen/html/html/search/enums_d.js +4 -4
  490. package/SVF-doxygen/html/html/search/enums_e.js +2 -2
  491. package/SVF-doxygen/html/html/search/enums_f.js +4 -4
  492. package/SVF-doxygen/html/html/search/enumvalues_0.js +14 -14
  493. package/SVF-doxygen/html/html/search/enumvalues_1.js +14 -14
  494. package/SVF-doxygen/html/html/search/enumvalues_10.js +35 -35
  495. package/SVF-doxygen/html/html/search/enumvalues_11.js +3 -3
  496. package/SVF-doxygen/html/html/search/enumvalues_12.js +10 -10
  497. package/SVF-doxygen/html/html/search/enumvalues_13.js +1 -1
  498. package/SVF-doxygen/html/html/search/enumvalues_14.js +1 -1
  499. package/SVF-doxygen/html/html/search/enumvalues_15.js +3 -3
  500. package/SVF-doxygen/html/html/search/enumvalues_2.js +36 -40
  501. package/SVF-doxygen/html/html/search/enumvalues_3.js +13 -13
  502. package/SVF-doxygen/html/html/search/enumvalues_4.js +2 -34
  503. package/SVF-doxygen/html/html/search/enumvalues_5.js +48 -48
  504. package/SVF-doxygen/html/html/search/enumvalues_6.js +6 -6
  505. package/SVF-doxygen/html/html/search/enumvalues_7.js +9 -9
  506. package/SVF-doxygen/html/html/search/enumvalues_8.js +23 -23
  507. package/SVF-doxygen/html/html/search/enumvalues_9.js +6 -6
  508. package/SVF-doxygen/html/html/search/enumvalues_a.js +15 -17
  509. package/SVF-doxygen/html/html/search/enumvalues_b.js +11 -11
  510. package/SVF-doxygen/html/html/search/enumvalues_c.js +5 -6
  511. package/SVF-doxygen/html/html/search/enumvalues_d.js +18 -18
  512. package/SVF-doxygen/html/html/search/enumvalues_e.js +9 -11
  513. package/SVF-doxygen/html/html/search/enumvalues_f.js +45 -45
  514. package/SVF-doxygen/html/html/search/files_0.js +13 -13
  515. package/SVF-doxygen/html/html/search/files_1.js +7 -7
  516. package/SVF-doxygen/html/html/search/files_10.js +8 -8
  517. package/SVF-doxygen/html/html/search/files_11.js +8 -8
  518. package/SVF-doxygen/html/html/search/files_12.js +2 -2
  519. package/SVF-doxygen/html/html/search/files_2.js +49 -49
  520. package/SVF-doxygen/html/html/search/files_3.js +14 -14
  521. package/SVF-doxygen/html/html/search/files_4.js +5 -4
  522. package/SVF-doxygen/html/html/search/files_5.js +13 -13
  523. package/SVF-doxygen/html/html/search/files_6.js +9 -9
  524. package/SVF-doxygen/html/html/search/files_7.js +14 -14
  525. package/SVF-doxygen/html/html/search/files_8.js +13 -13
  526. package/SVF-doxygen/html/html/search/files_9.js +18 -18
  527. package/SVF-doxygen/html/html/search/files_a.js +3 -3
  528. package/SVF-doxygen/html/html/search/files_b.js +2 -2
  529. package/SVF-doxygen/html/html/search/files_c.js +20 -20
  530. package/SVF-doxygen/html/html/search/files_d.js +4 -4
  531. package/SVF-doxygen/html/html/search/files_e.js +62 -62
  532. package/SVF-doxygen/html/html/search/files_f.js +8 -8
  533. package/SVF-doxygen/html/html/search/functions_0.js +6 -351
  534. package/SVF-doxygen/html/html/search/functions_1.js +348 -81
  535. package/SVF-doxygen/html/html/search/functions_10.js +139 -122
  536. package/SVF-doxygen/html/html/search/functions_11.js +126 -283
  537. package/SVF-doxygen/html/html/search/functions_12.js +273 -55
  538. package/SVF-doxygen/html/html/search/functions_13.js +56 -38
  539. package/SVF-doxygen/html/html/search/functions_14.js +38 -71
  540. package/SVF-doxygen/html/html/search/functions_15.js +71 -29
  541. package/SVF-doxygen/html/html/search/functions_16.js +29 -2
  542. package/SVF-doxygen/html/html/search/functions_17.js +2 -169
  543. package/SVF-doxygen/html/html/search/functions_18.html +30 -0
  544. package/SVF-doxygen/html/html/search/functions_18.js +172 -0
  545. package/SVF-doxygen/html/html/search/functions_2.js +82 -251
  546. package/SVF-doxygen/html/html/search/functions_3.js +251 -71
  547. package/SVF-doxygen/html/html/search/functions_4.js +71 -55
  548. package/SVF-doxygen/html/html/search/functions_5.js +51 -55
  549. package/SVF-doxygen/html/html/search/functions_6.js +58 -832
  550. package/SVF-doxygen/html/html/search/functions_7.js +816 -144
  551. package/SVF-doxygen/html/html/search/functions_8.js +143 -417
  552. package/SVF-doxygen/html/html/search/functions_9.js +425 -29
  553. package/SVF-doxygen/html/html/search/functions_a.js +30 -2
  554. package/SVF-doxygen/html/html/search/functions_b.js +2 -23
  555. package/SVF-doxygen/html/html/search/functions_c.js +24 -75
  556. package/SVF-doxygen/html/html/search/functions_d.js +77 -35
  557. package/SVF-doxygen/html/html/search/functions_e.js +34 -56
  558. package/SVF-doxygen/html/html/search/functions_f.js +56 -143
  559. package/SVF-doxygen/html/html/search/namespaces_0.js +1 -1
  560. package/SVF-doxygen/html/html/search/namespaces_1.js +7 -7
  561. package/SVF-doxygen/html/html/search/related_0.js +2 -2
  562. package/SVF-doxygen/html/html/search/related_1.js +1 -1
  563. package/SVF-doxygen/html/html/search/related_2.js +2 -2
  564. package/SVF-doxygen/html/html/search/related_3.js +2 -2
  565. package/SVF-doxygen/html/html/search/related_4.js +2 -2
  566. package/SVF-doxygen/html/html/search/related_5.js +1 -1
  567. package/SVF-doxygen/html/html/search/related_6.js +2 -2
  568. package/SVF-doxygen/html/html/search/related_7.js +4 -4
  569. package/SVF-doxygen/html/html/search/related_8.js +2 -2
  570. package/SVF-doxygen/html/html/search/related_9.js +4 -4
  571. package/SVF-doxygen/html/html/search/related_a.js +19 -19
  572. package/SVF-doxygen/html/html/search/related_b.js +4 -4
  573. package/SVF-doxygen/html/html/search/related_c.js +1 -1
  574. package/SVF-doxygen/html/html/search/related_d.js +11 -11
  575. package/SVF-doxygen/html/html/search/related_e.js +2 -2
  576. package/SVF-doxygen/html/html/search/related_f.js +2 -2
  577. package/SVF-doxygen/html/html/search/searchdata.js +1 -1
  578. package/SVF-doxygen/html/html/search/typedefs_0.js +18 -18
  579. package/SVF-doxygen/html/html/search/typedefs_1.js +25 -25
  580. package/SVF-doxygen/html/html/search/typedefs_10.js +60 -60
  581. package/SVF-doxygen/html/html/search/typedefs_11.js +13 -13
  582. package/SVF-doxygen/html/html/search/typedefs_12.js +11 -11
  583. package/SVF-doxygen/html/html/search/typedefs_13.js +35 -35
  584. package/SVF-doxygen/html/html/search/typedefs_14.js +8 -8
  585. package/SVF-doxygen/html/html/search/typedefs_2.js +126 -126
  586. package/SVF-doxygen/html/html/search/typedefs_3.js +39 -39
  587. package/SVF-doxygen/html/html/search/typedefs_4.js +16 -16
  588. package/SVF-doxygen/html/html/search/typedefs_5.js +41 -41
  589. package/SVF-doxygen/html/html/search/typedefs_6.js +52 -52
  590. package/SVF-doxygen/html/html/search/typedefs_7.js +40 -40
  591. package/SVF-doxygen/html/html/search/typedefs_8.js +1 -1
  592. package/SVF-doxygen/html/html/search/typedefs_9.js +6 -6
  593. package/SVF-doxygen/html/html/search/typedefs_a.js +29 -29
  594. package/SVF-doxygen/html/html/search/typedefs_b.js +29 -29
  595. package/SVF-doxygen/html/html/search/typedefs_c.js +40 -40
  596. package/SVF-doxygen/html/html/search/typedefs_d.js +15 -15
  597. package/SVF-doxygen/html/html/search/typedefs_e.js +52 -52
  598. package/SVF-doxygen/html/html/search/typedefs_f.js +14 -14
  599. package/SVF-doxygen/html/html/search/variables_0.js +147 -147
  600. package/SVF-doxygen/html/html/search/variables_1.js +75 -74
  601. package/SVF-doxygen/html/html/search/variables_10.js +97 -97
  602. package/SVF-doxygen/html/html/search/variables_11.js +46 -46
  603. package/SVF-doxygen/html/html/search/variables_12.js +92 -93
  604. package/SVF-doxygen/html/html/search/variables_13.js +75 -77
  605. package/SVF-doxygen/html/html/search/variables_14.js +14 -14
  606. package/SVF-doxygen/html/html/search/variables_15.js +48 -48
  607. package/SVF-doxygen/html/html/search/variables_16.js +9 -9
  608. package/SVF-doxygen/html/html/search/variables_17.js +1 -1
  609. package/SVF-doxygen/html/html/search/variables_18.js +2 -2
  610. package/SVF-doxygen/html/html/search/variables_2.js +34 -35
  611. package/SVF-doxygen/html/html/search/variables_3.js +141 -148
  612. package/SVF-doxygen/html/html/search/variables_4.js +55 -56
  613. package/SVF-doxygen/html/html/search/variables_5.js +38 -40
  614. package/SVF-doxygen/html/html/search/variables_6.js +66 -67
  615. package/SVF-doxygen/html/html/search/variables_7.js +33 -33
  616. package/SVF-doxygen/html/html/search/variables_8.js +7 -7
  617. package/SVF-doxygen/html/html/search/variables_9.js +77 -77
  618. package/SVF-doxygen/html/html/search/variables_a.js +4 -4
  619. package/SVF-doxygen/html/html/search/variables_b.js +10 -10
  620. package/SVF-doxygen/html/html/search/variables_c.js +45 -45
  621. package/SVF-doxygen/html/html/search/variables_d.js +56 -56
  622. package/SVF-doxygen/html/html/search/variables_e.js +123 -123
  623. package/SVF-doxygen/html/html/search/variables_f.js +30 -33
  624. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  625. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
  626. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__iterable.html +1 -1
  627. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__iterable_3_01T_00_01void__t_3_01decltype_07std_1_1begin_07std_1_1dec794949348c8e1e00603fd8633b6dd1f3.html +1 -1
  628. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__map.html +1 -1
  629. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__map_3_01std_1_1map_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  630. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__map_3_01std_1_1unordered__map_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  631. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__sequence__container.html +1 -1
  632. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__sequence__container_3_01std_1_1deque_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  633. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__sequence__container_3_01std_1_1list_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  634. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__sequence__container_3_01std_1_1vector_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  635. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__set.html +1 -1
  636. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__set_3_01std_1_1set_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  637. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__set_3_01std_1_1unordered__set_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  638. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1make__void.html +2 -2
  639. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +7 -7
  640. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtStmt_01_4.html +1 -1
  641. package/SVF-doxygen/html/html/svf-ex_8cpp.html +3 -3
  642. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +4 -4
  643. package/SVF-doxygen/html/html/svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html +9 -9
  644. package/SVF-doxygen/html/html/svf_2include_2MTA_2MTAResultValidator_8h_source.html +9 -9
  645. package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
  646. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  647. package/build.sh +1 -1
  648. package/package.json +1 -1
  649. package/svf/include/SVFIR/SVFModule.h +0 -1
  650. package/svf/include/SVFIR/SVFValue.h +7 -1
  651. package/svf/include/Util/ExtAPI.h +11 -457
  652. package/svf/include/Util/SVFUtil.h +7 -22
  653. package/svf/lib/SVFIR/SVFFileSystem.cpp +3 -1
  654. package/svf/lib/SVFIR/SVFValue.cpp +2 -2
  655. package/svf/lib/Util/ExtAPI.cpp +36 -595
  656. package/svf/lib/Util/Options.cpp +1 -1
  657. package/svf/lib/Util/SVFBugReport.cpp +0 -2
  658. package/svf-llvm/include/SVF-LLVM/LLVMModule.h +17 -0
  659. package/svf-llvm/include/SVF-LLVM/LLVMUtil.h +14 -1
  660. package/svf-llvm/include/SVF-LLVM/SVFIRBuilder.h +5 -14
  661. package/svf-llvm/lib/LLVMModule.cpp +157 -43
  662. package/svf-llvm/lib/LLVMUtil.cpp +121 -0
  663. package/svf-llvm/lib/SVFIRBuilder.cpp +7 -76
  664. package/svf-llvm/lib/SVFIRExtAPI.cpp +161 -536
  665. package/svf-llvm/lib/extapi.c +1348 -0
  666. package/svf/include/Util/ExtAPI.json +0 -5853
@@ -28,99 +28,10 @@
28
28
  */
29
29
 
30
30
  #include "Util/ExtAPI.h"
31
- #include "SVFIR/SVFVariables.h"
32
- #include "Util/SVFUtil.h"
33
- #include "Util/cJSON.h"
34
- #include <stdlib.h>
35
- #include <string.h>
36
- #include <sys/stat.h>
37
31
 
38
32
  using namespace SVF;
39
33
 
40
34
  ExtAPI* ExtAPI::extOp = nullptr;
41
- cJSON* ExtAPI::root = nullptr;
42
-
43
- // Get environment variables $SVF_DIR and "npm root" through popen() method
44
- static std::string GetStdoutFromCommand(const std::string& command)
45
- {
46
- char buffer[128];
47
- std::string result = "";
48
- // Open pipe to file
49
- FILE* pipe = popen(command.c_str(), "r");
50
- if (!pipe)
51
- {
52
- return "popen failed!";
53
- }
54
- // read till end of process:
55
- while (!feof(pipe))
56
- {
57
- // use buffer to read and add to result
58
- if (fgets(buffer, 128, pipe) != NULL)
59
- result += buffer;
60
- }
61
- pclose(pipe);
62
- // remove "\n"
63
- result.erase(remove(result.begin(), result.end(), '\n'), result.end());
64
- return result;
65
- }
66
-
67
- // Get ExtAPI.json file
68
- static std::string getJsonFile(const std::string& path)
69
- {
70
- std::string jsonFilePath = GetStdoutFromCommand(path);
71
- if (path.compare("npm root") == 0)
72
- {
73
- int os_flag = 1;
74
- // SVF installed via npm needs to determine the type of operating
75
- // system, otherwise the ExtAPI.json path may not be found.
76
- #ifdef linux
77
- // Linux os
78
- os_flag = 0;
79
- jsonFilePath.append("/svf-lib/SVF-linux");
80
- #endif
81
- // Mac os
82
- if (os_flag == 1)
83
- {
84
- jsonFilePath.append("/svf-lib/SVF-osx");
85
- }
86
- }
87
- if (jsonFilePath.back() != '/') jsonFilePath.push_back('/');
88
- jsonFilePath.append(EXTAPI_JSON_PATH);
89
- return jsonFilePath;
90
- }
91
-
92
- static cJSON* parseJson(const std::string& path, off_t fileSize)
93
- {
94
- FILE* file = fopen(path.c_str(), "r");
95
- if (!file)
96
- {
97
- return nullptr;
98
- }
99
-
100
- // allocate memory size matched with file size
101
- char* jsonStr = (char*)calloc(fileSize + 1, sizeof(char));
102
-
103
- // read json string from file
104
- u32_t size = fread(jsonStr, sizeof(char), fileSize, file);
105
- if (size == 0)
106
- {
107
- SVFUtil::errs() << SVFUtil::errMsg("\t Wrong ExtAPI.json path!! ")
108
- << "The current ExtAPI.json path is: " << path << "\n";
109
- assert(false && "Read ExtAPI.json file fails!");
110
- return nullptr;
111
- }
112
- fclose(file);
113
-
114
- // convert json string to json pointer variable
115
- cJSON* root = cJSON_Parse(jsonStr);
116
- if (!root)
117
- {
118
- free(jsonStr);
119
- return nullptr;
120
- }
121
- free(jsonStr);
122
- return root;
123
- }
124
35
 
125
36
  ExtAPI* ExtAPI::getExtAPI(const std::string& path)
126
37
  {
@@ -128,46 +39,6 @@ ExtAPI* ExtAPI::getExtAPI(const std::string& path)
128
39
  {
129
40
  extOp = new ExtAPI;
130
41
  }
131
- if (root == nullptr)
132
- {
133
- struct stat statbuf;
134
-
135
- // Four ways to get ExtAPI.json path
136
- // 1. Explicit path provided
137
- // 2. default path (get ExtAPI.json path from Util/config.h)
138
- // 3. from $SVF_DIR
139
- // 4. from "npm root"(If SVF is installed via npm)
140
-
141
- std::string jsonFilePath = path;
142
- if (!jsonFilePath.empty() && !stat(jsonFilePath.c_str(), &statbuf))
143
- {
144
- root = parseJson(jsonFilePath, statbuf.st_size);
145
- return extOp;
146
- }
147
-
148
- jsonFilePath = std::string(PROJECT_PATH) + '/' + EXTAPI_JSON_PATH;
149
- if (!stat(jsonFilePath.c_str(), &statbuf))
150
- {
151
- root = parseJson(jsonFilePath, statbuf.st_size);
152
- return extOp;
153
- }
154
-
155
- jsonFilePath = getJsonFile("echo $SVF_DIR");
156
- if (!stat(jsonFilePath.c_str(), &statbuf))
157
- {
158
- root = parseJson(jsonFilePath, statbuf.st_size);
159
- return extOp;
160
- }
161
-
162
- jsonFilePath = getJsonFile("npm root");
163
- if (!stat(jsonFilePath.c_str(), &statbuf))
164
- {
165
- root = parseJson(jsonFilePath, statbuf.st_size);
166
- return extOp;
167
- }
168
- SVFUtil::errs() << "No JsonFile found at " << jsonFilePath << " for getExtAPI(); set $SVF_DIR first!\n";
169
- abort();
170
- }
171
42
  return extOp;
172
43
  }
173
44
 
@@ -178,517 +49,87 @@ void ExtAPI::destory()
178
49
  delete extOp;
179
50
  extOp = nullptr;
180
51
  }
181
- if (root != nullptr)
182
- {
183
- cJSON_Delete(root);
184
- root = nullptr;
185
- }
186
- }
187
-
188
- void ExtAPI::add_entry(const char* funName, const char* returnType,
189
- std::vector<const char*> argTypes, extType type,
190
- bool overwrite_app_function)
191
- {
192
- assert(root && "Parse the json before adding additional entries");
193
- assert(get_type(funName) == EFT_NULL && "Do not add entries that already exist");
194
- auto entry = cJSON_CreateObject();
195
-
196
- // add the signature fields
197
- auto returnTypeString = cJSON_CreateString(returnType);
198
- cJSON_AddItemToObject(entry, "return", returnTypeString);
199
-
200
- std::stringstream ss;
201
- ss << "(";
202
- for (auto str : argTypes)
203
- ss << str << ",";
204
- std::string formattedArgs = ss.str();
205
- if (formattedArgs.back() == ',')
206
- formattedArgs.back() = ')';
207
- else
208
- formattedArgs.append(")");
209
- auto argsString = cJSON_CreateString(formattedArgs.c_str());
210
- cJSON_AddItemToObject(entry, "argument", argsString);
211
-
212
- // add the type field
213
- auto typeString = cJSON_CreateString(extType_toString(type).c_str());
214
- cJSON_AddItemToObject(entry, JSON_OPT_FUNCTIONTYPE, typeString);
215
-
216
- // add the 'overwrite_app_function' field
217
- auto overwriteBool = cJSON_CreateNumber(overwrite_app_function ? 1 : 0);
218
- cJSON_AddItemToObject(entry, JSON_OPT_OVERWRITE, overwriteBool);
219
-
220
- // add object to root
221
- cJSON_AddItemToObject(root, funName, entry);
222
- }
223
-
224
- // Get the corresponding name in ext_t, e.g. "EXT_ADDR" in {"addr", EXT_ADDR},
225
- std::string ExtAPI::get_opName(const std::string& s)
226
- {
227
- u32_t end = 0;
228
- while (end < s.size() && !isdigit(s[end]))
229
- end++;
230
- return s.substr(0, end);
231
- }
232
-
233
- const std::string& ExtAPI::extType_toString(extType type)
234
- {
235
- auto it =
236
- std::find_if(type_pair.begin(), type_pair.end(),
237
- [&](const auto& pair)
238
- {
239
- return pair.second == type;
240
- });
241
- assert(it != type_pair.end());
242
- return it->first;
243
52
  }
244
53
 
245
- // Get numeric index of the argument in external function
246
- u32_t ExtAPI::getArgPos(const std::string& s)
54
+ std::string ExtAPI::getExtFuncAnnotation(const SVFFunction* fun, const std::string& funcAnnotation)
247
55
  {
248
- u32_t start = 0;
249
- while (start < s.size() && isalpha(s[start]))
250
- start++;
251
- if (s.substr(0, start) != "Arg")
252
- assert(false && "the argument of extern function in ExtAPI.json should start with 'Arg' !");
253
- u32_t end = start + 1;
254
- while (end < s.size() && isdigit(s[end]))
255
- end++;
256
- std::string digitStr = s.substr(start, end - start);
257
- u32_t argNum = atoi(digitStr.c_str());
258
- return argNum;
56
+ assert(fun && "Null SVFFunction* pointer");
57
+ const std::vector<std::string>& annotations = fun->getAnnotations();
58
+ for (const std::string& annotation : annotations)
59
+ if (annotation.find(funcAnnotation) != std::string::npos)
60
+ return annotation;
61
+ return "";
259
62
  }
260
63
 
261
- // return value >= 0 is an argument node
262
- // return value = -1 is an inst node
263
- // return value = -2 is a Dummy node
264
- // return value = -3 is an object node
265
- // return value = -4 is a nullptr node
266
- // return value = -5 is an offset
267
- // return value = -6 is an illegal operand format
268
- s32_t ExtAPI::getNodeIDType(const std::string& s)
64
+ bool ExtAPI::hasExtFuncAnnotation(const SVFFunction* fun, const std::string& funcAnnotation)
269
65
  {
270
- u32_t argPos = -1;
271
- // 'A' represents an argument
272
- if (s.size() == 0)
273
- return -5;
274
- u32_t start = 0;
275
- while (start < s.size() && isalpha(s[start]))
276
- start++;
277
- std::string argStr = s.substr(0, start);
278
- if (argStr == "Arg")
279
- {
280
- u32_t end = start + 1;
281
- while (end < s.size() && isdigit(s[end]))
282
- end++;
283
- std::string digitStr = s.substr(start, end - start);
284
- argPos = atoi(digitStr.c_str());
285
- return argPos;
286
- }
287
-
288
- static const Map<std::string, s32_t> argStrToBinOp =
289
- {
290
- {"Ret", -1},
291
- {"Dummy", -2},
292
- {"Obj", -3},
293
- {"NullPtr", -4},
294
- {"Add", BinaryOPStmt::Add},
295
- {"Sub", BinaryOPStmt::Sub},
296
- {"Mul", BinaryOPStmt::Mul},
297
- {"SDiv", BinaryOPStmt::SDiv},
298
- {"SRem", BinaryOPStmt::SRem},
299
- {"Xor", BinaryOPStmt::Xor},
300
- {"And", BinaryOPStmt::And},
301
- {"Or", BinaryOPStmt::Or},
302
- {"AShr", BinaryOPStmt::AShr},
303
- {"Shl", BinaryOPStmt::Shl},
304
- {"ICMP_EQ", CmpStmt::ICMP_EQ},
305
- {"ICMP_NE", CmpStmt::ICMP_NE},
306
- {"ICMP_UGT", CmpStmt::ICMP_UGT},
307
- {"ICMP_SGT", CmpStmt::ICMP_SGT},
308
- {"ICMP_UGE", CmpStmt::ICMP_UGE},
309
- {"ICMP_SGE", CmpStmt::ICMP_SGE},
310
- {"ICMP_ULT", CmpStmt::ICMP_ULT},
311
- {"ICMP_SLT", CmpStmt::ICMP_SLT},
312
- {"ICMP_ULE", CmpStmt::ICMP_ULE},
313
- {"ICMP_SLE", CmpStmt::ICMP_SLE},
314
- {"FNeg", UnaryOPStmt::FNeg},
315
- };
316
-
317
- auto it = argStrToBinOp.find(argStr);
318
- if (it != argStrToBinOp.cend())
319
- return it->second;
320
- // offset
321
- u32_t i = 0;
322
- while (i < s.size() && isdigit(s[i]))
323
- i++;
324
- if (i == s.size())
325
- return -5;
326
- // illegal operand format
327
- return -6;
328
- }
329
-
330
- // Get external function name, e.g "memcpy"
331
- std::string ExtAPI::get_name(const SVFFunction* F)
332
- {
333
- assert(F);
334
- std::string funName = F->getName();
335
- if (F->isIntrinsic())
336
- {
337
- unsigned start = funName.find('.');
338
- unsigned end = funName.substr(start + 1).find('.');
339
- funName = "llvm." + funName.substr(start + 1, end);
340
- }
341
- return funName;
342
- }
343
-
344
- // Get specifications of external functions in ExtAPI.json file
345
- cJSON* ExtAPI::get_FunJson(const std::string& funName)
346
- {
347
- assert(root && "JSON not loaded");
348
- return cJSON_GetObjectItemCaseSensitive(root, funName.c_str());
349
- }
350
-
351
- ExtAPI::Operand ExtAPI::getBasicOperation(cJSON* obj)
352
- {
353
- Operand basicOp;
354
- if (strstr(obj->string, "AddrStmt") != NULL)
355
- basicOp.setType(ExtAPI::OperationType::Addr);
356
- else if (strstr(obj->string, "CopyStmt") != NULL)
357
- basicOp.setType(ExtAPI::OperationType::Copy);
358
- else if (strstr(obj->string, "LoadStmt") != NULL)
359
- basicOp.setType(ExtAPI::OperationType::Load);
360
- else if (strstr(obj->string, "StoreStmt") != NULL)
361
- basicOp.setType(ExtAPI::OperationType::Store);
362
- else if (strstr(obj->string, "GepStmt") != NULL)
363
- basicOp.setType(ExtAPI::OperationType::Gep);
364
- else if (strstr(obj->string, "ReturnStmt") != NULL)
365
- basicOp.setType(ExtAPI::OperationType::Return);
366
- else if (strstr(obj->string, "Rb_tree_ops") != NULL)
367
- basicOp.setType(ExtAPI::OperationType::Rb_tree_ops);
368
- else if (strstr(obj->string, "memcpy_like") != NULL)
369
- basicOp.setType(ExtAPI::OperationType::Memcpy_like);
370
- else if (strstr(obj->string, "memset_like") != NULL)
371
- basicOp.setType(ExtAPI::OperationType::Memset_like);
372
- else
373
- assert(false && "Unknown operation type");
374
-
375
- cJSON* value = obj->child;
376
- while (value)
377
- {
378
- if (strcmp(value->string, "src") == 0)
379
- basicOp.setSrcValue(value->valuestring);
380
- else if (strcmp(value->string, "dst") == 0)
381
- basicOp.setDstValue(value->valuestring);
382
- else if (strcmp(value->string, "offset") == 0 || strcmp(value->string, "size") == 0)
383
- basicOp.setOffsetOrSizeStr(value->valuestring);
384
- else
385
- assert(false && "Unknown operation value");
386
- value = value->next;
387
- }
388
- return basicOp;
389
- }
390
-
391
- // Get all operations of an extern function
392
- ExtAPI::ExtFunctionOps ExtAPI::getExtFunctionOps(const SVFFunction* extFunction)
393
- {
394
- ExtAPI::ExtFunctionOps extFunctionOps;
395
- extFunctionOps.setExtFunName(extFunction->getName());
396
- if (!is_sameSignature(extFunction))
397
- return extFunctionOps;
398
-
399
- auto it = extFunToOps.find(extFunction->getName());
400
- if (it != extFunToOps.end())
401
- return it->second;
402
-
403
- extFunctionOps.setExtFunName(extFunction->getName());
404
- cJSON* item = get_FunJson(extFunction->getName());
405
- if (item != nullptr)
406
- {
407
- cJSON* obj = item->child;
408
- // Get the first operation of the function
409
- obj = obj->next->next->next->next;
410
- while (obj)
411
- {
412
- ExtOperation operation;
413
- if (obj->type == cJSON_Object || obj->type == cJSON_Array)
414
- {
415
- if (strstr(obj->string, "CallStmt") != NULL)
416
- {
417
- extFunctionOps.setCallStmtNum(extFunctionOps.getCallStmtNum() + 1);
418
- operation.setCallOp(true);
419
- cJSON* value = obj->child;
420
- while (value)
421
- {
422
- if (strcmp(value->string, "callee_name") == 0)
423
- operation.setCalleeName(value->valuestring);
424
- else if (strcmp(value->string, "callee_return") == 0)
425
- operation.setCalleeReturn(value->valuestring);
426
- else if (strcmp(value->string, "callee_arguments") == 0)
427
- operation.setCalleeArguments(value->valuestring);
428
- else
429
- operation.getCalleeOperands().push_back(getBasicOperation(value));
430
- value = value->next;
431
- }
432
- }
433
- else if (strstr(obj->string, "CondStmt") != NULL)
434
- {
435
- operation.setConOp(true);
436
- obj = obj->child;
437
- assert(strcmp(obj->string, "Condition") == 0 && "Unknown operation type");
438
- operation.setConOp(obj->valuestring);
439
- obj = obj->next;
440
- assert(strcmp(obj->string, "TrueBranch") == 0 && "Unknown operation type");
441
- cJSON* value = obj->child;
442
- while (value)
443
- {
444
- operation.getTrueBranchOperands().push_back(getBasicOperation(value));
445
- value = value->next;
446
- }
447
- obj = obj->next;
448
- assert(strcmp(obj->string, "FalseBranch") == 0&& "Unknown operation type");
449
- value = obj->child;
450
- while (value)
451
- {
452
- operation.getFalseBranchOperands().push_back(getBasicOperation(value));
453
- value = value->next;
454
- }
455
- }
456
- else
457
- operation.setBasicOp(getBasicOperation(obj));
458
- }
459
- obj = obj->next;
460
- extFunctionOps.getOperations().push_back(operation);
461
- }
462
- }
463
- extFunToOps[extFunction->getName()] = extFunctionOps;
464
- return extFunctionOps;
465
- }
466
-
467
- // Get arguments of the operation, e.g. ["A1R", "A0", "A2"]
468
- std::vector<std::string> ExtAPI::get_opArgs(const cJSON* value)
469
- {
470
- std::vector<std::string> args;
471
- while (value)
472
- {
473
- if (value->type == cJSON_String)
474
- args.push_back(value->valuestring);
475
- value = value->next;
476
- }
477
- return args;
478
- }
479
-
480
- ExtAPI::extType ExtAPI::get_type(const std::string& funName)
481
- {
482
- cJSON* item = get_FunJson(funName);
483
- std::string type = "";
484
- if (item != nullptr)
485
- {
486
- // Get the first operation of the function
487
- cJSON* obj = item->child->next->next;
488
- if (strcmp(obj->string, JSON_OPT_FUNCTIONTYPE) == 0)
489
- type = obj->valuestring;
490
- else
491
- assert(false && "The function operation format is illegal!");
492
- }
493
- std::map<std::string, extType>::const_iterator it = type_pair.find(type);
494
- if (it == type_pair.end())
495
- return EFT_NULL;
496
- else
497
- return it->second;
498
- }
499
-
500
- // Get property of the operation, e.g. "EFT_A1R_A0R"
501
- ExtAPI::extType ExtAPI::get_type(const SVF::SVFFunction* F)
502
- {
503
- return get_type(get_name(F));
504
- }
505
-
506
- // Get priority of he function, return value
507
- // 0: Apply user-defined functions
508
- // 1: Apply function specification in ExtAPI.json
509
- u32_t ExtAPI::isOverwrittenAppFunction(const SVF::SVFFunction* callee)
510
- {
511
- std::string funName = get_name(callee);
512
- return isOverwrittenAppFunction(funName);
513
- }
514
-
515
- u32_t ExtAPI::isOverwrittenAppFunction(const std::string& funName)
516
- {
517
- cJSON* item = get_FunJson(funName);
518
- if (item != nullptr)
519
- {
520
- cJSON* obj = item->child;
521
- obj = obj->next->next->next;
522
- if (strcmp(obj->string, JSON_OPT_OVERWRITE) == 0)
523
- return obj->valueint;
524
- else
525
- assert(false && "The function operation format is illegal!");
526
- }
527
- return 0;
528
- }
529
-
530
- void ExtAPI::setOverWrittenAppFunction(const std::string& funcName, u32_t overwrite_app_function)
531
- {
532
- auto item = get_FunJson(funcName);
533
- assert(item && "Do not set fields for ExtAPI funcs that don't exist!");
534
- auto overwrite_obj = item->child->next->next->next;
535
- assert(overwrite_obj);
536
- assert(strcmp(overwrite_obj->string, JSON_OPT_OVERWRITE) == 0);
537
- cJSON_SetIntValue(overwrite_obj, overwrite_app_function);
66
+ assert(fun && "Null SVFFunction* pointer");
67
+ const std::vector<std::string>& annotations = fun->getAnnotations();
68
+ for (const std::string& annotation : annotations)
69
+ if (annotation.find(funcAnnotation) != std::string::npos)
70
+ return true;
71
+ return false;
538
72
  }
539
73
 
540
74
  // Does (F) have a static var X (unavailable to us) that its return points to?
541
75
  bool ExtAPI::has_static(const SVFFunction* F)
542
76
  {
543
- ExtAPI::extType t = get_type(F);
544
- return t == EFT_STAT || t == EFT_STAT2;
77
+ return F && hasExtFuncAnnotation(F, "STATIC");
545
78
  }
546
79
 
547
- // Assuming hasStatic(F), does (F) have a second static Y where X -> Y?
548
- bool ExtAPI::has_static2(const SVFFunction* F)
80
+ bool ExtAPI::is_memcpy(const SVFFunction *F)
549
81
  {
550
- ExtAPI::extType t = get_type(F);
551
- return t == EFT_STAT2;
82
+ return F && hasExtFuncAnnotation(F, "MEMCPY");
552
83
  }
553
84
 
554
- bool ExtAPI::is_memset_or_memcpy(const SVFFunction* F)
85
+ bool ExtAPI::is_memset(const SVFFunction *F)
555
86
  {
556
- ExtAPI::extType t = get_type(F);
557
- return t == EFT_L_A0__A0R_A1 || t == EFT_L_A0__A0R_A1R || t == EFT_A1R_A0R || t == EFT_A3R_A1R_NS
558
- || t == EFT_STD_RB_TREE_INSERT_AND_REBALANCE || t == EFT_L_A0__A1_A0;
87
+ return F && hasExtFuncAnnotation(F, "MEMSET");
559
88
  }
560
89
 
561
90
  bool ExtAPI::is_alloc(const SVFFunction* F)
562
91
  {
563
- ExtAPI::extType t = get_type(F);
564
- return t == EFT_ALLOC || t == EFT_NOSTRUCT_ALLOC;
92
+ return F && hasExtFuncAnnotation(F, "ALLOC_RET");
565
93
  }
566
94
 
567
95
  // Does (F) allocate a new object and assign it to one of its arguments?
568
96
  bool ExtAPI::is_arg_alloc(const SVFFunction* F)
569
97
  {
570
- ExtAPI::extType t = get_type(F);
571
- return t == EFT_A0R_NEW || t == EFT_A1R_NEW || t == EFT_A2R_NEW ||
572
- t == EFT_A4R_NEW || t == EFT_A11R_NEW;
98
+ return F && hasExtFuncAnnotation(F, "ALLOC_ARG");
573
99
  }
574
100
 
575
101
  // Get the position of argument which holds the new object
576
102
  s32_t ExtAPI::get_alloc_arg_pos(const SVFFunction* F)
577
103
  {
578
- ExtAPI::extType t = get_type(F);
579
- switch (t)
104
+ std::string s = "ALLOC_ARG";
105
+ std::string allocArg = getExtFuncAnnotation(F, s);
106
+ assert(!allocArg.empty() && "Not an alloc call via argument or incorrect extern function annotation!");
107
+
108
+ std::string number;
109
+ for (char c : allocArg)
580
110
  {
581
- case EFT_A0R_NEW:
582
- return 0;
583
- case EFT_A1R_NEW:
584
- return 1;
585
- case EFT_A2R_NEW:
586
- return 2;
587
- case EFT_A4R_NEW:
588
- return 4;
589
- case EFT_A11R_NEW:
590
- return 11;
591
- default:
592
- assert(false && "Not an alloc call via argument.");
593
- return -1;
111
+ if (isdigit(c))
112
+ number.push_back(c);
594
113
  }
595
- }
596
-
597
- // Does (F) allocate only non-struct objects?
598
- bool ExtAPI::no_struct_alloc(const SVFFunction* F)
599
- {
600
- ExtAPI::extType t = get_type(F);
601
- return t == EFT_NOSTRUCT_ALLOC;
602
- }
603
-
604
- // Does (F) not free/release any memory?
605
- bool ExtAPI::is_dealloc(const SVFFunction* F)
606
- {
607
- ExtAPI::extType t = get_type(F);
608
- return t == EFT_FREE;
609
- }
610
-
611
- // Does (F) not do anything with the known pointers?
612
- bool ExtAPI::is_noop(const SVFFunction* F)
613
- {
614
- ExtAPI::extType t = get_type(F);
615
- return t == EFT_NOOP || t == EFT_FREE;
114
+ assert(!number.empty() && "Incorrect naming convention for svf external functions(ALLOC_ARG + number)?");
115
+ return std::stoi(number);
616
116
  }
617
117
 
618
118
  // Does (F) reallocate a new object?
619
119
  bool ExtAPI::is_realloc(const SVFFunction* F)
620
120
  {
621
- ExtAPI::extType t = get_type(F);
622
- return t == EFT_REALLOC;
121
+ return F && hasExtFuncAnnotation(F, "REALLOC_RET");
623
122
  }
624
123
 
625
- // Does (F) have the same return type(pointer or nonpointer) and same number of
626
- // arguments
627
- bool ExtAPI::is_sameSignature(const SVFFunction* F)
628
- {
629
- cJSON* item = get_FunJson(F->getName());
630
- // If return type is pointer
631
- bool isPointer = false;
632
- // The number of arguments
633
- u32_t argNum = 0;
634
- if (item != nullptr)
635
- {
636
- // Get the "return" attribute
637
- cJSON* obj = item->child;
638
- if (strlen(obj->valuestring) == 0) // e.g. "return": ""
639
- assert(false && "'return' should not be empty!");
640
- // If "return": "..." includes "*", the return type of extern function is a pointer
641
- if (strstr(obj->valuestring, "*") != NULL)
642
- isPointer = true;
643
- // Get the "arguments" attribute
644
- obj = obj->next;
645
- if (strlen(obj->valuestring) == 0) // e.g. "arguments": "",
646
- assert(false && "'arguments' should not be empty!");
647
- // If "arguments": "()", the number of arguments is 0, otherwise, number >= 1;
648
- if (strcmp(obj->valuestring, "()") != 0)
649
- {
650
- argNum++;
651
- for (u32_t i = 0; i < strlen(obj->valuestring); i++)
652
- if (obj->valuestring[i] == ',') // Calculate the number of arguments based on the number of ","
653
- argNum++;
654
- }
655
- }
656
-
657
- if ( !F->isVarArg() && F->arg_size() != argNum) // The number of arguments is different
658
- return false;
659
- // Is the return type the same?
660
- return F->getReturnType()->isPointerTy() == isPointer;
661
- }
662
124
 
663
125
  // Should (F) be considered "external" (either not defined in the program
664
126
  // or a user-defined version of a known alloc or no-op)?
665
127
  bool ExtAPI::is_ext(const SVFFunction* F)
666
128
  {
667
129
  assert(F && "Null SVFFunction* pointer");
668
- bool res;
669
130
  if (F->isDeclaration() || F->isIntrinsic())
670
- {
671
- res = 1;
672
- }
131
+ return true;
673
132
  else
674
- {
675
- ExtAPI::extType t = get_type(F);
676
- if (t != EFT_NULL)
677
- {
678
- u32_t overwrittenAppFunction = isOverwrittenAppFunction(F);
679
- if (!is_sameSignature(F))
680
- res = 0;
681
- // overwrittenAppFunction = 1: Execute function specification in
682
- // ExtAPI.json F is considered as external function
683
- else if (overwrittenAppFunction == 1)
684
- res = 1;
685
- // overwrittenAppFunction = 0: Execute user-defined functions
686
- // F is not considered as external function
687
- else
688
- res = 0;
689
- }
690
- else
691
- res = 0;
692
- }
693
- return res;
694
- }
133
+ return hasExtFuncAnnotation(F, "SVF");
134
+ return false;
135
+ }