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,482 @@
1
+ //===- CDG.h -- Control Dependence Graph --------------------------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-2017> <Yulei Sui>
6
+ //
7
+
8
+ // This program is free software: you can redistribute it and/or modify
9
+ // it under the terms of the GNU Affero General Public License as published by
10
+ // the Free Software Foundation, either version 3 of the License, or
11
+ // (at your option) any later version.
12
+
13
+ // This program is distributed in the hope that it will be useful,
14
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ // GNU Affero General Public License for more details.
17
+
18
+ // You should have received a copy of the GNU Affero General Public License
19
+ // along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ //
21
+ //===----------------------------------------------------------------------===//
22
+
23
+ /*
24
+ * CDG.h
25
+ *
26
+ * Created on: Sep 27, 2023
27
+ * Author: Xiao Cheng
28
+ */
29
+
30
+ #ifndef SVF_CONTROLDG_H
31
+ #define SVF_CONTROLDG_H
32
+
33
+ #include "SVFIR/SVFIR.h"
34
+
35
+ namespace SVF
36
+ {
37
+
38
+ class CDGNode;
39
+
40
+ typedef GenericEdge<CDGNode> GenericCDGEdgeTy;
41
+
42
+ class CDGEdge : public GenericCDGEdgeTy
43
+ {
44
+ public:
45
+ typedef std::pair<const SVFVar *, s32_t> BranchCondition;
46
+
47
+ /// Constructor
48
+ CDGEdge(CDGNode *s, CDGNode *d) : GenericCDGEdgeTy(s, d, 0)
49
+ {
50
+ }
51
+
52
+ /// Destructor
53
+ ~CDGEdge()
54
+ {
55
+ }
56
+
57
+ typedef GenericNode<CDGNode, CDGEdge>::GEdgeSetTy CDGEdgeSetTy;
58
+ typedef CDGEdgeSetTy SVFGEdgeSetTy;
59
+
60
+ virtual const std::string toString() const
61
+ {
62
+ std::string str;
63
+ std::stringstream rawstr(str);
64
+ rawstr << "CDGEdge " << " [";
65
+ rawstr << getDstID() << "<--" << getSrcID() << "\t";
66
+ return rawstr.str();
67
+ }
68
+
69
+ /// get/set branch condition
70
+ //{@
71
+ const Set<BranchCondition> &getBranchConditions() const
72
+ {
73
+ return brConditions;
74
+ }
75
+
76
+ void insertBranchCondition(const SVFVar *pNode, s32_t branchID)
77
+ {
78
+ brConditions.insert(std::make_pair(pNode, branchID));
79
+ }
80
+ //@}
81
+
82
+
83
+ private:
84
+ Set<BranchCondition> brConditions;
85
+ };
86
+
87
+ typedef GenericNode<CDGNode, CDGEdge> GenericCDGNodeTy;
88
+
89
+ class CDGNode : public GenericCDGNodeTy
90
+ {
91
+
92
+ public:
93
+
94
+ typedef CDGEdge::CDGEdgeSetTy::iterator iterator;
95
+ typedef CDGEdge::CDGEdgeSetTy::const_iterator const_iterator;
96
+
97
+ public:
98
+ /// Constructor
99
+ CDGNode(const ICFGNode *icfgNode) : GenericCDGNodeTy(icfgNode->getId(), CDNodeKd), _icfgNode(icfgNode)
100
+ {
101
+
102
+ }
103
+
104
+ virtual const std::string toString() const
105
+ {
106
+ std::string str;
107
+ std::stringstream rawstr(str);
108
+ rawstr << getId();
109
+ return rawstr.str();
110
+ }
111
+
112
+ const ICFGNode *getICFGNode() const
113
+ {
114
+ return _icfgNode;
115
+ }
116
+
117
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
118
+ //@{
119
+ static inline bool classof(const CDGNode *)
120
+ {
121
+ return true;
122
+ }
123
+
124
+ static inline bool classof(const GenericICFGNodeTy* node)
125
+ {
126
+ return node->getNodeKind() == CDNodeKd;
127
+ }
128
+
129
+ static inline bool classof(const SVFValue* node)
130
+ {
131
+ return node->getNodeKind() == CDNodeKd;
132
+ }
133
+ //@}
134
+
135
+ private:
136
+ const ICFGNode *_icfgNode;
137
+ };
138
+
139
+ typedef std::vector<std::pair<NodeID, NodeID>> NodePairVector;
140
+ typedef GenericGraph<CDGNode, CDGEdge> GenericCDGTy;
141
+
142
+ class CDG : public GenericCDGTy
143
+ {
144
+
145
+ public:
146
+
147
+ typedef Map<NodeID, CDGNode *> CDGNodeIDToNodeMapTy;
148
+ typedef CDGEdge::CDGEdgeSetTy CDGEdgeSetTy;
149
+ typedef CDGNodeIDToNodeMapTy::iterator iterator;
150
+ typedef CDGNodeIDToNodeMapTy::const_iterator const_iterator;
151
+ typedef std::vector<const ICFGNode *> ICFGNodeVector;
152
+ typedef std::vector<std::pair<const ICFGNode *, const ICFGNode *>> ICFGNodePairVector;
153
+
154
+ private:
155
+ static CDG *controlDg; ///< Singleton pattern here
156
+ /// Constructor
157
+ CDG()
158
+ {
159
+
160
+ }
161
+
162
+
163
+ public:
164
+ /// Singleton design here to make sure we only have one instance during any analysis
165
+ //@{
166
+ static inline CDG * getCDG()
167
+ {
168
+ if (controlDg == nullptr)
169
+ {
170
+ controlDg = new CDG();
171
+ }
172
+ return controlDg;
173
+ }
174
+
175
+ static void releaseCDG()
176
+ {
177
+ if (controlDg)
178
+ delete controlDg;
179
+ controlDg = nullptr;
180
+ }
181
+ //@}
182
+
183
+ /// Destructor
184
+ virtual ~CDG() {}
185
+
186
+ /// Get a CDG node
187
+ inline CDGNode *getCDGNode(NodeID id) const
188
+ {
189
+ if (!hasCDGNode(id))
190
+ return nullptr;
191
+ return getGNode(id);
192
+ }
193
+
194
+ /// Whether has the CDGNode
195
+ inline bool hasCDGNode(NodeID id) const
196
+ {
197
+ return hasGNode(id);
198
+ }
199
+
200
+ /// Whether we has a CDG edge
201
+ bool hasCDGEdge(CDGNode *src, CDGNode *dst)
202
+ {
203
+ CDGEdge edge(src, dst);
204
+ CDGEdge *outEdge = src->hasOutgoingEdge(&edge);
205
+ CDGEdge *inEdge = dst->hasIncomingEdge(&edge);
206
+ if (outEdge && inEdge)
207
+ {
208
+ assert(outEdge == inEdge && "edges not match");
209
+ return true;
210
+ }
211
+ else
212
+ return false;
213
+ }
214
+
215
+ /// Get a control dependence edge according to src and dst
216
+ CDGEdge *getCDGEdge(const CDGNode *src, const CDGNode *dst)
217
+ {
218
+ CDGEdge *edge = nullptr;
219
+ size_t counter = 0;
220
+ for (CDGEdge::CDGEdgeSetTy::iterator iter = src->OutEdgeBegin();
221
+ iter != src->OutEdgeEnd(); ++iter)
222
+ {
223
+ if ((*iter)->getDstID() == dst->getId())
224
+ {
225
+ counter++;
226
+ edge = (*iter);
227
+ }
228
+ }
229
+ assert(counter <= 1 && "there's more than one edge between two CDG nodes");
230
+ return edge;
231
+ }
232
+
233
+ /// View graph from the debugger
234
+ void view()
235
+ {
236
+ SVF::ViewGraph(this, "Control Dependence Graph");
237
+ }
238
+
239
+ /// Dump graph into dot file
240
+ void dump(const std::string &filename)
241
+ {
242
+ GraphPrinter::WriteGraphToFile(SVFUtil::outs(), filename, this);
243
+ }
244
+
245
+ public:
246
+ /// Remove a control dependence edge
247
+ inline void removeCDGEdge(CDGEdge *edge)
248
+ {
249
+ edge->getDstNode()->removeIncomingEdge(edge);
250
+ edge->getSrcNode()->removeOutgoingEdge(edge);
251
+ delete edge;
252
+ }
253
+
254
+ /// Remove a CDGNode
255
+ inline void removeCDGNode(CDGNode *node)
256
+ {
257
+ std::set<CDGEdge *> temp;
258
+ for (CDGEdge *e: node->getInEdges())
259
+ temp.insert(e);
260
+ for (CDGEdge *e: node->getOutEdges())
261
+ temp.insert(e);
262
+ for (CDGEdge *e: temp)
263
+ {
264
+ removeCDGEdge(e);
265
+ }
266
+ removeGNode(node);
267
+ }
268
+
269
+ /// Remove node from nodeID
270
+ inline bool removeCDGNode(NodeID id)
271
+ {
272
+ if (hasCDGNode(id))
273
+ {
274
+ removeCDGNode(getCDGNode(id));
275
+ return true;
276
+ }
277
+ return false;
278
+ }
279
+
280
+ /// Add CDG edge
281
+ inline bool addCDGEdge(CDGEdge *edge)
282
+ {
283
+ bool added1 = edge->getDstNode()->addIncomingEdge(edge);
284
+ bool added2 = edge->getSrcNode()->addOutgoingEdge(edge);
285
+ assert(added1 && added2 && "edge not added??");
286
+ return added1 && added2;
287
+ }
288
+
289
+ /// Add a CDG node
290
+ virtual inline void addCDGNode(CDGNode *node)
291
+ {
292
+ addGNode(node->getId(), node);
293
+ }
294
+
295
+ /// Add CDG nodes from nodeid vector
296
+ inline void addCDGNodesFromVector(ICFGNodeVector nodes)
297
+ {
298
+ for (const ICFGNode *icfgNode: nodes)
299
+ {
300
+ if (!IDToNodeMap.count(icfgNode->getId()))
301
+ {
302
+ addGNode(icfgNode->getId(), new CDGNode(icfgNode));
303
+ }
304
+ }
305
+ }
306
+
307
+ /// Add CDG edges from nodeid pair
308
+ void addCDGEdgeFromSrcDst(const ICFGNode *src, const ICFGNode *dst, const SVFVar *pNode, s32_t branchID);
309
+
310
+ };
311
+ } // end namespace SVF
312
+
313
+ namespace SVF
314
+ {
315
+ /* !
316
+ * GenericGraphTraits specializations for generic graph algorithms.
317
+ * Provide graph traits for traversing from a constraint node using standard graph ICFGTraversals.
318
+ */
319
+ template<>
320
+ struct GenericGraphTraits<SVF::CDGNode *>
321
+ : public GenericGraphTraits<SVF::GenericNode<SVF::CDGNode, SVF::CDGEdge> *>
322
+ {
323
+ };
324
+
325
+ /// Inverse GenericGraphTraits specializations for call graph node, it is used for inverse ICFGTraversal.
326
+ template<>
327
+ struct GenericGraphTraits<Inverse<SVF::CDGNode *> > : public GenericGraphTraits<
328
+ Inverse<SVF::GenericNode<SVF::CDGNode, SVF::CDGEdge> *> >
329
+ {
330
+ };
331
+
332
+ template<>
333
+ struct GenericGraphTraits<SVF::CDG *>
334
+ : public GenericGraphTraits<SVF::GenericGraph<SVF::CDGNode, SVF::CDGEdge> *>
335
+ {
336
+ typedef SVF::CDGNode *NodeRef;
337
+ };
338
+
339
+ template<>
340
+ struct DOTGraphTraits<SVF::CDG *> : public DOTGraphTraits<SVF::PAG *>
341
+ {
342
+
343
+ typedef SVF::CDGNode NodeType;
344
+
345
+ DOTGraphTraits(bool isSimple = false) :
346
+ DOTGraphTraits<SVF::PAG *>(isSimple)
347
+ {
348
+ }
349
+
350
+ /// Return name of the graph
351
+ static std::string getGraphName(SVF::CDG *)
352
+ {
353
+ return "Control Dependence Graph";
354
+ }
355
+
356
+ std::string getNodeLabel(NodeType *node, SVF::CDG *graph)
357
+ {
358
+ return getSimpleNodeLabel(node, graph);
359
+ }
360
+
361
+ /// Return the label of an ICFG node
362
+ static std::string getSimpleNodeLabel(NodeType *node, SVF::CDG *)
363
+ {
364
+ std::string str;
365
+ std::stringstream rawstr(str);
366
+ rawstr << "NodeID: " << node->getId() << "\n";
367
+ const SVF::ICFGNode *icfgNode = node->getICFGNode();
368
+ if (const SVF::IntraICFGNode *bNode = SVF::SVFUtil::dyn_cast<SVF::IntraICFGNode>(icfgNode))
369
+ {
370
+ rawstr << "IntraBlockNode ID: " << bNode->getId() << " \t";
371
+ SVF::PAG::SVFStmtList &edges = SVF::PAG::getPAG()->getPTASVFStmtList(bNode);
372
+ if (edges.empty())
373
+ {
374
+ rawstr << (bNode)->toString() << " \t";
375
+ }
376
+ else
377
+ {
378
+ for (SVF::PAG::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)
379
+ {
380
+ const SVF::PAGEdge *edge = *it;
381
+ rawstr << edge->toString();
382
+ }
383
+ }
384
+ rawstr << " {fun: " << bNode->getFun()->getName() << "}";
385
+ }
386
+ else if (const SVF::FunEntryICFGNode *entry = SVF::SVFUtil::dyn_cast<SVF::FunEntryICFGNode>(icfgNode))
387
+ {
388
+ rawstr << entry->toString();
389
+ }
390
+ else if (const SVF::FunExitICFGNode *exit = SVF::SVFUtil::dyn_cast<SVF::FunExitICFGNode>(icfgNode))
391
+ {
392
+ rawstr << exit->toString();
393
+ }
394
+ else if (const SVF::CallICFGNode *call = SVF::SVFUtil::dyn_cast<SVF::CallICFGNode>(icfgNode))
395
+ {
396
+ rawstr << call->toString();
397
+ }
398
+ else if (const SVF::RetICFGNode *ret = SVF::SVFUtil::dyn_cast<SVF::RetICFGNode>(icfgNode))
399
+ {
400
+ rawstr << ret->toString();
401
+ }
402
+ else if (const SVF::GlobalICFGNode *glob = SVF::SVFUtil::dyn_cast<SVF::GlobalICFGNode>(icfgNode))
403
+ {
404
+ SVF::PAG::SVFStmtList &edges = SVF::PAG::getPAG()->getPTASVFStmtList(glob);
405
+ for (SVF::PAG::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)
406
+ {
407
+ const SVF::PAGEdge *edge = *it;
408
+ rawstr << edge->toString();
409
+ }
410
+ }
411
+ else
412
+ assert(false && "what else kinds of nodes do we have??");
413
+
414
+ return rawstr.str();
415
+ }
416
+
417
+ static std::string getNodeAttributes(NodeType *node, SVF::CDG *)
418
+ {
419
+ std::string str;
420
+ std::stringstream rawstr(str);
421
+ const SVF::ICFGNode *icfgNode = node->getICFGNode();
422
+
423
+ if (SVF::SVFUtil::isa<SVF::IntraICFGNode>(icfgNode))
424
+ {
425
+ rawstr << "color=black";
426
+ }
427
+ else if (SVF::SVFUtil::isa<SVF::FunEntryICFGNode>(icfgNode))
428
+ {
429
+ rawstr << "color=yellow";
430
+ }
431
+ else if (SVF::SVFUtil::isa<SVF::FunExitICFGNode>(icfgNode))
432
+ {
433
+ rawstr << "color=green";
434
+ }
435
+ else if (SVF::SVFUtil::isa<SVF::CallICFGNode>(icfgNode))
436
+ {
437
+ rawstr << "color=red";
438
+ }
439
+ else if (SVF::SVFUtil::isa<SVF::RetICFGNode>(icfgNode))
440
+ {
441
+ rawstr << "color=blue";
442
+ }
443
+ else if (SVF::SVFUtil::isa<SVF::GlobalICFGNode>(icfgNode))
444
+ {
445
+ rawstr << "color=purple";
446
+ }
447
+ else
448
+ assert(false && "no such kind of node!!");
449
+
450
+ rawstr << "";
451
+
452
+ return rawstr.str();
453
+ }
454
+
455
+ template<class EdgeIter>
456
+ static std::string getEdgeAttributes(NodeType *, EdgeIter EI, SVF::CDG *)
457
+ {
458
+ assert(*(EI.getCurrent()) && "No edge found!!");
459
+ return "style=solid";
460
+ }
461
+
462
+ template<class EdgeIter>
463
+ static std::string getEdgeSourceLabel(NodeType *, EdgeIter EI)
464
+ {
465
+ SVF::CDGEdge *edge = *(EI.getCurrent());
466
+ assert(edge && "No edge found!!");
467
+
468
+ std::string str;
469
+ std::stringstream rawstr(str);
470
+ for (const auto &cond: edge->getBranchConditions())
471
+ {
472
+ rawstr << std::to_string(cond.second) << "|";
473
+ }
474
+ std::string lb = rawstr.str();
475
+ lb.pop_back();
476
+
477
+ return lb;
478
+ }
479
+ };
480
+
481
+ } // End namespace SVF
482
+ #endif //SVF_CONTROLDG_H
@@ -0,0 +1,232 @@
1
+ //===----- CFLGraph.h -- Graph for context-free language reachability analysis --//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-> <Yulei Sui>
6
+ //
7
+
8
+ // This program is free software: you can redistribute it and/or modify
9
+ // it under the terms of the GNU Affero General Public License as published by
10
+ // the Free Software Foundation, either version 3 of the License, or
11
+ // (at your option) any later version.
12
+
13
+ // This program is distributed in the hope that it will be useful,
14
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ // GNU Affero General Public License for more details.
17
+
18
+ // You should have received a copy of the GNU Affero General Public License
19
+ // along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ //
21
+ //===----------------------------------------------------------------------===//
22
+
23
+ /*
24
+ * CFLGraph.h
25
+ *
26
+ * Created on: March 5, 2022
27
+ * Author: Yulei Sui
28
+ */
29
+
30
+ #ifndef CFLG_H_
31
+ #define CFLG_H_
32
+
33
+ #include <fstream>
34
+ #include <iostream>
35
+ #include <string>
36
+ #include "CFL/CFGrammar.h"
37
+ #include "Graphs/GenericGraph.h"
38
+ #include "Graphs/ConsG.h"
39
+
40
+ namespace SVF
41
+ {
42
+ class CFLNode;
43
+
44
+ typedef GenericEdge<CFLNode> GenericCFLEdgeTy;
45
+
46
+ class CFLEdge: public GenericCFLEdgeTy
47
+ {
48
+ public:
49
+ typedef GenericNode<CFLNode, CFLEdge>::GEdgeSetTy CFLEdgeSetTy;
50
+
51
+ CFLEdge(CFLNode *s, CFLNode *d, GEdgeFlag k = 0):
52
+ GenericCFLEdgeTy(s,d,k)
53
+ {
54
+ }
55
+ ~CFLEdge() override = default;
56
+
57
+ inline GEdgeKind getEdgeKind() const
58
+ {
59
+ return this->getEdgeKindWithoutMask();
60
+ }
61
+
62
+ inline GEdgeKind getEdgeKindWithMask() const
63
+ {
64
+ return (EdgeKindMask & this->getEdgeKindWithoutMask());
65
+ }
66
+
67
+ inline GEdgeKind getEdgeAttri() const
68
+ {
69
+ return (getEdgeKind() >> this->EdgeKindMaskBits);
70
+ }
71
+ };
72
+
73
+
74
+ typedef GenericNode<CFLNode,CFLEdge> GenericCFLNodeTy;
75
+ class CFLNode: public GenericCFLNodeTy
76
+ {
77
+ public:
78
+ CFLNode (NodeID i = 0, GNodeK k = CFLNodeKd):
79
+ GenericCFLNodeTy(i, k)
80
+ {
81
+ }
82
+
83
+ ~CFLNode() override = default;
84
+
85
+ /// Different Kind(label) associated edges set
86
+ typedef std::map <GrammarBase::Symbol, CFLEdge::CFLEdgeSetTy> CFLEdgeDataTy;
87
+
88
+ private:
89
+ CFLEdgeDataTy inCFLEdges;
90
+ CFLEdgeDataTy outCFLEdges;
91
+
92
+ public:
93
+ inline const CFLEdge::CFLEdgeSetTy& getInEdgeWithTy(GrammarBase::Symbol s)
94
+ {
95
+ return inCFLEdges[s];
96
+ }
97
+
98
+ inline const CFLEdge::CFLEdgeSetTy& getOutEdgeWithTy(GrammarBase::Symbol s)
99
+ {
100
+ return outCFLEdges[s];
101
+ }
102
+
103
+ inline bool addInEdgeWithKind(CFLEdge* inEdge, GrammarBase::Symbol s)
104
+ {
105
+ assert(inEdge->getDstID() == this->getId());
106
+ bool added1 = GenericNode::addIncomingEdge(inEdge);
107
+ bool added2 = inCFLEdges[s].insert(inEdge).second;
108
+
109
+ return added1 && added2;
110
+ }
111
+
112
+ inline bool addIngoingEdge(CFLEdge* inEdge)
113
+ {
114
+ return addInEdgeWithKind(inEdge, inEdge->getEdgeKind());
115
+ }
116
+
117
+ inline bool addOutEdgeWithKind(CFLEdge* outEdge, GrammarBase::Symbol s)
118
+ {
119
+ assert(outEdge->getSrcID() == this->getId());
120
+ bool added1 = GenericNode::addOutgoingEdge(outEdge);
121
+ bool added2 = outCFLEdges[s].insert(outEdge).second;
122
+
123
+ return added1 && added2;
124
+ }
125
+
126
+ inline bool addOutgoingEdge(CFLEdge* OutEdge)
127
+ {
128
+ return addOutEdgeWithKind(OutEdge, OutEdge->getEdgeKind());
129
+ }
130
+
131
+ inline bool removeCFLInEdge(CFLEdge* inEdge)
132
+ {
133
+ u32_t num1 = removeIncomingEdge(inEdge);
134
+
135
+ GrammarBase::Symbol s = inEdge->getEdgeKind();
136
+ u32_t num2 = inCFLEdges[s].erase(inEdge);
137
+
138
+ return num1 && num2;
139
+ }
140
+
141
+ inline bool removeCFLOutEdge(CFLEdge* outEdge)
142
+ {
143
+ u32_t num1 = removeOutgoingEdge(outEdge);
144
+
145
+ GrammarBase::Symbol s = outEdge->getEdgeKind();
146
+ u32_t num2 = outCFLEdges[s].erase(outEdge);
147
+
148
+ return num1 && num2;
149
+ }
150
+
151
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
152
+ //@{
153
+ static inline bool classof(const CFLNode *)
154
+ {
155
+ return true;
156
+ }
157
+
158
+ static inline bool classof(const GenericICFGNodeTy* node)
159
+ {
160
+ return node->getNodeKind() == CFLNodeKd;
161
+ }
162
+
163
+ static inline bool classof(const SVFValue* node)
164
+ {
165
+ return node->getNodeKind() == CFLNodeKd;
166
+ }
167
+ //@}
168
+ };
169
+
170
+ /// Edge-labeled graph for CFL Reachability analysis
171
+ typedef GenericGraph<CFLNode,CFLEdge> GenericCFLGraphTy;
172
+ class CFLGraph: public GenericCFLGraphTy
173
+ {
174
+ public:
175
+ typedef CFGrammar::Symbol Symbol;
176
+ typedef CFGrammar::Kind Kind;
177
+ typedef GenericNode<CFLNode,CFLEdge>::GEdgeSetTy CFLEdgeSet;
178
+ Kind startKind;
179
+
180
+ CFLGraph(Kind kind)
181
+ {
182
+ startKind = kind;
183
+ }
184
+ ~CFLGraph() override = default;
185
+
186
+ Kind getStartKind() const;
187
+
188
+ virtual void addCFLNode(NodeID id, CFLNode* node);
189
+
190
+ virtual const CFLEdge* addCFLEdge(CFLNode* src, CFLNode* dst, CFLEdge::GEdgeFlag label);
191
+
192
+ virtual const CFLEdge* hasEdge(CFLNode* src, CFLNode* dst, CFLEdge::GEdgeFlag label);
193
+
194
+ void dump(const std::string& filename);
195
+
196
+ void view();
197
+
198
+ inline const CFLEdgeSet& getCFLEdges() const
199
+ {
200
+ return cflEdgeSet;
201
+ }
202
+
203
+ private:
204
+ CFLEdgeSet cflEdgeSet;
205
+ };
206
+
207
+ }
208
+
209
+ namespace SVF
210
+ {
211
+ /* !
212
+ * GenericGraphTraits specializations for generic graph algorithms.
213
+ * Provide graph traits for traversing from a constraint node using standard graph traversals.
214
+ */
215
+ template<> struct GenericGraphTraits<SVF::CFLNode*> : public GenericGraphTraits<SVF::GenericNode<SVF::CFLNode,SVF::CFLEdge>* >
216
+ {
217
+ };
218
+
219
+ /// Inverse GenericGraphTraits specializations for call graph node, it is used for inverse traversal.
220
+ template<>
221
+ struct GenericGraphTraits<Inverse<SVF::CFLNode *> > : public GenericGraphTraits<Inverse<SVF::GenericNode<SVF::CFLNode,SVF::CFLEdge>* > >
222
+ {
223
+ };
224
+
225
+ template<> struct GenericGraphTraits<SVF::CFLGraph*> : public GenericGraphTraits<SVF::GenericGraph<SVF::CFLNode,SVF::CFLEdge>* >
226
+ {
227
+ typedef SVF::CFLNode *NodeRef;
228
+ };
229
+
230
+ } // End namespace llvm
231
+
232
+ #endif /* CFLG_H_ */