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,427 @@
1
+ //===- SVFBugReport.h -- Base class for statistics---------------------------------//
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
+ // Created by JoelYang on 2023/4/19.
25
+ //
26
+
27
+ #ifndef SVF_BUGRECODER_H
28
+ #define SVF_BUGRECODER_H
29
+
30
+ #include <vector>
31
+ #include "SVFIR/SVFValue.h"
32
+ #include "SVFIR/SVFVariables.h"
33
+ #include "SVFIR/SVFStatements.h"
34
+ #include "Graphs/ICFGNode.h"
35
+ #include <string>
36
+ #include <map>
37
+ #include "Util/cJSON.h"
38
+ #include <set>
39
+
40
+ #define BRANCHFLAGMASK 0x00000010
41
+ #define EVENTTYPEMASK 0x0000000f
42
+
43
+ namespace SVF
44
+ {
45
+
46
+ /*!
47
+ * Bug Detector Recoder
48
+ */
49
+
50
+
51
+ class SVFBugEvent
52
+ {
53
+ public:
54
+ enum EventType
55
+ {
56
+ Branch = 0x1,
57
+ Caller = 0x2,
58
+ CallSite = 0x3,
59
+ Loop = 0x4,
60
+ SourceInst = 0x5
61
+ };
62
+
63
+ protected:
64
+ u32_t typeAndInfoFlag;
65
+ const ICFGNode *eventInst;
66
+
67
+ public:
68
+ SVFBugEvent(u32_t typeAndInfoFlag, const ICFGNode *eventInst): typeAndInfoFlag(typeAndInfoFlag), eventInst(eventInst) { };
69
+ virtual ~SVFBugEvent() = default;
70
+
71
+ inline u32_t getEventType() const
72
+ {
73
+ return typeAndInfoFlag & EVENTTYPEMASK;
74
+ }
75
+ virtual const std::string getEventDescription() const;
76
+ virtual const std::string getFuncName() const;
77
+ virtual const std::string getEventLoc() const;
78
+ };
79
+
80
+ class GenericBug
81
+ {
82
+ public:
83
+ typedef std::vector<SVFBugEvent> EventStack;
84
+
85
+ public:
86
+ enum BugType {FULLBUFOVERFLOW, PARTIALBUFOVERFLOW, NEVERFREE, PARTIALLEAK, DOUBLEFREE, FILENEVERCLOSE, FILEPARTIALCLOSE, FULLNULLPTRDEREFERENCE, PARTIALNULLPTRDEREFERENCE};
87
+ static const std::map<GenericBug::BugType, std::string> BugType2Str;
88
+
89
+ protected:
90
+ BugType bugType;
91
+ const EventStack bugEventStack;
92
+
93
+ public:
94
+ /// note: should be initialized with a bugEventStack
95
+ GenericBug(BugType bugType, const EventStack &bugEventStack):
96
+ bugType(bugType), bugEventStack(bugEventStack)
97
+ {
98
+ assert(bugEventStack.size() != 0 && "bugEventStack should NOT be empty!");
99
+ }
100
+ virtual ~GenericBug() = default;
101
+ //GenericBug(const GenericBug &) = delete;
102
+ /// returns bug type
103
+ inline BugType getBugType() const
104
+ {
105
+ return bugType;
106
+ }
107
+ /// returns bug location as json format string
108
+ const std::string getLoc() const;
109
+ /// return bug source function name
110
+ const std::string getFuncName() const;
111
+
112
+ inline const EventStack& getEventStack() const
113
+ {
114
+ return bugEventStack;
115
+ }
116
+
117
+ virtual cJSON *getBugDescription() const = 0;
118
+ virtual void printBugToTerminal() const = 0;
119
+ };
120
+
121
+ class BufferOverflowBug: public GenericBug
122
+ {
123
+ protected:
124
+ s64_t allocLowerBound, allocUpperBound, accessLowerBound, accessUpperBound;
125
+
126
+ public:
127
+ BufferOverflowBug(GenericBug::BugType bugType, const EventStack &eventStack,
128
+ s64_t allocLowerBound, s64_t allocUpperBound,
129
+ s64_t accessLowerBound, s64_t accessUpperBound):
130
+ GenericBug(bugType, eventStack), allocLowerBound(allocLowerBound),
131
+ allocUpperBound(allocUpperBound), accessLowerBound(accessLowerBound),
132
+ accessUpperBound(accessUpperBound) { }
133
+
134
+ cJSON *getBugDescription() const;
135
+ void printBugToTerminal() const;
136
+
137
+ /// ClassOf
138
+ static inline bool classof(const GenericBug *bug)
139
+ {
140
+ return bug->getBugType() == GenericBug::PARTIALBUFOVERFLOW || bug->getBugType() == GenericBug::FULLBUFOVERFLOW;
141
+ }
142
+ };
143
+
144
+ class FullBufferOverflowBug: public BufferOverflowBug
145
+ {
146
+ public:
147
+ FullBufferOverflowBug(const EventStack &eventStack,
148
+ s64_t allocLowerBound, s64_t allocUpperBound,
149
+ s64_t accessLowerBound, s64_t accessUpperBound):
150
+ BufferOverflowBug(GenericBug::FULLBUFOVERFLOW, eventStack, allocLowerBound,
151
+ allocUpperBound, accessLowerBound, accessUpperBound) { }
152
+
153
+ /// ClassOf
154
+ static inline bool classof(const GenericBug *bug)
155
+ {
156
+ return bug->getBugType() == GenericBug::FULLBUFOVERFLOW;
157
+ }
158
+ };
159
+
160
+ class PartialBufferOverflowBug: public BufferOverflowBug
161
+ {
162
+ public:
163
+ PartialBufferOverflowBug( const EventStack &eventStack,
164
+ s64_t allocLowerBound, s64_t allocUpperBound,
165
+ s64_t accessLowerBound, s64_t accessUpperBound):
166
+ BufferOverflowBug(GenericBug::PARTIALBUFOVERFLOW, eventStack, allocLowerBound,
167
+ allocUpperBound, accessLowerBound, accessUpperBound) { }
168
+
169
+ /// ClassOf
170
+ static inline bool classof(const GenericBug *bug)
171
+ {
172
+ return bug->getBugType() == GenericBug::PARTIALBUFOVERFLOW;
173
+ }
174
+ };
175
+
176
+ class NeverFreeBug : public GenericBug
177
+ {
178
+ public:
179
+ NeverFreeBug(const EventStack &bugEventStack):
180
+ GenericBug(GenericBug::NEVERFREE, bugEventStack) { };
181
+
182
+ cJSON *getBugDescription() const;
183
+ void printBugToTerminal() const;
184
+
185
+ /// ClassOf
186
+ static inline bool classof(const GenericBug *bug)
187
+ {
188
+ return bug->getBugType() == GenericBug::NEVERFREE;
189
+ }
190
+ };
191
+
192
+ class PartialLeakBug : public GenericBug
193
+ {
194
+ public:
195
+ PartialLeakBug(const EventStack &bugEventStack):
196
+ GenericBug(GenericBug::PARTIALLEAK, bugEventStack) { }
197
+
198
+ cJSON *getBugDescription() const;
199
+ void printBugToTerminal() const;
200
+
201
+ /// ClassOf
202
+ static inline bool classof(const GenericBug *bug)
203
+ {
204
+ return bug->getBugType() == GenericBug::PARTIALLEAK;
205
+ }
206
+ };
207
+
208
+ class DoubleFreeBug : public GenericBug
209
+ {
210
+ public:
211
+ DoubleFreeBug(const EventStack &bugEventStack):
212
+ GenericBug(GenericBug::DOUBLEFREE, bugEventStack) { }
213
+
214
+ cJSON *getBugDescription() const;
215
+ void printBugToTerminal() const;
216
+
217
+ /// ClassOf
218
+ static inline bool classof(const GenericBug *bug)
219
+ {
220
+ return bug->getBugType() == GenericBug::DOUBLEFREE;
221
+ }
222
+ };
223
+
224
+ class FileNeverCloseBug : public GenericBug
225
+ {
226
+ public:
227
+ FileNeverCloseBug(const EventStack &bugEventStack):
228
+ GenericBug(GenericBug::FILENEVERCLOSE, bugEventStack) { };
229
+
230
+ cJSON *getBugDescription() const;
231
+ void printBugToTerminal() const;
232
+
233
+ /// ClassOf
234
+ static inline bool classof(const GenericBug *bug)
235
+ {
236
+ return bug->getBugType() == GenericBug::FILENEVERCLOSE;
237
+ }
238
+ };
239
+
240
+ class FilePartialCloseBug : public GenericBug
241
+ {
242
+ public:
243
+ FilePartialCloseBug(const EventStack &bugEventStack):
244
+ GenericBug(GenericBug::FILEPARTIALCLOSE, bugEventStack) { }
245
+
246
+ cJSON *getBugDescription() const;
247
+ void printBugToTerminal() const;
248
+
249
+ /// ClassOf
250
+ static inline bool classof(const GenericBug *bug)
251
+ {
252
+ return bug->getBugType() == GenericBug::FILEPARTIALCLOSE;
253
+ }
254
+ };
255
+
256
+ class FullNullPtrDereferenceBug : public GenericBug
257
+ {
258
+ public:
259
+ FullNullPtrDereferenceBug(const EventStack &bugEventStack):
260
+ GenericBug(GenericBug::FULLNULLPTRDEREFERENCE, bugEventStack) { }
261
+
262
+ cJSON *getBugDescription() const;
263
+ void printBugToTerminal() const;
264
+
265
+ /// ClassOf
266
+ static inline bool classof(const GenericBug *bug)
267
+ {
268
+ return bug->getBugType() == GenericBug::FULLNULLPTRDEREFERENCE;
269
+ }
270
+ };
271
+
272
+ class PartialNullPtrDereferenceBug : public GenericBug
273
+ {
274
+ public:
275
+ PartialNullPtrDereferenceBug(const EventStack &bugEventStack):
276
+ GenericBug(GenericBug::PARTIALNULLPTRDEREFERENCE, bugEventStack) { }
277
+
278
+ cJSON *getBugDescription() const;
279
+ void printBugToTerminal() const;
280
+
281
+ /// ClassOf
282
+ static inline bool classof(const GenericBug *bug)
283
+ {
284
+ return bug->getBugType() == GenericBug::PARTIALNULLPTRDEREFERENCE;
285
+ }
286
+ };
287
+
288
+ class SVFBugReport
289
+ {
290
+ public:
291
+ SVFBugReport() = default;
292
+ ~SVFBugReport();
293
+ typedef SVF::Set<const GenericBug *> BugSet;
294
+
295
+ protected:
296
+ BugSet bugSet; // maintain bugs
297
+ double time; // time (sec)
298
+ std::string mem; // string memory (KB)
299
+ double coverage; // coverage (%)
300
+
301
+ public:
302
+ // set time, mem and coverage
303
+ void setStat(double time, std::string mem, double coverage)
304
+ {
305
+ this->time = time;
306
+ this->mem = mem;
307
+ this->coverage = coverage;
308
+ }
309
+
310
+ /*
311
+ * function: pass bug type (i.e., GenericBug::NEVERFREE) and eventStack as parameter,
312
+ * it will add the bug into bugQueue.
313
+ * usage: addSaberBug(GenericBug::NEVERFREE, eventStack)
314
+ */
315
+ void addSaberBug(GenericBug::BugType bugType, const GenericBug::EventStack &eventStack)
316
+ {
317
+ /// create and add the bug
318
+ GenericBug *newBug = nullptr;
319
+ switch(bugType)
320
+ {
321
+ case GenericBug::NEVERFREE:
322
+ {
323
+ newBug = new NeverFreeBug(eventStack);
324
+ bugSet.insert(newBug);
325
+ break;
326
+ }
327
+ case GenericBug::PARTIALLEAK:
328
+ {
329
+ newBug = new PartialLeakBug(eventStack);
330
+ bugSet.insert(newBug);
331
+ break;
332
+ }
333
+ case GenericBug::DOUBLEFREE:
334
+ {
335
+ newBug = new DoubleFreeBug(eventStack);
336
+ bugSet.insert(newBug);
337
+ break;
338
+ }
339
+ case GenericBug::FILENEVERCLOSE:
340
+ {
341
+ newBug = new FileNeverCloseBug(eventStack);
342
+ bugSet.insert(newBug);
343
+ break;
344
+ }
345
+ case GenericBug::FILEPARTIALCLOSE:
346
+ {
347
+ newBug = new FilePartialCloseBug(eventStack);
348
+ bugSet.insert(newBug);
349
+ break;
350
+ }
351
+ default:
352
+ {
353
+ assert(false && "saber does NOT have this bug type!");
354
+ break;
355
+ }
356
+ }
357
+
358
+ // when add a bug, also print it to terminal
359
+ newBug->printBugToTerminal();
360
+ }
361
+
362
+ /*
363
+ * function: pass bug type (i.e., GenericBug::FULLBUFOVERFLOW) and eventStack as parameter,
364
+ * it will add the bug into bugQueue.
365
+ * usage: addAbsExecBug(GenericBug::FULLBUFOVERFLOW, eventStack, 0, 10, 11, 11)
366
+ */
367
+ void addAbsExecBug(GenericBug::BugType bugType, const GenericBug::EventStack &eventStack,
368
+ s64_t allocLowerBound, s64_t allocUpperBound, s64_t accessLowerBound, s64_t accessUpperBound)
369
+ {
370
+ /// add bugs
371
+ GenericBug *newBug = nullptr;
372
+ switch(bugType)
373
+ {
374
+ case GenericBug::FULLBUFOVERFLOW:
375
+ {
376
+ newBug = new FullBufferOverflowBug(eventStack, allocLowerBound, allocUpperBound, accessLowerBound, accessUpperBound);
377
+ bugSet.insert(newBug);
378
+ break;
379
+ }
380
+ case GenericBug::PARTIALBUFOVERFLOW:
381
+ {
382
+ newBug = new PartialBufferOverflowBug(eventStack, allocLowerBound, allocUpperBound, accessLowerBound, accessUpperBound);
383
+ bugSet.insert(newBug);
384
+ break;
385
+ }
386
+ case GenericBug::FULLNULLPTRDEREFERENCE:
387
+ {
388
+ newBug = new FullNullPtrDereferenceBug(eventStack);
389
+ bugSet.insert(newBug);
390
+ break;
391
+ }
392
+ case GenericBug::PARTIALNULLPTRDEREFERENCE:
393
+ {
394
+ newBug = new PartialNullPtrDereferenceBug(eventStack);
395
+ bugSet.insert(newBug);
396
+ break;
397
+ }
398
+ default:
399
+ {
400
+ assert(false && "Abstract Execution does NOT have this bug type!");
401
+ break;
402
+ }
403
+ }
404
+
405
+ // when add a bug, also print it to terminal
406
+ //newBug->printBugToTerminal();
407
+ }
408
+
409
+ /*
410
+ * function: pass file path, open the file and dump bug report as JSON format
411
+ * usage: dumpToFile("/path/to/file")
412
+ */
413
+ void dumpToJsonFile(const std::string& filePath) const;
414
+
415
+ /*
416
+ * function: get underlying bugset
417
+ * usage: getBugSet()
418
+ */
419
+ const BugSet &getBugSet() const
420
+ {
421
+ return bugSet;
422
+ }
423
+
424
+ };
425
+ }
426
+
427
+ #endif
@@ -0,0 +1,169 @@
1
+ //===- SVFLoopAndDomInfo.h -- ------------------------------//
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
+ * SVFLoopAndDomInfo.h
25
+ *
26
+ * Created on: Feb 7, 2025
27
+ * Author: Xiao Cheng
28
+ *
29
+ */
30
+
31
+ #ifndef SVFLOOPANDDOMINFO_H
32
+ #define SVFLOOPANDDOMINFO_H
33
+
34
+ #include "SVFIR/SVFType.h"
35
+ #include "Graphs/GraphPrinter.h"
36
+ #include "Util/Casting.h"
37
+ #include "Graphs/BasicBlockG.h"
38
+
39
+ namespace SVF
40
+ {
41
+ class SVFLoopAndDomInfo
42
+ {
43
+ friend class SVFIRWriter;
44
+ friend class SVFIRReader;
45
+ public:
46
+ typedef Set<const SVFBasicBlock*> BBSet;
47
+ typedef std::vector<const SVFBasicBlock*> BBList;
48
+ typedef BBList LoopBBs;
49
+
50
+ private:
51
+ BBList reachableBBs; ///< reachable BasicBlocks from the function entry.
52
+ Map<const SVFBasicBlock*,BBSet> dtBBsMap; ///< map a BasicBlock to BasicBlocks it Dominates
53
+ Map<const SVFBasicBlock*,BBSet> pdtBBsMap; ///< map a BasicBlock to BasicBlocks it PostDominates
54
+ Map<const SVFBasicBlock*,BBSet> dfBBsMap; ///< map a BasicBlock to its Dominate Frontier BasicBlocks
55
+ Map<const SVFBasicBlock*, LoopBBs> bb2LoopMap; ///< map a BasicBlock (if it is in a loop) to all the BasicBlocks in this loop
56
+ Map<const SVFBasicBlock*, u32_t> bb2PdomLevel; ///< map a BasicBlock to its level in pdom tree, used in findNearestCommonPDominator
57
+ Map<const SVFBasicBlock*, const SVFBasicBlock*> bb2PIdom; ///< map a BasicBlock to its immediate dominator in pdom tree, used in findNearestCommonPDominator
58
+
59
+ public:
60
+ SVFLoopAndDomInfo()
61
+ {
62
+ }
63
+
64
+ virtual ~SVFLoopAndDomInfo() {}
65
+
66
+ inline const Map<const SVFBasicBlock*,BBSet>& getDomFrontierMap() const
67
+ {
68
+ return dfBBsMap;
69
+ }
70
+
71
+ inline Map<const SVFBasicBlock*,BBSet>& getDomFrontierMap()
72
+ {
73
+ return dfBBsMap;
74
+ }
75
+
76
+ inline bool hasLoopInfo(const SVFBasicBlock* bb) const
77
+ {
78
+ return bb2LoopMap.find(bb) != bb2LoopMap.end();
79
+ }
80
+
81
+ const LoopBBs& getLoopInfo(const SVFBasicBlock* bb) const;
82
+
83
+ inline const SVFBasicBlock* getLoopHeader(const LoopBBs& lp) const
84
+ {
85
+ assert(!lp.empty() && "this is not a loop, empty basic block");
86
+ return lp.front();
87
+ }
88
+
89
+ inline bool loopContainsBB(const LoopBBs& lp, const SVFBasicBlock* bb) const
90
+ {
91
+ return std::find(lp.begin(), lp.end(), bb) != lp.end();
92
+ }
93
+
94
+ inline void addToBB2LoopMap(const SVFBasicBlock* bb, const SVFBasicBlock* loopBB)
95
+ {
96
+ bb2LoopMap[bb].push_back(loopBB);
97
+ }
98
+
99
+ inline const Map<const SVFBasicBlock*,BBSet>& getPostDomTreeMap() const
100
+ {
101
+ return pdtBBsMap;
102
+ }
103
+
104
+ inline Map<const SVFBasicBlock*,BBSet>& getPostDomTreeMap()
105
+ {
106
+ return pdtBBsMap;
107
+ }
108
+
109
+ inline const Map<const SVFBasicBlock*,u32_t>& getBBPDomLevel() const
110
+ {
111
+ return bb2PdomLevel;
112
+ }
113
+
114
+ inline Map<const SVFBasicBlock*,u32_t>& getBBPDomLevel()
115
+ {
116
+ return bb2PdomLevel;
117
+ }
118
+
119
+ inline const Map<const SVFBasicBlock*,const SVFBasicBlock*>& getBB2PIdom() const
120
+ {
121
+ return bb2PIdom;
122
+ }
123
+
124
+ inline Map<const SVFBasicBlock*,const SVFBasicBlock*>& getBB2PIdom()
125
+ {
126
+ return bb2PIdom;
127
+ }
128
+
129
+
130
+ inline Map<const SVFBasicBlock*,BBSet>& getDomTreeMap()
131
+ {
132
+ return dtBBsMap;
133
+ }
134
+
135
+ inline const Map<const SVFBasicBlock*,BBSet>& getDomTreeMap() const
136
+ {
137
+ return dtBBsMap;
138
+ }
139
+
140
+ inline bool isUnreachable(const SVFBasicBlock* bb) const
141
+ {
142
+ return std::find(reachableBBs.begin(), reachableBBs.end(), bb) ==
143
+ reachableBBs.end();
144
+ }
145
+
146
+ inline const BBList& getReachableBBs() const
147
+ {
148
+ return reachableBBs;
149
+ }
150
+
151
+ inline void setReachableBBs(BBList& bbs)
152
+ {
153
+ reachableBBs = bbs;
154
+ }
155
+
156
+ void getExitBlocksOfLoop(const SVFBasicBlock* bb, BBList& exitbbs) const;
157
+
158
+ bool isLoopHeader(const SVFBasicBlock* bb) const;
159
+
160
+ bool dominate(const SVFBasicBlock* bbKey, const SVFBasicBlock* bbValue) const;
161
+
162
+ bool postDominate(const SVFBasicBlock* bbKey, const SVFBasicBlock* bbValue) const;
163
+
164
+ /// find nearest common post dominator of two basic blocks
165
+ const SVFBasicBlock *findNearestCommonPDominator(const SVFBasicBlock *A, const SVFBasicBlock *B) const;
166
+ };
167
+ }
168
+
169
+ #endif //SVFLOOPANDDOMINFO_H
@@ -0,0 +1,103 @@
1
+ //===- SVFStat.h -- Base class for statistics---------------------------------//
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
+ * SVFStat.h
25
+ *
26
+ * Created on: Sep 1, 2022
27
+ * Author: Xiao Cheng
28
+ */
29
+
30
+ #ifndef SVF_SVFSTAT_H
31
+ #define SVF_SVFSTAT_H
32
+
33
+ namespace SVF
34
+ {
35
+
36
+
37
+ /*!
38
+ * Pointer Analysis Statistics
39
+ */
40
+ class SVFStat
41
+ {
42
+ public:
43
+
44
+ typedef OrderedMap<std::string, u32_t> NUMStatMap;
45
+
46
+ typedef OrderedMap<std::string, double> TIMEStatMap;
47
+
48
+ enum ClockType
49
+ {
50
+ Wall,
51
+ CPU,
52
+ };
53
+
54
+ SVFStat();
55
+
56
+ virtual ~SVFStat() {}
57
+
58
+ virtual inline void startClk()
59
+ {
60
+ startTime = getClk(true);
61
+ }
62
+
63
+ virtual inline void endClk()
64
+ {
65
+ endTime = getClk(true);
66
+ }
67
+
68
+ /// When mark is true, real clock is always returned. When mark is false, it is
69
+ /// only returned when Options::MarkedClocksOnly is not set.
70
+ /// Default call for getClk is unmarked, while MarkedClocksOnly is false by default.
71
+ static double getClk(bool mark = false);
72
+
73
+ /// SVF's general statistics are only printed once even if you run multiple anayses
74
+ static bool printGeneralStats;
75
+
76
+ NUMStatMap generalNumMap;
77
+ NUMStatMap PTNumStatMap;
78
+ TIMEStatMap timeStatMap;
79
+
80
+ double startTime;
81
+ double endTime;
82
+
83
+ virtual void performStat() = 0;
84
+
85
+ virtual void printStat(std::string str = "");
86
+
87
+ virtual void performStatPerQuery(NodeID) {}
88
+
89
+ virtual void printStatPerQuery(NodeID, const PointsTo &) {}
90
+
91
+ virtual void callgraphStat() {}
92
+
93
+ static double timeOfBuildingLLVMModule;
94
+ static double timeOfBuildingSymbolTable;
95
+ static double timeOfBuildingSVFIR;
96
+
97
+ private:
98
+ void branchStat();
99
+ std::string moduleName;
100
+ }; // End class SVFStat
101
+
102
+ } // End namespace SVF
103
+ #endif //SVF_SVFSTAT_H