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,73 @@
1
+ //===- MTAStat.h -- Statistics for MTA-------------//
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
+ * MTAStat.h
25
+ *
26
+ * Created on: Jun 23, 2015
27
+ * Author: Yulei Sui, Peng Di
28
+ */
29
+
30
+ #ifndef MTASTAT_H_
31
+ #define MTASTAT_H_
32
+
33
+ #include "Util/PTAStat.h"
34
+
35
+ namespace SVF
36
+ {
37
+
38
+ class Instruction;
39
+ class ThreadCallGraph;
40
+ class TCT;
41
+ class MHP;
42
+ class LockAnalysis;
43
+ class MTAAnnotator;
44
+ /*!
45
+ * Statistics for MTA
46
+ */
47
+ class MTAStat : public PTAStat
48
+ {
49
+
50
+ public:
51
+ typedef Set<const Instruction*> InstSet;
52
+
53
+ /// Constructor
54
+ MTAStat():PTAStat(nullptr),TCTTime(0),MHPTime(0),AnnotationTime(0)
55
+ {
56
+ }
57
+ /// Statistics for thread call graph
58
+ void performThreadCallGraphStat(ThreadCallGraph* tcg);
59
+ /// Statistics for thread creation tree
60
+ void performTCTStat(TCT* tct);
61
+ /// Statistics for MHP statement pairs
62
+ void performMHPPairStat(MHP* mhp, LockAnalysis* lsa);
63
+ /// Statistics for annotation
64
+ //void performAnnotationStat(MTAAnnotator* anno);
65
+
66
+ double TCTTime;
67
+ double MHPTime;
68
+ double AnnotationTime;
69
+ };
70
+
71
+ } // End namespace SVF
72
+
73
+ #endif /* MTASTAT_H_ */
@@ -0,0 +1,620 @@
1
+ //===- TCT.h -- Thread creation tree-------------//
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
+ * TCT.h
25
+ *
26
+ * Created on: Jun 24, 2015
27
+ * Author: Yulei Sui, Peng Di
28
+ */
29
+
30
+ #ifndef TCTNodeDetector_H_
31
+ #define TCTNodeDetector_H_
32
+
33
+ #include "Graphs/SCC.h"
34
+ #include "Graphs/ThreadCallGraph.h"
35
+ #include "Util/CxtStmt.h"
36
+ #include "Util/SVFUtil.h"
37
+ #include <set>
38
+ #include <vector>
39
+
40
+ namespace SVF
41
+ {
42
+
43
+ class TCTNode;
44
+
45
+
46
+ /*
47
+ * Thread creation edge represents a spawning relation between two context sensitive threads
48
+ */
49
+ typedef GenericEdge<TCTNode> GenericTCTEdgeTy;
50
+ class TCTEdge: public GenericTCTEdgeTy
51
+ {
52
+ public:
53
+ enum CEDGEK
54
+ {
55
+ ThreadCreateEdge
56
+ };
57
+ /// Constructor
58
+ TCTEdge(TCTNode* s, TCTNode* d, CEDGEK kind) :
59
+ GenericTCTEdgeTy(s, d, kind)
60
+ {
61
+ }
62
+ /// Destructor
63
+ virtual ~TCTEdge()
64
+ {
65
+ }
66
+ /// Classof
67
+ //@{
68
+ static inline bool classof(const TCTEdge*)
69
+ {
70
+ return true;
71
+ }
72
+ static inline bool classof(const GenericTCTEdgeTy *edge)
73
+ {
74
+ return edge->getEdgeKind() == TCTEdge::ThreadCreateEdge;
75
+ }
76
+ ///@}
77
+ typedef GenericNode<TCTNode, TCTEdge>::GEdgeSetTy ThreadCreateEdgeSet;
78
+
79
+ };
80
+
81
+ /*
82
+ * Each node represents a context-sensitive thread
83
+ */
84
+ typedef GenericNode<TCTNode, TCTEdge> GenericTCTNodeTy;
85
+ class TCTNode: public GenericTCTNodeTy
86
+ {
87
+
88
+ public:
89
+ /// Constructor
90
+ TCTNode(NodeID i, const CxtThread& cctx) :
91
+ GenericTCTNodeTy(i, TCTNodeKd), ctx(cctx), multiforked(false)
92
+ {
93
+ }
94
+
95
+ void dump()
96
+ {
97
+ SVFUtil::outs() << "---\ntid: " << this->getId() << " inloop:" << ctx.isInloop() << " incycle:" << ctx.isIncycle() << " multiforked:"<< isMultiforked();
98
+ }
99
+
100
+ /// Get CxtThread
101
+ inline const CxtThread& getCxtThread() const
102
+ {
103
+ return ctx;
104
+ }
105
+
106
+ /// inloop, incycle attributes
107
+ //@{
108
+ inline bool isInloop() const
109
+ {
110
+ return ctx.isInloop();
111
+ }
112
+ inline bool isIncycle() const
113
+ {
114
+ return ctx.isIncycle();
115
+ }
116
+ inline void setMultiforked(bool value)
117
+ {
118
+ multiforked = value;
119
+ }
120
+ inline bool isMultiforked() const
121
+ {
122
+ return multiforked;
123
+ }
124
+ //@}
125
+
126
+ ///Methods for support type inquiry through isa, cast, and dyn_cast:
127
+ //@{
128
+ static inline bool classof(const TCTNode *)
129
+ {
130
+ return true;
131
+ }
132
+
133
+ static inline bool classof(const GenericTCTNodeTy *node)
134
+ {
135
+ return node->getNodeKind() == TCTNodeKd;
136
+ }
137
+ static inline bool classof(const SVFValue*node)
138
+ {
139
+ return node->getNodeKind() == TCTNodeKd;
140
+ }
141
+ //@}
142
+
143
+
144
+ private:
145
+ const CxtThread ctx;
146
+ bool multiforked;
147
+ };
148
+
149
+ /*!
150
+ * Pointer Analysis Call Graph used internally for various pointer analysis
151
+ */
152
+ typedef GenericGraph<TCTNode, TCTEdge> GenericThreadCreateTreeTy;
153
+ class TCT: public GenericThreadCreateTreeTy
154
+ {
155
+
156
+ public:
157
+ typedef SVFLoopAndDomInfo::LoopBBs LoopBBs;
158
+ typedef TCTEdge::ThreadCreateEdgeSet ThreadCreateEdgeSet;
159
+ typedef ThreadCreateEdgeSet::iterator TCTNodeIter;
160
+ typedef Set<const FunObjVar*> FunSet;
161
+ typedef std::vector<const ICFGNode*> InstVec;
162
+ typedef Set<const ICFGNode*> InstSet;
163
+ typedef Set<const CallGraphNode*> PTACGNodeSet;
164
+ typedef Map<CxtThread,TCTNode*> CxtThreadToNodeMap;
165
+ typedef Map<CxtThread,CallStrCxt> CxtThreadToForkCxt;
166
+ typedef Map<CxtThread,const FunObjVar*> CxtThreadToFun;
167
+ typedef Map<const ICFGNode*, LoopBBs> InstToLoopMap;
168
+ typedef FIFOWorkList<CxtThreadProc> CxtThreadProcVec;
169
+ typedef Set<CxtThreadProc> CxtThreadProcSet;
170
+ typedef SCCDetection<CallGraph*> ThreadCallGraphSCC;
171
+
172
+ /// Constructor
173
+ TCT(PointerAnalysis* p) :pta(p),TCTNodeNum(0),TCTEdgeNum(0),MaxCxtSize(0)
174
+ {
175
+ tcg = SVFUtil::cast<ThreadCallGraph>(pta->getCallGraph());
176
+ tcg->updateCallGraph(pta);
177
+ //tcg->updateJoinEdge(pta);
178
+ tcgSCC = pta->getCallGraphSCC();
179
+ tcgSCC->find();
180
+ build();
181
+ }
182
+
183
+ /// Destructor
184
+ virtual ~TCT()
185
+ {
186
+ destroy();
187
+ }
188
+
189
+ /// Get TCG
190
+ inline ThreadCallGraph* getThreadCallGraph() const
191
+ {
192
+ return tcg;
193
+ }
194
+ /// Get PTA
195
+ inline PointerAnalysis* getPTA() const
196
+ {
197
+ return pta;
198
+ }
199
+ /// Get TCT node
200
+ inline TCTNode* getTCTNode(NodeID id) const
201
+ {
202
+ return getGNode(id);
203
+ }
204
+ /// Whether we have already created this call graph edge
205
+ TCTEdge* hasGraphEdge(TCTNode* src, TCTNode* dst, TCTEdge::CEDGEK kind) const;
206
+ /// Get call graph edge via nodes
207
+ TCTEdge* getGraphEdge(TCTNode* src, TCTNode* dst, TCTEdge::CEDGEK kind);
208
+
209
+ /// Get children and parent nodes
210
+ //@{
211
+ inline ThreadCreateEdgeSet::const_iterator getChildrenBegin(const TCTNode* node) const
212
+ {
213
+ return node->OutEdgeBegin();
214
+ }
215
+ inline ThreadCreateEdgeSet::const_iterator getChildrenEnd(const TCTNode* node) const
216
+ {
217
+ return node->OutEdgeEnd();
218
+ }
219
+ inline ThreadCreateEdgeSet::const_iterator getParentsBegin(const TCTNode* node) const
220
+ {
221
+ return node->InEdgeBegin();
222
+ }
223
+ inline ThreadCreateEdgeSet::const_iterator getParentsEnd(const TCTNode* node) const
224
+ {
225
+ return node->InEdgeEnd();
226
+ }
227
+ //@}
228
+
229
+ /// Get marked candidate functions
230
+ inline const FunSet& getMakredProcs() const
231
+ {
232
+ return candidateFuncSet;
233
+ }
234
+
235
+ /// Get marked candidate functions
236
+ inline const FunSet& getEntryProcs() const
237
+ {
238
+ return entryFuncSet;
239
+ }
240
+
241
+ /// Get Statistics
242
+ //@{
243
+ inline u32_t getTCTNodeNum() const
244
+ {
245
+ return TCTNodeNum;
246
+ }
247
+ inline u32_t getTCTEdgeNum() const
248
+ {
249
+ return TCTEdgeNum;
250
+ }
251
+ inline u32_t getMaxCxtSize() const
252
+ {
253
+ return MaxCxtSize;
254
+ }
255
+ //@}
256
+
257
+ /// Whether it is calling an external function
258
+ inline bool isExtCall(const ICFGNode* inst)
259
+ {
260
+ if(const CallICFGNode* call = SVFUtil::dyn_cast<CallICFGNode>(inst))
261
+ return SVFUtil::isExtCall(call);
262
+ return false;
263
+ }
264
+ /// Whether it is a callsite
265
+ inline bool isCallSite(const ICFGNode* inst)
266
+ {
267
+ return SVFUtil::isa<CallICFGNode>(inst);
268
+ }
269
+
270
+ /// Find/Get TCT node
271
+ //@{
272
+ inline bool hasTCTNode(const CxtThread& ct) const
273
+ {
274
+ return ctpToNodeMap.find(ct)!=ctpToNodeMap.end();
275
+ }
276
+ inline TCTNode* getTCTNode(const CxtThread& ct) const
277
+ {
278
+ CxtThreadToNodeMap::const_iterator it = ctpToNodeMap.find(ct);
279
+ assert(it!=ctpToNodeMap.end() && "TCT node not found??");
280
+ return it->second;
281
+ }
282
+ //@}
283
+
284
+ /// Whether it is a candidate function for indirect call
285
+ inline bool isCandidateFun(const CallGraph::FunctionSet& callees) const
286
+ {
287
+ for(CallGraph::FunctionSet::const_iterator cit = callees.begin(),
288
+ ecit = callees.end(); cit!=ecit; cit++)
289
+ {
290
+ if(candidateFuncSet.find((*cit))!=candidateFuncSet.end())
291
+ return true;
292
+ }
293
+ return false;
294
+ }
295
+ inline bool isCandidateFun(const FunObjVar* fun) const
296
+ {
297
+ return candidateFuncSet.find(fun)!=candidateFuncSet.end();
298
+ }
299
+ /// Whether two functions in the same callgraph scc
300
+ inline bool inSameCallGraphSCC(const CallGraphNode* src,const CallGraphNode* dst)
301
+ {
302
+ return (tcgSCC->repNode(src->getId()) == tcgSCC->repNode(dst->getId()));
303
+ }
304
+
305
+ /// Get parent and sibling threads
306
+ //@{
307
+ /// Has parent thread
308
+ inline bool hasParentThread(NodeID tid) const
309
+ {
310
+ const TCTNode* node = getTCTNode(tid);
311
+ return node->getInEdges().size()==1;
312
+ }
313
+ /// Get parent thread
314
+ inline NodeID getParentThread(NodeID tid) const
315
+ {
316
+ const TCTNode* node = getTCTNode(tid);
317
+ assert(node->getInEdges().size()<=1 && "should have at most one parent thread");
318
+ assert(node->getInEdges().size()==1 && "does not have a parent thread");
319
+ const TCTEdge* edge = *(node->getInEdges().begin());
320
+ return edge->getSrcID();
321
+ }
322
+ /// Get all ancestor threads
323
+ const NodeBS getAncestorThread(NodeID tid) const
324
+ {
325
+ NodeBS tds;
326
+ if(hasParentThread(tid) == false)
327
+ return tds;
328
+
329
+ FIFOWorkList<NodeID> worklist;
330
+ worklist.push(getParentThread(tid));
331
+
332
+ while(!worklist.empty())
333
+ {
334
+ NodeID t = worklist.pop();
335
+ if(tds.test_and_set(t))
336
+ {
337
+ if(hasParentThread(t))
338
+ worklist.push(getParentThread(t));
339
+ }
340
+ }
341
+ return tds;
342
+ }
343
+ /// Get sibling threads
344
+ inline const NodeBS getSiblingThread(NodeID tid) const
345
+ {
346
+ NodeBS tds;
347
+ if(hasParentThread(tid) == false)
348
+ return tds;
349
+
350
+ const TCTNode* node = getTCTNode(getParentThread(tid));
351
+ for(ThreadCreateEdgeSet::const_iterator it = getChildrenBegin(node), eit = getChildrenEnd(node); it!=eit; ++it)
352
+ {
353
+ NodeID child = (*it)->getDstNode()->getId();
354
+ if(child!=tid)
355
+ tds.set(child);
356
+ }
357
+
358
+ return tds;
359
+ }
360
+ //@}
361
+
362
+ /// get the context of a thread at its spawning site (fork site)
363
+ const CallStrCxt& getCxtOfCxtThread(const CxtThread& ct) const
364
+ {
365
+ CxtThreadToForkCxt::const_iterator it = ctToForkCxtMap.find(ct);
366
+ assert(it!=ctToForkCxtMap.end() && "Cxt Thread not found!!");
367
+ return it->second;
368
+ }
369
+
370
+ /// get the start routine function of a thread
371
+ const FunObjVar* getStartRoutineOfCxtThread(const CxtThread& ct) const
372
+ {
373
+ CxtThreadToFun::const_iterator it = ctToRoutineFunMap.find(ct);
374
+ assert(it!=ctToRoutineFunMap.end() && "Cxt Thread not found!!");
375
+ return it->second;
376
+ }
377
+
378
+ /// Get loop for join site
379
+ inline LoopBBs& getJoinLoop(const CallICFGNode* join)
380
+ {
381
+ assert(tcg->getThreadAPI()->isTDJoin(join) && "not a join site");
382
+ InstToLoopMap::iterator it = joinSiteToLoopMap.find(join);
383
+ assert(it!=joinSiteToLoopMap.end() && "loop not found");
384
+ return it->second;
385
+ }
386
+
387
+ inline bool hasJoinLoop(const CallICFGNode* join) const
388
+ {
389
+ assert(tcg->getThreadAPI()->isTDJoin(join) && "not a join site");
390
+ InstToLoopMap::const_iterator it = joinSiteToLoopMap.find(join);
391
+ return it!=joinSiteToLoopMap.end();
392
+ }
393
+
394
+ bool hasLoop(const SVFBasicBlock* bb) const
395
+ {
396
+ const FunObjVar* fun = bb->getFunction();
397
+ return fun->hasLoopInfo(bb);
398
+ }
399
+ bool hasLoop(const ICFGNode* inst) const
400
+ {
401
+ return hasLoop(inst->getBB());
402
+ }
403
+ /// Return true if a join instruction must be executed inside a loop
404
+ bool isJoinMustExecutedInLoop(const LoopBBs& lp,const ICFGNode* join);
405
+ /// Get loop for an instruction
406
+ const LoopBBs& getLoop(const ICFGNode* inst);
407
+ /// Get loop for fork/join site
408
+ const LoopBBs& getLoop(const SVFBasicBlock* bb);
409
+
410
+ /// Push calling context
411
+ void pushCxt(CallStrCxt& cxt, const CallICFGNode* call, const FunObjVar* callee);
412
+ /// Match context
413
+ bool matchCxt(CallStrCxt& cxt, const CallICFGNode* call, const FunObjVar* callee);
414
+
415
+ inline void pushCxt(CallStrCxt& cxt, CallSiteID csId)
416
+ {
417
+ cxt.push_back(csId);
418
+ if (cxt.size() > MaxCxtSize)
419
+ MaxCxtSize = cxt.size();
420
+ }
421
+ /// Whether a join site is in recursion
422
+ inline bool isJoinSiteInRecursion(const CallICFGNode* join) const
423
+ {
424
+ assert(tcg->getThreadAPI()->isTDJoin(join) && "not a join site");
425
+ return inRecurJoinSites.find(join)!=inRecurJoinSites.end();
426
+ }
427
+ /// Dump calling context
428
+ void dumpCxt(CallStrCxt& cxt);
429
+
430
+ /// Dump the graph
431
+ void dump(const std::string& filename);
432
+
433
+ /// Print TCT information
434
+ void print() const;
435
+
436
+ private:
437
+ ThreadCallGraph* tcg;
438
+ PointerAnalysis* pta;
439
+ u32_t TCTNodeNum;
440
+ u32_t TCTEdgeNum;
441
+ u32_t MaxCxtSize;
442
+
443
+ /// Add TCT node
444
+ inline TCTNode* addTCTNode(const CxtThread& ct)
445
+ {
446
+ assert(ctpToNodeMap.find(ct)==ctpToNodeMap.end() && "Already has this node!!");
447
+ NodeID id = TCTNodeNum;
448
+ TCTNode* node = new TCTNode(id, ct);
449
+ addGNode(id, node);
450
+ TCTNodeNum++;
451
+ ctpToNodeMap[ct] = node;
452
+ return node;
453
+ }
454
+ /// Add TCT edge
455
+ inline bool addTCTEdge(TCTNode* src, TCTNode* dst)
456
+ {
457
+ if (!hasGraphEdge(src, dst, TCTEdge::ThreadCreateEdge))
458
+ {
459
+ TCTEdge* edge = new TCTEdge(src, dst, TCTEdge::ThreadCreateEdge);
460
+ dst->addIncomingEdge(edge);
461
+ src->addOutgoingEdge(edge);
462
+ TCTEdgeNum++;
463
+ return true;
464
+ }
465
+ return false;
466
+ }
467
+
468
+ /// Build TCT
469
+ void build();
470
+
471
+ /// Mark relevant procedures that are backward reachable from any fork/join site
472
+ //@{
473
+ void markRelProcs();
474
+ void markRelProcs(const FunObjVar* fun);
475
+ //@}
476
+
477
+ /// Get entry functions that are neither called by other functions nor extern functions
478
+ void collectEntryFunInCallGraph();
479
+
480
+ /// Collect multi-forked threads whose 1, cxt is in loop or recursion;
481
+ /// 2, parent thread is a multi-forked thread.
482
+ void collectMultiForkedThreads();
483
+
484
+ /// Handle join site in loop
485
+ //@{
486
+ /// collect loop info for join sites
487
+ void collectLoopInfoForJoin();
488
+ /// Whether a given bb is a loop head of a inloop join site
489
+ bool isLoopHeaderOfJoinLoop(const SVFBasicBlock* bb);
490
+ /// Whether a given bb is an exit of a inloop join site
491
+ bool isLoopExitOfJoinLoop(const SVFBasicBlock* bb);
492
+ //@}
493
+
494
+ /// Multi-forked threads
495
+ //@{
496
+ /// Whether an instruction is in a loop
497
+ bool isInLoopInstruction(const ICFGNode* inst);
498
+ /// Whether an instruction is in a recursion
499
+ bool isInRecursion(const ICFGNode* inst) const;
500
+ //@}
501
+
502
+ /// Handle call relations
503
+ void handleCallRelation(CxtThreadProc& ctp, const CallGraphEdge* cgEdge, const CallICFGNode* call);
504
+
505
+ /// Get or create a tct node based on CxtThread
506
+ //@{
507
+ inline TCTNode* getOrCreateTCTNode(const CallStrCxt& cxt, const ICFGNode* fork,const CallStrCxt& oldCxt, const FunObjVar* routine)
508
+ {
509
+ CxtThread ct(cxt,fork);
510
+ CxtThreadToNodeMap::const_iterator it = ctpToNodeMap.find(ct);
511
+ if(it!=ctpToNodeMap.end())
512
+ {
513
+ return it->second;
514
+ }
515
+
516
+ addCxtOfCxtThread(oldCxt,ct);
517
+ addStartRoutineOfCxtThread(routine,ct);
518
+
519
+ setMultiForkedAttrs(ct);
520
+ return addTCTNode(ct);
521
+ }
522
+ //@}
523
+
524
+ /// Set multi-forked thread attributes
525
+ void setMultiForkedAttrs(CxtThread& ct)
526
+ {
527
+ /// non-main thread
528
+ if(ct.getThread() != nullptr)
529
+ {
530
+ const ICFGNode* svfInst = ct.getThread();
531
+ ct.setInloop(isInLoopInstruction(svfInst));
532
+ ct.setIncycle(isInRecursion(svfInst));
533
+ }
534
+ /// main thread
535
+ else
536
+ {
537
+ ct.setInloop(false);
538
+ ct.setIncycle(false);
539
+ }
540
+ }
541
+
542
+ /// Add context for a thread at its spawning site (fork site)
543
+ void addCxtOfCxtThread(const CallStrCxt& cxt, const CxtThread& ct)
544
+ {
545
+ ctToForkCxtMap[ct] = cxt;
546
+ }
547
+ /// Add start routine function of a cxt thread
548
+ void addStartRoutineOfCxtThread(const FunObjVar* fun, const CxtThread& ct)
549
+ {
550
+ ctToRoutineFunMap[ct] = fun;
551
+ }
552
+
553
+ /// WorkList helper functions
554
+ //@{
555
+ inline bool pushToCTPWorkList(const CxtThreadProc& ctp)
556
+ {
557
+ if(isVisitedCTPs(ctp)==false)
558
+ {
559
+ visitedCTPs.insert(ctp);
560
+ return ctpList.push(ctp);
561
+ }
562
+ return false;
563
+ }
564
+ inline CxtThreadProc popFromCTPWorkList()
565
+ {
566
+ CxtThreadProc ctp = ctpList.pop();
567
+ return ctp;
568
+ }
569
+ inline bool isVisitedCTPs(const CxtThreadProc& ctp) const
570
+ {
571
+ return visitedCTPs.find(ctp)!=visitedCTPs.end();
572
+ }
573
+ //@}
574
+ /// Clean up memory
575
+ inline void destroy()
576
+ {
577
+ if(tcgSCC)
578
+ delete tcgSCC;
579
+ tcgSCC=nullptr;
580
+ }
581
+
582
+ FunSet entryFuncSet; /// Procedures that are neither called by other functions nor extern functions
583
+ FunSet candidateFuncSet; /// Procedures we care about during call graph traversing when creating TCT
584
+ ThreadCallGraphSCC* tcgSCC; /// Thread call graph SCC
585
+ CxtThreadProcVec ctpList; /// CxtThreadProc List
586
+ CxtThreadProcSet visitedCTPs; /// Record all visited ctps
587
+ CxtThreadToNodeMap ctpToNodeMap; /// Map a ctp to its graph node
588
+ CxtThreadToForkCxt ctToForkCxtMap; /// Map a CxtThread to the context at its spawning site (fork site).
589
+ CxtThreadToFun ctToRoutineFunMap; /// Map a CxtThread to its start routine function.
590
+ InstToLoopMap joinSiteToLoopMap; ///< map an inloop join to its loop class
591
+ Set<const ICFGNode*> inRecurJoinSites; ///< Fork or Join sites in recursions
592
+ };
593
+
594
+ } // End namespace SVF
595
+
596
+ namespace SVF
597
+ {
598
+ /* !
599
+ * GenericGraphTraits specializations for constraint graph so that they can be treated as
600
+ * graphs by the generic graph algorithms.
601
+ * Provide graph traits for traversing from a constraint node using standard graph traversals.
602
+ */
603
+ template<> struct GenericGraphTraits<SVF::TCTNode*> : public GenericGraphTraits<SVF::GenericNode<SVF::TCTNode,SVF::TCTEdge>* >
604
+ {
605
+ };
606
+
607
+ /// Inverse GenericGraphTraits specializations for Value flow node, it is used for inverse traversal.
608
+ template<>
609
+ struct GenericGraphTraits<Inverse<SVF::TCTNode *> > : public GenericGraphTraits<Inverse<SVF::GenericNode<SVF::TCTNode,SVF::TCTEdge>* > >
610
+ {
611
+ };
612
+
613
+ template<> struct GenericGraphTraits<SVF::TCT*> : public GenericGraphTraits<SVF::GenericGraph<SVF::TCTNode,SVF::TCTEdge>* >
614
+ {
615
+ typedef SVF::TCTNode *NodeRef;
616
+ };
617
+
618
+ } // End namespace llvm
619
+
620
+ #endif /* TCTNodeDetector_H_ */