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,169 @@
1
+ //===- MemPartition.h -- Memory region partition-----------------------------//
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
+ * @file: DisnctMRGenerator.h
25
+ * @author: yesen
26
+ * @date: 07/12/2013
27
+ * @version: 1.0
28
+ *
29
+ * @section LICENSE
30
+ *
31
+ * @section DESCRIPTION
32
+ *
33
+ */
34
+
35
+
36
+ #ifndef DISNCTMRGENERATOR_H_
37
+ #define DISNCTMRGENERATOR_H_
38
+
39
+ #include "MSSA/MemRegion.h"
40
+
41
+ namespace SVF
42
+ {
43
+
44
+ /*!
45
+ * Distinct memory region generator.
46
+ */
47
+ class DistinctMRG : public MRGenerator
48
+ {
49
+ public:
50
+ DistinctMRG(BVDataPTAImpl* p, bool ptrOnly) : MRGenerator(p, ptrOnly)
51
+ {}
52
+
53
+ ~DistinctMRG() {}
54
+
55
+ protected:
56
+ /// Partition regions
57
+ virtual void partitionMRs();
58
+
59
+ /// Get memory region at a load
60
+ virtual void getMRsForLoad(MRSet& aliasMRs, const NodeBS& cpts, const FunObjVar* fun);
61
+
62
+ /// Get memory regions to be inserted at a load statement.
63
+ virtual void getMRsForCallSiteRef(MRSet& aliasMRs, const NodeBS& cpts, const FunObjVar* fun);
64
+ private:
65
+ /// Create memory regions for each points-to target.
66
+ void createDistinctMR(const FunObjVar* func, const NodeBS& cpts);
67
+
68
+ };
69
+
70
+ /*!
71
+ * Create memory regions which don't have intersections with each other in the same function scope.
72
+ */
73
+ class IntraDisjointMRG : public MRGenerator
74
+ {
75
+ public:
76
+ typedef OrderedMap<NodeBS, PointsToList> PtsToSubPtsMap;
77
+ typedef Map<const FunObjVar*, PtsToSubPtsMap> FunToPtsMap;
78
+ typedef Map<const FunObjVar*, PointsToList> FunToInterMap;
79
+
80
+ IntraDisjointMRG(BVDataPTAImpl* p, bool ptrOnly) : MRGenerator(p, ptrOnly)
81
+ {}
82
+
83
+ ~IntraDisjointMRG() {}
84
+
85
+ protected:
86
+
87
+ /// Partition regions
88
+ virtual void partitionMRs();
89
+
90
+ /**
91
+ * Get memory regions to be inserted at a load statement.
92
+ * @param cpts The conditional points-to set of load statement.
93
+ * @param fun The function being analyzed.
94
+ * @param mrs Memory region set contains all possible target memory regions.
95
+ */
96
+ virtual inline void getMRsForLoad(MRSet& aliasMRs, const NodeBS& cpts,
97
+ const FunObjVar* fun)
98
+ {
99
+ const PointsToList& inters = getIntersList(fun);
100
+ getMRsForLoadFromInterList(aliasMRs, cpts, inters);
101
+ }
102
+
103
+ void getMRsForLoadFromInterList(MRSet& mrs, const NodeBS& cpts, const PointsToList& inters);
104
+
105
+ /// Get memory regions to be inserted at a load statement.
106
+ virtual void getMRsForCallSiteRef(MRSet& aliasMRs, const NodeBS& cpts, const FunObjVar* fun);
107
+
108
+ /// Create disjoint memory region
109
+ void createDisjointMR(const FunObjVar* func, const NodeBS& cpts);
110
+
111
+ /// Compute intersections between cpts and computed cpts intersections before.
112
+ void computeIntersections(const NodeBS& cpts, PointsToList& inters);
113
+
114
+ private:
115
+ inline PtsToSubPtsMap& getPtsSubSetMap(const FunObjVar* func)
116
+ {
117
+ return funcToPtsMap[func];
118
+ }
119
+
120
+ inline PointsToList& getIntersList(const FunObjVar* func)
121
+ {
122
+ return funcToInterMap[func];
123
+ }
124
+
125
+ inline const PtsToSubPtsMap& getPtsSubSetMap(const FunObjVar* func) const
126
+ {
127
+ FunToPtsMap::const_iterator it = funcToPtsMap.find(func);
128
+ assert(it != funcToPtsMap.end() && "can not find pts map for specified function");
129
+ return it->second;
130
+ }
131
+
132
+ FunToPtsMap funcToPtsMap;
133
+ FunToInterMap funcToInterMap;
134
+ };
135
+
136
+ /*!
137
+ * Create memory regions which don't have intersections with each other in the whole program scope.
138
+ */
139
+ class InterDisjointMRG : public IntraDisjointMRG
140
+ {
141
+ public:
142
+ InterDisjointMRG(BVDataPTAImpl* p, bool ptrOnly) : IntraDisjointMRG(p, ptrOnly)
143
+ {}
144
+
145
+ ~InterDisjointMRG() {}
146
+
147
+ protected:
148
+ /// Partition regions
149
+ virtual void partitionMRs();
150
+
151
+ /**
152
+ * Get memory regions to be inserted at a load statement.
153
+ * @param cpts The conditional points-to set of load statement.
154
+ * @param fun The function being analyzed.
155
+ * @param mrs Memory region set contains all possible target memory regions.
156
+ */
157
+ virtual inline void getMRsForLoad(MRSet& aliasMRs, const NodeBS& cpts,
158
+ const FunObjVar*)
159
+ {
160
+ getMRsForLoadFromInterList(aliasMRs, cpts, inters);
161
+ }
162
+
163
+ private:
164
+ PointsToList inters;
165
+ };
166
+
167
+ } // End namespace SVF
168
+
169
+ #endif /* DISNCTMRGENERATOR_H_ */
@@ -0,0 +1,489 @@
1
+ //===- MemRegion.h -- Memory region -----------------------------------------//
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
+ * MemoryRegion.h
25
+ *
26
+ * Created on: Jul 14, 2013
27
+ * Author: Yulei Sui
28
+ * The implementation is based on
29
+ * Yulei Sui, Hua Yan, Yunpeng Zhang, Jingling Xue and Zheng Zheng.
30
+ * "Parallel Construction of Interprocedural Memory SSA Form".
31
+ * Journal of Systems and Software (JSS'16)
32
+ */
33
+
34
+ #ifndef MEMORYREGION_H_
35
+ #define MEMORYREGION_H_
36
+
37
+ #include "Graphs/ICFG.h"
38
+ #include "Graphs/CallGraph.h"
39
+ #include "Graphs/SCC.h"
40
+ #include "SVFIR/SVFIR.h"
41
+ #include "Util/WorkList.h"
42
+
43
+ #include <set>
44
+
45
+ namespace SVF
46
+ {
47
+
48
+ class BVDataPTAImpl;
49
+
50
+ typedef NodeID MRID;
51
+ typedef NodeID MRVERID;
52
+ typedef NodeID MRVERSION;
53
+
54
+ /// Memory Region class
55
+ class MemRegion
56
+ {
57
+
58
+ public:
59
+ typedef bool Condition;
60
+ private:
61
+ /// region ID 0 is reserved
62
+ static u32_t totalMRNum;
63
+ MRID rid;
64
+ const NodeBS cptsSet;
65
+
66
+ public:
67
+ /// Constructor
68
+ MemRegion(const NodeBS& cp) :
69
+ rid(++totalMRNum), cptsSet(cp)
70
+ {
71
+ }
72
+ /// Destructor
73
+ ~MemRegion()
74
+ {
75
+ }
76
+
77
+ /// Return memory region ID
78
+ inline MRID getMRID() const
79
+ {
80
+ return rid;
81
+ }
82
+ /// Return points-to
83
+ inline const NodeBS &getPointsTo() const
84
+ {
85
+ return cptsSet;
86
+ }
87
+ /// Operator== overriding
88
+ inline bool operator==(const MemRegion* rhs) const
89
+ {
90
+ return this->getPointsTo() == rhs->getPointsTo();
91
+ }
92
+ /// Dump string
93
+ inline std::string dumpStr() const
94
+ {
95
+ std::string str;
96
+ str += "pts{";
97
+ for (NodeBS::iterator ii = cptsSet.begin(), ie = cptsSet.end();
98
+ ii != ie; ii++)
99
+ {
100
+ char int2str[16];
101
+ snprintf(int2str, sizeof(int2str), "%d", *ii);
102
+ str += int2str;
103
+ str += " ";
104
+ }
105
+ str += "}";
106
+ return str;
107
+ }
108
+
109
+ /// add the hash function here to sort elements and remove
110
+ /// and remove duplicated element in the set (binary tree comparison)
111
+ //@{
112
+ typedef struct equalMemRegion
113
+ {
114
+ bool operator()(const MemRegion* lhs, const MemRegion* rhs) const
115
+ {
116
+ return SVFUtil::cmpNodeBS(lhs->getPointsTo(), rhs->getPointsTo());
117
+ }
118
+ } equalMemRegion;
119
+ //@}
120
+
121
+ /// Return memory object number inside a region
122
+ inline u32_t getRegionSize() const
123
+ {
124
+ return cptsSet.count();
125
+ }
126
+ };
127
+
128
+ /*!
129
+ * Memory Region Partitioning
130
+ */
131
+ class MRGenerator
132
+ {
133
+
134
+ public:
135
+ typedef FIFOWorkList<NodeID> WorkList;
136
+
137
+ /// Get typedef from Pointer Analysis
138
+ //@{
139
+ //@}
140
+ ///Define mem region set
141
+ typedef OrderedSet<const MemRegion*, MemRegion::equalMemRegion> MRSet;
142
+ typedef Map<const PAGEdge*, const FunObjVar*> PAGEdgeToFunMap;
143
+ typedef OrderedSet<NodeBS, SVFUtil::equalNodeBS> PointsToList;
144
+ typedef Map<const FunObjVar*, NodeBS> FunToPointsToMap;
145
+ typedef Map<const FunObjVar*, PointsToList> FunToPointsTosMap;
146
+ typedef OrderedMap<NodeBS, NodeBS, SVFUtil::equalNodeBS> PtsToRepPtsSetMap;
147
+
148
+ /// Map a function to its region set
149
+ typedef Map<const FunObjVar*, MRSet> FunToMRsMap;
150
+ /// Map loads/stores to its mem regions,
151
+ /// TODO:visitAtomicCmpXchgInst, visitAtomicRMWInst??
152
+ //@{
153
+ typedef Map<const LoadStmt*, MRSet> LoadsToMRsMap;
154
+ typedef Map<const StoreStmt*, MRSet> StoresToMRsMap;
155
+ typedef Map<const CallICFGNode*, MRSet> CallSiteToMRsMap;
156
+ //@}
157
+
158
+ /// Map loads/stores/callsites to their cpts set
159
+ //@{
160
+ typedef Map<const LoadStmt*, NodeBS> LoadsToPointsToMap;
161
+ typedef Map<const StoreStmt*, NodeBS> StoresToPointsToMap;
162
+ typedef Map<const CallICFGNode*, NodeBS> CallSiteToPointsToMap;
163
+ //@}
164
+
165
+ /// Maps Mod-Ref analysis
166
+ //@{
167
+ /// Map a function to its indirect refs/mods of memory objects
168
+ typedef Map<const FunObjVar*, NodeBS> FunToNodeBSMap;
169
+ /// Map a callsite to its indirect refs/mods of memory objects
170
+ typedef Map<const CallICFGNode*, NodeBS> CallSiteToNodeBSMap;
171
+ //@}
172
+
173
+ typedef Map<NodeID, NodeBS> NodeToPTSSMap;
174
+
175
+ /// SVFIR edge list
176
+ typedef SVFIR::SVFStmtList SVFStmtList;
177
+ /// Call Graph SCC
178
+ typedef SCCDetection<CallGraph*> SCC;
179
+
180
+ MRSet& getMRSet()
181
+ {
182
+ return memRegSet;
183
+ }
184
+
185
+ /// Get superset cpts set
186
+ inline const NodeBS& getRepPointsTo(const NodeBS& cpts) const
187
+ {
188
+ PtsToRepPtsSetMap::const_iterator it = cptsToRepCPtsMap.find(cpts);
189
+ assert(it!=cptsToRepCPtsMap.end() && "can not find superset of cpts??");
190
+ return it->second;
191
+ }
192
+ /// Get a memory region according to cpts
193
+ const MemRegion* getMR(const NodeBS& cpts) const;
194
+
195
+ private:
196
+
197
+ BVDataPTAImpl* pta;
198
+ SCC* callGraphSCC;
199
+ CallGraph* callGraph;
200
+ bool ptrOnlyMSSA;
201
+
202
+ /// Map a function to all its memory regions
203
+ FunToMRsMap funToMRsMap;
204
+ /// Map a load SVFIR Edge to its memory regions sets in order for inserting mus in Memory SSA
205
+ LoadsToMRsMap loadsToMRsMap;
206
+ /// Map a store SVFIR Edge to its memory regions sets in order for inserting chis in Memory SSA
207
+ StoresToMRsMap storesToMRsMap;
208
+ /// Map a callsite to its refs regions
209
+ CallSiteToMRsMap callsiteToRefMRsMap;
210
+ /// Map a callsite to its mods regions
211
+ CallSiteToMRsMap callsiteToModMRsMap;
212
+ /// Map a load SVFIR Edge to its CPts set map
213
+ LoadsToPointsToMap loadsToPointsToMap;
214
+ /// Map a store SVFIR Edge to its CPts set map
215
+ StoresToPointsToMap storesToPointsToMap;
216
+ /// Map a callsite to it refs cpts set
217
+ CallSiteToPointsToMap callsiteToRefPointsToMap;
218
+ /// Map a callsite to it mods cpts set
219
+ CallSiteToPointsToMap callsiteToModPointsToMap;
220
+
221
+ /// Map a function to all of its conditional points-to sets
222
+ FunToPointsTosMap funToPointsToMap;
223
+ /// Map a PAGEdge to its fun
224
+ PAGEdgeToFunMap pagEdgeToFunMap;
225
+
226
+ /// Map a function to its indirect uses of memory objects
227
+ FunToPointsToMap funToRefsMap;
228
+ /// Map a function to its indirect defs of memory objects
229
+ FunToPointsToMap funToModsMap;
230
+ /// Map a callsite to its indirect uses of memory objects
231
+ CallSiteToPointsToMap csToRefsMap;
232
+ /// Map a callsite to its indirect defs of memory objects
233
+ CallSiteToPointsToMap csToModsMap;
234
+ /// Map a callsite to all its object might pass into its callees
235
+ CallSiteToPointsToMap csToCallSiteArgsPtsMap;
236
+ /// Map a callsite to all its object might return from its callees
237
+ CallSiteToPointsToMap csToCallSiteRetPtsMap;
238
+
239
+ /// Map a pointer to its cached points-to chain;
240
+ NodeToPTSSMap cachedPtsChainMap;
241
+
242
+ /// All global variable SVFIR node ids
243
+ NodeBS allGlobals;
244
+
245
+ /// Clean up memory
246
+ void destroy();
247
+
248
+ //Get all objects might pass into callee from a callsite
249
+ void collectCallSitePts(const CallICFGNode* cs);
250
+
251
+ //Recursive collect points-to chain
252
+ NodeBS& CollectPtsChain(NodeID id);
253
+
254
+ /// Return the pts chain of all callsite arguments
255
+ inline NodeBS& getCallSiteArgsPts(const CallICFGNode* cs)
256
+ {
257
+ return csToCallSiteArgsPtsMap[cs];
258
+ }
259
+ /// Return the pts chain of the return parameter of the callsite
260
+ inline NodeBS& getCallSiteRetPts(const CallICFGNode* cs)
261
+ {
262
+ return csToCallSiteRetPtsMap[cs];
263
+ }
264
+ /// Whether the object node is a non-local object
265
+ /// including global, heap, and stack variable in recursions
266
+ bool isNonLocalObject(NodeID id, const FunObjVar* curFun) const;
267
+
268
+ /// Get all the objects in callee's modref escaped via global objects (the chain pts of globals)
269
+ void getEscapObjviaGlobals(NodeBS& globs, const NodeBS& pts);
270
+
271
+
272
+ protected:
273
+ MRGenerator(BVDataPTAImpl* p, bool ptrOnly);
274
+
275
+ /// A set of All memory regions
276
+ MRSet memRegSet;
277
+ /// Map a condition pts to its rep conditional pts (super set points-to)
278
+ PtsToRepPtsSetMap cptsToRepCPtsMap;
279
+
280
+ /// Generate a memory region and put in into functions which use it
281
+ void createMR(const FunObjVar* fun, const NodeBS& cpts);
282
+
283
+ /// Collect all global variables for later escape analysis
284
+ void collectGlobals();
285
+
286
+ /// Generate regions for loads/stores
287
+ virtual void collectModRefForLoadStore();
288
+
289
+ /// Generate regions for calls/rets
290
+ virtual void collectModRefForCall();
291
+
292
+ /// Partition regions
293
+ virtual void partitionMRs();
294
+
295
+ /// Update aliased regions for loads/stores/callsites
296
+ virtual void updateAliasMRs();
297
+
298
+ /// Given a condition pts, insert into cptsToRepCPtsMap for region generation
299
+ virtual void sortPointsTo(const NodeBS& cpts);
300
+
301
+ /// Whether a region is aliased with a conditional points-to
302
+ virtual inline bool isAliasedMR(const NodeBS& cpts, const MemRegion* mr)
303
+ {
304
+ return mr->getPointsTo().intersects(cpts);
305
+ }
306
+ /// Get all aliased mem regions from function fun according to cpts
307
+ virtual inline void getAliasMemRegions(MRSet& aliasMRs, const NodeBS& cpts, const FunObjVar* fun)
308
+ {
309
+ for(MRSet::const_iterator it = funToMRsMap[fun].begin(), eit = funToMRsMap[fun].end(); it!=eit; ++it)
310
+ {
311
+ if(isAliasedMR(cpts,*it))
312
+ aliasMRs.insert(*it);
313
+ }
314
+ }
315
+
316
+ /// Get memory regions for a load statement according to cpts.
317
+ virtual inline void getMRsForLoad(MRSet& aliasMRs, const NodeBS& cpts, const FunObjVar*)
318
+ {
319
+ const MemRegion* mr = getMR(cpts);
320
+ aliasMRs.insert(mr);
321
+ }
322
+
323
+ /// Get memory regions for call site ref according to cpts.
324
+ virtual inline void getMRsForCallSiteRef(MRSet& aliasMRs, const NodeBS& cpts, const FunObjVar*)
325
+ {
326
+ const MemRegion* mr = getMR(cpts);
327
+ aliasMRs.insert(mr);
328
+ }
329
+
330
+ /// Mod-Ref analysis for callsite invoking this callGraphNode
331
+ virtual void modRefAnalysis(CallGraphNode* callGraphNode, WorkList& worklist);
332
+
333
+ /// Get Mod-Ref of a callee function
334
+ virtual bool handleCallsiteModRef(NodeBS& mod, NodeBS& ref, const CallICFGNode* cs, const FunObjVar* fun);
335
+
336
+
337
+ /// Add cpts to store/load
338
+ //@{
339
+ inline void addCPtsToStore(NodeBS& cpts, const StoreStmt *st, const FunObjVar* fun)
340
+ {
341
+ storesToPointsToMap[st] = cpts;
342
+ funToPointsToMap[fun].insert(cpts);
343
+ addModSideEffectOfFunction(fun,cpts);
344
+ }
345
+ inline void addCPtsToLoad(NodeBS& cpts, const LoadStmt *ld, const FunObjVar* fun)
346
+ {
347
+ loadsToPointsToMap[ld] = cpts;
348
+ funToPointsToMap[fun].insert(cpts);
349
+ addRefSideEffectOfFunction(fun,cpts);
350
+ }
351
+ inline void addCPtsToCallSiteRefs(NodeBS& cpts, const CallICFGNode* cs)
352
+ {
353
+ callsiteToRefPointsToMap[cs] |= cpts;
354
+ funToPointsToMap[cs->getCaller()].insert(cpts);
355
+ }
356
+ inline void addCPtsToCallSiteMods(NodeBS& cpts, const CallICFGNode* cs)
357
+ {
358
+ callsiteToModPointsToMap[cs] |= cpts;
359
+ funToPointsToMap[cs->getCaller()].insert(cpts);
360
+ }
361
+ inline bool hasCPtsList(const FunObjVar* fun) const
362
+ {
363
+ return funToPointsToMap.find(fun)!=funToPointsToMap.end();
364
+ }
365
+ inline PointsToList& getPointsToList(const FunObjVar* fun)
366
+ {
367
+ return funToPointsToMap[fun];
368
+ }
369
+ inline FunToPointsTosMap& getFunToPointsToList()
370
+ {
371
+ return funToPointsToMap;
372
+ }
373
+ //@}
374
+ /// Add/Get methods for side-effect of functions and callsites
375
+ //@{
376
+ /// Add indirect uses an memory object in the function
377
+ void addRefSideEffectOfFunction(const FunObjVar* fun, const NodeBS& refs);
378
+ /// Add indirect def an memory object in the function
379
+ void addModSideEffectOfFunction(const FunObjVar* fun, const NodeBS& mods);
380
+ /// Add indirect uses an memory object in the function
381
+ bool addRefSideEffectOfCallSite(const CallICFGNode* cs, const NodeBS& refs);
382
+ /// Add indirect def an memory object in the function
383
+ bool addModSideEffectOfCallSite(const CallICFGNode* cs, const NodeBS& mods);
384
+
385
+ /// Get indirect refs of a function
386
+ inline const NodeBS& getRefSideEffectOfFunction(const FunObjVar* fun)
387
+ {
388
+ return funToRefsMap[fun];
389
+ }
390
+ /// Get indirect mods of a function
391
+ inline const NodeBS& getModSideEffectOfFunction(const FunObjVar* fun)
392
+ {
393
+ return funToModsMap[fun];
394
+ }
395
+ /// Get indirect refs of a callsite
396
+ inline const NodeBS& getRefSideEffectOfCallSite(const CallICFGNode* cs)
397
+ {
398
+ return csToRefsMap[cs];
399
+ }
400
+ /// Get indirect mods of a callsite
401
+ inline const NodeBS& getModSideEffectOfCallSite(const CallICFGNode* cs)
402
+ {
403
+ return csToModsMap[cs];
404
+ }
405
+ /// Has indirect refs of a callsite
406
+ inline bool hasRefSideEffectOfCallSite(const CallICFGNode* cs)
407
+ {
408
+ return csToRefsMap.find(cs) != csToRefsMap.end();
409
+ }
410
+ /// Has indirect mods of a callsite
411
+ inline bool hasModSideEffectOfCallSite(const CallICFGNode* cs)
412
+ {
413
+ return csToModsMap.find(cs) != csToModsMap.end();
414
+ }
415
+ //@}
416
+
417
+ public:
418
+ inline u32_t getMRNum() const
419
+ {
420
+ return memRegSet.size();
421
+ }
422
+
423
+ /// Destructor
424
+ virtual ~MRGenerator()
425
+ {
426
+ destroy();
427
+ }
428
+
429
+ /// Start generating memory regions
430
+ virtual void generateMRs();
431
+
432
+ /// Get the function which SVFIR Edge located
433
+ const FunObjVar* getFunction(const PAGEdge* pagEdge) const
434
+ {
435
+ PAGEdgeToFunMap::const_iterator it = pagEdgeToFunMap.find(pagEdge);
436
+ assert(it!=pagEdgeToFunMap.end() && "can not find its function, it is a global SVFIR edge");
437
+ return it->second;
438
+ }
439
+ /// Get Memory Region set
440
+ //@{
441
+ inline MRSet& getFunMRSet(const FunObjVar* fun)
442
+ {
443
+ return funToMRsMap[fun];
444
+ }
445
+ inline MRSet& getLoadMRSet(const LoadStmt* load)
446
+ {
447
+ return loadsToMRsMap[load];
448
+ }
449
+ inline MRSet& getStoreMRSet(const StoreStmt* store)
450
+ {
451
+ return storesToMRsMap[store];
452
+ }
453
+ inline bool hasRefMRSet(const CallICFGNode* cs)
454
+ {
455
+ return callsiteToRefMRsMap.find(cs)!=callsiteToRefMRsMap.end();
456
+ }
457
+ inline bool hasModMRSet(const CallICFGNode* cs)
458
+ {
459
+ return callsiteToModMRsMap.find(cs)!=callsiteToModMRsMap.end();
460
+ }
461
+ inline MRSet& getCallSiteRefMRSet(const CallICFGNode* cs)
462
+ {
463
+ return callsiteToRefMRsMap[cs];
464
+ }
465
+ inline MRSet& getCallSiteModMRSet(const CallICFGNode* cs)
466
+ {
467
+ return callsiteToModMRsMap[cs];
468
+ }
469
+ //@}
470
+ /// Whether this instruction has SVFIR Edge
471
+ bool hasSVFStmtList(const ICFGNode* icfgNode);
472
+ /// Given an instruction, get all its the PAGEdge (statement) in sequence
473
+ SVFStmtList& getPAGEdgesFromInst(const ICFGNode* node);
474
+
475
+ /// getModRefInfo APIs
476
+ //@{
477
+ /// Collect mod ref for external callsite other than heap alloc external call
478
+ NodeBS getModInfoForCall(const CallICFGNode* cs);
479
+ NodeBS getRefInfoForCall(const CallICFGNode* cs);
480
+ ModRefInfo getModRefInfo(const CallICFGNode* cs);
481
+ ModRefInfo getModRefInfo(const CallICFGNode* cs, const SVFVar* V);
482
+ ModRefInfo getModRefInfo(const CallICFGNode* cs1, const CallICFGNode* cs2);
483
+ //@}
484
+
485
+ };
486
+
487
+ } // End namespace SVF
488
+
489
+ #endif /* MEMORYREGION_H_ */