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,468 @@
1
+ //===----- CFGrammar.h -- Context-free grammar --------------------------//
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
+ * CFGrammar.h
25
+ *
26
+ * Created on: March 5, 2022
27
+ * Author: Yulei Sui
28
+ */
29
+ #ifndef CFLGrammar_H_
30
+ #define CFLGrammar_H_
31
+ #include "SVFIR/SVFType.h"
32
+
33
+ namespace SVF
34
+ {
35
+
36
+ class GrammarBase
37
+ {
38
+ public:
39
+ typedef u32_t Kind;
40
+ typedef u32_t Attribute;
41
+ typedef u32_t VariableAttribute;
42
+ typedef struct Symbol
43
+ {
44
+ Kind kind: 8;
45
+ Attribute attribute: 16;
46
+ VariableAttribute variableAttribute: 8;
47
+
48
+ /// Default Value for Symbol is 0.
49
+ Symbol() : kind(0), attribute(0), variableAttribute(0) {}
50
+
51
+ /// Construct from u32_t move the bit to right field
52
+ Symbol(const u32_t& num) : kind(num & 0xFF), attribute((num >> 8 ) & 0xFFFF), variableAttribute((num >> 24)) {}
53
+
54
+ /// Conversion of u32_t
55
+ operator u32_t()
56
+ {
57
+ static_assert(sizeof(struct Symbol)==sizeof(u32_t), "sizeof(struct Symbol)!=sizeof(u32_t)");
58
+ u32_t num = 0;
59
+ num += this->variableAttribute << 24;
60
+ num += this->attribute << 8;
61
+ num += this->kind;
62
+ return num;
63
+ }
64
+
65
+ operator u32_t() const
66
+ {
67
+ static_assert(sizeof(struct Symbol)==sizeof(u32_t), "sizeof(struct Symbol)!=sizeof(u32_t)");
68
+ u32_t num = 0;
69
+ num += this->variableAttribute << 24;
70
+ num += this->attribute << 8;
71
+ num += this->kind;
72
+ return num;
73
+ }
74
+
75
+ bool operator<(const Symbol& rhs)
76
+ {
77
+ return u32_t(*this) < u32_t(rhs);
78
+ }
79
+
80
+ void operator=(const u32_t& i)
81
+ {
82
+ this->kind = EdgeKindMask & i;
83
+ this->attribute = i >> EdgeKindMaskBits;
84
+ this->variableAttribute = i >> AttributedKindMaskBits;
85
+ }
86
+
87
+ void operator=(unsigned long long num)
88
+ {
89
+ this->kind = num & 0xFF;
90
+ this->attribute = (num >> 8 ) & 0xFFFF;
91
+ this->variableAttribute = num >> 24;
92
+ }
93
+
94
+ bool operator==(const Symbol& s)
95
+ {
96
+ return ((this->kind == s.kind) && (this->attribute == s.attribute) && (this->variableAttribute == s.variableAttribute));
97
+ }
98
+
99
+ bool operator==(const Symbol& s) const
100
+ {
101
+ return ((kind == s.kind) && (attribute == s.attribute) && (variableAttribute == s.variableAttribute));
102
+ }
103
+
104
+ bool operator!=(const Symbol& s) const
105
+ {
106
+ return ! (*this == s) ;
107
+ }
108
+
109
+ bool operator==(const u32_t& i)
110
+ {
111
+ return u32_t(*this) == u32_t(i);
112
+ }
113
+
114
+ bool operator==(const Kind& k) const
115
+ {
116
+ return (this->kind == k);
117
+ }
118
+ } Symbol;
119
+
120
+ class SymbolHash
121
+ {
122
+ public:
123
+ size_t operator()(const Symbol &s) const
124
+ {
125
+ std::hash<u32_t> h;
126
+ return h(u32_t(s));
127
+ }
128
+ };
129
+
130
+
131
+ struct SymbolVectorHash
132
+ {
133
+ size_t operator()(const std::vector<Symbol> &v) const
134
+ {
135
+ size_t h = v.size();
136
+
137
+ SymbolHash hf;
138
+ for (const Symbol &t : v)
139
+ {
140
+ h ^= hf(t) + 0x9e3779b9 + (h << 6) + (h >> 2);
141
+ }
142
+
143
+ return h;
144
+ }
145
+ };
146
+
147
+ template<typename Key, typename Value, typename Hash = SymbolHash,
148
+ typename KeyEqual = std::equal_to<Key>,
149
+ typename Allocator = std::allocator<std::pair<const Key, Value>>>
150
+ using SymbolMap = std::unordered_map<Key, Value, Hash, KeyEqual, Allocator>;
151
+
152
+ template <typename Key, typename Hash = SymbolVectorHash, typename KeyEqual = std::equal_to<Key>,
153
+ typename Allocator = std::allocator<Key>>
154
+ using SymbolSet = std::unordered_set<Key, Hash, KeyEqual, Allocator>;
155
+
156
+ typedef std::vector<Symbol> Production;
157
+ typedef SymbolSet<Production> Productions;
158
+
159
+
160
+ inline Map<std::string, Kind>& getNonterminals()
161
+ {
162
+ return this->nonterminals;
163
+ }
164
+
165
+ inline void setNonterminals(Map<std::string, Kind>& nonterminals)
166
+ {
167
+ this->nonterminals = nonterminals;
168
+ }
169
+
170
+ inline Map<std::string, Kind>& getTerminals()
171
+ {
172
+ return this->terminals;
173
+ }
174
+
175
+ inline void setTerminals(Map<std::string, Kind>& terminals)
176
+ {
177
+ this->terminals = terminals;
178
+ }
179
+
180
+ inline Map<std::string, Kind>& getEBNFSigns()
181
+ {
182
+ return this->EBNFSigns;
183
+ }
184
+
185
+ inline void setEBNFSigns(Map<std::string, Kind>& EBNFSigns)
186
+ {
187
+ this->EBNFSigns = EBNFSigns;
188
+ }
189
+
190
+ inline SymbolMap<Symbol, Productions>& getRawProductions()
191
+ {
192
+ return this->rawProductions;
193
+ }
194
+
195
+ inline const Map<Kind, Set<Attribute>>& getKindToAttrsMap() const
196
+ {
197
+ return this->kindToAttrsMap;
198
+ }
199
+
200
+ inline Kind getTotalKind()
201
+ {
202
+ return this->totalKind;
203
+ }
204
+
205
+ inline Kind getStartKind()
206
+ {
207
+ return this->startKind;
208
+ }
209
+
210
+ inline void setStartKind(Kind startKind)
211
+ {
212
+ this->startKind = startKind;
213
+ }
214
+
215
+ inline void setTotalKind(Kind totalKind)
216
+ {
217
+ this->totalKind = totalKind;
218
+ }
219
+
220
+ std::string extractKindStrFromSymbolStr(const std::string& symbolStr) const;
221
+
222
+ std::string extractAttributeStrFromSymbolStr(const std::string& symbolStr) const;
223
+
224
+ void setRawProductions(SymbolMap<Symbol, Productions>& rawProductions);
225
+
226
+ void setKindToAttrsMap(const Map<Kind, Set<Attribute>>& kindToAttrsMap);
227
+
228
+ void setAttributeKinds(const Set<Kind>& attributeKind);
229
+
230
+ Kind strToKind(std::string str) const;
231
+
232
+ Symbol strToSymbol(const std::string str) const;
233
+
234
+ std::string kindToStr(Kind kind) const;
235
+
236
+ std::string symToStrDump(Symbol sym) const;
237
+
238
+ Symbol getSymbol(const Production& prod, u32_t pos)
239
+ {
240
+ return prod.at(pos);
241
+ }
242
+
243
+ inline const Set<Kind>& getAttrSyms() const
244
+ {
245
+ return this->attributeKinds;
246
+ }
247
+
248
+ /// Insert kind to nonterminal and return kind.
249
+ Kind insertNonterminalKind(std::string const kindStr);
250
+
251
+ /// From SymbolStr extract kind to inserted in nonterminal
252
+ /// symbolStr = <kindStr> [_] [ attributeStr | variableattributeStr ]
253
+ Kind insertTerminalKind(std::string strLit);
254
+
255
+ Symbol insertSymbol(std::string strLit);
256
+
257
+ Symbol insertNonTerminalSymbol(std::string strLit);
258
+
259
+ Symbol insertTerminalSymbol(std::string strLit);
260
+
261
+ Symbol insertEBNFSigns(std::string strLit);
262
+
263
+ void insertAttribute(Kind kind, Attribute a);
264
+
265
+ inline static Kind getAttributedKind(Attribute attribute, Kind kind)
266
+ {
267
+ return ((attribute << EdgeKindMaskBits)| kind );
268
+ }
269
+
270
+ inline static Kind getVariabledKind(VariableAttribute variableAttribute, Kind kind)
271
+ {
272
+ return ((variableAttribute << AttributedKindMaskBits) | kind);
273
+ }
274
+
275
+ protected:
276
+ static constexpr unsigned char EdgeKindMaskBits = 8; ///< We use the lower 8 bits to denote edge kind
277
+ static constexpr unsigned char AttributedKindMaskBits = 24; ///< We use the lower 24 bits to denote attributed kind
278
+ static constexpr u64_t EdgeKindMask = (~0ULL) >> (64 - EdgeKindMaskBits);
279
+ Kind startKind;
280
+ private:
281
+ Map<std::string, Kind> nonterminals;
282
+ Map<std::string, Kind> terminals;
283
+ Map<std::string, Kind> EBNFSigns; /// Map contains Signs' String and associated Symbols
284
+ Set<Kind> attributeKinds;
285
+ Map<Kind, Set<Attribute>> kindToAttrsMap;
286
+ SymbolMap<Symbol, Productions> rawProductions;
287
+ u32_t totalKind;
288
+ };
289
+
290
+ class CFGrammar : public GrammarBase
291
+ {
292
+
293
+ public:
294
+ CFGrammar();
295
+
296
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
297
+ //@{
298
+ static inline bool classof(const CFGrammar *)
299
+ {
300
+ return true;
301
+ }
302
+
303
+ static inline bool classof(const GrammarBase *node)
304
+ {
305
+ return true;
306
+ }
307
+
308
+ Productions& getEpsilonProds()
309
+ {
310
+ return epsilonProds;
311
+ }
312
+
313
+ SymbolMap<Symbol, Productions>& getSingleRHSToProds()
314
+ {
315
+ return singleRHSToProds;
316
+ }
317
+
318
+ SymbolMap<Symbol, Productions>& getFirstRHSToProds()
319
+ {
320
+ return firstRHSToProds;
321
+ }
322
+
323
+ SymbolMap<Symbol, Productions>& getSecondRHSToProds()
324
+ {
325
+ return secondRHSToProds;
326
+ }
327
+
328
+ const bool hasProdsFromFirstRHS(const Symbol sym) const
329
+ {
330
+ auto it = firstRHSToProds.find(sym);
331
+ return it!=firstRHSToProds.end();
332
+ }
333
+
334
+ const bool hasProdsFromSingleRHS(const Symbol sym) const
335
+ {
336
+ auto it = singleRHSToProds.find(sym);
337
+ return it!=singleRHSToProds.end();
338
+ }
339
+
340
+ const bool hasProdsFromSecondRHS(const Symbol sym) const
341
+ {
342
+ auto it = secondRHSToProds.find(sym);
343
+ return it!=secondRHSToProds.end();
344
+ }
345
+
346
+ const Productions& getProdsFromSingleRHS(const Symbol sym) const
347
+ {
348
+ auto it = singleRHSToProds.find(sym);
349
+ assert(it!=singleRHSToProds.end() && "production (X -> sym) not found for sym!!");
350
+ return it->second;
351
+ }
352
+
353
+ const Productions& getProdsFromFirstRHS(const Symbol sym) const
354
+ {
355
+ auto it = firstRHSToProds.find(sym);
356
+ assert(it!=firstRHSToProds.end() && "production (X -> sym Y ) not found for sym!!");
357
+ return it->second;
358
+ }
359
+
360
+ const Productions& getProdsFromSecondRHS(const Symbol sym) const
361
+ {
362
+ auto it = secondRHSToProds.find(sym);
363
+ assert(it!=secondRHSToProds.end() && "production (X -> Y sym) not found for sym!!");
364
+ return it->second;
365
+ }
366
+
367
+
368
+ const Symbol& getLHSSymbol(const Production& prod) const
369
+ {
370
+ return prod.at(0);
371
+ }
372
+
373
+ const Symbol& getFirstRHSSymbol(const Production& prod) const
374
+ {
375
+ return prod.at(1);
376
+ }
377
+
378
+ const Symbol& getSecondRHSSymbol(const Production& prod) const
379
+ {
380
+ return prod.at(2);
381
+ }
382
+
383
+ void dump() const;
384
+
385
+ void dump(std::string fileName) const;
386
+
387
+
388
+ const inline u32_t num_generator()
389
+ {
390
+ return newTerminalSubscript++;
391
+ }
392
+
393
+ private:
394
+ SymbolSet<Production> epsilonProds;
395
+ SymbolMap<Symbol, Productions> singleRHSToProds;
396
+ SymbolMap<Symbol, Productions> firstRHSToProds;
397
+ SymbolMap<Symbol, Productions> secondRHSToProds;
398
+ u32_t newTerminalSubscript;
399
+ };
400
+
401
+ /**
402
+ * Worklist with "first in first out" order.
403
+ * New nodes will be pushed at back and popped from front.
404
+ * Elements in the list are unique as they're recorded by Set.
405
+ */
406
+ template<class Data>
407
+ class CFLFIFOWorkList
408
+ {
409
+ typedef GrammarBase::SymbolSet<Data> DataSet;
410
+ typedef std::deque<Data> DataDeque;
411
+ public:
412
+ CFLFIFOWorkList() {}
413
+
414
+ ~CFLFIFOWorkList() {}
415
+
416
+ inline bool empty() const
417
+ {
418
+ return data_list.empty();
419
+ }
420
+
421
+ inline bool find(Data data) const
422
+ {
423
+ return (data_set.find(data) == data_set.end() ? false : true);
424
+ }
425
+
426
+ /**
427
+ * Push a data into the work list.
428
+ */
429
+ inline bool push(Data data)
430
+ {
431
+ if (data_set.find(data) == data_set.end())
432
+ {
433
+ data_list.push_back(data);
434
+ data_set.insert(data);
435
+ return true;
436
+ }
437
+ else
438
+ return false;
439
+ }
440
+
441
+ /**
442
+ * Pop a data from the END of work list.
443
+ */
444
+ inline Data pop()
445
+ {
446
+ assert(!empty() && "work list is empty");
447
+ Data data = data_list.front();
448
+ data_list.pop_front();
449
+ data_set.erase(data);
450
+ return data;
451
+ }
452
+
453
+ /*!
454
+ * Clear all the data
455
+ */
456
+ inline void clear()
457
+ {
458
+ data_list.clear();
459
+ data_set.clear();
460
+ }
461
+
462
+ private:
463
+ DataSet data_set; ///< store all data in the work list.
464
+ DataDeque data_list; ///< work list using std::vector.
465
+ };
466
+
467
+ }
468
+ #endif /* CFLGrammar_H_ */
@@ -0,0 +1,168 @@
1
+ //===----- CFLAlias.h -- CFL Alias Analysis Client--------------//
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
+ * CFLAlias.h
25
+ *
26
+ * Created on: March 5, 2022
27
+ * Author: Yulei Sui
28
+ */
29
+
30
+ #ifndef INCLUDE_CFL_CFLALIAS_H_
31
+ #define INCLUDE_CFL_CFLALIAS_H_
32
+
33
+ #include "CFL/CFLBase.h"
34
+ #include "CFL/CFLStat.h"
35
+
36
+ namespace SVF
37
+ {
38
+
39
+ class CFLStat;
40
+
41
+ class CFLAlias : public CFLBase
42
+ {
43
+
44
+ public:
45
+ typedef OrderedMap<const CallICFGNode*, NodeID> CallSite2DummyValPN;
46
+
47
+ CFLAlias(SVFIR* ir) : CFLBase(ir, PointerAnalysis::CFLFICI_WPA)
48
+ {
49
+ }
50
+
51
+ /// Initialize the grammar, graph, solver
52
+ virtual void initialize();
53
+
54
+ /// Initialize Solver
55
+ virtual void initializeSolver();
56
+
57
+
58
+ /// Print grammar and graph
59
+ virtual void finalize();
60
+
61
+ /// Solving CFL Reachability
62
+ virtual void solve();
63
+
64
+ /// Interface exposed to users of our Alias analysis, given PAGNodeID
65
+ virtual AliasResult alias(NodeID node1, NodeID node2)
66
+ {
67
+ if(graph->hasEdge(graph->getGNode(node1), graph->getGNode(node2), graph->startKind))
68
+ return AliasResult::MayAlias;
69
+ else
70
+ return AliasResult::NoAlias;
71
+ }
72
+
73
+ /// Get points-to targets of a pointer. V In this context
74
+ virtual const PointsTo& getCFLPts(NodeID ptr)
75
+ {
76
+ /// Check V Dst of ptr.
77
+ CFLNode *funNode = graph->getGNode(ptr);
78
+ for(auto outedge = funNode->getOutEdges().begin(); outedge!=funNode->getOutEdges().end(); outedge++)
79
+ {
80
+ if((*outedge)->getEdgeKind() == graph->getStartKind())
81
+ {
82
+ // Need to Find dst addr src
83
+ SVFVar *vNode = svfir->getGNode((*outedge)->getDstID());
84
+ NodeID basevNodeID;
85
+ // Remove svfir->getBaseValVar, SVF IR api change
86
+ if (vNode->hasIncomingEdges(SVFStmt::Gep))
87
+ {
88
+ SVFStmt::SVFStmtSetTy& geps = vNode->getIncomingEdges(SVFStmt::Gep);
89
+ SVFVar::iterator it = geps.begin();
90
+ basevNodeID = (*it)->getSrcID();
91
+ }
92
+ else
93
+ basevNodeID = vNode->getId();
94
+ addPts(ptr, basevNodeID);
95
+ for(auto inEdge = vNode->getInEdges().begin(); inEdge!=vNode->getInEdges().end(); inEdge++)
96
+ {
97
+ if((*inEdge)->getEdgeKind() == 0)
98
+ {
99
+ addPts(ptr, (*inEdge)->getSrcID());
100
+ }
101
+ }
102
+ }
103
+ }
104
+ return getPts(ptr);
105
+ }
106
+
107
+ /// Need Original one for virtual table
108
+
109
+ /// Add copy edge on constraint graph
110
+ virtual inline bool addCopyEdge(NodeID src, NodeID dst)
111
+ {
112
+ const CFLEdge *edge = graph->hasEdge(graph->getGNode(src),graph->getGNode(dst), 1);
113
+ if (edge != nullptr )
114
+ {
115
+ return false;
116
+ }
117
+ CFGrammar::Kind copyKind = grammar->strToKind("copy");
118
+ CFGrammar::Kind copybarKind = grammar->strToKind("copybar");
119
+ solver->pushIntoWorklist(graph->addCFLEdge(graph->getGNode(src),graph->getGNode(dst), copyKind));
120
+ solver->pushIntoWorklist(graph->addCFLEdge(graph->getGNode(dst),graph->getGNode(src), copybarKind));
121
+ return true;
122
+ }
123
+
124
+ /// Given an object, get all the nodes having whose pointsto contains the object
125
+ virtual const NodeSet& getRevPts(NodeID nodeId)
126
+ {
127
+ /// Check Outgoing flowtobar edge dst of ptr
128
+ abort(); // to be implemented
129
+ }
130
+
131
+ /// Update call graph for the input indirect callsites
132
+ virtual bool updateCallGraph(const CallSiteToFunPtrMap& callsites);
133
+
134
+ /// On the fly call graph construction
135
+ virtual void onTheFlyCallGraphSolve(const CallSiteToFunPtrMap& callsites, CallEdgeMap& newEdges);
136
+
137
+ /// Connect formal and actual parameters for indirect callsites
138
+ void connectCaller2CalleeParams(const CallICFGNode* cs, const FunObjVar* F);
139
+
140
+ void heapAllocatorViaIndCall(const CallICFGNode* cs);
141
+
142
+ private:
143
+ CallSite2DummyValPN callsite2DummyValPN; ///< Map an instruction to a dummy obj which created at an indirect callsite, which invokes a heap allocator
144
+ };
145
+
146
+ class POCRAlias : public CFLAlias
147
+ {
148
+ public:
149
+ POCRAlias(SVFIR* ir) : CFLAlias(ir)
150
+ {
151
+ }
152
+ /// Initialize POCR Solver
153
+ virtual void initializeSolver();
154
+ };
155
+
156
+ class POCRHybrid : public CFLAlias
157
+ {
158
+ public:
159
+ POCRHybrid(SVFIR* ir) : CFLAlias(ir)
160
+ {
161
+ }
162
+
163
+ /// Initialize POCRHybrid Solver
164
+ virtual void initializeSolver();
165
+ };
166
+ } // End namespace SVF
167
+
168
+ #endif /* INCLUDE_CFL_CFLALIAS_H_*/