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,722 @@
1
+ //===- MSSAMuChi.h -- Mu/Chi on MSSA------------------------------------------//
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
+ * MSSAMuChi.h
25
+ *
26
+ * Created on: Oct 31, 2013
27
+ * Author: Yulei Sui
28
+ */
29
+
30
+ #ifndef MSSAMUCHI_H_
31
+ #define MSSAMUCHI_H_
32
+
33
+ #include "MSSA/MemRegion.h"
34
+
35
+ namespace SVF
36
+ {
37
+
38
+ class MSSADEF;
39
+
40
+ /*!
41
+ * Memory SSA Variable (in the form of SSA versions of each memory region )
42
+ */
43
+ class MRVer
44
+ {
45
+
46
+ public:
47
+ typedef MSSADEF MSSADef;
48
+ private:
49
+ /// ver ID 0 is reserved
50
+ static u32_t totalVERNum;
51
+ const MemRegion* mr;
52
+ MRVERSION version;
53
+ MRVERID vid;
54
+ MSSADef* def;
55
+ public:
56
+ /// Constructor
57
+ MRVer(const MemRegion* m, MRVERSION v, MSSADef* d) :
58
+ mr(m), version(v), vid(totalVERNum++),def(d)
59
+ {
60
+ }
61
+
62
+ /// Return the memory region
63
+ inline const MemRegion* getMR() const
64
+ {
65
+ return mr;
66
+ }
67
+
68
+ /// Return SSA version
69
+ inline MRVERSION getSSAVersion() const
70
+ {
71
+ return version;
72
+ }
73
+
74
+ /// Get MSSADef
75
+ inline MSSADef* getDef() const
76
+ {
77
+ return def;
78
+ }
79
+
80
+ /// Get MRVERID
81
+ inline MRVERID getID() const
82
+ {
83
+ return vid;
84
+ }
85
+ };
86
+
87
+
88
+ /*!
89
+ * Indirect Memory Read
90
+ * 1) LoadMU at each store instruction
91
+ * 2) CallMU at callsite
92
+ * 3) RetMU at function return
93
+ */
94
+ template<class Cond>
95
+ class MSSAMU
96
+ {
97
+
98
+ public:
99
+ enum MUTYPE
100
+ {
101
+ LoadMSSAMU, CallMSSAMU, RetMSSAMU
102
+ };
103
+
104
+ protected:
105
+ MUTYPE type;
106
+ const MemRegion* mr;
107
+ MRVer* ver;
108
+ Cond cond;
109
+ public:
110
+ /// Constructor/Destructor for MU
111
+ //@{
112
+ MSSAMU(MUTYPE t, const MemRegion* m, Cond c) : type(t), mr(m), ver(nullptr), cond(c)
113
+ {
114
+ }
115
+ virtual ~MSSAMU()
116
+ {
117
+ }
118
+ //@}
119
+
120
+ /// Return MR
121
+ inline const MemRegion* getMR() const
122
+ {
123
+ return mr;
124
+ }
125
+ /// Return type
126
+ inline MUTYPE getType() const
127
+ {
128
+ return type;
129
+ }
130
+ /// Set Ver
131
+ inline void setVer(MRVer* v)
132
+ {
133
+ assert(v->getMR() == mr && "inserting different memory region?");
134
+ ver = v;
135
+ }
136
+ /// Get Ver
137
+ inline MRVer* getMRVer() const
138
+ {
139
+ assert(ver!=nullptr && "version is nullptr, did not rename?");
140
+ return ver;
141
+ }
142
+ /// Return condition
143
+ inline Cond getCond() const
144
+ {
145
+ return cond;
146
+ }
147
+
148
+ /// Avoid adding duplicated mus
149
+ inline bool operator < (const MSSAMU & rhs) const
150
+ {
151
+ return mr > rhs.getMR();
152
+ }
153
+ /// Print MU
154
+ virtual void dump()
155
+ {
156
+ SVFUtil::outs() << "MU(MR_" << mr->getMRID() << "V_" << ver->getSSAVersion() << ") \t" <<
157
+ this->getMR()->dumpStr() << "\n";
158
+ }
159
+ };
160
+
161
+ /*!
162
+ * LoadMU is annotated at each load instruction, representing a memory object is read here
163
+ */
164
+ template<class Cond>
165
+ class LoadMU : public MSSAMU<Cond>
166
+ {
167
+
168
+ private:
169
+ const LoadStmt* inst;
170
+ const SVFBasicBlock* bb;
171
+
172
+ public:
173
+ /// Constructor/Destructor for MU
174
+ //@{
175
+ LoadMU(const SVFBasicBlock* b,const LoadStmt* i, const MemRegion* m, Cond c = true) :
176
+ MSSAMU<Cond>(MSSAMU<Cond>::LoadMSSAMU,m,c), inst(i), bb(b)
177
+ {
178
+ }
179
+ virtual ~LoadMU()
180
+ {
181
+
182
+ }
183
+ //@}
184
+
185
+ /// Return load instruction
186
+ inline const LoadStmt* getLoadStmt() const
187
+ {
188
+ return inst;
189
+ }
190
+
191
+ /// Return basic block
192
+ inline const SVFBasicBlock* getBasicBlock() const
193
+ {
194
+ return bb;
195
+ }
196
+
197
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
198
+ //@{
199
+ static inline bool classof(const LoadMU *)
200
+ {
201
+ return true;
202
+ }
203
+ static inline bool classof(const MSSAMU<Cond> *mu)
204
+ {
205
+ return mu->getType() == MSSAMU<Cond>::LoadMSSAMU;
206
+ }
207
+ //@}
208
+
209
+ /// Print MU
210
+ virtual void dump()
211
+ {
212
+ SVFUtil::outs() << "LDMU(MR_" << this->getMR()->getMRID() << "V_" << this->getMRVer()->getSSAVersion() << ") \t" <<
213
+ this->getMR()->dumpStr() << "\n";
214
+ }
215
+ };
216
+
217
+ /*!
218
+ * CallMU is annotated at callsite, representing a memory object is indirect read by callee
219
+ */
220
+ template<class Cond>
221
+ class CallMU : public MSSAMU<Cond>
222
+ {
223
+
224
+ private:
225
+ const CallICFGNode* callsite;
226
+
227
+ public:
228
+ /// Constructor/Destructor for MU
229
+ //@{
230
+ CallMU(const CallICFGNode* cs, const MemRegion* m, Cond c = true) :
231
+ MSSAMU<Cond>(MSSAMU<Cond>::CallMSSAMU,m,c), callsite(cs)
232
+ {
233
+ }
234
+ virtual ~CallMU()
235
+ {
236
+
237
+ }
238
+ //@}
239
+
240
+ /// Return callsite
241
+ inline const CallICFGNode* getCallSite() const
242
+ {
243
+ return callsite;
244
+ }
245
+
246
+ /// Return basic block
247
+ inline const SVFBasicBlock* getBasicBlock() const
248
+ {
249
+ return callsite->getBB();
250
+ }
251
+
252
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
253
+ //@{
254
+ static inline bool classof(const CallMU *)
255
+ {
256
+ return true;
257
+ }
258
+ static inline bool classof(const MSSAMU<Cond> *mu)
259
+ {
260
+ return mu->getType() == MSSAMU<Cond>::CallMSSAMU;
261
+ }
262
+ //@}
263
+
264
+ /// Print MU
265
+ virtual void dump()
266
+ {
267
+ SVFUtil::outs() << "CALMU(MR_" << this->getMR()->getMRID() << "V_" << this->getMRVer()->getSSAVersion() << ") \t" <<
268
+ this->getMR()->dumpStr() << "\n";
269
+ }
270
+ };
271
+
272
+
273
+ /*!
274
+ * RetMU is annotated at function return, representing memory objects returns to callers
275
+ */
276
+ template<class Cond>
277
+ class RetMU : public MSSAMU<Cond>
278
+ {
279
+ private:
280
+ const FunObjVar* fun;
281
+ public:
282
+ /// Constructor/Destructor for MU
283
+ //@{
284
+ RetMU(const FunObjVar* f, const MemRegion* m, Cond c = true) :
285
+ MSSAMU<Cond>(MSSAMU<Cond>::RetMSSAMU,m,c), fun(f)
286
+ {
287
+ }
288
+ virtual ~RetMU() {}
289
+ //@}
290
+
291
+ /// Return function
292
+ inline const FunObjVar* getFunction() const
293
+ {
294
+ return fun;
295
+ }
296
+
297
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
298
+ //@{
299
+ static inline bool classof(const RetMU *)
300
+ {
301
+ return true;
302
+ }
303
+ static inline bool classof(const MSSAMU<Cond> *mu)
304
+ {
305
+ return mu->getType() == MSSAMU<Cond>::RetMSSAMU;
306
+ }
307
+ //@}
308
+
309
+ /// Print MU
310
+ virtual void dump()
311
+ {
312
+ SVFUtil::outs() << "RETMU(MR_" << this->getMR()->getMRID() << "V_" << this->getMRVer()->getSSAVersion() << ") \t" <<
313
+ this->getMR()->dumpStr() << "\n";
314
+ }
315
+ };
316
+
317
+
318
+ /*!
319
+ * Indirect Memory Definition
320
+ * 1) MSSACHI indirect memory object is modified
321
+ * a) StoreCHI definition at store
322
+ * b) EntryCHI definition at function entry
323
+ * 2) MSSAPHI memory object is defined at joint points of a control flow
324
+ */
325
+ class MSSADEF
326
+ {
327
+
328
+ public:
329
+ enum DEFTYPE
330
+ {
331
+ SSACHI,
332
+ StoreMSSACHI,
333
+ CallMSSACHI,
334
+ EntryMSSACHI,
335
+ SSAPHI
336
+ };
337
+
338
+ protected:
339
+ DEFTYPE type;
340
+ const MemRegion* mr;
341
+ MRVer* resVer;
342
+
343
+ public:
344
+ /// Constructor/Destructor for MSSADEF
345
+ //@{
346
+ MSSADEF(DEFTYPE t, const MemRegion* m): type(t), mr(m), resVer(nullptr)
347
+ {
348
+
349
+ }
350
+ virtual ~MSSADEF() {}
351
+ //@}
352
+
353
+ /// Return memory region
354
+ inline const MemRegion* getMR() const
355
+ {
356
+ return mr;
357
+ }
358
+
359
+ /// Return type of this CHI
360
+ inline DEFTYPE getType() const
361
+ {
362
+ return type;
363
+ }
364
+
365
+ /// Set result operand ver
366
+ inline void setResVer(MRVer* v)
367
+ {
368
+ assert(v->getMR() == mr && "inserting different memory region?");
369
+ resVer = v;
370
+ }
371
+
372
+ /// Set operand vers
373
+ inline MRVer* getResVer() const
374
+ {
375
+ assert(resVer!=nullptr && "version is nullptr, did not rename?");
376
+ return resVer;
377
+ }
378
+
379
+ /// Avoid adding duplicated chis and phis
380
+ inline bool operator < (const MSSADEF & rhs) const
381
+ {
382
+ return mr > rhs.getMR();
383
+ }
384
+
385
+ /// Print MSSADef
386
+ virtual void dump()
387
+ {
388
+ SVFUtil::outs() << "DEF(MR_" << mr->getMRID() << "V_" << resVer->getSSAVersion() << ")\n";
389
+ }
390
+ };
391
+
392
+ /*!
393
+ * Indirect Memory Write
394
+ */
395
+ template<class Cond>
396
+ class MSSACHI : public MSSADEF
397
+ {
398
+
399
+ private:
400
+ MRVer* opVer;
401
+ Cond cond;
402
+ public:
403
+ typedef typename MSSADEF::DEFTYPE CHITYPE;
404
+ /// Constructor/Destructor for MSSACHI
405
+ //@{
406
+ MSSACHI(CHITYPE t, const MemRegion* m, Cond c): MSSADEF(t,m), opVer(nullptr), cond(c)
407
+ {
408
+
409
+ }
410
+ virtual ~MSSACHI() {}
411
+ //@}
412
+
413
+ /// Set operand ver
414
+ inline void setOpVer(MRVer* v)
415
+ {
416
+ assert(v->getMR() == this->getMR() && "inserting different memory region?");
417
+ opVer = v;
418
+ }
419
+
420
+ /// Get operand ver
421
+ inline MRVer* getOpVer() const
422
+ {
423
+ assert(opVer!=nullptr && "version is nullptr, did not rename?");
424
+ return opVer;
425
+ }
426
+
427
+ /// Get condition
428
+ inline Cond getCond() const
429
+ {
430
+ return cond;
431
+ }
432
+
433
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
434
+ //@{
435
+ static inline bool classof(const MSSACHI * chi)
436
+ {
437
+ return true;
438
+ }
439
+ static inline bool classof(const MSSADEF *chi)
440
+ {
441
+ return chi->getType() == MSSADEF::EntryMSSACHI ||
442
+ chi->getType() == MSSADEF::StoreMSSACHI ||
443
+ chi->getType() == MSSADEF::SSACHI ;
444
+ }
445
+ //@}
446
+
447
+ /// Print CHI
448
+ virtual void dump()
449
+ {
450
+ SVFUtil::outs() << "MR_" << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
451
+ " = CHI(MR_" << this->getMR()->getMRID() << "V_" << opVer->getSSAVersion() << ") \t" <<
452
+ this->getMR()->dumpStr() << "\n";
453
+ }
454
+ };
455
+
456
+ /*!
457
+ *
458
+ * StoreCHI is annotated at each store instruction, representing a memory object is modified here
459
+ */
460
+ template<class Cond>
461
+ class StoreCHI : public MSSACHI<Cond>
462
+ {
463
+ private:
464
+ const SVFBasicBlock* bb;
465
+ const StoreStmt* inst;
466
+ public:
467
+ /// Constructors for StoreCHI
468
+ //@{
469
+ StoreCHI(const SVFBasicBlock* b, const StoreStmt* i, const MemRegion* m, Cond c = true) :
470
+ MSSACHI<Cond>(MSSADEF::StoreMSSACHI,m,c), bb(b), inst(i)
471
+ {
472
+ }
473
+ virtual ~StoreCHI()
474
+ {
475
+ }
476
+ //@}
477
+
478
+ /// Get basic block
479
+ inline const SVFBasicBlock* getBasicBlock() const
480
+ {
481
+ return bb;
482
+ }
483
+
484
+ /// Get store instruction
485
+ inline const StoreStmt* getStoreStmt() const
486
+ {
487
+ return inst;
488
+ }
489
+
490
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
491
+ //@{
492
+ static inline bool classof(const StoreCHI * chi)
493
+ {
494
+ return true;
495
+ }
496
+ static inline bool classof(const MSSACHI<Cond> * chi)
497
+ {
498
+ return chi->getType() == MSSADEF::StoreMSSACHI;
499
+ }
500
+ static inline bool classof(const MSSADEF *chi)
501
+ {
502
+ return chi->getType() == MSSADEF::StoreMSSACHI;
503
+ }
504
+ //@}
505
+
506
+ /// Print CHI
507
+ virtual void dump()
508
+ {
509
+ SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
510
+ " = STCHI(MR_" << this->getMR()->getMRID() << "V_" << this->getOpVer()->getSSAVersion() << ") \t" <<
511
+ this->getMR()->dumpStr() << "\n";
512
+ }
513
+ };
514
+
515
+
516
+ /*!
517
+ *
518
+ * CallCHI is annotated at callsite, representing a memory object is indirect modified by callee
519
+ */
520
+ template<class Cond>
521
+ class CallCHI : public MSSACHI<Cond>
522
+ {
523
+ private:
524
+ const CallICFGNode* callsite;
525
+ public:
526
+ /// Constructors for CallCHI
527
+ //@{
528
+ CallCHI(const CallICFGNode* cs, const MemRegion* m, Cond c = true) :
529
+ MSSACHI<Cond>(MSSADEF::CallMSSACHI,m,c), callsite(cs)
530
+ {
531
+ }
532
+ virtual ~CallCHI()
533
+ {
534
+ }
535
+ //@}
536
+
537
+ /// Return basic block
538
+ inline const SVFBasicBlock* getBasicBlock() const
539
+ {
540
+ return callsite->getBB();
541
+ }
542
+
543
+ /// Return callsite
544
+ inline const CallICFGNode* getCallSite() const
545
+ {
546
+ return callsite;
547
+ }
548
+
549
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
550
+ //@{
551
+ static inline bool classof(const CallCHI * chi)
552
+ {
553
+ return true;
554
+ }
555
+ static inline bool classof(const MSSACHI<Cond> * chi)
556
+ {
557
+ return chi->getType() == MSSADEF::CallMSSACHI;
558
+ }
559
+ static inline bool classof(const MSSADEF *chi)
560
+ {
561
+ return chi->getType() == MSSADEF::CallMSSACHI;
562
+ }
563
+ //@}
564
+
565
+ /// Print CHI
566
+ virtual void dump()
567
+ {
568
+ SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
569
+ " = CALCHI(MR_" << this->getMR()->getMRID() << "V_" << this->getOpVer()->getSSAVersion() << ") \t" <<
570
+ this->getMR()->dumpStr() << "\n";
571
+ }
572
+ };
573
+
574
+ /*!
575
+ * EntryCHI is annotated at function entry, representing receiving memory objects from callers
576
+ */
577
+ template<class Cond>
578
+ class EntryCHI : public MSSACHI<Cond>
579
+ {
580
+ private:
581
+ const FunObjVar* fun;
582
+ public:
583
+ /// Constructors for EntryCHI
584
+ //@{
585
+ EntryCHI(const FunObjVar* f, const MemRegion* m, Cond c = true) :
586
+ MSSACHI<Cond>(MSSADEF::EntryMSSACHI,m,c),fun(f)
587
+ {
588
+ }
589
+ virtual ~EntryCHI()
590
+ {
591
+ }
592
+ //@}
593
+
594
+ /// Return function
595
+ inline const FunObjVar* getFunction() const
596
+ {
597
+ return fun;
598
+ }
599
+
600
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
601
+ //@{
602
+ static inline bool classof(const EntryCHI * chi)
603
+ {
604
+ return true;
605
+ }
606
+ static inline bool classof(const MSSACHI<Cond> * chi)
607
+ {
608
+ return chi->getType() == MSSADEF::EntryMSSACHI;
609
+ }
610
+ static inline bool classof(const MSSADEF *chi)
611
+ {
612
+ return chi->getType() == MSSADEF::EntryMSSACHI;
613
+ }
614
+ //@}
615
+
616
+ /// Print CHI
617
+ virtual void dump()
618
+ {
619
+ SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
620
+ " = ENCHI(MR_" << this->getMR()->getMRID() << "V_" << this->getOpVer()->getSSAVersion() << ") \t" <<
621
+ this->getMR()->dumpStr() << "\n";
622
+ }
623
+ };
624
+
625
+ /*
626
+ * Memory SSA Select, similar to PHINode
627
+ */
628
+ template<class Cond>
629
+ class MSSAPHI : public MSSADEF
630
+ {
631
+
632
+ public:
633
+ typedef Map<u32_t,const MRVer*> OPVers;
634
+ private:
635
+ const SVFBasicBlock* bb;
636
+ OPVers opVers;
637
+ Cond cond;
638
+ public:
639
+ /// Constructors for PHI
640
+ //@{
641
+ MSSAPHI(const SVFBasicBlock* b, const MemRegion* m, Cond c = true) :
642
+ MSSADEF(MSSADEF::SSAPHI,m), bb(b), cond(c)
643
+ {
644
+ }
645
+ virtual ~MSSAPHI()
646
+ {
647
+ }
648
+ //@}
649
+
650
+ /// Set operand ver
651
+ inline void setOpVer(const MRVer* v, u32_t pos)
652
+ {
653
+ assert(v->getMR() == this->getMR() && "inserting different memory region?");
654
+ opVers[pos] = v;
655
+ }
656
+
657
+ /// Get operand ver
658
+ inline const MRVer* getOpVer(u32_t pos) const
659
+ {
660
+ OPVers::const_iterator it = opVers.find(pos);
661
+ assert(it!=opVers.end() && "version is nullptr, did not rename?");
662
+ return it->second;
663
+ }
664
+
665
+ /// Get the number of operand ver
666
+ inline u32_t getOpVerNum() const
667
+ {
668
+ return opVers.size();
669
+ }
670
+
671
+ /// Operand ver iterators
672
+ //@{
673
+ inline OPVers::const_iterator opVerBegin() const
674
+ {
675
+ return opVers.begin();
676
+ }
677
+ inline OPVers::const_iterator opVerEnd() const
678
+ {
679
+ return opVers.end();
680
+ }
681
+ //@}
682
+
683
+ /// Return the basic block
684
+ inline const SVFBasicBlock* getBasicBlock() const
685
+ {
686
+ return bb;
687
+ }
688
+
689
+ /// Return condition
690
+ inline Cond getCond() const
691
+ {
692
+ return cond;
693
+ }
694
+
695
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
696
+ //@{
697
+ static inline bool classof(const MSSAPHI * phi)
698
+ {
699
+ return true;
700
+ }
701
+ static inline bool classof(const MSSADEF *phi)
702
+ {
703
+ return phi->getType() == MSSADEF::SSAPHI ;
704
+ }
705
+ //@}
706
+
707
+ /// Print PHI
708
+ virtual void dump()
709
+ {
710
+ SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
711
+ " = PHI(";
712
+ for(OPVers::iterator it = opVers.begin(), eit = opVers.end(); it!=eit; ++it)
713
+ SVFUtil::outs() << "MR_" << this->getMR()->getMRID() << "V_" << it->second->getSSAVersion() << ", ";
714
+
715
+ SVFUtil::outs() << ")\n";
716
+ }
717
+ };
718
+
719
+ std::ostream& operator<<(std::ostream &o, const MRVer& mrver);
720
+ } // End namespace SVF
721
+
722
+ #endif /* MSSAMUCHI_H_ */