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
@@ -772,7 +772,7 @@ const Option<bool> Options::VtableInSVFIR(
772
772
 
773
773
  //WPAPass.cpp
774
774
  const Option<std::string> Options::ExtAPIInput(
775
- "extapi", "External API ext.bc", ""
775
+ "extapi", "External API extapi.bc", std::string(EXTAPI_PATH) + "/extapi.bc"
776
776
  );
777
777
 
778
778
  const Option<bool> Options::AnderSVFG(
@@ -51,14 +51,12 @@ const std::map<GenericBug::BugType, std::string> GenericBug::BugType2Str =
51
51
  const std::string GenericBug::getLoc() const
52
52
  {
53
53
  const SVFBugEvent&sourceInstEvent = bugEventStack.at(bugEventStack.size() -1);
54
- assert(sourceInstEvent.getEventType() == SVFBugEvent::SourceInst && "bugEventStack top should be a SourceInst event");
55
54
  return sourceInstEvent.getEventLoc();
56
55
  }
57
56
 
58
57
  const std::string GenericBug::getFuncName() const
59
58
  {
60
59
  const SVFBugEvent&sourceInstEvent = bugEventStack.at(bugEventStack.size() -1);
61
- assert(sourceInstEvent.getEventType() == SVFBugEvent::SourceInst && "bugEventStack top should be a SourceInst event");
62
60
  return sourceInstEvent.getFuncName();
63
61
  }
64
62
 
@@ -34,6 +34,7 @@
34
34
  #include "Util/CppUtil.h"
35
35
  #include "SVFIR/SVFValue.h"
36
36
  #include "SVFIR/SVFModule.h"
37
+ #include "Util/Options.h"
37
38
 
38
39
  namespace SVF
39
40
  {
@@ -74,6 +75,8 @@ private:
74
75
  FunDeclToDefMapTy FunDeclToDefMap;
75
76
  /// Function definition to function declaration map
76
77
  FunDefToDeclsMapTy FunDefToDeclsMap;
78
+ /// Record some "sse_" function declarations used in other ext function definition, e.g., svf_ext_foo(), and svf_ext_foo() used in app functions
79
+ FunctionSetType ExtFuncsVec;
77
80
  /// Global definition to a rep definition map
78
81
  GlobalDefToRepMapTy GlobalDefToRepMap;
79
82
 
@@ -233,6 +236,20 @@ public:
233
236
 
234
237
  SVFOtherValue* getSVFOtherValue(const Value* ov);
235
238
 
239
+ /// Remove unused function in extapi.bc module
240
+ bool isUsedExtFunction(Function* func)
241
+ {
242
+ /// if this function func defined in extapi.bc but never used in application code (without any corresponding declared functions).
243
+ if (func->getParent()->getName().str() == Options::ExtAPIInput()
244
+ && func->getName().str() != "svf__main"
245
+ && FunDefToDeclsMap.find(func) == FunDefToDeclsMap.end()
246
+ && std::find(ExtFuncsVec.begin(), ExtFuncsVec.end(), func) == ExtFuncsVec.end())
247
+ {
248
+ return true;
249
+ }
250
+ return false;
251
+ }
252
+
236
253
  /// Get the corresponding Function based on its name
237
254
  inline const SVFFunction* getSVFFunction(const std::string& name)
238
255
  {
@@ -34,7 +34,6 @@
34
34
  #include "SVF-LLVM/BasicTypes.h"
35
35
  #include "SVF-LLVM/LLVMModule.h"
36
36
  #include "SVFIR/SVFValue.h"
37
- #include "Util/ExtAPI.h"
38
37
  #include "Util/ThreadAPI.h"
39
38
 
40
39
  namespace SVF
@@ -373,6 +372,20 @@ const std::string getSourceLocOfFunction(const Function* F);
373
372
  bool isIntrinsicInst(const Instruction* inst);
374
373
  bool isIntrinsicFun(const Function* func);
375
374
 
375
+ /// Get all called funcions in a parent function
376
+ std::vector<const Function *> getCalledFunctions(const Function *F);
377
+ std::vector<std::string> getFunAnnotations(const Function* fun);
378
+ void removeFunAnnotations(std::vector<Function*>& removedFuncList);
379
+
380
+ inline void removeUnusedFuncsAndAnnotations(std::vector<Function*> removedFuncList)
381
+ {
382
+ /// Remove unused function annotations in extapi.bc
383
+ LLVMUtil::removeFunAnnotations(removedFuncList);
384
+ /// Remove unused function in extapi.bc
385
+ for (Function* func : removedFuncList)
386
+ func->eraseFromParent();
387
+ }
388
+
376
389
  /// Get the corresponding Function based on its name
377
390
  inline const SVFFunction* getFunction(const std::string& name)
378
391
  {
@@ -31,10 +31,10 @@
31
31
  #define PAGBUILDER_H_
32
32
 
33
33
  #include "SVFIR/SVFIR.h"
34
- #include "Util/ExtAPI.h"
35
34
  #include "SVF-LLVM/BasicTypes.h"
36
35
  #include "SVF-LLVM/ICFGBuilder.h"
37
36
  #include "SVF-LLVM/LLVMModule.h"
37
+ #include "SVF-LLVM/LLVMUtil.h"
38
38
 
39
39
  namespace SVF
40
40
  {
@@ -232,18 +232,9 @@ protected:
232
232
 
233
233
  /// Handle external call
234
234
  //@{
235
- virtual SVFCallInst* addSVFExtCallInst(const SVFCallInst* svfInst, SVFBasicBlock* svfBB, const SVFFunction* svfCaller, const SVFFunction* svfCallee);
236
- virtual void addSVFExtRetInst(SVFCallInst* svfCall, SVFBasicBlock* svfBB, SVFFunction* svfCaller);
237
- virtual SVFInstruction* addSVFExtInst(const std::string& instName, const SVFCallInst* svfInst, SVFBasicBlock* svfBB, SVF::ExtAPI::OperationType opType, const SVFType* svfType);
238
- virtual void extFuncAtomaticOperation(ExtAPI::Operand& atomicOp, const SVFCallInst* svfInst);
239
- virtual SVFBasicBlock* extFuncInitialization(const SVFCallInst* svfInst, SVFFunction* svfCaller);
240
- virtual void handleExtCallStat(ExtAPI::ExtFunctionOps &extFunctionOps, const SVFCallInst* svfInst);
241
- virtual NodeID getExtID(ExtAPI::OperationType operationType, const std::string &s, const SVFCallInst* svfCall);
242
- virtual void parseAtomaticOp(SVF::ExtAPI::Operand &atomaticOp, const SVFCallInst* svfCall, std::map<std::string, NodeID> &nodeIDMap);
243
- virtual void parseExtFunctionOps(ExtAPI::ExtFunctionOps &extFunctionOps, const SVFCallInst* svfCall);
244
- virtual void preProcessExtCall(CallBase* cs);
245
- virtual void handleExtCall(const SVFInstruction* svfInst, const SVFFunction* svfCallee);
246
- void addComplexConsForExt(const SVFValue* D, const SVFValue* S, const SVFValue* sz);
235
+ virtual const Type *getBaseTypeAndFlattenedFields(const Value *V, std::vector<AccessPath> &fields, const Value* szValue);
236
+ virtual void addComplexConsForExt(Value *D, Value *S, const Value* sz);
237
+ virtual void handleExtCall(const CallBase* cs, const SVFFunction* svfCallee);
247
238
  //@}
248
239
 
249
240
  /// Set current basic block in order to keep track of control flow information
@@ -287,7 +278,7 @@ protected:
287
278
  return nullPtr;
288
279
  }
289
280
 
290
- NodeID getGepValVar(const SVFValue* val, const AccessPath& ap, const SVFType* baseType);
281
+ NodeID getGepValVar(const Value* val, const AccessPath& ap, const SVFType* elementType);
291
282
 
292
283
  void setCurrentBBAndValueForPAGEdge(PAGEdge* edge);
293
284
 
@@ -29,7 +29,6 @@
29
29
 
30
30
  #include <queue>
31
31
  #include <algorithm>
32
- #include "Util/Options.h"
33
32
  #include "SVFIR/SVFModule.h"
34
33
  #include "Util/SVFUtil.h"
35
34
  #include "SVF-LLVM/BasicTypes.h"
@@ -153,48 +152,27 @@ void LLVMModuleSet::build()
153
152
  void LLVMModuleSet::createSVFDataStructure()
154
153
  {
155
154
  getSVFType(IntegerType::getInt8Ty(getContext()));
156
- Set<const Function*> candidateDecls;
157
- Set<const Function*> candidateDefs;
158
-
155
+ // Functions need to be retrieved in the order of insertion
156
+ std::vector<const Function*> candidateFuncs;
159
157
  for (Module& mod : modules)
160
158
  {
161
159
  std::vector<Function*> removedFuncList;
162
160
  /// Function
163
161
  for (Function& func : mod.functions())
164
162
  {
165
- if (func.isDeclaration())
163
+ if (isUsedExtFunction(&func))
166
164
  {
167
- /// if this function is declaration
168
- candidateDecls.insert(&func);
165
+ removedFuncList.push_back(&func);
169
166
  }
170
167
  else
171
168
  {
172
- /// if this function is definition
173
- if (mod.getName().str() == Options::ExtAPIInput() && FunDefToDeclsMap[&func].empty() && func.getName().str() != "svf__main")
174
- {
175
- /// if this function func defined in ExtAPI but never used in application code (without any corresponding declared functions).
176
- removedFuncList.push_back(&func);
177
- continue;
178
- }
179
- else
180
- {
181
- /// if this function is in app bc, any def func should be added.
182
- /// if this function is in ext bc, only functions which have declarations(should be used by app bc) can be inserted.
183
- candidateDefs.insert(&func);
184
- }
169
+ candidateFuncs.push_back(&func);
185
170
  }
186
171
  }
187
- for (Function* func : removedFuncList)
188
- {
189
- mod.getFunctionList().remove(func);
190
- }
191
- }
192
- for (const Function* func: candidateDefs)
193
- {
194
- createSVFFunction(func);
172
+ /// Remove unused functions and annotations in extapi.bc
173
+ LLVMUtil::removeUnusedFuncsAndAnnotations(removedFuncList);
195
174
  }
196
-
197
- for (const Function* func: candidateDecls)
175
+ for (const Function* func: candidateFuncs)
198
176
  {
199
177
  createSVFFunction(func);
200
178
  }
@@ -238,7 +216,7 @@ void LLVMModuleSet::createSVFFunction(const Function* func)
238
216
  SVFUtil::cast<SVFFunctionType>(
239
217
  getSVFType(func->getFunctionType())),
240
218
  func->isDeclaration(), LLVMUtil::isIntrinsicFun(func),
241
- func->hasAddressTaken(), func->isVarArg(), new SVFLoopAndDomInfo);
219
+ func->hasAddressTaken(), func->isVarArg(), new SVFLoopAndDomInfo, LLVMUtil::getFunAnnotations(func));
242
220
  svfFunc->setName(func->getName().str());
243
221
  svfModule->addFunctionSet(svfFunc);
244
222
  addFunctionMap(func, svfFunc);
@@ -553,8 +531,10 @@ void LLVMModuleSet::loadExtAPIModules()
553
531
  Err.print("SVFModuleLoader", llvm::errs());
554
532
  abort();
555
533
  }
556
- modules.emplace_back(*mod);
557
- owned_modules.emplace_back(std::move(mod));
534
+ // The module of extapi.bc needs to be inserted before applications modules, like std::vector<std::reference_wrapper<Module>> modules{extapi_module, app_module}.
535
+ // Otherwise, when overwriting the app function with SVF extern function, the corresponding SVFFunction of the extern function will not be found.
536
+ modules.insert(modules.begin(), *mod);
537
+ owned_modules.insert(owned_modules.begin(),std::move(mod));
558
538
  }
559
539
  }
560
540
 
@@ -741,28 +721,111 @@ void LLVMModuleSet::addSVFMain()
741
721
  }
742
722
  }
743
723
 
744
-
724
+ /*
725
+ For a more detailed explanation of the Function declaration and definition mapping relationships and how External APIs are handled,
726
+ please refer to the SVF Wiki: https://github.com/SVF-tools/SVF/wiki/Handling-External-APIs-with-extapi.c
727
+
728
+ Table 1
729
+ | ------- | ----------------- | --------------- | ----------------- | ----------- |
730
+ | | AppDef | AppDecl | ExtDef | ExtDecl |
731
+ | ------- | ----------------- | --------------- | ----------------- | ----------- |
732
+ | AppDef | X | FunDefToDeclsMap| FunDeclToDefMap | X |
733
+ | ------- | ----------------- | --------------- | ----------------- | ----------- |
734
+ | AppDecl | FunDeclToDefMap | X | FunDeclToDefMap | X |
735
+ | ------- | ----------------- | --------------- | ----------------- | ----------- |
736
+ | ExtDef | FunDefToDeclsMap | FunDefToDeclsMap| X | X |
737
+ | ------- | ----------------- | --------------- | ----------------- | ----------- |
738
+ | ExtDecl | FunDeclToDefMap | X | X | ExtFuncsVec |
739
+ | ------- | ----------------- | --------------- | ----------------- | ----------- |
740
+
741
+ When a user wants to use functions in extapi.c to overwrite the functions defined in the app code, two relationships, "AppDef -> ExtDef" and "ExtDef -> AppDef," are used.
742
+ Use Ext function definition to override the App function definition (Ext function with "__attribute__((annotate("OVERWRITE")))" in extapi.c).
743
+ The app function definition will be changed to an app function declaration.
744
+ Then, put the app function declaration and its corresponding Ext function definition into FunDeclToDefMap/FunDefToDeclsMap.
745
+ ------------------------------------------------------
746
+ AppDef -> ExtDef (overwrite):
747
+ For example,
748
+ App function:
749
+ char* foo(char *a, char *b){return a;}
750
+ Ext function:
751
+ __attribute__((annotate("OVERWRITE")))
752
+ char* foo(char *a, char *b){return b;}
753
+
754
+ When SVF handles the foo function in the App module,
755
+ the definition of
756
+ foo: char* foo(char *a, char *b){return a;}
757
+ will be changed to a declaration
758
+ foo: char* foo(char *a, char *b);
759
+ Then,
760
+ foo: char* foo(char *a, char *b);
761
+ and
762
+ __attribute__((annotate("OVERWRITE")))
763
+ char* foo(char *a, char *b){return b;}
764
+ will be put into FunDeclToDefMap
765
+ ------------------------------------------------------
766
+ ExtDef -> AppDef (overwrite):
767
+ __attribute__((annotate("OVERWRITE")))
768
+ char* foo(char *a, char *b){return b;}
769
+ and
770
+ foo: char* foo(char *a, char *b);
771
+ are put into FunDefToDeclsMap;
772
+ ------------------------------------------------------
773
+ In principle, all functions in extapi.c have bodies (definitions), but some functions (those starting with "sse_")
774
+ have only function declarations without definitions. ExtFuncsVec is used to record function declarations starting with "sse_" that are used.
775
+
776
+ ExtDecl -> ExtDecl:
777
+ For example,
778
+ App function:
779
+ foo(){call memcpy();}
780
+ Ext function:
781
+ declare sse_check_overflow();
782
+ memcpy(){sse_check_overflow();}
783
+
784
+ sse_check_overflow() used in the Ext function but not in the App function.
785
+ sse_check_overflow should be kept in ExtFuncsVec.
786
+ */
745
787
  void LLVMModuleSet::buildFunToFunMap()
746
788
  {
747
- Set<const Function*> funDecls, funDefs;
789
+ Set<const Function*> funDecls, funDefs, extFuncs, overwriteExtFuncs;
748
790
  OrderedSet<string> declNames, defNames, intersectNames;
749
791
  typedef Map<string, const Function*> NameToFunDefMapTy;
750
792
  typedef Map<string, Set<const Function*>> NameToFunDeclsMapTy;
751
793
 
752
794
  for (Module& mod : modules)
753
795
  {
754
- /// Function
755
- for (const Function& fun : mod.functions())
796
+ // extapi.bc functions
797
+ if (mod.getName().str() == Options::ExtAPIInput())
756
798
  {
757
- if (fun.isDeclaration())
799
+ for (const Function& fun : mod.functions())
758
800
  {
759
- funDecls.insert(&fun);
760
- declNames.insert(fun.getName().str());
801
+ extFuncs.insert(&fun);
802
+ // Find overwrite functions in extapi.bc
803
+ std::vector<std::string> annotations = LLVMUtil::getFunAnnotations(&fun);
804
+ auto it = std::find_if(annotations.begin(), annotations.end(), [&](const std::string& annotation)
805
+ {
806
+ return annotation.find("OVERWRITE") != std::string::npos;
807
+ });
808
+ if (it != annotations.end())
809
+ {
810
+ overwriteExtFuncs.insert(&fun);
811
+ }
761
812
  }
762
- else
813
+ }
814
+ else
815
+ {
816
+ /// app functions
817
+ for (const Function& fun : mod.functions())
763
818
  {
764
- funDefs.insert(&fun);
765
- defNames.insert(fun.getName().str());
819
+ if (fun.isDeclaration())
820
+ {
821
+ funDecls.insert(&fun);
822
+ declNames.insert(fun.getName().str());
823
+ }
824
+ else
825
+ {
826
+ funDefs.insert(&fun);
827
+ defNames.insert(fun.getName().str());
828
+ }
766
829
  }
767
830
  }
768
831
  }
@@ -827,6 +890,57 @@ void LLVMModuleSet::buildFunToFunMap()
827
890
  decls.push_back(decl);
828
891
  }
829
892
  }
893
+
894
+ /// App Func decl -> SVF extern Func def
895
+ for (const Function* fdecl : funDecls)
896
+ {
897
+ for (const Function* extfun : extFuncs)
898
+ {
899
+ std::string declName = fdecl->getName().str();
900
+ // Since C function names cannot include '.', change the function name from llvm.memcpy.p0i8.p0i8.i64 to llvm_memcpy_p0i8_p0i8_i64."
901
+ std::replace(declName.begin(), declName.end(), '.', '_');
902
+ if (extfun->getName().str().compare(declName) == 0)
903
+ {
904
+ // AppDecl -> ExtDef in Table 1
905
+ FunDeclToDefMap[fdecl] = extfun;
906
+ // ExtDef -> AppDecl in Table 1
907
+ std::vector<const Function*>& decls = FunDefToDeclsMap[extfun];
908
+ decls.push_back(fdecl);
909
+ // Keep all called functions in extfun
910
+ // ExtDecl -> ExtDecl in Table 1
911
+ ExtFuncsVec = LLVMUtil::getCalledFunctions(extfun);
912
+ }
913
+ }
914
+ }
915
+
916
+ /// Overwrite
917
+ /// App Func def -> SVF extern Func def
918
+ for (const Function* appfunc : funDefs)
919
+ {
920
+ for (const Function* owfunc : overwriteExtFuncs)
921
+ {
922
+ if (appfunc->getName().str().compare(owfunc->getName().str()) == 0)
923
+ {
924
+ Function* fun = const_cast<Function*>(appfunc);
925
+ Module* mod = fun->getParent();
926
+ FunctionType* funType = fun->getFunctionType();
927
+ std::string funName = fun->getName().str();
928
+ // Replace app function definition with declaration
929
+ Function* declaration = Function::Create(funType, GlobalValue::ExternalLinkage, funName, mod);
930
+ fun->replaceAllUsesWith(declaration);
931
+ fun->eraseFromParent();
932
+ declaration->setName(funName);
933
+ // AppDef -> ExtDef in Table 1, AppDef has been changed to AppDecl
934
+ FunDeclToDefMap[declaration] = owfunc;
935
+ // ExtDef -> AppDef in Table 1
936
+ std::vector<const Function*>& decls = FunDefToDeclsMap[owfunc];
937
+ decls.push_back(declaration);
938
+ // Keep all called functions in owfunc
939
+ // ExtDecl -> ExtDecl in Table 1
940
+ ExtFuncsVec = LLVMUtil::getCalledFunctions(owfunc);
941
+ }
942
+ }
943
+ }
830
944
  }
831
945
 
832
946
  void LLVMModuleSet::buildGlobalDefToRepMap()
@@ -443,6 +443,127 @@ void LLVMUtil::processArguments(int argc, char **argv, int &arg_num, char **arg_
443
443
  }
444
444
  }
445
445
 
446
+ std::vector<std::string> LLVMUtil::getFunAnnotations(const Function* fun)
447
+ {
448
+ std::vector<std::string> annotations;
449
+ // Get annotation variable
450
+ GlobalVariable *glob = fun->getParent()->getGlobalVariable("llvm.global.annotations");
451
+ if (glob == nullptr || !glob->hasInitializer())
452
+ return annotations;
453
+
454
+ ConstantArray *ca = SVFUtil::dyn_cast<ConstantArray>(glob->getInitializer());
455
+ if (ca == nullptr)
456
+ return annotations;
457
+
458
+ for (unsigned i = 0; i < ca->getNumOperands(); ++i)
459
+ {
460
+ ConstantStruct *structAn = SVFUtil::dyn_cast<ConstantStruct>(ca->getOperand(i));
461
+ if (structAn == nullptr)
462
+ continue;
463
+
464
+ ConstantExpr *expr = SVFUtil::dyn_cast<ConstantExpr>(structAn->getOperand(0));
465
+ if (expr == nullptr || expr->getOpcode() != Instruction::BitCast || expr->getOperand(0) != fun)
466
+ continue;
467
+
468
+ ConstantExpr *note = SVFUtil::cast<ConstantExpr>(structAn->getOperand(1));
469
+ if (note->getOpcode() != Instruction::GetElementPtr)
470
+ continue;
471
+
472
+ GlobalVariable *annotateStr = SVFUtil::dyn_cast<GlobalVariable>(note->getOperand(0));
473
+ if (annotateStr == nullptr || !annotateStr->hasInitializer())
474
+ continue;
475
+
476
+ ConstantDataSequential *data = SVFUtil::dyn_cast<ConstantDataSequential>(annotateStr->getInitializer());
477
+ if (data->isString())
478
+ {
479
+ std::string annotation = data->getAsString().str();
480
+ if (!annotation.empty())
481
+ annotations.push_back(annotation);
482
+ }
483
+ }
484
+ return annotations;
485
+ }
486
+
487
+ void LLVMUtil::removeFunAnnotations(std::vector<Function*>& removedFuncList)
488
+ {
489
+ if (removedFuncList.empty())
490
+ return; // No functions to remove annotations in extapi.bc module
491
+
492
+ Module* module = removedFuncList[0]->getParent();
493
+ GlobalVariable* glob = module->getGlobalVariable("llvm.global.annotations");
494
+ if (glob == nullptr || !glob->hasInitializer())
495
+ return;
496
+
497
+ ConstantArray* ca = SVFUtil::dyn_cast<ConstantArray>(glob->getInitializer());
498
+ if (ca == nullptr)
499
+ return;
500
+
501
+ std::vector<Constant*> newAnnotations;
502
+ for (unsigned i = 0; i < ca->getNumOperands(); ++i)
503
+ {
504
+ ConstantStruct* structAn = SVFUtil::dyn_cast<ConstantStruct>(ca->getOperand(i));
505
+ if (structAn == nullptr)
506
+ continue;
507
+
508
+ ConstantExpr* expr = SVFUtil::dyn_cast<ConstantExpr>(structAn->getOperand(0));
509
+ if (expr == nullptr || expr->getOpcode() != Instruction::BitCast)
510
+ {
511
+ // Keep the annotation if it's not created using BitCast
512
+ newAnnotations.push_back(structAn);
513
+ continue;
514
+ }
515
+
516
+ Function* annotatedFunc = SVFUtil::dyn_cast<Function>(expr->getOperand(0));
517
+ if (annotatedFunc == nullptr || std::find(removedFuncList.begin(), removedFuncList.end(), annotatedFunc) != removedFuncList.end())
518
+ continue;
519
+
520
+ // Keep the annotation for all other functions
521
+ newAnnotations.push_back(structAn);
522
+ }
523
+
524
+ if (newAnnotations.size() == ca->getNumOperands())
525
+ return; // No annotations to remove
526
+
527
+ ArrayType* annotationsType = ArrayType::get(ca->getType()->getElementType(), newAnnotations.size());
528
+ Constant* newCA = ConstantArray::get(annotationsType, newAnnotations);
529
+
530
+ // Check if a global variable with the name llvm.global.annotations already exists
531
+ GlobalVariable* existingGlobal = module->getGlobalVariable("llvm.global.annotations");
532
+ if (existingGlobal)
533
+ // Rename the existing llvm.global.annotations to llvm.global.annotations_old
534
+ existingGlobal->setName("llvm.global.annotations_old");
535
+
536
+ // Create a new global variable with the updated annotations
537
+ GlobalVariable* newGlobal = new GlobalVariable(*module, newCA->getType(), glob->isConstant(),
538
+ glob->getLinkage(), newCA, "llvm.global.annotations", glob, glob->getThreadLocalMode());
539
+
540
+ // Copy other properties from the old global variable to the new one
541
+ newGlobal->setSection(glob->getSection());
542
+ newGlobal->setAlignment(llvm::MaybeAlign(glob->getAlignment()));
543
+
544
+ // Remove the old global variable
545
+ glob->eraseFromParent();
546
+ }
547
+
548
+ /// Get all called funcions in a parent function
549
+ std::vector<const Function *> LLVMUtil::getCalledFunctions(const Function *F)
550
+ {
551
+ std::vector<const Function *> calledFunctions;
552
+ for (const Instruction &I : instructions(F))
553
+ {
554
+ if (const CallBase *callInst = SVFUtil::dyn_cast<CallBase>(&I))
555
+ {
556
+ Function *calledFunction = callInst->getCalledFunction();
557
+ if (calledFunction)
558
+ {
559
+ calledFunctions.push_back(calledFunction);
560
+ std::vector<const Function *> nestedCalledFunctions = getCalledFunctions(calledFunction);
561
+ calledFunctions.insert(calledFunctions.end(), nestedCalledFunctions.begin(), nestedCalledFunctions.end());
562
+ }
563
+ }
564
+ }
565
+ return calledFunctions;
566
+ }
446
567
 
447
568
  u32_t LLVMUtil::getTypeSizeInBytes(const Type* type)
448
569
  {
@@ -470,7 +470,7 @@ NodeID SVFIRBuilder::getGlobalVarField(const GlobalVariable *gvar, u32_t offset,
470
470
  /// then we need to create a gep node for this field
471
471
  else
472
472
  {
473
- return getGepValVar(LLVMModuleSet::getLLVMModuleSet()->getSVFValue(gvar), AccessPath(offset), tpy);
473
+ return getGepValVar(gvar, AccessPath(offset), tpy);
474
474
  }
475
475
  }
476
476
 
@@ -847,9 +847,7 @@ void SVFIRBuilder::visitCallSite(CallBase* cs)
847
847
  const SVFFunction* svfcallee = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(callee);
848
848
  if (isExtCall(svfcallee))
849
849
  {
850
- // There is no extpag for the function, use the old method.
851
- preProcessExtCall(cs);
852
- handleExtCall(svfcall, svfcallee);
850
+ handleExtCall(cs, svfcallee);
853
851
  }
854
852
  else
855
853
  {
@@ -1115,73 +1113,6 @@ const Value* SVFIRBuilder::getBaseValueForExtArg(const Value* V)
1115
1113
  return value;
1116
1114
  }
1117
1115
 
1118
- void SVFIRBuilder::preProcessExtCall(CallBase* cs)
1119
- {
1120
- const SVFInstruction* svfinst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(cs);
1121
- const SVFCallInst* svfcall = SVFUtil::cast<SVFCallInst>(svfinst);
1122
- /// Currently focusing on providing specialized treatment for the extern function void *dlsym(void *handle, const char *funname)
1123
- /// and generalization will be done later.
1124
- if (svfcall->getCalledFunction()->getName() == "dlsym")
1125
- {
1126
- const Value* src = cs->getArgOperand(1);
1127
- if(const GetElementPtrInst* gep = SVFUtil::dyn_cast<GetElementPtrInst>(src))
1128
- src = stripConstantCasts(gep->getPointerOperand());
1129
-
1130
- auto getHookFn = [](const Value* src)->const Function*
1131
- {
1132
- if (!SVFUtil::isa<GlobalVariable>(src))
1133
- return nullptr;
1134
-
1135
- auto *glob = SVFUtil::cast<GlobalVariable>(src);
1136
- if (!glob->hasInitializer() || !SVFUtil::isa<ConstantDataArray>(glob->getInitializer()))
1137
- return nullptr;
1138
-
1139
- auto *constarray = SVFUtil::cast<ConstantDataArray>(glob->getInitializer());
1140
- return LLVMUtil::getProgFunction(constarray->getAsCString().str());
1141
- };
1142
-
1143
- if (const Function *fn = getHookFn(src))
1144
- {
1145
- NodeID srcNode = getValueNode(fn);
1146
- addCopyEdge(srcNode, getValueNode(cs));
1147
- }
1148
- return;
1149
- }
1150
- /// Preprocess the arguments of functions such as memset() and memcpy() that involve arrays or structures,
1151
- /// and identify the original data types of these arguments, flattening each subfield.
1152
- if (isMemSetOrCpyExtFun(svfcall->getCalledFunction()))
1153
- {
1154
- for (u32_t i = 0; i < cs->arg_size(); i++)
1155
- {
1156
- const Type* T = getBaseValueForExtArg(cs->getArgOperand(i))->getType();
1157
- while (const PointerType *ptype = SVFUtil::dyn_cast<PointerType>(T))
1158
- T = getPtrElementType(ptype);
1159
- const SVFType *st = LLVMModuleSet::getLLVMModuleSet()->getSVFType(T);
1160
- std::vector<AccessPath> fields;
1161
- u32_t numOfElems = pag->getSymbolInfo()->getNumOfFlattenElements(st);
1162
- LLVMContext& context = LLVMModuleSet::getLLVMModuleSet()->getContext();
1163
- for(u32_t ei = 0; ei < numOfElems; ei++)
1164
- {
1165
- AccessPath ap(ei);
1166
- // make a ConstantInt and create char for the content type due to byte-wise copy
1167
- const ConstantInt* offset = ConstantInt::get(context, llvm::APInt(32, ei));
1168
- const SVFValue* svfOffset = LLVMModuleSet::getLLVMModuleSet()->getSVFValue(offset);
1169
- if (!pag->getSymbolInfo()->hasValSym(svfOffset))
1170
- {
1171
- SymbolTableBuilder builder(pag->getSymbolInfo());
1172
- builder.collectSym(offset);
1173
- pag->addValNode(svfOffset, pag->getSymbolInfo()->getValSym(svfOffset));
1174
- }
1175
- ap.addOffsetVarAndGepTypePair(getPAG()->getGNode(getPAG()->getValueNode(svfOffset)), nullptr);
1176
- fields.push_back(ap);
1177
- }
1178
- NodeID argId = pag->getValueNode(svfcall->getArgOperand(i));
1179
- std::pair<const SVFType*, std::vector<AccessPath>> pairToInsert = std::make_pair(st, fields);
1180
- pag->addToTypeLocSetsMap(argId, pairToInsert);
1181
- }
1182
- }
1183
- }
1184
-
1185
1116
  /*!
1186
1117
  * Indirect call is resolved on-the-fly during pointer analysis
1187
1118
  */
@@ -1211,9 +1142,8 @@ void SVFIRBuilder::updateCallGraph(PTACallGraph* callgraph)
1211
1142
  if (isExtCall(*func_iter))
1212
1143
  {
1213
1144
  setCurrentLocation(callee, callee->empty() ? nullptr : &callee->getEntryBlock());
1214
- SVFInstruction* svfinst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(callbase);
1215
1145
  const SVFFunction* svfcallee = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(callee);
1216
- handleExtCall(svfinst, svfcallee);
1146
+ handleExtCall(callbase, svfcallee);
1217
1147
  }
1218
1148
  else
1219
1149
  {
@@ -1257,9 +1187,9 @@ void SVFIRBuilder::sanityCheck()
1257
1187
  * Add a temp field value node according to base value and offset
1258
1188
  * this node is after the initial node method, it is out of scope of symInfo table
1259
1189
  */
1260
- NodeID SVFIRBuilder::getGepValVar(const SVFValue* val, const AccessPath& ap, const SVFType* elementType)
1190
+ NodeID SVFIRBuilder::getGepValVar(const Value* val, const AccessPath& ap, const SVFType* elementType)
1261
1191
  {
1262
- NodeID base = pag->getBaseValVar(pag->getValueNode(val));
1192
+ NodeID base = pag->getBaseValVar(getValueNode(val));
1263
1193
  NodeID gepval = pag->getGepValVar(curVal, base, ap);
1264
1194
  if (gepval==UINT_MAX)
1265
1195
  {
@@ -1279,7 +1209,8 @@ NodeID SVFIRBuilder::getGepValVar(const SVFValue* val, const AccessPath& ap, con
1279
1209
  const SVFValue* cval = getCurrentValue();
1280
1210
  const SVFBasicBlock* cbb = getCurrentBB();
1281
1211
  setCurrentLocation(curVal, nullptr);
1282
- NodeID gepNode= pag->addGepValNode(curVal, val, ap, NodeIDAllocator::get()->allocateValueId(),elementType->getPointerTo());
1212
+ LLVMModuleSet* llvmmodule = LLVMModuleSet::getLLVMModuleSet();
1213
+ NodeID gepNode= pag->addGepValNode(curVal, llvmmodule->getSVFValue(val),ap, NodeIDAllocator::get()->allocateValueId(),elementType->getPointerTo());
1283
1214
  addGepEdge(base, gepNode, ap, true);
1284
1215
  setCurrentLocation(cval, cbb);
1285
1216
  return gepNode;