svf-lib 1.0.2319 → 1.0.2321

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 (320) hide show
  1. package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/WorkList.h +0 -0
  2. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/Modules/FindZ3.cmake +93 -0
  3. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFConfig.cmake +106 -0
  4. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFConfigVersion.cmake +43 -0
  5. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFTargets-release.cmake +101 -0
  6. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFTargets.cmake +180 -0
  7. package/SVF-linux-aarch64/Release-build/lib/libSvfCore.so.3.1 +0 -0
  8. package/SVF-linux-aarch64/Release-build/lib/libSvfLLVM.so.3.1 +0 -0
  9. package/SVF-linux-aarch64/Release-build/lib/pkgconfig/SVF.pc +12 -0
  10. package/SVF-osx/Release-build/bin/ae +0 -0
  11. package/SVF-osx/Release-build/bin/cfl +0 -0
  12. package/SVF-osx/Release-build/bin/dvf +0 -0
  13. package/SVF-osx/Release-build/bin/llvm2svf +0 -0
  14. package/SVF-osx/Release-build/bin/mta +0 -0
  15. package/SVF-osx/Release-build/bin/saber +0 -0
  16. package/SVF-osx/Release-build/bin/svf-ex +0 -0
  17. package/SVF-osx/Release-build/bin/wpa +0 -0
  18. package/SVF-osx/Release-build/include/SVF/AE/Core/AbstractState.h +425 -0
  19. package/SVF-osx/Release-build/include/SVF/AE/Core/AbstractValue.h +157 -0
  20. package/SVF-osx/Release-build/include/SVF/AE/Core/AddressValue.h +225 -0
  21. package/SVF-osx/Release-build/include/SVF/AE/Core/ICFGWTO.h +135 -0
  22. package/SVF-osx/Release-build/include/SVF/AE/Core/IntervalValue.h +1055 -0
  23. package/SVF-osx/Release-build/include/SVF/AE/Core/NumericValue.h +1292 -0
  24. package/SVF-osx/Release-build/include/SVF/AE/Core/RelExeState.h +226 -0
  25. package/SVF-osx/Release-build/include/SVF/AE/Core/RelationSolver.h +91 -0
  26. package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AEDetector.h +439 -0
  27. package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AbsExtAPI.h +138 -0
  28. package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AbstractInterpretation.h +384 -0
  29. package/SVF-osx/Release-build/include/SVF/CFL/CFGNormalizer.h +84 -0
  30. package/SVF-osx/Release-build/include/SVF/CFL/CFGrammar.h +468 -0
  31. package/SVF-osx/Release-build/include/SVF/CFL/CFLAlias.h +168 -0
  32. package/SVF-osx/Release-build/include/SVF/CFL/CFLBase.h +118 -0
  33. package/SVF-osx/Release-build/include/SVF/CFL/CFLGramGraphChecker.h +74 -0
  34. package/SVF-osx/Release-build/include/SVF/CFL/CFLGraphBuilder.h +168 -0
  35. package/SVF-osx/Release-build/include/SVF/CFL/CFLSVFGBuilder.h +58 -0
  36. package/SVF-osx/Release-build/include/SVF/CFL/CFLSolver.h +374 -0
  37. package/SVF-osx/Release-build/include/SVF/CFL/CFLStat.h +67 -0
  38. package/SVF-osx/Release-build/include/SVF/CFL/CFLVF.h +68 -0
  39. package/SVF-osx/Release-build/include/SVF/CFL/GrammarBuilder.h +100 -0
  40. package/SVF-osx/Release-build/include/SVF/DDA/ContextDDA.h +230 -0
  41. package/SVF-osx/Release-build/include/SVF/DDA/DDAClient.h +163 -0
  42. package/SVF-osx/Release-build/include/SVF/DDA/DDAPass.h +102 -0
  43. package/SVF-osx/Release-build/include/SVF/DDA/DDAStat.h +121 -0
  44. package/SVF-osx/Release-build/include/SVF/DDA/DDAVFSolver.h +794 -0
  45. package/SVF-osx/Release-build/include/SVF/DDA/FlowDDA.h +178 -0
  46. package/SVF-osx/Release-build/include/SVF/FastCluster/fastcluster.h +80 -0
  47. package/SVF-osx/Release-build/include/SVF/Graphs/BasicBlockG.h +318 -0
  48. package/SVF-osx/Release-build/include/SVF/Graphs/CDG.h +482 -0
  49. package/SVF-osx/Release-build/include/SVF/Graphs/CFLGraph.h +232 -0
  50. package/SVF-osx/Release-build/include/SVF/Graphs/CHG.h +368 -0
  51. package/SVF-osx/Release-build/include/SVF/Graphs/CallGraph.h +497 -0
  52. package/SVF-osx/Release-build/include/SVF/Graphs/ConsG.h +402 -0
  53. package/SVF-osx/Release-build/include/SVF/Graphs/ConsGEdge.h +355 -0
  54. package/SVF-osx/Release-build/include/SVF/Graphs/ConsGNode.h +418 -0
  55. package/SVF-osx/Release-build/include/SVF/Graphs/DOTGraphTraits.h +188 -0
  56. package/SVF-osx/Release-build/include/SVF/Graphs/GenericGraph.h +628 -0
  57. package/SVF-osx/Release-build/include/SVF/Graphs/GraphPrinter.h +111 -0
  58. package/SVF-osx/Release-build/include/SVF/Graphs/GraphTraits.h +150 -0
  59. package/SVF-osx/Release-build/include/SVF/Graphs/GraphWriter.h +380 -0
  60. package/SVF-osx/Release-build/include/SVF/Graphs/ICFG.h +331 -0
  61. package/SVF-osx/Release-build/include/SVF/Graphs/ICFGEdge.h +281 -0
  62. package/SVF-osx/Release-build/include/SVF/Graphs/ICFGNode.h +669 -0
  63. package/SVF-osx/Release-build/include/SVF/Graphs/ICFGStat.h +164 -0
  64. package/SVF-osx/Release-build/include/SVF/Graphs/IRGraph.h +398 -0
  65. package/SVF-osx/Release-build/include/SVF/Graphs/SCC.h +375 -0
  66. package/SVF-osx/Release-build/include/SVF/Graphs/SVFG.h +491 -0
  67. package/SVF-osx/Release-build/include/SVF/Graphs/SVFGEdge.h +237 -0
  68. package/SVF-osx/Release-build/include/SVF/Graphs/SVFGNode.h +501 -0
  69. package/SVF-osx/Release-build/include/SVF/Graphs/SVFGOPT.h +372 -0
  70. package/SVF-osx/Release-build/include/SVF/Graphs/SVFGStat.h +273 -0
  71. package/SVF-osx/Release-build/include/SVF/Graphs/ThreadCallGraph.h +399 -0
  72. package/SVF-osx/Release-build/include/SVF/Graphs/VFG.h +726 -0
  73. package/SVF-osx/Release-build/include/SVF/Graphs/VFGEdge.h +295 -0
  74. package/SVF-osx/Release-build/include/SVF/Graphs/VFGNode.h +1266 -0
  75. package/SVF-osx/Release-build/include/SVF/Graphs/WTO.h +872 -0
  76. package/SVF-osx/Release-build/include/SVF/MSSA/MSSAMuChi.h +722 -0
  77. package/SVF-osx/Release-build/include/SVF/MSSA/MemPartition.h +169 -0
  78. package/SVF-osx/Release-build/include/SVF/MSSA/MemRegion.h +489 -0
  79. package/SVF-osx/Release-build/include/SVF/MSSA/MemSSA.h +452 -0
  80. package/SVF-osx/Release-build/include/SVF/MSSA/SVFGBuilder.h +104 -0
  81. package/SVF-osx/Release-build/include/SVF/MTA/LockAnalysis.h +533 -0
  82. package/SVF-osx/Release-build/include/SVF/MTA/MHP.h +546 -0
  83. package/SVF-osx/Release-build/include/SVF/MTA/MTA.h +97 -0
  84. package/SVF-osx/Release-build/include/SVF/MTA/MTAStat.h +73 -0
  85. package/SVF-osx/Release-build/include/SVF/MTA/TCT.h +620 -0
  86. package/SVF-osx/Release-build/include/SVF/MemoryModel/AbstractPointsToDS.h +316 -0
  87. package/SVF-osx/Release-build/include/SVF/MemoryModel/AccessPath.h +194 -0
  88. package/SVF-osx/Release-build/include/SVF/MemoryModel/ConditionalPT.h +878 -0
  89. package/SVF-osx/Release-build/include/SVF/MemoryModel/MutablePointsToDS.h +1025 -0
  90. package/SVF-osx/Release-build/include/SVF/MemoryModel/PersistentPointsToCache.h +463 -0
  91. package/SVF-osx/Release-build/include/SVF/MemoryModel/PersistentPointsToDS.h +955 -0
  92. package/SVF-osx/Release-build/include/SVF/MemoryModel/PointerAnalysis.h +428 -0
  93. package/SVF-osx/Release-build/include/SVF/MemoryModel/PointerAnalysisImpl.h +602 -0
  94. package/SVF-osx/Release-build/include/SVF/MemoryModel/PointsTo.h +255 -0
  95. package/SVF-osx/Release-build/include/SVF/MemoryModel/SVFLoop.h +167 -0
  96. package/SVF-osx/Release-build/include/SVF/SABER/DoubleFreeChecker.h +76 -0
  97. package/SVF-osx/Release-build/include/SVF/SABER/FileChecker.h +80 -0
  98. package/SVF-osx/Release-build/include/SVF/SABER/LeakChecker.h +122 -0
  99. package/SVF-osx/Release-build/include/SVF/SABER/ProgSlice.h +327 -0
  100. package/SVF-osx/Release-build/include/SVF/SABER/SaberCheckerAPI.h +151 -0
  101. package/SVF-osx/Release-build/include/SVF/SABER/SaberCondAllocator.h +317 -0
  102. package/SVF-osx/Release-build/include/SVF/SABER/SaberSVFGBuilder.h +114 -0
  103. package/SVF-osx/Release-build/include/SVF/SABER/SrcSnkDDA.h +327 -0
  104. package/SVF-osx/Release-build/include/SVF/SABER/SrcSnkSolver.h +186 -0
  105. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/BasicTypes.h +280 -0
  106. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/BreakConstantExpr.h +93 -0
  107. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/CHGBuilder.h +78 -0
  108. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/CppUtil.h +184 -0
  109. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/DCHG.h +474 -0
  110. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/GEPTypeBridgeIterator.h +183 -0
  111. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/ICFGBuilder.h +160 -0
  112. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMLoopAnalysis.h +60 -0
  113. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMModule.h +527 -0
  114. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMUtil.h +433 -0
  115. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/ObjTypeInference.h +129 -0
  116. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/SVFIRBuilder.h +523 -0
  117. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/SymbolTableBuilder.h +132 -0
  118. package/SVF-osx/Release-build/include/SVF/SVFIR/ObjTypeInfo.h +224 -0
  119. package/SVF-osx/Release-build/include/SVF/SVFIR/PAGBuilderFromFile.h +80 -0
  120. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFIR.h +856 -0
  121. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFStatements.h +1330 -0
  122. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFType.h +606 -0
  123. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFValue.h +338 -0
  124. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFVariables.h +2212 -0
  125. package/SVF-osx/Release-build/include/SVF/Util/Annotator.h +180 -0
  126. package/SVF-osx/Release-build/include/SVF/Util/BitVector.h +55 -0
  127. package/SVF-osx/Release-build/include/SVF/Util/CDGBuilder.h +107 -0
  128. package/SVF-osx/Release-build/include/SVF/Util/CallGraphBuilder.h +61 -0
  129. package/SVF-osx/Release-build/include/SVF/Util/Casting.h +426 -0
  130. package/SVF-osx/Release-build/include/SVF/Util/CommandLine.h +530 -0
  131. package/SVF-osx/Release-build/include/SVF/Util/CoreBitVector.h +214 -0
  132. package/SVF-osx/Release-build/include/SVF/Util/CxtStmt.h +502 -0
  133. package/SVF-osx/Release-build/include/SVF/Util/DPItem.h +618 -0
  134. package/SVF-osx/Release-build/include/SVF/Util/ExtAPI.h +117 -0
  135. package/SVF-osx/Release-build/include/SVF/Util/GeneralType.h +127 -0
  136. package/SVF-osx/Release-build/include/SVF/Util/GraphReachSolver.h +186 -0
  137. package/SVF-osx/Release-build/include/SVF/Util/NodeIDAllocator.h +203 -0
  138. package/SVF-osx/Release-build/include/SVF/Util/Options.h +273 -0
  139. package/SVF-osx/Release-build/include/SVF/Util/PTAStat.h +83 -0
  140. package/SVF-osx/Release-build/include/SVF/Util/SVFBugReport.h +427 -0
  141. package/SVF-osx/Release-build/include/SVF/Util/SVFLoopAndDomInfo.h +169 -0
  142. package/SVF-osx/Release-build/include/SVF/Util/SVFStat.h +103 -0
  143. package/SVF-osx/Release-build/include/SVF/Util/SVFUtil.h +478 -0
  144. package/SVF-osx/Release-build/include/SVF/Util/SparseBitVector.h +1252 -0
  145. package/SVF-osx/Release-build/include/SVF/Util/ThreadAPI.h +188 -0
  146. package/SVF-osx/Release-build/include/SVF/Util/WorkList.h +317 -0
  147. package/SVF-osx/Release-build/include/SVF/Util/Z3Expr.h +325 -0
  148. package/SVF-osx/Release-build/include/SVF/Util/cJSON.h +300 -0
  149. package/SVF-osx/Release-build/include/SVF/Util/config.h +46 -0
  150. package/SVF-osx/Release-build/include/SVF/Util/iterator.h +407 -0
  151. package/SVF-osx/Release-build/include/SVF/Util/iterator_range.h +76 -0
  152. package/SVF-osx/Release-build/include/SVF/WPA/Andersen.h +434 -0
  153. package/SVF-osx/Release-build/include/SVF/WPA/AndersenPWC.h +160 -0
  154. package/SVF-osx/Release-build/include/SVF/WPA/CSC.h +95 -0
  155. package/SVF-osx/Release-build/include/SVF/WPA/FlowSensitive.h +322 -0
  156. package/SVF-osx/Release-build/include/SVF/WPA/Steensgaard.h +131 -0
  157. package/SVF-osx/Release-build/include/SVF/WPA/TypeAnalysis.h +90 -0
  158. package/SVF-osx/Release-build/include/SVF/WPA/VersionedFlowSensitive.h +295 -0
  159. package/SVF-osx/Release-build/include/SVF/WPA/WPAFSSolver.h +246 -0
  160. package/SVF-osx/Release-build/include/SVF/WPA/WPAPass.h +115 -0
  161. package/SVF-osx/Release-build/include/SVF/WPA/WPASolver.h +205 -0
  162. package/SVF-osx/Release-build/include/SVF/WPA/WPAStat.h +222 -0
  163. package/SVF-osx/Release-build/include/SVF/extapi.bc +2384 -0
  164. package/SVF-osx/Release-build/lib/cmake/SVF/Modules/FindZ3.cmake +93 -0
  165. package/SVF-osx/Release-build/lib/cmake/SVF/SVFConfig.cmake +106 -0
  166. package/SVF-osx/Release-build/lib/cmake/SVF/SVFConfigVersion.cmake +43 -0
  167. package/SVF-osx/Release-build/lib/cmake/SVF/SVFTargets-release.cmake +101 -0
  168. package/SVF-osx/Release-build/lib/cmake/SVF/SVFTargets.cmake +180 -0
  169. package/SVF-osx/Release-build/lib/libSvfCore.3.1.dylib +0 -0
  170. package/SVF-osx/Release-build/lib/libSvfLLVM.3.1.dylib +0 -0
  171. package/SVF-osx/Release-build/lib/pkgconfig/SVF.pc +12 -0
  172. package/package.json +1 -1
  173. package/SVF-linux-aarch64/Release-build/include/CFL/grammar/PAGGrammar.txt +0 -15
  174. package/SVF-linux-aarch64/Release-build/include/CFL/grammar/PEGGrammar.txt +0 -11
  175. package/SVF-linux-aarch64/Release-build/include/CFL/grammar/VFGGrammar.txt +0 -7
  176. package/SVF-linux-aarch64/Release-build/include/FastCluster/LICENSE.TXT +0 -13
  177. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AbstractState.h +0 -0
  178. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AbstractValue.h +0 -0
  179. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AddressValue.h +0 -0
  180. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/ICFGWTO.h +0 -0
  181. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/IntervalValue.h +0 -0
  182. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/NumericValue.h +0 -0
  183. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/RelExeState.h +0 -0
  184. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/RelationSolver.h +0 -0
  185. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AEDetector.h +0 -0
  186. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AbsExtAPI.h +0 -0
  187. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AbstractInterpretation.h +0 -0
  188. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFGNormalizer.h +0 -0
  189. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFGrammar.h +0 -0
  190. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLAlias.h +0 -0
  191. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLBase.h +0 -0
  192. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLGramGraphChecker.h +0 -0
  193. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLGraphBuilder.h +0 -0
  194. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLSVFGBuilder.h +0 -0
  195. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLSolver.h +0 -0
  196. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLStat.h +0 -0
  197. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLVF.h +0 -0
  198. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/GrammarBuilder.h +0 -0
  199. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/ContextDDA.h +0 -0
  200. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAClient.h +0 -0
  201. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAPass.h +0 -0
  202. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAStat.h +0 -0
  203. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAVFSolver.h +0 -0
  204. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/FlowDDA.h +0 -0
  205. /package/SVF-linux-aarch64/Release-build/include/{FastCluster → SVF/FastCluster}/fastcluster.h +0 -0
  206. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/BasicBlockG.h +0 -0
  207. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CDG.h +0 -0
  208. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CFLGraph.h +0 -0
  209. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CHG.h +0 -0
  210. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CallGraph.h +0 -0
  211. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsG.h +0 -0
  212. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsGEdge.h +0 -0
  213. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsGNode.h +0 -0
  214. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/DOTGraphTraits.h +0 -0
  215. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GenericGraph.h +0 -0
  216. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphPrinter.h +0 -0
  217. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphTraits.h +0 -0
  218. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphWriter.h +0 -0
  219. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFG.h +0 -0
  220. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGEdge.h +0 -0
  221. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGNode.h +0 -0
  222. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGStat.h +0 -0
  223. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/IRGraph.h +0 -0
  224. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SCC.h +0 -0
  225. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFG.h +0 -0
  226. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGEdge.h +0 -0
  227. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGNode.h +0 -0
  228. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGOPT.h +0 -0
  229. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGStat.h +0 -0
  230. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ThreadCallGraph.h +0 -0
  231. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFG.h +0 -0
  232. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFGEdge.h +0 -0
  233. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFGNode.h +0 -0
  234. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/WTO.h +0 -0
  235. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MSSAMuChi.h +0 -0
  236. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemPartition.h +0 -0
  237. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemRegion.h +0 -0
  238. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemSSA.h +0 -0
  239. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/SVFGBuilder.h +0 -0
  240. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/LockAnalysis.h +0 -0
  241. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MHP.h +0 -0
  242. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MTA.h +0 -0
  243. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MTAStat.h +0 -0
  244. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/TCT.h +0 -0
  245. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/AbstractPointsToDS.h +0 -0
  246. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/AccessPath.h +0 -0
  247. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/ConditionalPT.h +0 -0
  248. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/MutablePointsToDS.h +0 -0
  249. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PersistentPointsToCache.h +0 -0
  250. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PersistentPointsToDS.h +0 -0
  251. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointerAnalysis.h +0 -0
  252. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointerAnalysisImpl.h +0 -0
  253. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointsTo.h +0 -0
  254. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/SVFLoop.h +0 -0
  255. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/DoubleFreeChecker.h +0 -0
  256. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/FileChecker.h +0 -0
  257. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/LeakChecker.h +0 -0
  258. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/ProgSlice.h +0 -0
  259. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberCheckerAPI.h +0 -0
  260. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberCondAllocator.h +0 -0
  261. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberSVFGBuilder.h +0 -0
  262. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SrcSnkDDA.h +0 -0
  263. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SrcSnkSolver.h +0 -0
  264. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/BasicTypes.h +0 -0
  265. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/BreakConstantExpr.h +0 -0
  266. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/CHGBuilder.h +0 -0
  267. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/CppUtil.h +0 -0
  268. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/DCHG.h +0 -0
  269. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/GEPTypeBridgeIterator.h +0 -0
  270. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/ICFGBuilder.h +0 -0
  271. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMLoopAnalysis.h +0 -0
  272. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMModule.h +0 -0
  273. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMUtil.h +0 -0
  274. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/ObjTypeInference.h +0 -0
  275. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/SVFIRBuilder.h +0 -0
  276. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/SymbolTableBuilder.h +0 -0
  277. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/ObjTypeInfo.h +0 -0
  278. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/PAGBuilderFromFile.h +0 -0
  279. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFIR.h +0 -0
  280. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFStatements.h +0 -0
  281. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFType.h +0 -0
  282. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFValue.h +0 -0
  283. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFVariables.h +0 -0
  284. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Annotator.h +0 -0
  285. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/BitVector.h +0 -0
  286. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CDGBuilder.h +0 -0
  287. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CallGraphBuilder.h +0 -0
  288. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Casting.h +0 -0
  289. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CommandLine.h +0 -0
  290. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CoreBitVector.h +0 -0
  291. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CxtStmt.h +0 -0
  292. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/DPItem.h +0 -0
  293. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/ExtAPI.h +0 -0
  294. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/GeneralType.h +0 -0
  295. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/GraphReachSolver.h +0 -0
  296. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/NodeIDAllocator.h +0 -0
  297. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Options.h +0 -0
  298. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/PTAStat.h +0 -0
  299. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFBugReport.h +0 -0
  300. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFLoopAndDomInfo.h +0 -0
  301. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFStat.h +0 -0
  302. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFUtil.h +0 -0
  303. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SparseBitVector.h +0 -0
  304. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/ThreadAPI.h +0 -0
  305. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Z3Expr.h +0 -0
  306. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/cJSON.h +0 -0
  307. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/iterator.h +0 -0
  308. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/iterator_range.h +0 -0
  309. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/Andersen.h +0 -0
  310. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/AndersenPWC.h +0 -0
  311. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/CSC.h +0 -0
  312. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/FlowSensitive.h +0 -0
  313. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/Steensgaard.h +0 -0
  314. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/TypeAnalysis.h +0 -0
  315. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/VersionedFlowSensitive.h +0 -0
  316. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAFSSolver.h +0 -0
  317. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAPass.h +0 -0
  318. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPASolver.h +0 -0
  319. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAStat.h +0 -0
  320. /package/SVF-linux-aarch64/Release-build/{lib → include/SVF}/extapi.bc +0 -0
@@ -0,0 +1,527 @@
1
+ //===- LLVMModule.h -- LLVM Module class-----------------------------------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-> <Yulei Sui>
6
+ //
7
+
8
+ // This program is free software: you can redistribute it and/or modify
9
+ // it under the terms of the GNU Affero General Public License as published by
10
+ // the Free Software Foundation, either version 3 of the License, or
11
+ // (at your option) any later version.
12
+
13
+ // This program is distributed in the hope that it will be useful,
14
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ // GNU Affero General Public License for more details.
17
+
18
+ // You should have received a copy of the GNU Affero General Public License
19
+ // along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ //
21
+ //===----------------------------------------------------------------------===//
22
+
23
+ /*
24
+ * LLVMModule.h
25
+ *
26
+ * Created on: 23 Mar.2020
27
+ * Author: Yulei Sui
28
+ */
29
+
30
+ #ifndef INCLUDE_SVF_FE_LLVMMODULE_H_
31
+ #define INCLUDE_SVF_FE_LLVMMODULE_H_
32
+
33
+ #include "SVF-LLVM/BasicTypes.h"
34
+ #include "Util/Options.h"
35
+ #include "Graphs/BasicBlockG.h"
36
+
37
+ namespace SVF
38
+ {
39
+
40
+ class ObjTypeInference;
41
+
42
+ class LLVMModuleSet
43
+ {
44
+ friend class SVFIRBuilder;
45
+ friend class ICFGBuilder;
46
+ friend class SymbolTableBuilder;
47
+
48
+ public:
49
+
50
+ typedef std::vector<const Function*> FunctionSetType;
51
+ typedef Map<const Function*, const Function*> FunDeclToDefMapTy;
52
+ typedef Map<const Function*, FunctionSetType> FunDefToDeclsMapTy;
53
+ typedef Map<const GlobalVariable*, GlobalVariable*> GlobalDefToRepMapTy;
54
+
55
+ typedef Map<const Function*, FunObjVar*> LLVMFun2FunObjVarMap;
56
+ typedef Map<const BasicBlock*, SVFBasicBlock*> LLVMBB2SVFBBMap;
57
+ typedef Map<const SVFValue*, const Value*> SVFBaseNode2LLVMValueMap;
58
+ typedef Map<const Type*, SVFType*> LLVMType2SVFTypeMap;
59
+ typedef Map<const Type*, StInfo*> Type2TypeInfoMap;
60
+ typedef Map<std::string, std::vector<std::string>> Fun2AnnoMap;
61
+
62
+ typedef Map<const Instruction*, CallICFGNode *> CSToCallNodeMapTy;
63
+ typedef Map<const Instruction*, RetICFGNode *> CSToRetNodeMapTy;
64
+ typedef Map<const Instruction*, IntraICFGNode *> InstToBlockNodeMapTy;
65
+ typedef Map<const Function*, FunEntryICFGNode *> FunToFunEntryNodeMapTy;
66
+ typedef Map<const Function*, FunExitICFGNode *> FunToFunExitNodeMapTy;
67
+
68
+ /// llvm value to sym id map
69
+ /// local (%) and global (@) identifiers are pointer types which have a value node id.
70
+ typedef OrderedMap<const Value*, NodeID> ValueToIDMapTy;
71
+
72
+ typedef OrderedMap<const Function*, NodeID> FunToIDMapTy;
73
+
74
+ typedef std::vector<const Function*> FunctionSet;
75
+ typedef Map<const Function*, const BasicBlock*> FunToExitBBMap;
76
+ typedef Map<const Function*, const Function *> FunToRealDefFunMap;
77
+
78
+ private:
79
+ static LLVMModuleSet* llvmModuleSet;
80
+ static bool preProcessed;
81
+ SVFIR* svfir;
82
+ std::unique_ptr<LLVMContext> owned_ctx;
83
+ std::vector<std::unique_ptr<Module>> owned_modules;
84
+ std::vector<std::reference_wrapper<Module>> modules;
85
+
86
+ /// Record some "sse_" function declarations used in other ext function definition, e.g., svf_ext_foo(), and svf_ext_foo() used in app functions
87
+ FunctionSetType ExtFuncsVec;
88
+ /// Record annotations of function in extapi.bc
89
+ Fun2AnnoMap ExtFun2Annotations;
90
+
91
+ // Map SVFFunction to its annotations
92
+ Map<const Function*, std::vector<std::string>> func2Annotations;
93
+
94
+ /// Global definition to a rep definition map
95
+ GlobalDefToRepMapTy GlobalDefToRepMap;
96
+
97
+ LLVMFun2FunObjVarMap LLVMFun2FunObjVar; ///< Map an LLVM Function to an SVF Funobjvar
98
+ LLVMBB2SVFBBMap LLVMBB2SVFBB;
99
+ LLVMType2SVFTypeMap LLVMType2SVFType;
100
+ Type2TypeInfoMap Type2TypeInfo;
101
+ ObjTypeInference* typeInference;
102
+
103
+ SVFBaseNode2LLVMValueMap SVFBaseNode2LLVMValue;
104
+ CSToCallNodeMapTy CSToCallNodeMap; ///< map a callsite to its CallICFGNode
105
+ CSToRetNodeMapTy CSToRetNodeMap; ///< map a callsite to its RetICFGNode
106
+ InstToBlockNodeMapTy InstToBlockNodeMap; ///< map a basic block to its ICFGNode
107
+ FunToFunEntryNodeMapTy FunToFunEntryNodeMap; ///< map a function to its FunExitICFGNode
108
+ FunToFunExitNodeMapTy FunToFunExitNodeMap; ///< map a function to its FunEntryICFGNode
109
+
110
+ Map<const Function*, DominatorTree> FunToDominatorTree;
111
+
112
+ ValueToIDMapTy valSymMap; ///< map a value to its sym id
113
+ ValueToIDMapTy objSymMap; ///< map a obj reference to its sym id
114
+ FunToIDMapTy returnSymMap; ///< return map
115
+ FunToIDMapTy varargSymMap; ///< vararg map
116
+
117
+ FunctionSet funSet;
118
+ FunToExitBBMap funToExitBB;
119
+ FunToRealDefFunMap funToRealDefFun;
120
+
121
+ /// Constructor
122
+ LLVMModuleSet();
123
+
124
+ void build();
125
+
126
+ public:
127
+ ~LLVMModuleSet();
128
+
129
+ static inline LLVMModuleSet* getLLVMModuleSet()
130
+ {
131
+ if (!llvmModuleSet)
132
+ llvmModuleSet = new LLVMModuleSet;
133
+ return llvmModuleSet;
134
+ }
135
+
136
+ static void releaseLLVMModuleSet()
137
+ {
138
+ delete llvmModuleSet;
139
+ llvmModuleSet = nullptr;
140
+ }
141
+
142
+ // Build an SVF module from a given LLVM Module instance (for use e.g. in a LLVM pass)
143
+ static void buildSVFModule(Module& mod);
144
+
145
+ // Build an SVF module from the bitcode files provided in `moduleNameVec`
146
+ static void buildSVFModule(const std::vector<std::string>& moduleNameVec);
147
+
148
+ static void preProcessBCs(std::vector<std::string>& moduleNameVec);
149
+
150
+ u32_t getModuleNum() const
151
+ {
152
+ return modules.size();
153
+ }
154
+
155
+ const std::vector<std::reference_wrapper<Module>>& getLLVMModules() const
156
+ {
157
+ return modules;
158
+ }
159
+
160
+ Module *getModule(u32_t idx) const
161
+ {
162
+ return &getModuleRef(idx);
163
+ }
164
+
165
+ Module &getModuleRef(u32_t idx) const
166
+ {
167
+ assert(idx < getModuleNum() && "Out of range.");
168
+ return modules[idx];
169
+ }
170
+
171
+ // Dump modules to files
172
+ void dumpModulesToFile(const std::string& suffix);
173
+
174
+ public:
175
+
176
+ inline const BasicBlock* getFunExitBB(const Function* fun) const
177
+ {
178
+ auto it = funToExitBB.find(fun);
179
+ if (it == funToExitBB.end()) return nullptr;
180
+ else return it->second;
181
+ }
182
+
183
+ inline const Function* getRealDefFun(const Function* fun) const
184
+ {
185
+ auto it = funToRealDefFun.find(fun);
186
+ if (it == funToRealDefFun.end()) return nullptr;
187
+ else return it->second;
188
+ }
189
+
190
+ inline const FunctionSet& getFunctionSet() const
191
+ {
192
+ return funSet;
193
+ }
194
+
195
+ inline u32_t getValueNodeNum() const
196
+ {
197
+ return valSymMap.size();
198
+ }
199
+
200
+ inline u32_t getObjNodeNum() const
201
+ {
202
+ return objSymMap.size();
203
+ }
204
+
205
+ inline ValueToIDMapTy& valSyms()
206
+ {
207
+ return valSymMap;
208
+ }
209
+
210
+ inline ValueToIDMapTy& objSyms()
211
+ {
212
+ return objSymMap;
213
+ }
214
+
215
+ /// Get SVFIR Node according to LLVM value
216
+ ///getNode - Return the node corresponding to the specified pointer.
217
+ NodeID getValueNode(const Value* V);
218
+
219
+ bool hasValueNode(const Value* V);
220
+
221
+ /// getObject - Return the obj node id refer to the memory object for the
222
+ /// specified global, heap or alloca instruction according to llvm value.
223
+ NodeID getObjectNode(const Value* V);
224
+
225
+ void dumpSymTable();
226
+
227
+ public:
228
+
229
+ // create a SVFBasicBlock according to LLVM BasicBlock, then add it to SVFFunction's BasicBlockGraph
230
+ inline void addBasicBlock(FunObjVar* fun, const BasicBlock* bb)
231
+ {
232
+ SVFBasicBlock* svfBB = fun->getBasicBlockGraph()->addBasicBlock(bb->getName().str());
233
+ LLVMBB2SVFBB[bb] = svfBB;
234
+ SVFBaseNode2LLVMValue[svfBB] = bb;
235
+ }
236
+
237
+ inline void addInstructionMap(const Instruction* inst, CallICFGNode* svfInst)
238
+ {
239
+ CSToCallNodeMap[inst] = svfInst;
240
+ addToSVFVar2LLVMValueMap(inst, svfInst);
241
+ }
242
+ inline void addInstructionMap(const Instruction* inst, RetICFGNode* svfInst)
243
+ {
244
+ CSToRetNodeMap[inst] = svfInst;
245
+ addToSVFVar2LLVMValueMap(inst, svfInst);
246
+ }
247
+ inline void addInstructionMap(const Instruction* inst, IntraICFGNode* svfInst)
248
+ {
249
+ InstToBlockNodeMap[inst] = svfInst;
250
+ addToSVFVar2LLVMValueMap(inst, svfInst);
251
+ }
252
+
253
+ inline bool hasLLVMValue(const SVFValue* value) const
254
+ {
255
+ return SVFBaseNode2LLVMValue.find(value) != SVFBaseNode2LLVMValue.end();
256
+ }
257
+
258
+ const Value* getLLVMValue(const SVFValue* value) const
259
+ {
260
+ SVFBaseNode2LLVMValueMap ::const_iterator it = SVFBaseNode2LLVMValue.find(value);
261
+ assert(it != SVFBaseNode2LLVMValue.end() && "can't find corresponding llvm value!");
262
+ return it->second;
263
+ }
264
+
265
+ inline const FunObjVar* getFunObjVar(const Function* fun) const
266
+ {
267
+ LLVMFun2FunObjVarMap::const_iterator it = LLVMFun2FunObjVar.find(fun);
268
+ assert(it!=LLVMFun2FunObjVar.end() && "SVF Function not found!");
269
+ return it->second;
270
+ }
271
+
272
+ inline FunToIDMapTy& retSyms()
273
+ {
274
+ return returnSymMap;
275
+ }
276
+
277
+ inline FunToIDMapTy& varargSyms()
278
+ {
279
+ return varargSymMap;
280
+ }
281
+
282
+ NodeID getReturnNode(const Function *func) const
283
+ {
284
+ FunToIDMapTy::const_iterator iter = returnSymMap.find(func);
285
+ assert(iter!=returnSymMap.end() && "ret sym not found");
286
+ return iter->second;
287
+ }
288
+
289
+ NodeID getVarargNode(const Function *func) const
290
+ {
291
+ FunToIDMapTy::const_iterator iter = varargSymMap.find(func);
292
+ assert(iter!=varargSymMap.end() && "vararg sym not found");
293
+ return iter->second;
294
+ }
295
+
296
+ SVFBasicBlock* getSVFBasicBlock(const BasicBlock* bb)
297
+ {
298
+ LLVMBB2SVFBBMap::const_iterator it = LLVMBB2SVFBB.find(bb);
299
+ assert(it!=LLVMBB2SVFBB.end() && "SVF BasicBlock not found!");
300
+ return it->second;
301
+ }
302
+
303
+ /// Get the corresponding Function based on its name
304
+ inline const Function* getFunction(const std::string& name)
305
+ {
306
+ Function* fun = nullptr;
307
+
308
+ for (u32_t i = 0; i < llvmModuleSet->getModuleNum(); ++i)
309
+ {
310
+ Module* mod = llvmModuleSet->getModule(i);
311
+ fun = mod->getFunction(name);
312
+ if (fun)
313
+ {
314
+ return fun;
315
+ }
316
+ }
317
+ return nullptr;
318
+ }
319
+
320
+ /// Get the corresponding Function based on its name
321
+ const FunObjVar* getFunObjVar(const std::string& name);
322
+
323
+ ICFGNode* getICFGNode(const Instruction* inst);
324
+
325
+ bool hasICFGNode(const Instruction* inst);
326
+
327
+ /// get a call node
328
+ CallICFGNode* getCallICFGNode(const Instruction* cs);
329
+ /// get a return node
330
+ RetICFGNode* getRetICFGNode(const Instruction* cs);
331
+ /// get a intra node
332
+ IntraICFGNode* getIntraICFGNode(const Instruction* inst);
333
+
334
+ /// Add a function entry node
335
+ inline FunEntryICFGNode* getFunEntryICFGNode(const Function* fun)
336
+ {
337
+ FunEntryICFGNode* b = getFunEntryBlock(fun);
338
+ assert(b && "Function entry not created?");
339
+ return b;
340
+ }
341
+ /// Add a function exit node
342
+ inline FunExitICFGNode* getFunExitICFGNode(const Function* fun)
343
+ {
344
+ FunExitICFGNode* b = getFunExitBlock(fun);
345
+ assert(b && "Function exit not created?");
346
+ return b;
347
+ }
348
+
349
+
350
+ /// Global to rep
351
+ bool hasGlobalRep(const GlobalVariable* val) const
352
+ {
353
+ GlobalDefToRepMapTy::const_iterator it = GlobalDefToRepMap.find(val);
354
+ return it != GlobalDefToRepMap.end();
355
+ }
356
+
357
+ GlobalVariable *getGlobalRep(const GlobalVariable* val) const
358
+ {
359
+ GlobalDefToRepMapTy::const_iterator it = GlobalDefToRepMap.find(val);
360
+ assert(it != GlobalDefToRepMap.end() && "has no rep?");
361
+ return it->second;
362
+ }
363
+
364
+ Module* getMainLLVMModule() const
365
+ {
366
+ assert(!empty() && "empty LLVM module!!");
367
+ for (size_t i = 0; i < getModuleNum(); ++i)
368
+ {
369
+ Module& module = getModuleRef(i);
370
+ if (module.getName().str() != ExtAPI::getExtAPI()->getExtBcPath())
371
+ {
372
+ return &module;
373
+ }
374
+ }
375
+ assert(false && "no main module found!");
376
+ return nullptr;
377
+ }
378
+
379
+ LLVMContext& getContext() const
380
+ {
381
+ assert(!empty() && "empty LLVM module!!");
382
+ return getMainLLVMModule()->getContext();
383
+ }
384
+
385
+ bool empty() const
386
+ {
387
+ return getModuleNum() == 0;
388
+ }
389
+
390
+ /// Get or create SVFType and typeinfo
391
+ SVFType* getSVFType(const Type* T);
392
+ /// Get LLVM Type
393
+ const Type* getLLVMType(const SVFType* T) const;
394
+
395
+ ObjTypeInference* getTypeInference();
396
+
397
+ DominatorTree& getDomTree(const Function* fun);
398
+
399
+ std::string getExtFuncAnnotation(const Function* fun, const std::string& funcAnnotation);
400
+
401
+ const std::vector<std::string>& getExtFuncAnnotations(const Function* fun);
402
+
403
+ // Does (F) have some annotation?
404
+ bool hasExtFuncAnnotation(const Function* fun, const std::string& funcAnnotation);
405
+
406
+ // Does (F) have a static var X (unavailable to us) that its return points to?
407
+ bool has_static(const Function *F);
408
+
409
+ // Does (F) have a memcpy_like operation?
410
+ bool is_memcpy(const Function *F);
411
+
412
+ // Does (F) have a memset_like operation?
413
+ bool is_memset(const Function *F);
414
+
415
+ // Does (F) allocate a new object and return it?
416
+ bool is_alloc(const Function *F);
417
+
418
+ // Does (F) allocate a new object and assign it to one of its arguments?
419
+ bool is_arg_alloc(const Function *F);
420
+
421
+ // Does (F) allocate a new stack object and return it?
422
+ bool is_alloc_stack_ret(const Function *F);
423
+
424
+ // Get the position of argument which holds the new object
425
+ s32_t get_alloc_arg_pos(const Function *F);
426
+
427
+ // Does (F) reallocate a new object?
428
+ bool is_realloc(const Function *F);
429
+
430
+ // Should (F) be considered "external" (either not defined in the program
431
+ // or a user-defined version of a known alloc or no-op)?
432
+ bool is_ext(const Function *F);
433
+
434
+ // Set the annotation of (F)
435
+ void setExtFuncAnnotations(const Function* fun, const std::vector<std::string>& funcAnnotations);
436
+
437
+ private:
438
+ inline void addFunctionSet(const Function* svfFunc)
439
+ {
440
+ funSet.push_back(svfFunc);
441
+ }
442
+
443
+ inline void setFunExitBB(const Function* fun, const BasicBlock* bb)
444
+ {
445
+ funToExitBB[fun] = bb;
446
+ }
447
+
448
+ inline void setFunRealDefFun(const Function* fun, const Function* realDefFun)
449
+ {
450
+ funToRealDefFun[fun] = realDefFun;
451
+ }
452
+ /// Create SVFTypes
453
+ SVFType* addSVFTypeInfo(const Type* t);
454
+ /// Collect a type info
455
+ StInfo* collectTypeInfo(const Type* ty);
456
+ /// Collect the struct info and set the number of fields after flattening
457
+ StInfo* collectStructInfo(const StructType* structTy, u32_t& numFields);
458
+ /// Collect the array info
459
+ StInfo* collectArrayInfo(const ArrayType* T);
460
+ /// Collect simple type (non-aggregate) info
461
+ StInfo* collectSimpleTypeInfo(const Type* T);
462
+
463
+ std::vector<const Function*> getLLVMGlobalFunctions(const GlobalVariable* global);
464
+
465
+ void loadModules(const std::vector<std::string>& moduleNameVec);
466
+ // Loads ExtAPI bitcode file; uses LLVMContext made while loading module bitcode files or from Module
467
+ void loadExtAPIModules();
468
+ void addSVFMain();
469
+
470
+ void createSVFDataStructure();
471
+
472
+ void addToSVFVar2LLVMValueMap(const Value* val, SVFValue* svfBaseNode);
473
+ void buildFunToFunMap();
474
+ void buildGlobalDefToRepMap();
475
+ /// Invoke llvm passes to modify module
476
+ void prePassSchedule();
477
+ void buildSymbolTable() const;
478
+ void collectExtFunAnnotations(const Module* mod);
479
+
480
+ /// Get/Add a call node
481
+ inline CallICFGNode* getCallBlock(const Instruction* cs)
482
+ {
483
+ CSToCallNodeMapTy::const_iterator it = CSToCallNodeMap.find(cs);
484
+ if (it == CSToCallNodeMap.end())
485
+ return nullptr;
486
+ return it->second;
487
+ }
488
+
489
+ /// Get/Add a return node
490
+ inline RetICFGNode* getRetBlock(const Instruction* cs)
491
+ {
492
+ CSToRetNodeMapTy::const_iterator it = CSToRetNodeMap.find(cs);
493
+ if (it == CSToRetNodeMap.end())
494
+ return nullptr;
495
+ return it->second;
496
+ }
497
+
498
+ inline IntraICFGNode* getIntraBlock(const Instruction* inst)
499
+ {
500
+ InstToBlockNodeMapTy::const_iterator it = InstToBlockNodeMap.find(inst);
501
+ if (it == InstToBlockNodeMap.end())
502
+ return nullptr;
503
+ return it->second;
504
+ }
505
+
506
+ /// Get/Add a function entry node
507
+ inline FunEntryICFGNode* getFunEntryBlock(const Function* fun)
508
+ {
509
+ FunToFunEntryNodeMapTy::const_iterator it = FunToFunEntryNodeMap.find(fun);
510
+ if (it == FunToFunEntryNodeMap.end())
511
+ return nullptr;
512
+ return it->second;
513
+ }
514
+
515
+ /// Get/Add a function exit node
516
+ inline FunExitICFGNode* getFunExitBlock(const Function* fun)
517
+ {
518
+ FunToFunExitNodeMapTy::const_iterator it = FunToFunExitNodeMap.find(fun);
519
+ if (it == FunToFunExitNodeMap.end())
520
+ return nullptr;
521
+ return it->second;
522
+ }
523
+ };
524
+
525
+ } // End namespace SVF
526
+
527
+ #endif /* INCLUDE_SVF_FE_LLVMMODULE_H_ */