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,230 @@
1
+ //===- ContextDDA.h -- Context-sensitive demand-driven analysis-------------//
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
+ * ContextDDA.h
25
+ *
26
+ * Created on: Aug 17, 2014
27
+ * Author: Yulei Sui
28
+ *
29
+ * The implementation is based on
30
+ * (1) Yulei Sui and Jingling Xue. "On-Demand Strong Update Analysis via Value-Flow Refinement".
31
+ * ACM SIGSOFT International Symposium on the Foundation of Software Engineering (FSE'16)
32
+ *
33
+ * (2) Yulei Sui and Jingling Xue. "Value-Flow-Based Demand-Driven Pointer Analysis for C and C++".
34
+ * IEEE Transactions on Software Engineering (TSE'18)
35
+ */
36
+
37
+ #ifndef ContextDDA_H_
38
+ #define ContextDDA_H_
39
+
40
+ #include "MemoryModel/PointerAnalysisImpl.h"
41
+ #include "DDA/DDAVFSolver.h"
42
+ #include "Util/DPItem.h"
43
+
44
+ namespace SVF
45
+ {
46
+
47
+ class FlowDDA;
48
+ class DDAClient;
49
+ typedef CxtStmtDPItem<SVFGNode> CxtLocDPItem;
50
+
51
+ /*!
52
+ * Context-, Flow- Sensitive Demand-driven Analysis
53
+ */
54
+ class ContextDDA : public CondPTAImpl<ContextCond>, public DDAVFSolver<CxtVar,CxtPtSet,CxtLocDPItem>
55
+ {
56
+
57
+ public:
58
+ /// Constructor
59
+ ContextDDA(SVFIR* _pag, DDAClient* client);
60
+
61
+ /// Destructor
62
+ virtual ~ContextDDA();
63
+
64
+ /// Initialization of the analysis
65
+ virtual void initialize() override;
66
+
67
+ /// Finalize analysis
68
+ virtual inline void finalize() override
69
+ {
70
+ CondPTAImpl<ContextCond>::finalize();
71
+ }
72
+
73
+ /// dummy analyze method
74
+ virtual void analyze() override {}
75
+
76
+ /// Compute points-to set for an unconditional pointer
77
+ virtual void computeDDAPts(NodeID id) override;
78
+
79
+ /// Compute points-to set for a context-sensitive pointer
80
+ virtual const CxtPtSet& computeDDAPts(const CxtVar& cxtVar);
81
+
82
+ /// Handle out-of-budget dpm
83
+ void handleOutOfBudgetDpm(const CxtLocDPItem& dpm);
84
+
85
+ /// Override parent method
86
+ virtual CxtPtSet getConservativeCPts(const CxtLocDPItem& dpm) override
87
+ {
88
+ const PointsTo& pts = getAndersenAnalysis()->getPts(dpm.getCurNodeID());
89
+ CxtPtSet tmpCPts;
90
+ ContextCond cxt;
91
+ for (PointsTo::iterator piter = pts.begin(); piter != pts.end(); ++piter)
92
+ {
93
+ CxtVar var(cxt,*piter);
94
+ tmpCPts.set(var);
95
+ }
96
+ return tmpCPts;
97
+ }
98
+
99
+ /// Override parent method
100
+ virtual inline NodeID getPtrNodeID(const CxtVar& var) const override
101
+ {
102
+ return var.get_id();
103
+ }
104
+ /// Handle condition for context or path analysis (backward analysis)
105
+ virtual bool handleBKCondition(CxtLocDPItem& dpm, const SVFGEdge* edge) override;
106
+
107
+ /// we exclude concrete heap given the following conditions:
108
+ /// (1) concrete calling context (not involved in recursion and not exceed the maximum context limit)
109
+ /// (2) not inside loop
110
+ virtual bool isHeapCondMemObj(const CxtVar& var, const StoreSVFGNode* store) override;
111
+
112
+ /// refine indirect call edge
113
+ bool testIndCallReachability(CxtLocDPItem& dpm, const FunObjVar* callee, const CallICFGNode* cs);
114
+
115
+ /// get callsite id from call, return 0 if it is a spurious call edge
116
+ CallSiteID getCSIDAtCall(CxtLocDPItem& dpm, const SVFGEdge* edge);
117
+
118
+ /// get callsite id from return, return 0 if it is a spurious return edge
119
+ CallSiteID getCSIDAtRet(CxtLocDPItem& dpm, const SVFGEdge* edge);
120
+
121
+
122
+ /// Pop recursive callsites
123
+ inline virtual void popRecursiveCallSites(CxtLocDPItem& dpm)
124
+ {
125
+ ContextCond& cxtCond = dpm.getCond();
126
+ cxtCond.setNonConcreteCxt();
127
+ CallStrCxt& cxt = cxtCond.getContexts();
128
+ while(!cxt.empty() && isEdgeInRecursion(cxt.back()))
129
+ {
130
+ cxt.pop_back();
131
+ }
132
+ }
133
+ /// Whether call/return inside recursion
134
+ inline virtual bool isEdgeInRecursion(CallSiteID csId)
135
+ {
136
+ const FunObjVar* caller = getCallGraph()->getCallerOfCallSite(csId);
137
+ const FunObjVar* callee = getCallGraph()->getCalleeOfCallSite(csId);
138
+ return inSameCallGraphSCC(caller, callee);
139
+ }
140
+ /// Update call graph.
141
+ //@{
142
+ virtual void updateCallGraphAndSVFG(const CxtLocDPItem& dpm,const CallICFGNode* cs,SVFGEdgeSet& svfgEdges) override
143
+ {
144
+ CallEdgeMap newEdges;
145
+ resolveIndCalls(cs, getBVPointsTo(getCachedPointsTo(dpm)), newEdges);
146
+ for (CallEdgeMap::const_iterator iter = newEdges.begin(),eiter = newEdges.end(); iter != eiter; iter++)
147
+ {
148
+ const CallICFGNode* newcs = iter->first;
149
+ const FunctionSet & functions = iter->second;
150
+ for (FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)
151
+ {
152
+ const FunObjVar* func = *func_iter;
153
+ getSVFG()->connectCallerAndCallee(newcs, func, svfgEdges);
154
+ }
155
+ }
156
+ }
157
+ //@}
158
+
159
+ /// Return TRUE if this edge is inside a SVFG SCC, i.e., src node and dst node are in the same SCC on the SVFG.
160
+ inline bool edgeInCallGraphSCC(const SVFGEdge* edge)
161
+ {
162
+ const FunObjVar* srcfun = edge->getSrcNode()->getFun();
163
+ const FunObjVar* dstfun = edge->getDstNode()->getFun();
164
+
165
+ if(srcfun && dstfun)
166
+ return inSameCallGraphSCC(srcfun,dstfun);
167
+
168
+ assert(edge->isRetVFGEdge() == false && "should not be an inter-procedural return edge" );
169
+
170
+ return false;
171
+ }
172
+
173
+ /// processGep node
174
+ virtual CxtPtSet processGepPts(const GepSVFGNode* gep, const CxtPtSet& srcPts) override;
175
+
176
+ /// Handle Address SVFGNode to add proper conditional points-to
177
+ virtual void handleAddr(CxtPtSet& pts,const CxtLocDPItem& dpm,const AddrSVFGNode* addr) override
178
+ {
179
+ NodeID srcID = addr->getPAGSrcNodeID();
180
+ /// whether this object is set field-insensitive during pre-analysis
181
+ if (isFieldInsensitive(srcID))
182
+ srcID = getFIObjVar(srcID);
183
+
184
+ CxtVar var(dpm.getCond(),srcID);
185
+ addDDAPts(pts,var);
186
+ DBOUT(DDDA, SVFUtil::outs() << "\t add points-to target " << var << " to dpm ");
187
+ DBOUT(DDDA, dpm.dump());
188
+ }
189
+
190
+ /// Propagate along indirect value-flow if two objects of load and store are same
191
+ virtual inline bool propagateViaObj(const CxtVar& storeObj, const CxtVar& loadObj) override
192
+ {
193
+ return isSameVar(storeObj,loadObj);
194
+ }
195
+
196
+ /// Whether two call string contexts are compatible which may represent the same memory object
197
+ /// compare with call strings from last few callsite ids (most recent ids to objects):
198
+ /// compatible : (e.g., 123 == 123, 123 == 23). not compatible (e.g., 123 != 423)
199
+ virtual inline bool isCondCompatible(const ContextCond& cxt1, const ContextCond& cxt2, bool singleton) const override;
200
+
201
+ /// Whether this edge is treated context-insensitively
202
+ bool isInsensitiveCallRet(const SVFGEdge* edge)
203
+ {
204
+ return insensitveEdges.find(edge) != insensitveEdges.end();
205
+ }
206
+ /// Return insensitive edge set
207
+ inline ConstSVFGEdgeSet& getInsensitiveEdgeSet()
208
+ {
209
+ return insensitveEdges;
210
+ }
211
+ /// dump context call strings
212
+ virtual inline void dumpContexts(const ContextCond& cxts)
213
+ {
214
+ SVFUtil::outs() << cxts.toString() << "\n";
215
+ }
216
+
217
+ virtual const std::string PTAName() const override
218
+ {
219
+ return "Context Sensitive DDA";
220
+ }
221
+
222
+ private:
223
+ ConstSVFGEdgeSet insensitveEdges;///< insensitive call-return edges
224
+ FlowDDA* flowDDA; ///< downgrade to flowDDA if out-of-budget
225
+ DDAClient* _client; ///< DDA client
226
+ };
227
+
228
+ } // End namespace SVF
229
+
230
+ #endif /* ContextDDA_H_ */
@@ -0,0 +1,163 @@
1
+ //===- DDAClient.h -- Clients of demand-driven analysis-------------//
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
+ /*
25
+ * @file: DDAClient.h
26
+ * @author: yesen
27
+ * @date: 4 Feb 2015
28
+ *
29
+ * LICENSE
30
+ *
31
+ */
32
+
33
+
34
+ #ifndef DDACLIENT_H_
35
+ #define DDACLIENT_H_
36
+
37
+ #include "SVFIR/SVFIR.h"
38
+ #include "MemoryModel/PointerAnalysisImpl.h"
39
+ #include "Graphs/SVFG.h"
40
+ #include "SVFIR/SVFValue.h"
41
+
42
+ namespace SVF
43
+ {
44
+
45
+ /**
46
+ * General DDAClient which queries all top level pointers by default.
47
+ */
48
+ class DDAClient
49
+ {
50
+ public:
51
+ DDAClient() : pag(nullptr), curPtr(0), solveAll(true) {}
52
+
53
+ virtual ~DDAClient() {}
54
+
55
+ virtual inline void initialise() {}
56
+
57
+ /// Collect candidate pointers for query.
58
+ virtual inline OrderedNodeSet& collectCandidateQueries(SVFIR* p)
59
+ {
60
+ setPAG(p);
61
+ if (solveAll)
62
+ candidateQueries = pag->getAllValidPtrs();
63
+ else
64
+ {
65
+ for (OrderedNodeSet::iterator it = userInput.begin(), eit = userInput.end(); it != eit; ++it)
66
+ addCandidate(*it);
67
+ }
68
+ return candidateQueries;
69
+ }
70
+ /// Get candidate queries
71
+ inline const OrderedNodeSet& getCandidateQueries() const
72
+ {
73
+ return candidateQueries;
74
+ }
75
+
76
+ /// Call back used by DDAVFSolver.
77
+ virtual inline void handleStatement(const SVFGNode*, NodeID) {}
78
+ /// Set SVFIR graph.
79
+ inline void setPAG(SVFIR* g)
80
+ {
81
+ pag = g;
82
+ }
83
+ /// Set the pointer being queried.
84
+ void setCurrentQueryPtr(NodeID ptr)
85
+ {
86
+ curPtr = ptr;
87
+ }
88
+ /// Set pointer to be queried by DDA analysis.
89
+ void setQuery(NodeID ptr)
90
+ {
91
+ userInput.insert(ptr);
92
+ solveAll = false;
93
+ }
94
+
95
+ virtual void answerQueries(PointerAnalysis* pta);
96
+
97
+ virtual inline void performStat(PointerAnalysis*) {}
98
+
99
+ virtual inline void collectWPANum() {}
100
+ protected:
101
+ void addCandidate(NodeID id)
102
+ {
103
+ if (pag->isValidTopLevelPtr(pag->getGNode(id)))
104
+ candidateQueries.insert(id);
105
+ }
106
+
107
+ SVFIR* pag; ///< SVFIR graph used by current DDA analysis
108
+ NodeID curPtr; ///< current pointer being queried
109
+ OrderedNodeSet candidateQueries; ///< store all candidate pointers to be queried
110
+
111
+ private:
112
+ OrderedNodeSet userInput; ///< User input queries
113
+ bool solveAll; ///< TRUE if all top level pointers are being queried
114
+ };
115
+
116
+
117
+ /**
118
+ * DDA client with function pointers as query candidates.
119
+ */
120
+ class FunptrDDAClient : public DDAClient
121
+ {
122
+ private:
123
+ typedef OrderedMap<NodeID,const CallICFGNode*> VTablePtrToCallSiteMap;
124
+ VTablePtrToCallSiteMap vtableToCallSiteMap;
125
+ public:
126
+ FunptrDDAClient() : DDAClient() {}
127
+ ~FunptrDDAClient() {}
128
+
129
+ /// Only collect function pointers as query candidates.
130
+ virtual OrderedNodeSet& collectCandidateQueries(SVFIR* p);
131
+ virtual void performStat(PointerAnalysis* pta);
132
+ };
133
+
134
+
135
+
136
+ /**
137
+ * DDA client with function pointers as query candidates.
138
+ */
139
+ class AliasDDAClient : public DDAClient
140
+ {
141
+
142
+ public:
143
+ typedef OrderedSet<const PAGNode*> PAGNodeSet;
144
+
145
+ AliasDDAClient() : DDAClient() {}
146
+ ~AliasDDAClient() {}
147
+
148
+ /// Only collect function pointers as query candidates.
149
+ virtual OrderedNodeSet& collectCandidateQueries(SVFIR* pag);
150
+
151
+ virtual void performStat(PointerAnalysis* pta);
152
+
153
+ private:
154
+ typedef OrderedMap<NodeID,const CallICFGNode*> VTablePtrToCallSiteMap;
155
+ VTablePtrToCallSiteMap vtableToCallSiteMap;
156
+ PAGNodeSet loadSrcNodes;
157
+ PAGNodeSet storeDstNodes;
158
+ PAGNodeSet gepSrcNodes;
159
+ };
160
+
161
+ } // End namespace SVF
162
+
163
+ #endif /* DDACLIENT_H_ */
@@ -0,0 +1,102 @@
1
+ //===- DDAPass.h -- Demand-driven analysis driver pass-------------//
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: DDAPass.h
25
+ * @author: Yulei Sui
26
+ * @date: 01/07/2014
27
+ * @version: 1.0
28
+ *
29
+ */
30
+
31
+
32
+ #ifndef DDAPASS_H_
33
+ #define DDAPASS_H_
34
+
35
+ #include "DDA/DDAClient.h"
36
+ #include "Graphs/SCC.h"
37
+ #include "MemoryModel/PointerAnalysisImpl.h"
38
+
39
+ namespace SVF
40
+ {
41
+
42
+ /*!
43
+ * Demand-Driven Pointer Analysis.
44
+ * This class performs various pointer analysis on the given module.
45
+ */
46
+ class DDAPass
47
+ {
48
+
49
+ public:
50
+ /// Pass ID
51
+ static char ID;
52
+ typedef SCCDetection<SVFG*> SVFGSCC;
53
+ typedef OrderedSet<const SVFGEdge*> SVFGEdgeSet;
54
+ typedef std::vector<PointerAnalysis*> PTAVector;
55
+
56
+ DDAPass() : _pta(nullptr), _client(nullptr) {}
57
+ ~DDAPass();
58
+
59
+ /// Interface expose to users of our pointer analysis, given Value infos
60
+ virtual AliasResult alias(const SVFVar* V1, const SVFVar* V2)
61
+ {
62
+ return alias(V1->getId(), V2->getId());
63
+ }
64
+
65
+ /// Interface expose to users of our pointer analysis, given PAGNodes
66
+ virtual AliasResult alias(NodeID V1, NodeID V2);
67
+
68
+ /// We start from here
69
+ virtual void runOnModule(SVFIR* module);
70
+
71
+ /// Select a client
72
+ virtual void selectClient();
73
+
74
+ /// Pass name
75
+ virtual inline std::string getPassName() const
76
+ {
77
+ return "DDAPass";
78
+ }
79
+
80
+ private:
81
+ /// Print queries' pts
82
+ void printQueryPTS();
83
+ /// Create pointer analysis according to specified kind and analyze the module.
84
+ void runPointerAnalysis(SVFIR* module, u32_t kind);
85
+ /// Context insensitive Edge for DDA
86
+ void initCxtInsensitiveEdges(PointerAnalysis* pta, const SVFG* svfg,const SVFGSCC* svfgSCC, SVFGEdgeSet& insensitveEdges);
87
+ /// Return TRUE if this edge is inside a SVFG SCC, i.e., src node and dst node are in the same SCC on the SVFG.
88
+ bool edgeInSVFGSCC(const SVFGSCC* svfgSCC,const SVFGEdge* edge);
89
+ /// Return TRUE if this edge is inside a SVFG SCC, i.e., src node and dst node are in the same SCC on the SVFG.
90
+ bool edgeInCallGraphSCC(PointerAnalysis* pta,const SVFGEdge* edge);
91
+
92
+ void collectCxtInsenEdgeForRecur(PointerAnalysis* pta, const SVFG* svfg,SVFGEdgeSet& insensitveEdges);
93
+ void collectCxtInsenEdgeForVFCycle(PointerAnalysis* pta, const SVFG* svfg,const SVFGSCC* svfgSCC, SVFGEdgeSet& insensitveEdges);
94
+
95
+ std::unique_ptr<PointerAnalysis> _pta; ///< pointer analysis to be executed.
96
+ DDAClient* _client; ///< DDA client used
97
+
98
+ };
99
+
100
+ } // End namespace SVF
101
+
102
+ #endif /* WPA_H_ */
@@ -0,0 +1,121 @@
1
+ //===- DDAStat.h -- Statistics for demand-driven pass-------------//
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
+ * DDAStat.h
25
+ *
26
+ * Created on: Sep 15, 2014
27
+ * Author: Yulei Sui
28
+ */
29
+
30
+ #ifndef DDASTAT_H_
31
+ #define DDASTAT_H_
32
+
33
+ #include "Util/PTAStat.h"
34
+ #include "MemoryModel/PointsTo.h"
35
+
36
+ namespace SVF
37
+ {
38
+
39
+ class FlowDDA;
40
+ class ContextDDA;
41
+ class SVFG;
42
+ class PointerAnalysis;
43
+
44
+ /*!
45
+ * Statistics of demand-driven analysis
46
+ */
47
+ class DDAStat : public PTAStat
48
+ {
49
+
50
+ public:
51
+ DDAStat(FlowDDA* pta);
52
+ DDAStat(ContextDDA* pta);
53
+
54
+ u32_t _NumOfDPM;
55
+ u32_t _NumOfStrongUpdates;
56
+ u32_t _NumOfMustAliases;
57
+ u32_t _NumOfInfeasiblePath;
58
+
59
+ u64_t _NumOfStep;
60
+ u64_t _NumOfStepInCycle;
61
+ double _AnaTimePerQuery;
62
+ double _AnaTimeCyclePerQuery;
63
+ double _TotalTimeOfQueries;
64
+ double _TotalTimeOfBKCondition;
65
+
66
+ NodeBS _StrongUpdateStores;
67
+
68
+ void performStatPerQuery(NodeID ptr) override;
69
+
70
+ void performStat() override;
71
+
72
+ void printStat(std::string str = "") override;
73
+
74
+ void printStatPerQuery(NodeID ptr, const PointsTo& pts) override;
75
+
76
+ void getNumOfOOBQuery();
77
+
78
+ private:
79
+ FlowDDA* flowDDA;
80
+ ContextDDA* contextDDA;
81
+
82
+ u32_t _TotalNumOfQuery;
83
+ u32_t _TotalNumOfOutOfBudgetQuery;
84
+ u32_t _TotalNumOfDPM;
85
+ u32_t _TotalNumOfStrongUpdates;
86
+ u32_t _TotalNumOfMustAliases;
87
+ u32_t _TotalNumOfInfeasiblePath;
88
+
89
+ u32_t _TotalNumOfStep;
90
+ u32_t _TotalNumOfStepInCycle;
91
+
92
+ u32_t _NumOfIndCallEdgeSolved;
93
+ u32_t _MaxCPtsSize;
94
+ u32_t _MaxPtsSize;
95
+ u32_t _TotalCPtsSize;
96
+ u32_t _TotalPtsSize;
97
+ u32_t _NumOfNullPtr;
98
+ u32_t _NumOfConstantPtr;
99
+ u32_t _NumOfBlackholePtr;
100
+
101
+ double _AvgNumOfDPMAtSVFGNode;
102
+ u32_t _MaxNumOfDPMAtSVFGNode;
103
+
104
+ NUMStatMap NumPerQueryStatMap;
105
+
106
+ void initDefault();
107
+
108
+ public:
109
+ SVFG* getSVFG() const;
110
+
111
+ PointerAnalysis* getPTA() const;
112
+
113
+ inline NodeBS& getStrongUpdateStores()
114
+ {
115
+ return _StrongUpdateStores;
116
+ }
117
+ };
118
+
119
+ } // End namespace SVF
120
+
121
+ #endif /* DDASTAT_H_ */