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,322 @@
1
+ //===- FlowSensitive.h -- Flow-sensitive pointer analysis---------------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-2017> <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
+ * FlowSensitiveAnalysis.h
25
+ *
26
+ * Created on: Oct 28, 2013
27
+ * Author: Yulei Sui
28
+ */
29
+
30
+ #ifndef FLOWSENSITIVEANALYSIS_H_
31
+ #define FLOWSENSITIVEANALYSIS_H_
32
+
33
+ #include "FastCluster/fastcluster.h"
34
+ #include "Graphs/SVFGOPT.h"
35
+ #include "MemoryModel/PointerAnalysisImpl.h"
36
+ #include "MSSA/SVFGBuilder.h"
37
+ #include "WPA/WPAFSSolver.h"
38
+
39
+ namespace SVF
40
+ {
41
+
42
+ class AndersenWaveDiff;
43
+
44
+ /*!
45
+ * Flow sensitive whole program pointer analysis
46
+ */
47
+ typedef WPAFSSolver<SVFG*> WPASVFGFSSolver;
48
+ class FlowSensitive : public WPASVFGFSSolver, public BVDataPTAImpl
49
+ {
50
+ friend class FlowSensitiveStat;
51
+ protected:
52
+ typedef SVFG::SVFGEdgeSetTy SVFGEdgeSetTy;
53
+
54
+ public:
55
+ typedef BVDataPTAImpl::MutDFPTDataTy MutDFPTDataTy;
56
+ typedef BVDataPTAImpl::MutDFPTDataTy::DFPtsMap DFInOutMap;
57
+ typedef BVDataPTAImpl::MutDFPTDataTy::PtsMap PtsMap;
58
+
59
+ /// Constructor
60
+ explicit FlowSensitive(SVFIR* _pag, PTATY type = FSSPARSE_WPA) : WPASVFGFSSolver(), BVDataPTAImpl(_pag, type)
61
+ {
62
+ svfg = nullptr;
63
+ solveTime = sccTime = processTime = propagationTime = updateTime = 0;
64
+ addrTime = copyTime = gepTime = loadTime = storeTime = phiTime = 0;
65
+ updateCallGraphTime = directPropaTime = indirectPropaTime = 0;
66
+ numOfProcessedAddr = numOfProcessedCopy = numOfProcessedGep = 0;
67
+ numOfProcessedLoad = numOfProcessedStore = 0;
68
+ numOfProcessedPhi = numOfProcessedActualParam = numOfProcessedFormalRet = 0;
69
+ numOfProcessedMSSANode = 0;
70
+ maxSCCSize = numOfSCC = numOfNodesInSCC = 0;
71
+ iterationForPrintStat = OnTheFlyIterBudgetForStat;
72
+ }
73
+
74
+ /// Destructor
75
+ ~FlowSensitive() override = default;
76
+
77
+ /// Create single instance of flow-sensitive pointer analysis
78
+ static FlowSensitive* createFSWPA(SVFIR* _pag)
79
+ {
80
+ if (fspta == nullptr)
81
+ {
82
+ fspta = std::unique_ptr<FlowSensitive>(new FlowSensitive(_pag));
83
+ fspta->analyze();
84
+ }
85
+ return fspta.get();
86
+ }
87
+
88
+ /// Release flow-sensitive pointer analysis
89
+ static void releaseFSWPA()
90
+ {
91
+ fspta = nullptr;
92
+ }
93
+
94
+ /// We start from here
95
+ virtual bool runOnModule()
96
+ {
97
+ return false;
98
+ }
99
+
100
+ /// Flow sensitive analysis
101
+ void analyze() override;
102
+
103
+ virtual void solveAndwritePtsToFile(const std::string& filename);
104
+
105
+ virtual void readPtsFromFile(const std::string& filename);
106
+
107
+ virtual void solveConstraints();
108
+
109
+ /// Initialize analysis
110
+ void initialize() override;
111
+
112
+ /// Finalize analysis
113
+ void finalize() override;
114
+
115
+ /// Get PTA name
116
+ const std::string PTAName() const override
117
+ {
118
+ return "FlowSensitive";
119
+ }
120
+
121
+ /// Methods for support type inquiry through isa, cast, and dyn_cast
122
+ //@{
123
+ static inline bool classof(const FlowSensitive *)
124
+ {
125
+ return true;
126
+ }
127
+ static inline bool classof(const PointerAnalysis *pta)
128
+ {
129
+ return pta->getAnalysisTy() == FSSPARSE_WPA;
130
+ }
131
+ //@}
132
+
133
+ /// Return SVFG
134
+ inline SVFG* getSVFG() const
135
+ {
136
+ return svfg;
137
+ }
138
+
139
+ protected:
140
+ /// SCC detection
141
+ NodeStack& SCCDetect() override;
142
+
143
+ /// Propagation
144
+ //@{
145
+ /// Propagate points-to information from an edge's src node to its dst node.
146
+ bool propFromSrcToDst(SVFGEdge* edge) override;
147
+ /// Propagate points-to information along a DIRECT SVFG edge.
148
+ virtual bool propAlongDirectEdge(const DirectSVFGEdge* edge);
149
+ /// Propagate points-to information along an INDIRECT SVFG edge.
150
+ virtual bool propAlongIndirectEdge(const IndirectSVFGEdge* edge);
151
+ /// Propagate points-to information of a certain variable from src to dst.
152
+ virtual bool propVarPtsFromSrcToDst(NodeID var, const SVFGNode* src, const SVFGNode* dst);
153
+ /// Propagate points-to information from an actual-param to a formal-param.
154
+ /// Not necessary if SVFGOPT is used instead of original SVFG.
155
+ virtual bool propagateFromAPToFP(const ActualParmSVFGNode* ap, const SVFGNode* dst);
156
+ /// Propagate points-to information from a formal-ret to an actual-ret.
157
+ /// Not necessary if SVFGOPT is used instead of original SVFG.
158
+ virtual bool propagateFromFRToAR(const FormalRetSVFGNode* fr, const SVFGNode* dst);
159
+ /// Handle weak updates
160
+ virtual bool weakUpdateOutFromIn(const SVFGNode* node)
161
+ {
162
+ return getDFPTDataTy()->updateAllDFOutFromIn(node->getId(),0,false);
163
+ }
164
+ /// Handle strong updates
165
+ virtual bool strongUpdateOutFromIn(const SVFGNode* node, NodeID singleton)
166
+ {
167
+ return getDFPTDataTy()->updateAllDFOutFromIn(node->getId(),singleton,true);
168
+ }
169
+ //@}
170
+
171
+ /// Propagation between newly connected SVFG nodes during updateCallGraph.
172
+ /// Can only be used during updateCallGraph.
173
+ //@{
174
+ bool propVarPtsAfterCGUpdated(NodeID var, const SVFGNode* src, const SVFGNode* dst);
175
+
176
+ virtual inline bool propDFOutToIn(const SVFGNode* srcStmt, NodeID srcVar, const SVFGNode* dstStmt, NodeID dstVar)
177
+ {
178
+ return getDFPTDataTy()->updateAllDFInFromOut(srcStmt->getId(), srcVar, dstStmt->getId(),dstVar);
179
+ }
180
+ virtual inline bool propDFInToIn(const SVFGNode* srcStmt, NodeID srcVar, const SVFGNode* dstStmt, NodeID dstVar)
181
+ {
182
+ return getDFPTDataTy()->updateAllDFInFromIn(srcStmt->getId(), srcVar, dstStmt->getId(),dstVar);
183
+ }
184
+ //@}
185
+
186
+ /// Update data-flow points-to data
187
+ //@{
188
+ inline bool updateOutFromIn(const SVFGNode* srcStmt, NodeID srcVar, const SVFGNode* dstStmt, NodeID dstVar)
189
+ {
190
+ return getDFPTDataTy()->updateDFOutFromIn(srcStmt->getId(),srcVar, dstStmt->getId(),dstVar);
191
+ }
192
+ virtual inline bool updateInFromIn(const SVFGNode* srcStmt, NodeID srcVar, const SVFGNode* dstStmt, NodeID dstVar)
193
+ {
194
+ return getDFPTDataTy()->updateDFInFromIn(srcStmt->getId(),srcVar, dstStmt->getId(),dstVar);
195
+ }
196
+ virtual inline bool updateInFromOut(const SVFGNode* srcStmt, NodeID srcVar, const SVFGNode* dstStmt, NodeID dstVar)
197
+ {
198
+ return getDFPTDataTy()->updateDFInFromOut(srcStmt->getId(),srcVar, dstStmt->getId(),dstVar);
199
+ }
200
+
201
+ virtual inline bool unionPtsFromIn(const SVFGNode* stmt, NodeID srcVar, NodeID dstVar)
202
+ {
203
+ return getDFPTDataTy()->updateTLVPts(stmt->getId(),srcVar,dstVar);
204
+ }
205
+ virtual inline bool unionPtsFromTop(const SVFGNode* stmt, NodeID srcVar, NodeID dstVar)
206
+ {
207
+ return getDFPTDataTy()->updateATVPts(srcVar,stmt->getId(),dstVar);
208
+ }
209
+
210
+ inline void clearAllDFOutVarFlag(const SVFGNode* stmt)
211
+ {
212
+ getDFPTDataTy()->clearAllDFOutUpdatedVar(stmt->getId());
213
+ }
214
+ //@}
215
+
216
+ /// Handle various constraints
217
+ //@{
218
+ void processNode(NodeID nodeId) override;
219
+ bool processSVFGNode(SVFGNode* node);
220
+ virtual bool processAddr(const AddrSVFGNode* addr);
221
+ virtual bool processCopy(const CopySVFGNode* copy);
222
+ virtual bool processPhi(const PHISVFGNode* phi);
223
+ virtual bool processGep(const GepSVFGNode* edge);
224
+ virtual bool processLoad(const LoadSVFGNode* load);
225
+ virtual bool processStore(const StoreSVFGNode* store);
226
+ //@}
227
+
228
+ /// Update call graph
229
+ //@{
230
+ /// Update call graph.
231
+ bool updateCallGraph(const CallSiteToFunPtrMap& callsites) override;
232
+ /// Connect nodes in SVFG.
233
+ void connectCallerAndCallee(const CallEdgeMap& newEdges, SVFGEdgeSetTy& edges);
234
+ /// Update nodes connected during updating call graph.
235
+ virtual void updateConnectedNodes(const SVFGEdgeSetTy& edges);
236
+ //@}
237
+
238
+ /// Return TRUE if this is a strong update STORE statement.
239
+ bool isStrongUpdate(const SVFGNode* node, NodeID& singleton);
240
+
241
+ /// Fills may/noAliases for the location/pointer pairs in cmp.
242
+ virtual void countAliases(Set<std::pair<NodeID, NodeID>> cmp, unsigned *mayAliases, unsigned *noAliases);
243
+
244
+ SVFG* svfg;
245
+ ///Get points-to set for a node from data flow IN/OUT set at a statement.
246
+ //@{
247
+ inline const PointsTo& getDFInPtsSet(const SVFGNode* stmt, const NodeID node)
248
+ {
249
+ return getDFPTDataTy()->getDFInPtsSet(stmt->getId(),node);
250
+ }
251
+ inline const PointsTo& getDFOutPtsSet(const SVFGNode* stmt, const NodeID node)
252
+ {
253
+ return getDFPTDataTy()->getDFOutPtsSet(stmt->getId(),node);
254
+ }
255
+ //@}
256
+
257
+ /// Get IN/OUT data flow map.
258
+ /// May only be called when the backing is MUTABLE.
259
+ ///@{
260
+ inline const DFInOutMap& getDFInputMap() const
261
+ {
262
+ return getMutDFPTDataTy()->getDFIn();
263
+ }
264
+ inline const DFInOutMap& getDFOutputMap() const
265
+ {
266
+ return getMutDFPTDataTy()->getDFOut();
267
+ }
268
+ ///@}
269
+
270
+ /// Performs clustering based on ander, setting the global best mapping
271
+ /// accordingly.
272
+ virtual void cluster(void);
273
+ /// Sets the global best mapping as a plain mapping, i.e. n -> n.
274
+ virtual void plainMap(void) const;
275
+
276
+ static std::unique_ptr<FlowSensitive> fspta;
277
+ SVFGBuilder memSSA;
278
+ AndersenWaveDiff *ander;
279
+
280
+ /// Save candidate mappings for evaluation's sake.
281
+ std::vector<std::pair<hclust_fast_methods, std::vector<NodeID>>> candidateMappings;
282
+
283
+ /// Statistics.
284
+ //@{
285
+ u32_t numOfProcessedAddr; /// Number of processed Addr node
286
+ u32_t numOfProcessedCopy; /// Number of processed Copy node
287
+ u32_t numOfProcessedGep; /// Number of processed Gep node
288
+ u32_t numOfProcessedPhi; /// Number of processed Phi node
289
+ u32_t numOfProcessedLoad; /// Number of processed Load node
290
+ u32_t numOfProcessedStore; /// Number of processed Store node
291
+ u32_t numOfProcessedActualParam; /// Number of processed actual param node
292
+ u32_t numOfProcessedFormalRet; /// Number of processed formal ret node
293
+ u32_t numOfProcessedMSSANode; /// Number of processed mssa node
294
+
295
+ u32_t maxSCCSize;
296
+ u32_t numOfSCC;
297
+ u32_t numOfNodesInSCC;
298
+
299
+ double solveTime; ///< time of solve.
300
+ double sccTime; ///< time of SCC detection.
301
+ double processTime; ///< time of processNode.
302
+ double propagationTime; ///< time of points-to propagation.
303
+ double directPropaTime; ///< time of points-to propagation of address-taken objects
304
+ double indirectPropaTime; ///< time of points-to propagation of top-level pointers
305
+ double updateTime; ///< time of strong/weak updates.
306
+ double addrTime; ///< time of handling address edges
307
+ double copyTime; ///< time of handling copy edges
308
+ double gepTime; ///< time of handling gep edges
309
+ double loadTime; ///< time of load edges
310
+ double storeTime; ///< time of store edges
311
+ double phiTime; ///< time of phi nodes.
312
+ double updateCallGraphTime; ///< time of updating call graph
313
+
314
+ NodeBS svfgHasSU;
315
+ //@}
316
+
317
+ void svfgStat();
318
+ };
319
+
320
+ } // End namespace SVF
321
+
322
+ #endif /* FLOWSENSITIVEANALYSIS_H_ */
@@ -0,0 +1,131 @@
1
+ /*
2
+ * Steensgaard.h
3
+ *
4
+ * Created on: 2 Feb. 2021
5
+ * Author: Yulei Sui
6
+ */
7
+
8
+ #ifndef INCLUDE_WPA_STEENSGAARD_H_
9
+ #define INCLUDE_WPA_STEENSGAARD_H_
10
+
11
+ #include "WPA/Andersen.h"
12
+
13
+ namespace SVF
14
+ {
15
+ /*!
16
+ * Equivalence-based Pointer Analysis
17
+ */
18
+ typedef WPASolver<ConstraintGraph*> WPAConstraintSolver;
19
+
20
+ class Steensgaard : public AndersenBase
21
+ {
22
+
23
+ public:
24
+ typedef Map<NodeID, NodeID> NodeToEquivClassMap;
25
+ typedef Map<NodeID, Set<NodeID>> NodeToSubsMap;
26
+
27
+ /// Constructor
28
+ Steensgaard(SVFIR* _pag) : AndersenBase(_pag, Steensgaard_WPA, true) {}
29
+
30
+ /// Create an singleton instance
31
+ static Steensgaard* createSteensgaard(SVFIR* _pag)
32
+ {
33
+ if (steens == nullptr)
34
+ {
35
+ steens = new Steensgaard(_pag);
36
+ steens->analyze();
37
+ return steens;
38
+ }
39
+ return steens;
40
+ }
41
+ static void releaseSteensgaard()
42
+ {
43
+ if (steens)
44
+ delete steens;
45
+ steens = nullptr;
46
+ }
47
+
48
+ virtual void solveWorklist() override;
49
+
50
+ void processAllAddr();
51
+
52
+ void ecUnion(NodeID id, NodeID ec);
53
+
54
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
55
+ //@{
56
+ static inline bool classof(const Steensgaard*)
57
+ {
58
+ return true;
59
+ }
60
+ static inline bool classof(const AndersenBase* pta)
61
+ {
62
+ return (pta->getAnalysisTy() == Steensgaard_WPA);
63
+ }
64
+ static inline bool classof(const PointerAnalysis* pta)
65
+ {
66
+ return (pta->getAnalysisTy() == Steensgaard_WPA);
67
+ }
68
+ //@}
69
+
70
+ /// Operation of points-to set
71
+ virtual inline const PointsTo& getPts(NodeID id) override
72
+ {
73
+ return getPTDataTy()->getPts(getEC(id));
74
+ }
75
+ /// pts(id) = pts(id) U target
76
+ virtual inline bool unionPts(NodeID id, const PointsTo& target) override
77
+ {
78
+ id = getEC(id);
79
+ return getPTDataTy()->unionPts(id, target);
80
+ }
81
+ /// pts(id) = pts(id) U pts(ptd)
82
+ virtual inline bool unionPts(NodeID id, NodeID ptd) override
83
+ {
84
+ id = getEC(id);
85
+ ptd = getEC(ptd);
86
+ return getPTDataTy()->unionPts(id, ptd);
87
+ }
88
+
89
+ /// API for equivalence class operations
90
+ /// Every constraint node maps to an unique equivalence class EC
91
+ /// An equivalence class has a set of sub constraint nodes.
92
+ inline NodeID getEC(NodeID id) const
93
+ {
94
+ NodeToEquivClassMap::const_iterator it = nodeToECMap.find(id);
95
+ if (it == nodeToECMap.end())
96
+ return id;
97
+ else
98
+ return it->second;
99
+ }
100
+ /// Return getEC(id)
101
+ inline NodeID sccRepNode(NodeID id) const override
102
+ {
103
+ return getEC(id);
104
+ }
105
+ void setEC(NodeID node, NodeID rep);
106
+
107
+ inline Set<NodeID>& getSubNodes(NodeID id)
108
+ {
109
+ nodeToSubsMap[id].insert(id);
110
+ return nodeToSubsMap[id];
111
+ }
112
+ inline void addSubNode(NodeID node, NodeID sub)
113
+ {
114
+ nodeToSubsMap[node].insert(sub);
115
+ }
116
+
117
+ /// Add copy edge on constraint graph
118
+ virtual inline bool addCopyEdge(NodeID src, NodeID dst) override
119
+ {
120
+ return consCG->addCopyCGEdge(src, dst);
121
+ }
122
+
123
+ private:
124
+ static Steensgaard* steens; // static instance
125
+ NodeToEquivClassMap nodeToECMap;
126
+ NodeToSubsMap nodeToSubsMap;
127
+ };
128
+
129
+ } // namespace SVF
130
+
131
+ #endif /* INCLUDE_WPA_STEENSGAARD_H_ */
@@ -0,0 +1,90 @@
1
+ //===- TypeAnalysis.h -- Fast type-based analysis without pointer analysis---------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-2017> <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
+ * TypeAnalysis.h
25
+ *
26
+ * Created on: 7 Sep. 2018
27
+ * Author: Yulei Sui
28
+ */
29
+
30
+ #ifndef INCLUDE_WPA_TYPEANALYSIS_H_
31
+ #define INCLUDE_WPA_TYPEANALYSIS_H_
32
+
33
+ #include "WPA/Andersen.h"
34
+
35
+ namespace SVF
36
+ {
37
+
38
+ class TypeAnalysis: public AndersenBase
39
+ {
40
+
41
+ public:
42
+ /// Constructor
43
+ TypeAnalysis(SVFIR* pag)
44
+ : AndersenBase(pag, TypeCPP_WPA)
45
+ {
46
+ }
47
+
48
+ /// Destructor
49
+ virtual ~TypeAnalysis()
50
+ {
51
+ }
52
+
53
+ /// Type analysis
54
+ void analyze() override;
55
+
56
+ /// Initialize analysis
57
+ void initialize() override;
58
+
59
+ /// Finalize analysis
60
+ virtual inline void finalize() override;
61
+
62
+ /// Add copy edge on constraint graph
63
+ inline bool addCopyEdge(NodeID src, NodeID dst) override
64
+ {
65
+ assert(false && "this function should never be executed!");
66
+ return false;
67
+ }
68
+
69
+ /// Resolve callgraph based on CHA
70
+ void callGraphSolveBasedOnCHA(const CallSiteToFunPtrMap& callsites, CallEdgeMap& newEdges);
71
+
72
+ /// Statistics of CHA and callgraph
73
+ void dumpCHAStats();
74
+
75
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
76
+ //@{
77
+ static inline bool classof(const TypeAnalysis *)
78
+ {
79
+ return true;
80
+ }
81
+ static inline bool classof(const PointerAnalysis *pta)
82
+ {
83
+ return (pta->getAnalysisTy() == TypeCPP_WPA);
84
+ }
85
+ //@}
86
+ };
87
+
88
+ } // End namespace SVF
89
+
90
+ #endif /* INCLUDE_WPA_TYPEANALYSIS_H_ */