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,331 @@
1
+ //===- ICFG.h ----------------------------------------------------------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-2018> <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
+ * ICFG.h
25
+ *
26
+ * Created on: 11 Sep. 2018
27
+ * Author: Yulei
28
+ */
29
+
30
+ #ifndef INCLUDE_UTIL_ICFG_H_
31
+ #define INCLUDE_UTIL_ICFG_H_
32
+
33
+ #include "Graphs/ICFGNode.h"
34
+ #include "Graphs/ICFGEdge.h"
35
+ #include "Util/WorkList.h"
36
+ #include "MemoryModel/SVFLoop.h"
37
+
38
+ namespace SVF
39
+ {
40
+
41
+ class CallGraph;
42
+
43
+ /*!
44
+ * Interprocedural Control-Flow Graph (ICFG)
45
+ */
46
+ typedef GenericGraph<ICFGNode,ICFGEdge> GenericICFGTy;
47
+ class ICFG : public GenericICFGTy
48
+ {
49
+ friend class ICFGBuilder;
50
+ friend class SVFIRWriter;
51
+ friend class SVFIRReader;
52
+ friend class ICFGSimplification;
53
+
54
+ public:
55
+
56
+ typedef OrderedMap<NodeID, ICFGNode *> ICFGNodeIDToNodeMapTy;
57
+ typedef ICFGEdge::ICFGEdgeSetTy ICFGEdgeSetTy;
58
+ typedef ICFGNodeIDToNodeMapTy::iterator iterator;
59
+ typedef ICFGNodeIDToNodeMapTy::const_iterator const_iterator;
60
+
61
+ typedef Map<const FunObjVar*, FunEntryICFGNode *> FunToFunEntryNodeMapTy;
62
+ typedef Map<const FunObjVar*, FunExitICFGNode *> FunToFunExitNodeMapTy;
63
+ typedef std::vector<const SVFLoop *> SVFLoopVec;
64
+ typedef Map<const ICFGNode *, SVFLoopVec> ICFGNodeToSVFLoopVec;
65
+
66
+ NodeID totalICFGNode;
67
+
68
+ private:
69
+ FunToFunEntryNodeMapTy FunToFunEntryNodeMap; ///< map a function to its FunExitICFGNode
70
+ FunToFunExitNodeMapTy FunToFunExitNodeMap; ///< map a function to its FunEntryICFGNode
71
+ GlobalICFGNode* globalBlockNode; ///< unique basic block for all globals
72
+ ICFGNodeToSVFLoopVec icfgNodeToSVFLoopVec; ///< map ICFG node to the SVF loops where it resides
73
+
74
+ Map<const ICFGNode*, std::vector<const ICFGNode*>> _subNodes; ///<map a node(1st node of basicblock) to its subnodes
75
+ Map<const ICFGNode*, const ICFGNode*> _repNode; ///<map a subnode to its representative node(1st node of basicblock)
76
+
77
+
78
+ public:
79
+ /// Constructor
80
+ ICFG();
81
+
82
+ /// Destructor
83
+ ~ICFG() override;
84
+
85
+ /// Get a ICFG node
86
+ inline ICFGNode* getICFGNode(NodeID id) const
87
+ {
88
+ return getGNode(id);
89
+ }
90
+
91
+ /// Whether has the ICFGNode
92
+ inline bool hasICFGNode(NodeID id) const
93
+ {
94
+ return hasGNode(id);
95
+ }
96
+
97
+ /// Whether we has a SVFG edge
98
+ //@{
99
+ ICFGEdge* hasIntraICFGEdge(ICFGNode* src, ICFGNode* dst, ICFGEdge::ICFGEdgeK kind);
100
+ ICFGEdge* hasInterICFGEdge(ICFGNode* src, ICFGNode* dst, ICFGEdge::ICFGEdgeK kind);
101
+ ICFGEdge* hasThreadICFGEdge(ICFGNode* src, ICFGNode* dst, ICFGEdge::ICFGEdgeK kind);
102
+ //@}
103
+
104
+ /// Get a SVFG edge according to src and dst
105
+ ICFGEdge* getICFGEdge(const ICFGNode* src, const ICFGNode* dst, ICFGEdge::ICFGEdgeK kind);
106
+
107
+ /// Dump graph into dot file
108
+ void dump(const std::string& file, bool simple = false);
109
+
110
+ /// View graph from the debugger
111
+ void view();
112
+
113
+ /// update ICFG for indirect calls
114
+ void updateCallGraph(CallGraph* callgraph);
115
+
116
+ /// Whether node is in a loop
117
+ inline bool isInLoop(const ICFGNode *node)
118
+ {
119
+ auto it = icfgNodeToSVFLoopVec.find(node);
120
+ return it != icfgNodeToSVFLoopVec.end();
121
+ }
122
+
123
+ /// Insert (node, loop) to icfgNodeToSVFLoopVec
124
+ inline void addNodeToSVFLoop(const ICFGNode *node, const SVFLoop* loop)
125
+ {
126
+ icfgNodeToSVFLoopVec[node].push_back(loop);
127
+ }
128
+
129
+ /// Get loops where a node resides
130
+ inline SVFLoopVec& getSVFLoops(const ICFGNode *node)
131
+ {
132
+ auto it = icfgNodeToSVFLoopVec.find(node);
133
+ assert(it != icfgNodeToSVFLoopVec.end() && "node not in loop");
134
+ return it->second;
135
+ }
136
+
137
+ inline const ICFGNodeToSVFLoopVec& getIcfgNodeToSVFLoopVec() const
138
+ {
139
+ return icfgNodeToSVFLoopVec;
140
+ }
141
+
142
+ protected:
143
+ /// Add intraprocedural and interprocedural control-flow edges.
144
+ //@{
145
+ ICFGEdge* addIntraEdge(ICFGNode* srcNode, ICFGNode* dstNode);
146
+ ICFGEdge* addConditionalIntraEdge(ICFGNode* srcNode, ICFGNode* dstNode, s64_t branchCondVal);
147
+ ICFGEdge* addCallEdge(ICFGNode* srcNode, ICFGNode* dstNode);
148
+ ICFGEdge* addRetEdge(ICFGNode* srcNode, ICFGNode* dstNode);
149
+ //@}
150
+ /// Remove a ICFG edge
151
+ inline void removeICFGEdge(ICFGEdge* edge)
152
+ {
153
+ edge->getDstNode()->removeIncomingEdge(edge);
154
+ edge->getSrcNode()->removeOutgoingEdge(edge);
155
+ delete edge;
156
+ }
157
+
158
+ /// Remove a ICFGNode
159
+ inline void removeICFGNode(ICFGNode* node)
160
+ {
161
+ removeGNode(node);
162
+ }
163
+
164
+ /// sanitize Intra edges, verify that both nodes belong to the same function.
165
+ inline void checkIntraEdgeParents(const ICFGNode *srcNode, const ICFGNode *dstNode)
166
+ {
167
+ const FunObjVar* srcfun = srcNode->getFun();
168
+ const FunObjVar* dstfun = dstNode->getFun();
169
+ if(srcfun != nullptr && dstfun != nullptr)
170
+ {
171
+ assert((srcfun == dstfun) && "src and dst nodes of an intra edge should in the same function!" );
172
+ }
173
+ }
174
+
175
+ virtual inline IntraICFGNode* addIntraICFGNode(const SVFBasicBlock* bb, bool isRet)
176
+ {
177
+ IntraICFGNode* intraIcfgNode =
178
+ new IntraICFGNode(totalICFGNode++, bb, isRet);
179
+ addICFGNode(intraIcfgNode);
180
+ return intraIcfgNode;
181
+ }
182
+
183
+ virtual inline CallICFGNode* addCallICFGNode(
184
+ const SVFBasicBlock* bb, const SVFType* ty,
185
+ const FunObjVar* calledFunc, bool isVararg, bool isvcall,
186
+ s32_t vcallIdx, const std::string& funNameOfVcall)
187
+ {
188
+
189
+ CallICFGNode* callICFGNode =
190
+ new CallICFGNode(totalICFGNode++, bb, ty, calledFunc, isVararg,
191
+ isvcall, vcallIdx, funNameOfVcall);
192
+ addICFGNode(callICFGNode);
193
+ return callICFGNode;
194
+ }
195
+
196
+ virtual inline RetICFGNode* addRetICFGNode(CallICFGNode* call)
197
+ {
198
+ RetICFGNode* retICFGNode = new RetICFGNode(totalICFGNode++, call);
199
+ call->setRetICFGNode(retICFGNode);
200
+ addICFGNode(retICFGNode);
201
+ return retICFGNode;
202
+ }
203
+
204
+ virtual inline FunEntryICFGNode* addFunEntryICFGNode(const FunObjVar* svfFunc)
205
+ {
206
+ FunEntryICFGNode* sNode = new FunEntryICFGNode(totalICFGNode++,svfFunc);
207
+ addICFGNode(sNode);
208
+ return FunToFunEntryNodeMap[svfFunc] = sNode;
209
+ }
210
+
211
+ virtual inline FunExitICFGNode* addFunExitICFGNode(const FunObjVar* svfFunc)
212
+ {
213
+ FunExitICFGNode* sNode = new FunExitICFGNode(totalICFGNode++, svfFunc);
214
+ addICFGNode(sNode);
215
+ return FunToFunExitNodeMap[svfFunc] = sNode;
216
+ }
217
+
218
+ /// Add a ICFG node
219
+ virtual inline void addICFGNode(ICFGNode* node)
220
+ {
221
+ addGNode(node->getId(),node);
222
+ _repNode[node] = node;
223
+ _subNodes[node].push_back(node);
224
+ }
225
+
226
+ public:
227
+ /// Get a basic block ICFGNode
228
+ /// TODO:: need to fix the assertions
229
+ //@{
230
+
231
+
232
+ FunEntryICFGNode* getFunEntryICFGNode(const FunObjVar* fun);
233
+
234
+ FunExitICFGNode* getFunExitICFGNode(const FunObjVar* fun);
235
+
236
+ inline GlobalICFGNode* getGlobalICFGNode() const
237
+ {
238
+ return globalBlockNode;
239
+ }
240
+
241
+ const std::vector<const ICFGNode*>& getSubNodes(const ICFGNode* node) const
242
+ {
243
+ return _subNodes.at(node);
244
+ }
245
+
246
+ const ICFGNode* getRepNode(const ICFGNode* node) const
247
+ {
248
+ return _repNode.at(node);
249
+ }
250
+
251
+
252
+ void updateSubAndRep(const ICFGNode* rep, const ICFGNode* sub)
253
+ {
254
+ addSubNode(rep, sub);
255
+ updateRepNode(rep, sub);
256
+ }
257
+ //@}
258
+
259
+ private:
260
+ /// when ICFG is simplified, SubNode would merge repNode, then update the map
261
+ void addSubNode(const ICFGNode* rep, const ICFGNode* sub)
262
+ {
263
+ std::vector<const ICFGNode*>& subNodes = _subNodes[sub];
264
+ if(std::find(subNodes.begin(), subNodes.end(), rep) == subNodes.end())
265
+ {
266
+ subNodes.push_back(rep);
267
+ }
268
+ }
269
+
270
+ /// when ICFG is simplified, some node would be removed, this map records the removed node to its rep node
271
+ void updateRepNode(const ICFGNode* rep, const ICFGNode* sub)
272
+ {
273
+ _repNode[rep] = sub;
274
+ }
275
+
276
+ /// Add ICFG edge, only used by addIntraEdge, addCallEdge, addRetEdge etc.
277
+ inline bool addICFGEdge(ICFGEdge* edge)
278
+ {
279
+ bool added1 = edge->getDstNode()->addIncomingEdge(edge);
280
+ bool added2 = edge->getSrcNode()->addOutgoingEdge(edge);
281
+ bool all_added = added1 && added2;
282
+ assert(all_added && "ICFGEdge not added?");
283
+ return all_added;
284
+ }
285
+
286
+ /// Get/Add a function entry node
287
+ inline FunEntryICFGNode* getFunEntryBlock(const FunObjVar* fun)
288
+ {
289
+ FunToFunEntryNodeMapTy::const_iterator it = FunToFunEntryNodeMap.find(fun);
290
+ if (it == FunToFunEntryNodeMap.end())
291
+ return nullptr;
292
+ return it->second;
293
+ }
294
+
295
+ /// Get/Add a function exit node
296
+ inline FunExitICFGNode* getFunExitBlock(const FunObjVar* fun)
297
+ {
298
+ FunToFunExitNodeMapTy::const_iterator it = FunToFunExitNodeMap.find(fun);
299
+ if (it == FunToFunExitNodeMap.end())
300
+ return nullptr;
301
+ return it->second;
302
+ }
303
+
304
+ };
305
+
306
+ } // End namespace SVF
307
+
308
+ namespace SVF
309
+ {
310
+ /* !
311
+ * GenericGraphTraits specializations for generic graph algorithms.
312
+ * Provide graph traits for traversing from a constraint node using standard graph traversals.
313
+ */
314
+ template<> struct GenericGraphTraits<SVF::ICFGNode*> : public GenericGraphTraits<SVF::GenericNode<SVF::ICFGNode,SVF::ICFGEdge>* >
315
+ {
316
+ };
317
+
318
+ /// Inverse GenericGraphTraits specializations for call graph node, it is used for inverse traversal.
319
+ template<>
320
+ struct GenericGraphTraits<Inverse<SVF::ICFGNode *> > : public GenericGraphTraits<Inverse<SVF::GenericNode<SVF::ICFGNode,SVF::ICFGEdge>* > >
321
+ {
322
+ };
323
+
324
+ template<> struct GenericGraphTraits<SVF::ICFG*> : public GenericGraphTraits<SVF::GenericGraph<SVF::ICFGNode,SVF::ICFGEdge>* >
325
+ {
326
+ typedef SVF::ICFGNode *NodeRef;
327
+ };
328
+
329
+ } // End namespace llvm
330
+
331
+ #endif /* INCLUDE_UTIL_ICFG_H_ */
@@ -0,0 +1,281 @@
1
+ //===- ICFGEdge.h -- ICFG edge------------------------------------------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-2018> <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
+ * ICFGEdge.h
25
+ *
26
+ * Created on: Sep 11, 2018
27
+ * Author: Yulei Sui
28
+ */
29
+
30
+ #ifndef ICFGEdge_H_
31
+ #define ICFGEdge_H_
32
+
33
+ namespace SVF
34
+ {
35
+
36
+ class ICFGNode;
37
+ class CallPE;
38
+ class RetPE;
39
+
40
+ /*!
41
+ * Interprocedural control-flow and value-flow edge, representing the control- and value-flow dependence between two nodes
42
+ */
43
+ typedef GenericEdge<ICFGNode> GenericICFGEdgeTy;
44
+ class ICFGEdge : public GenericICFGEdgeTy
45
+ {
46
+ friend class SVFIRWriter;
47
+ friend class SVFIRReader;
48
+
49
+ public:
50
+ /// ten types of ICFG edge
51
+ /// three types of control-flow edges
52
+ /// seven types of value-flow edges
53
+ enum ICFGEdgeK
54
+ {
55
+ IntraCF,
56
+ CallCF,
57
+ RetCF,
58
+ };
59
+
60
+ typedef ICFGEdgeK SVFGEdgeK;
61
+
62
+ public:
63
+ /// Constructor
64
+ ICFGEdge(ICFGNode* s, ICFGNode* d, GEdgeFlag k) : GenericICFGEdgeTy(s, d, k)
65
+ {
66
+ }
67
+ /// Destructor
68
+ ~ICFGEdge() {}
69
+
70
+ /// Get methods of the components
71
+ //@{
72
+ inline bool isCFGEdge() const
73
+ {
74
+ return getEdgeKind() == IntraCF || getEdgeKind() == CallCF ||
75
+ getEdgeKind() == RetCF;
76
+ }
77
+ inline bool isCallCFGEdge() const
78
+ {
79
+ return getEdgeKind() == CallCF;
80
+ }
81
+ inline bool isRetCFGEdge() const
82
+ {
83
+ return getEdgeKind() == RetCF;
84
+ }
85
+ inline bool isIntraCFGEdge() const
86
+ {
87
+ return getEdgeKind() == IntraCF;
88
+ }
89
+ //@}
90
+ typedef GenericNode<ICFGNode, ICFGEdge>::GEdgeSetTy ICFGEdgeSetTy;
91
+ typedef ICFGEdgeSetTy SVFGEdgeSetTy;
92
+ /// Compute the unique edgeFlag value from edge kind and CallSiteID.
93
+ static inline GEdgeFlag makeEdgeFlagWithInvokeID(GEdgeKind k, CallSiteID cs)
94
+ {
95
+ return (cs << EdgeKindMaskBits) | k;
96
+ }
97
+
98
+ /// Overloading operator << for dumping ICFG node ID
99
+ //@{
100
+ friend OutStream& operator<<(OutStream& o, const ICFGEdge& edge)
101
+ {
102
+ o << edge.toString();
103
+ return o;
104
+ }
105
+ //@}
106
+
107
+ virtual const std::string toString() const;
108
+ };
109
+
110
+ /*!
111
+ * Intra ICFG edge representing control-flows between basic blocks within a function
112
+ */
113
+ class IntraCFGEdge : public ICFGEdge
114
+ {
115
+ friend class SVFIRWriter;
116
+ friend class SVFIRReader;
117
+ friend class ICFG;
118
+ friend class SVFIRBuilder;
119
+
120
+ public:
121
+ /// Constructor
122
+ IntraCFGEdge(ICFGNode* s, ICFGNode* d)
123
+ : ICFGEdge(s, d, IntraCF), conditionVar(nullptr), branchCondVal(0)
124
+ {
125
+ }
126
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
127
+ //@{
128
+ static inline bool classof(const IntraCFGEdge*)
129
+ {
130
+ return true;
131
+ }
132
+ static inline bool classof(const ICFGEdge* edge)
133
+ {
134
+ return edge->getEdgeKind() == IntraCF;
135
+ }
136
+ static inline bool classof(const GenericICFGEdgeTy* edge)
137
+ {
138
+ return edge->getEdgeKind() == IntraCF;
139
+ }
140
+ //@}
141
+
142
+ const SVFVar* getCondition() const
143
+ {
144
+ return conditionVar;
145
+ }
146
+
147
+ s64_t getSuccessorCondValue() const
148
+ {
149
+ assert(getCondition() && "this is not a conditional branch edge");
150
+ return branchCondVal;
151
+ }
152
+
153
+ virtual const std::string toString() const;
154
+
155
+ private:
156
+ /// conditionVar is a boolean (for if/else) or numeric condition variable
157
+ /// (for switch).
158
+ /// branchCondVal is the value when this condition should hold to execute
159
+ /// this CFGEdge.
160
+ /// E.g., Inst1: br %cmp label 0, label 1,
161
+ /// Inst2: label 0
162
+ /// Inst3: label 1;
163
+ /// for edge between Inst1 and Inst 2, the first element is %cmp and
164
+ /// the second element is 0
165
+ const SVFVar* conditionVar;
166
+ s64_t branchCondVal;
167
+
168
+ inline void setConditionVar(const SVFVar* c)
169
+ {
170
+ conditionVar = c;
171
+ }
172
+
173
+ inline void setBranchCondVal(s64_t bVal)
174
+ {
175
+ branchCondVal = bVal;
176
+ }
177
+ };
178
+
179
+ /*!
180
+ * Call ICFG edge representing parameter passing/return from a caller to a callee
181
+ */
182
+ class CallCFGEdge : public ICFGEdge
183
+ {
184
+ friend class SVFIRWriter;
185
+ friend class SVFIRReader;
186
+
187
+ private:
188
+ std::vector<const CallPE*> callPEs;
189
+
190
+ public:
191
+ /// Constructor
192
+ CallCFGEdge(ICFGNode* s, ICFGNode* d)
193
+ : ICFGEdge(s, d, CallCF)
194
+ {
195
+ }
196
+ /// Add call parameter edge to this CallCFGEdge
197
+ inline void addCallPE(const CallPE* callPE)
198
+ {
199
+ callPEs.push_back(callPE);
200
+ }
201
+ /// Return call ICFGNode at the callsite
202
+ inline const CallICFGNode* getCallSite() const
203
+ {
204
+ assert(SVFUtil::isa<CallICFGNode>(getSrcNode()) && "not a CallICFGNode?");
205
+ return SVFUtil::cast<CallICFGNode>(getSrcNode());
206
+ }
207
+ /// Add get parameter edge to this CallCFGEdge
208
+ inline const std::vector<const CallPE*>& getCallPEs() const
209
+ {
210
+ return callPEs;
211
+ }
212
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
213
+ //@{
214
+ static inline bool classof(const CallCFGEdge*)
215
+ {
216
+ return true;
217
+ }
218
+ static inline bool classof(const ICFGEdge* edge)
219
+ {
220
+ return edge->getEdgeKind() == CallCF;
221
+ }
222
+ static inline bool classof(const GenericICFGEdgeTy* edge)
223
+ {
224
+ return edge->getEdgeKind() == CallCF;
225
+ }
226
+ //@}
227
+ virtual const std::string toString() const;
228
+ };
229
+
230
+ /*!
231
+ * Return ICFG edge representing parameter/return passing from a callee to a caller
232
+ */
233
+ class RetCFGEdge : public ICFGEdge
234
+ {
235
+ friend class SVFIRWriter;
236
+ friend class SVFIRReader;
237
+
238
+ private:
239
+ const RetPE* retPE;
240
+
241
+ public:
242
+ /// Constructor
243
+ RetCFGEdge(ICFGNode* s, ICFGNode* d)
244
+ : ICFGEdge(s, d, RetCF), retPE(nullptr)
245
+ {
246
+ }
247
+ /// Add call parameter edge to this CallCFGEdge
248
+ inline void addRetPE(const RetPE* ret)
249
+ {
250
+ assert(!retPE && "we can only have one retPE for each RetCFGEdge");
251
+ retPE = ret;
252
+ }
253
+ /// Add get parameter edge to this CallCFGEdge
254
+ inline const RetPE* getRetPE() const
255
+ {
256
+ return retPE;
257
+ }
258
+ /// Return call ICFGNode at the callsite
259
+ const CallICFGNode* getCallSite() const;
260
+
261
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
262
+ //@{
263
+ static inline bool classof(const RetCFGEdge*)
264
+ {
265
+ return true;
266
+ }
267
+ static inline bool classof(const ICFGEdge* edge)
268
+ {
269
+ return edge->getEdgeKind() == RetCF;
270
+ }
271
+ static inline bool classof(const GenericICFGEdgeTy* edge)
272
+ {
273
+ return edge->getEdgeKind() == RetCF;
274
+ }
275
+ //@}
276
+ virtual const std::string toString() const;
277
+ };
278
+
279
+ } // End namespace SVF
280
+
281
+ #endif /* ICFGEdge_H_ */