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,533 @@
1
+ //===- LockAnalysis.h -- Analysis of locksets-------------//
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
+ * LockAnalysis.h
25
+ *
26
+ * Created on: 26 Aug 2015
27
+ * Author: pengd
28
+ */
29
+
30
+ #ifndef INCLUDE_MTA_LockAnalysis_H_
31
+ #define INCLUDE_MTA_LockAnalysis_H_
32
+
33
+ /*!
34
+ *
35
+ */
36
+ #include "MTA/TCT.h"
37
+
38
+ namespace SVF
39
+ {
40
+
41
+ /*!
42
+ * Lock analysis
43
+ */
44
+ class LockAnalysis
45
+ {
46
+
47
+ public:
48
+ /// semilattice Empty==>TDUnlocked==>TDLocked
49
+ enum ValDomain
50
+ {
51
+ Empty, // initial(dummy) state
52
+ TDLocked, // stmt is locked
53
+ TDUnlocked, // stmt is unlocked
54
+ };
55
+
56
+ typedef CxtStmt CxtLock;
57
+ typedef CxtProc CxtLockProc;
58
+
59
+ typedef NodeBS LockSet;
60
+ typedef TCT::InstVec InstVec;
61
+ typedef Set<const ICFGNode*> InstSet;
62
+ typedef InstSet CISpan;
63
+ typedef Map<const ICFGNode*, CISpan>CILockToSpan;
64
+ typedef Set<const FunObjVar*> FunSet;
65
+ typedef Map<const ICFGNode*, InstSet> InstToInstSetMap;
66
+ typedef Map<CxtStmt, ValDomain> CxtStmtToLockFlagMap;
67
+ typedef FIFOWorkList<CxtStmt> CxtStmtWorkList;
68
+ typedef Set<CxtStmt> LockSpan;
69
+ typedef Set<CxtStmt> CxtStmtSet;
70
+ typedef Set<CxtLock> CxtLockSet;
71
+
72
+ typedef Map<CxtLock, LockSpan> CxtLockToSpan;
73
+ typedef Map<CxtLock, NodeBS> CxtLockToLockSet;
74
+ typedef Map<const ICFGNode*, NodeBS> LockSiteToLockSet;
75
+ typedef Map<const ICFGNode*, LockSpan> InstToCxtStmtSet;
76
+ typedef Map<CxtStmt, CxtLockSet> CxtStmtToCxtLockSet;
77
+ typedef FIFOWorkList<CxtLockProc> CxtLockProcVec;
78
+ typedef Set<CxtLockProc> CxtLockProcSet;
79
+
80
+ typedef Map<const ICFGNode*, CxtStmtSet> InstToCxtStmt;
81
+
82
+ LockAnalysis(TCT* t) : tct(t), lockTime(0),numOfTotalQueries(0), numOfLockedQueries(0), lockQueriesTime(0)
83
+ {
84
+ }
85
+
86
+ /// context-sensitive forward traversal from each lock site. Generate following results
87
+ /// (1) context-sensitive lock site,
88
+ /// (2) maps a context-sensitive lock site to its corresponding lock span.
89
+ void analyze();
90
+ void analyzeIntraProcedualLock();
91
+ bool intraForwardTraverse(const ICFGNode* lock, InstSet& unlockset, InstSet& forwardInsts);
92
+ bool intraBackwardTraverse(const InstSet& unlockset, InstSet& backwardInsts);
93
+
94
+ void collectCxtLock();
95
+ void analyzeLockSpanCxtStmt();
96
+
97
+ void collectLockUnlocksites();
98
+ void buildCandidateFuncSetforLock();
99
+
100
+ /// Intraprocedural locks
101
+ //@{
102
+ /// Return true if the lock is an intra-procedural lock
103
+ inline bool isIntraLock(const ICFGNode* lock) const
104
+ {
105
+ assert(locksites.find(lock)!=locksites.end() && "not a lock site?");
106
+ return ciLocktoSpan.find(lock)!=ciLocktoSpan.end();
107
+ }
108
+
109
+ /// Add intra-procedural lock
110
+ inline void addIntraLock(const ICFGNode* lockSite, const InstSet& stmts)
111
+ {
112
+ for(InstSet::const_iterator it = stmts.begin(), eit = stmts.end(); it!=eit; ++it)
113
+ {
114
+ instCILocksMap[*it].insert(lockSite);
115
+ ciLocktoSpan[lockSite].insert(*it);
116
+ }
117
+ }
118
+
119
+ /// Add intra-procedural lock
120
+ inline void addCondIntraLock(const ICFGNode* lockSite, const InstSet& stmts)
121
+ {
122
+ for(InstSet::const_iterator it = stmts.begin(), eit = stmts.end(); it!=eit; ++it)
123
+ {
124
+ instTocondCILocksMap[*it].insert(lockSite);
125
+ }
126
+ }
127
+
128
+ /// Return true if a statement is inside an intra-procedural lock
129
+ inline bool isInsideIntraLock(const ICFGNode* stmt) const
130
+ {
131
+ return instCILocksMap.find(stmt)!=instCILocksMap.end() || isInsideCondIntraLock(stmt);
132
+ }
133
+
134
+ /// Return true if a statement is inside a partial lock/unlock pair (conditional lock with unconditional unlock)
135
+ inline bool isInsideCondIntraLock(const ICFGNode* stmt) const
136
+ {
137
+ return instTocondCILocksMap.find(stmt)!=instTocondCILocksMap.end();
138
+ }
139
+
140
+ inline const InstSet& getIntraLockSet(const ICFGNode* stmt) const
141
+ {
142
+ InstToInstSetMap::const_iterator it = instCILocksMap.find(stmt);
143
+ assert(it!=instCILocksMap.end() && "intralock not found!");
144
+ return it->second;
145
+ }
146
+ //@}
147
+
148
+ /// Context-sensitive locks
149
+ //@{
150
+ /// Add inter-procedural context-sensitive lock
151
+ inline void addCxtLock(const CallStrCxt& cxt,const ICFGNode* inst)
152
+ {
153
+ CxtLock cxtlock(cxt,inst);
154
+ cxtLockset.insert(cxtlock);
155
+ DBOUT(DMTA, SVFUtil::outs() << "LockAnalysis Process new lock "; cxtlock.dump());
156
+ }
157
+
158
+ /// Get context-sensitive lock
159
+ inline bool hasCxtLock(const CxtLock& cxtLock) const
160
+ {
161
+ return cxtLockset.find(cxtLock)!=cxtLockset.end();
162
+ }
163
+
164
+ /// Return true if the intersection of two locksets is not empty
165
+ inline bool intersects(const CxtLockSet& lockset1,const CxtLockSet& lockset2) const
166
+ {
167
+ for(CxtLockSet::const_iterator it = lockset1.begin(), eit = lockset1.end(); it!=eit; ++it)
168
+ {
169
+ const CxtLock& lock = *it;
170
+ for(CxtLockSet::const_iterator lit = lockset2.begin(), elit = lockset2.end(); lit!=elit; ++lit)
171
+ {
172
+ if(lock==*lit)
173
+ return true;
174
+ }
175
+ }
176
+ return false;
177
+ }
178
+ /// Return true if two locksets has at least one alias lock
179
+ inline bool alias(const CxtLockSet& lockset1,const CxtLockSet& lockset2)
180
+ {
181
+ for(CxtLockSet::const_iterator it = lockset1.begin(), eit = lockset1.end(); it!=eit; ++it)
182
+ {
183
+ const CxtLock& lock = *it;
184
+ for(CxtLockSet::const_iterator lit = lockset2.begin(), elit = lockset2.end(); lit!=elit; ++lit)
185
+ {
186
+ if(isAliasedLocks(lock,*lit))
187
+ return true;
188
+ }
189
+ }
190
+ return false;
191
+ }
192
+ //@}
193
+
194
+ /// Return true if it is a candidate function
195
+ inline bool isLockCandidateFun(const FunObjVar* fun) const
196
+ {
197
+ return lockcandidateFuncSet.find(fun)!=lockcandidateFuncSet.end();
198
+ }
199
+
200
+ /// Context-sensitive statement and lock spans
201
+ //@{
202
+ /// Get LockSet and LockSpan
203
+ inline bool hasCxtStmtfromInst(const ICFGNode* inst) const
204
+ {
205
+ InstToCxtStmtSet::const_iterator it = instToCxtStmtSet.find(inst);
206
+ return (it != instToCxtStmtSet.end());
207
+ }
208
+ inline const CxtStmtSet& getCxtStmtfromInst(const ICFGNode* inst) const
209
+ {
210
+ InstToCxtStmtSet::const_iterator it = instToCxtStmtSet.find(inst);
211
+ assert(it != instToCxtStmtSet.end());
212
+ return it->second;
213
+ }
214
+ inline bool hasCxtLockfromCxtStmt(const CxtStmt& cts) const
215
+ {
216
+ CxtStmtToCxtLockSet::const_iterator it = cxtStmtToCxtLockSet.find(cts);
217
+ return (it != cxtStmtToCxtLockSet.end());
218
+ }
219
+ inline const CxtLockSet& getCxtLockfromCxtStmt(const CxtStmt& cts) const
220
+ {
221
+ CxtStmtToCxtLockSet::const_iterator it = cxtStmtToCxtLockSet.find(cts);
222
+ assert(it != cxtStmtToCxtLockSet.end());
223
+ return it->second;
224
+ }
225
+ inline CxtLockSet& getCxtLockfromCxtStmt(const CxtStmt& cts)
226
+ {
227
+ CxtStmtToCxtLockSet::iterator it = cxtStmtToCxtLockSet.find(cts);
228
+ assert(it != cxtStmtToCxtLockSet.end());
229
+ return it->second;
230
+ }
231
+ /// Add context-sensitive statement
232
+ inline bool addCxtStmtToSpan(const CxtStmt& cts, const CxtLock& cl)
233
+ {
234
+ cxtLocktoSpan[cl].insert(cts);
235
+ return cxtStmtToCxtLockSet[cts].insert(cl).second;
236
+ }
237
+ /// Add context-sensitive statement
238
+ inline bool removeCxtStmtToSpan(CxtStmt& cts, const CxtLock& cl)
239
+ {
240
+ bool find = cxtStmtToCxtLockSet[cts].find(cl)!=cxtStmtToCxtLockSet[cts].end();
241
+ if(find)
242
+ {
243
+ cxtStmtToCxtLockSet[cts].erase(cl);
244
+ cxtLocktoSpan[cl].erase(cts);
245
+ }
246
+ return find;
247
+ }
248
+
249
+ CxtStmtToCxtLockSet getCSTCLS()
250
+ {
251
+ return cxtStmtToCxtLockSet;
252
+ }
253
+ /// Touch this context statement
254
+ inline void touchCxtStmt(CxtStmt& cts)
255
+ {
256
+ cxtStmtToCxtLockSet[cts];
257
+ }
258
+ inline bool hasSpanfromCxtLock(const CxtLock& cl)
259
+ {
260
+ return cxtLocktoSpan.find(cl) != cxtLocktoSpan.end();
261
+ }
262
+ inline LockSpan& getSpanfromCxtLock(const CxtLock& cl)
263
+ {
264
+ assert(cxtLocktoSpan.find(cl) != cxtLocktoSpan.end());
265
+ return cxtLocktoSpan[cl];
266
+ }
267
+ //@}
268
+
269
+
270
+
271
+ /// Check if one instruction's context stmt is in a lock span
272
+ inline bool hasOneCxtInLockSpan(const ICFGNode *I, LockSpan lspan) const
273
+ {
274
+ if(!hasCxtStmtfromInst(I))
275
+ return false;
276
+ const LockSpan ctsset = getCxtStmtfromInst(I);
277
+ for (LockSpan::const_iterator cts = ctsset.begin(), ects = ctsset.end(); cts != ects; cts++)
278
+ {
279
+ if(lspan.find(*cts) != lspan.end())
280
+ {
281
+ return true;
282
+ }
283
+ }
284
+ return false;
285
+ }
286
+
287
+ inline bool hasAllCxtInLockSpan(const ICFGNode *I, LockSpan lspan) const
288
+ {
289
+ if(!hasCxtStmtfromInst(I))
290
+ return false;
291
+ const LockSpan ctsset = getCxtStmtfromInst(I);
292
+ for (LockSpan::const_iterator cts = ctsset.begin(), ects = ctsset.end(); cts != ects; cts++)
293
+ {
294
+ if (lspan.find(*cts) == lspan.end())
295
+ {
296
+ return false;
297
+ }
298
+ }
299
+ return true;
300
+ }
301
+
302
+
303
+ /// Check if two Instructions are protected by common locks
304
+ /// echo inst may have multiple cxt stmt
305
+ /// we check whether every cxt stmt of instructions is protected by a common lock.
306
+ bool isProtectedByCommonLock(const ICFGNode *i1, const ICFGNode *i2);
307
+ bool isProtectedByCommonCxtLock(const ICFGNode *i1, const ICFGNode *i2);
308
+ bool isProtectedByCommonCxtLock(const CxtStmt& cxtStmt1, const CxtStmt& cxtStmt2);
309
+ bool isProtectedByCommonCILock(const ICFGNode *i1, const ICFGNode *i2);
310
+
311
+ bool isInSameSpan(const ICFGNode *I1, const ICFGNode *I2);
312
+ bool isInSameCSSpan(const ICFGNode *i1, const ICFGNode *i2) const;
313
+ bool isInSameCSSpan(const CxtStmt& cxtStmt1, const CxtStmt& cxtStmt2) const;
314
+ bool isInSameCISpan(const ICFGNode *i1, const ICFGNode *i2) const;
315
+
316
+ inline u32_t getNumOfCxtLocks()
317
+ {
318
+ return cxtLockset.size();
319
+ }
320
+ /// Print locks and spans
321
+ void printLocks(const CxtStmt& cts);
322
+
323
+ /// Get tct
324
+ TCT* getTCT()
325
+ {
326
+ return tct;
327
+ }
328
+ private:
329
+ /// Handle fork
330
+ void handleFork(const CxtStmt& cts);
331
+
332
+ /// Handle call
333
+ void handleCall(const CxtStmt& cts);
334
+
335
+ /// Handle return
336
+ void handleRet(const CxtStmt& cts);
337
+
338
+ /// Handle intra
339
+ void handleIntra(const CxtStmt& cts);
340
+
341
+ /// Handle call relations
342
+ void handleCallRelation(CxtLockProc& clp, const CallGraphEdge* cgEdge, const CallICFGNode* call);
343
+
344
+ /// Return true it a lock matches an unlock
345
+ bool isAliasedLocks(const CxtLock& cl1, const CxtLock& cl2)
346
+ {
347
+ return isAliasedLocks(cl1.getStmt(), cl2.getStmt());
348
+ }
349
+ bool isAliasedLocks(const ICFGNode* i1, const ICFGNode* i2)
350
+ {
351
+ /// todo: must alias
352
+ return tct->getPTA()->alias(getLockVal(i1)->getId(), getLockVal(i2)->getId());
353
+ }
354
+
355
+ /// Mark thread flags for cxtStmt
356
+ //@{
357
+ /// Transfer function for marking context-sensitive statement
358
+ void markCxtStmtFlag(const CxtStmt& tgr, const CxtStmt& src)
359
+ {
360
+ const CxtLockSet& srclockset = getCxtLockfromCxtStmt(src);
361
+ if(hasCxtLockfromCxtStmt(tgr)== false)
362
+ {
363
+ for(CxtLockSet::const_iterator it = srclockset.begin(), eit = srclockset.end(); it!=eit; ++it)
364
+ {
365
+ addCxtStmtToSpan(tgr,*it);
366
+ }
367
+ pushToCTSWorkList(tgr);
368
+ }
369
+ else
370
+ {
371
+ if(intersect(getCxtLockfromCxtStmt(tgr),srclockset))
372
+ pushToCTSWorkList(tgr);
373
+ }
374
+ }
375
+ bool intersect(CxtLockSet& tgrlockset, const CxtLockSet& srclockset)
376
+ {
377
+ CxtLockSet toBeDeleted;
378
+ for(CxtLockSet::const_iterator it = tgrlockset.begin(), eit = tgrlockset.end(); it!=eit; ++it)
379
+ {
380
+ if(srclockset.find(*it)==srclockset.end())
381
+ toBeDeleted.insert(*it);
382
+ }
383
+ for(CxtLockSet::const_iterator it = toBeDeleted.begin(), eit = toBeDeleted.end(); it!=eit; ++it)
384
+ {
385
+ tgrlockset.erase(*it);
386
+ }
387
+ return !toBeDeleted.empty();
388
+ }
389
+
390
+ /// Clear flags
391
+ inline void clearFlagMap()
392
+ {
393
+ cxtStmtList.clear();
394
+ }
395
+ //@}
396
+
397
+ /// WorkList helper functions
398
+ //@{
399
+ inline bool pushToCTPWorkList(const CxtLockProc& clp)
400
+ {
401
+ if (isVisitedCTPs(clp) == false)
402
+ {
403
+ visitedCTPs.insert(clp);
404
+ return clpList.push(clp);
405
+ }
406
+ return false;
407
+ }
408
+ inline CxtLockProc popFromCTPWorkList()
409
+ {
410
+ CxtLockProc clp = clpList.pop();
411
+ return clp;
412
+ }
413
+ inline bool isVisitedCTPs(const CxtLockProc& clp) const
414
+ {
415
+ return visitedCTPs.find(clp) != visitedCTPs.end();
416
+ }
417
+ //@}
418
+
419
+ /// Worklist operations
420
+ //@{
421
+ inline bool pushToCTSWorkList(const CxtStmt& cs)
422
+ {
423
+ return cxtStmtList.push(cs);
424
+ }
425
+ inline CxtStmt popFromCTSWorkList()
426
+ {
427
+ CxtStmt clp = cxtStmtList.pop();
428
+ return clp;
429
+ }
430
+ //@}
431
+
432
+ /// Push calling context
433
+ void pushCxt(CallStrCxt& cxt, const CallICFGNode* call, const FunObjVar* callee);
434
+ /// Match context
435
+ bool matchCxt(CallStrCxt& cxt, const CallICFGNode* call, const FunObjVar* callee);
436
+
437
+ /// Whether it is a lock site
438
+ inline bool isTDFork(const ICFGNode* call)
439
+ {
440
+ if(SVFUtil::isa<CallICFGNode>(call) == false)
441
+ return false;
442
+ return getTCG()->getThreadAPI()->isTDFork(SVFUtil::cast<CallICFGNode>(call));
443
+ }
444
+ /// Whether it is a lock site
445
+ inline bool isTDAcquire(const ICFGNode* call)
446
+ {
447
+ if(SVFUtil::isa<CallICFGNode>(call) == false)
448
+ return false;
449
+ return getTCG()->getThreadAPI()->isTDAcquire(SVFUtil::cast<CallICFGNode>(call));
450
+ }
451
+ /// Whether it is a unlock site
452
+ inline bool isTDRelease(const ICFGNode* call)
453
+ {
454
+ if(SVFUtil::isa<CallICFGNode>(call) == false)
455
+ return false;
456
+ return getTCG()->getThreadAPI()->isTDRelease(SVFUtil::cast<CallICFGNode>(call));
457
+ }
458
+ /// Whether it is a callsite
459
+ inline bool isCallSite(const ICFGNode* inst)
460
+ {
461
+ return tct->isCallSite(inst);
462
+ }
463
+ /// Whether it is calling an external function
464
+ inline bool isExtCall(const ICFGNode* inst)
465
+ {
466
+ return tct->isExtCall(inst);
467
+ }
468
+ /// Get lock value
469
+ inline const SVFVar* getLockVal(const ICFGNode* call)
470
+ {
471
+ return getTCG()->getThreadAPI()->getLockVal(call);
472
+ }
473
+ /// ThreadCallGraph
474
+ inline ThreadCallGraph* getTCG() const
475
+ {
476
+ return tct->getThreadCallGraph();
477
+ }
478
+
479
+ /// TCT
480
+ TCT* tct;
481
+
482
+ /// context-sensitive statement worklist
483
+ CxtStmtWorkList cxtStmtList;
484
+
485
+ /// Map a statement to all its context-sensitive statements
486
+ InstToCxtStmtSet instToCxtStmtSet;
487
+
488
+
489
+ /// Context-sensitive locks
490
+ CxtLockSet cxtLockset;
491
+
492
+ /// Map a context-sensitive lock to its lock span statements
493
+ /// Map a context-sensitive statement to its context-sensitive lock
494
+ //@{
495
+ CxtLockToSpan cxtLocktoSpan;
496
+ CxtStmtToCxtLockSet cxtStmtToCxtLockSet;
497
+ //@}
498
+
499
+ /// Following data structures are used for collecting context-sensitive locks
500
+ //@{
501
+ CxtLockProcVec clpList; /// CxtLockProc List
502
+ CxtLockProcSet visitedCTPs; /// Record all visited clps
503
+ //@}
504
+
505
+ /// Collecting lock/unlock sites
506
+ //@{
507
+ InstSet locksites;
508
+ InstSet unlocksites;
509
+ //@}
510
+
511
+ /// Candidate functions which relevant to locks/unlocks
512
+ //@{
513
+ FunSet lockcandidateFuncSet;
514
+ //@}
515
+
516
+ /// Used for context-insensitive intra-procedural locks
517
+ //@{
518
+ CILockToSpan ciLocktoSpan;
519
+ InstToInstSetMap instCILocksMap;
520
+ InstToInstSetMap instTocondCILocksMap;
521
+ //@}
522
+
523
+
524
+ public:
525
+ double lockTime;
526
+ u32_t numOfTotalQueries;
527
+ u32_t numOfLockedQueries;
528
+ double lockQueriesTime;
529
+ };
530
+
531
+ } // End namespace SVF
532
+
533
+ #endif /* INCLUDE_MTA_LockAnalysis_H_ */