svf-tools 1.0.310 → 1.0.314

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 (447) hide show
  1. package/SVF-doxygen/html/html/AndersenHCD_8cpp_source.html +3 -3
  2. package/SVF-doxygen/html/html/AndersenHLCD_8cpp_source.html +2 -2
  3. package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +3 -3
  4. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +3 -3
  5. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +6 -6
  6. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +6 -6
  7. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +21 -21
  8. package/SVF-doxygen/html/html/AndersenWaveDiffWithType_8cpp_source.html +4 -4
  9. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +4 -4
  10. package/SVF-doxygen/html/html/Andersen_8cpp.html +1 -0
  11. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +58 -56
  12. package/SVF-doxygen/html/html/Andersen_8h_source.html +118 -118
  13. package/SVF-doxygen/html/html/CHG_8cpp.html +3 -3
  14. package/SVF-doxygen/html/html/CHG_8cpp_source.html +49 -50
  15. package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
  16. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +17 -16
  17. package/SVF-doxygen/html/html/CPPUtil_8h_source.html +16 -16
  18. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +5 -5
  19. package/SVF-doxygen/html/html/CallGraphBuilder_8h_source.html +1 -1
  20. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
  21. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +10 -10
  22. package/SVF-doxygen/html/html/ConsG_8h_source.html +7 -7
  23. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +8 -8
  24. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +5 -5
  25. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +13 -13
  26. package/SVF-doxygen/html/html/DCHG_8h_source.html +2 -2
  27. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +7 -7
  28. package/SVF-doxygen/html/html/DDAClient_8h_source.html +2 -2
  29. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +5 -5
  30. package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
  31. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +4 -4
  32. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +10 -10
  33. package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
  34. package/SVF-doxygen/html/html/ExternalPAG_8cpp.html +1 -1
  35. package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +8 -8
  36. package/SVF-doxygen/html/html/ExternalPAG_8h_source.html +1 -1
  37. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +10 -10
  38. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  39. package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
  40. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
  41. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +3 -3
  42. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +9 -9
  43. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +11 -11
  44. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +7 -7
  45. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +5 -5
  46. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +82 -81
  47. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +4 -4
  48. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +4 -4
  49. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  50. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
  51. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +3 -3
  52. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +6 -6
  53. package/SVF-doxygen/html/html/ICFG_8h_source.html +6 -6
  54. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +4 -4
  55. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
  56. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
  57. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -1
  58. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +4 -4
  59. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  60. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
  61. package/SVF-doxygen/html/html/LocationSet_8h_source.html +1 -2
  62. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +6 -6
  63. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
  64. package/SVF-doxygen/html/html/MHP_8cpp_source.html +13 -13
  65. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
  66. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
  67. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
  68. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
  69. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
  70. package/SVF-doxygen/html/html/MTA_8cpp_source.html +5 -5
  71. package/SVF-doxygen/html/html/MTA_8h_source.html +1 -1
  72. package/SVF-doxygen/html/html/MemModelBuilder_8cpp.html +90 -0
  73. package/SVF-doxygen/html/html/MemModelBuilder_8cpp_source.html +205 -0
  74. package/SVF-doxygen/html/html/MemModelBuilder_8h.html +97 -0
  75. package/SVF-doxygen/html/html/MemModelBuilder_8h_source.html +105 -0
  76. package/SVF-doxygen/html/html/MemModel_8cpp_source.html +9 -53
  77. package/SVF-doxygen/html/html/MemModel_8h_source.html +44 -44
  78. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +17 -17
  79. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
  80. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +13 -13
  81. package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +12 -12
  82. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
  83. package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -2
  84. package/SVF-doxygen/html/html/Options_8h_source.html +2 -2
  85. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +1 -1
  86. package/SVF-doxygen/html/html/PAGBuilder_8cpp_source.html +25 -25
  87. package/SVF-doxygen/html/html/PAGBuilder_8h_source.html +1 -1
  88. package/SVF-doxygen/html/html/PAGEdge_8h_source.html +2 -2
  89. package/SVF-doxygen/html/html/PAGNode_8h_source.html +11 -11
  90. package/SVF-doxygen/html/html/PAG_8cpp_source.html +34 -34
  91. package/SVF-doxygen/html/html/PAG_8h_source.html +41 -41
  92. package/SVF-doxygen/html/html/PCG_8cpp_source.html +8 -8
  93. package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
  94. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +8 -8
  95. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +2 -2
  96. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +24 -24
  97. package/SVF-doxygen/html/html/PTAType_8h_source.html +4 -4
  98. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
  99. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +1 -1
  100. package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +34 -33
  101. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +7 -7
  102. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +15 -15
  103. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +66 -66
  104. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +15 -15
  105. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +7 -7
  106. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +3 -3
  107. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
  108. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
  109. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +10 -10
  110. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +8 -8
  111. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +5 -5
  112. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +9 -9
  113. package/SVF-doxygen/html/html/SVFG_8h_source.html +7 -7
  114. package/SVF-doxygen/html/html/SVFModule_8cpp.html +1 -1
  115. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +6 -5
  116. package/SVF-doxygen/html/html/SVFModule_8h.html +3 -0
  117. package/SVF-doxygen/html/html/SVFModule_8h_source.html +53 -46
  118. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
  119. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +8 -8
  120. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +6 -6
  121. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  122. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
  123. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +2 -2
  124. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +5 -55
  125. package/SVF-doxygen/html/html/SymbolTableInfo_8h.html +0 -4
  126. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +88 -101
  127. package/SVF-doxygen/html/html/TCT_8cpp_source.html +11 -11
  128. package/SVF-doxygen/html/html/TCT_8h_source.html +10 -10
  129. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +5 -5
  130. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +1 -1
  131. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
  132. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +8 -8
  133. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +7 -7
  134. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +2 -2
  135. package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
  136. package/SVF-doxygen/html/html/VFG_8cpp_source.html +6 -6
  137. package/SVF-doxygen/html/html/VFG_8h_source.html +6 -6
  138. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +7 -7
  139. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +13 -13
  140. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +11 -11
  141. package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
  142. package/SVF-doxygen/html/html/annotated.html +135 -136
  143. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  144. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
  148. package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +1 -1
  149. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
  150. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
  151. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +1 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +228 -228
  153. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +1 -1
  154. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +60 -58
  155. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +1 -1
  156. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +43 -43
  157. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +23 -23
  159. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +1 -1
  160. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +52 -52
  161. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +1 -1
  162. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +38 -38
  163. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +1 -1
  164. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +17 -17
  165. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +31 -31
  166. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +1 -1
  167. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +38 -38
  168. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType-members.html +1 -1
  169. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType.html +31 -31
  170. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
  171. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +73 -72
  172. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +1 -1
  173. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +1 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +123 -120
  176. package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +1 -1
  177. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +3 -3
  178. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  179. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjPN.html +1 -1
  180. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjPN.html +1 -1
  181. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjPN.html +1 -1
  182. package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +1 -1
  183. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  184. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +115 -115
  185. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +15 -15
  186. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +18 -18
  187. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +13 -13
  188. package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +1 -1
  189. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
  190. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +22 -22
  191. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
  192. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +9 -9
  193. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +4 -4
  194. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
  195. package/SVF-doxygen/html/html/classSVF_1_1DummyObjPN.html +1 -1
  196. package/SVF-doxygen/html/html/classSVF_1_1DummyValPN.html +1 -1
  197. package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +8 -8
  198. package/SVF-doxygen/html/html/classSVF_1_1FIObjPN.html +1 -1
  199. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -2
  200. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +10 -10
  201. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +44 -44
  202. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +24 -24
  203. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +32 -32
  204. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +5 -5
  205. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
  206. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
  208. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
  209. package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +1 -1
  210. package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +1 -1
  211. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +5 -5
  212. package/SVF-doxygen/html/html/classSVF_1_1GenericGraph.html +47 -47
  213. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +58 -57
  214. package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +5 -5
  215. package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +1 -1
  216. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
  217. package/SVF-doxygen/html/html/classSVF_1_1GepValPN.html +1 -1
  218. package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode.html +1 -1
  219. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +13 -13
  220. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +3 -3
  221. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
  222. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +6 -6
  223. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +2 -2
  224. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +3 -3
  225. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  226. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  227. package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +1 -1
  228. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
  229. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  230. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +17 -17
  231. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
  232. package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +1 -1
  233. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
  234. package/SVF-doxygen/html/html/classSVF_1_1LocObjTypeInfo.html +1 -1
  235. package/SVF-doxygen/html/html/classSVF_1_1LocSymTableInfo.html +2 -2
  236. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +1 -1
  237. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +8 -8
  238. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
  239. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +15 -15
  240. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +24 -24
  241. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
  242. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
  243. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +5 -5
  244. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +3 -3
  245. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +4 -4
  246. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +21 -21
  247. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
  248. package/SVF-doxygen/html/html/classSVF_1_1MemModelBuilder-members.html +95 -0
  249. package/SVF-doxygen/html/html/classSVF_1_1MemModelBuilder.html +711 -0
  250. package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +7 -10
  251. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +92 -199
  252. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +3 -3
  253. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator-members.html +1 -1
  254. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +7 -7
  255. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +34 -34
  256. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +3 -3
  257. package/SVF-doxygen/html/html/classSVF_1_1ObjPN.html +3 -3
  258. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo-members.html +8 -10
  259. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +68 -168
  260. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +1 -1
  261. package/SVF-doxygen/html/html/classSVF_1_1Options.html +5 -5
  262. package/SVF-doxygen/html/html/classSVF_1_1PAG.html +67 -67
  263. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilder.html +41 -41
  264. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +3 -3
  265. package/SVF-doxygen/html/html/classSVF_1_1PAGEdge.html +5 -5
  266. package/SVF-doxygen/html/html/classSVF_1_1PAGNode.html +10 -10
  267. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +15 -15
  268. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  269. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +16 -16
  270. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +4 -4
  271. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +32 -32
  272. package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +6 -6
  273. package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +5 -5
  274. package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +10 -10
  275. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache-members.html +39 -38
  276. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +153 -116
  277. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +21 -21
  278. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +3 -3
  279. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
  280. package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +1 -1
  281. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  282. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +2 -2
  283. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +8 -8
  284. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
  285. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +35 -35
  286. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +7 -7
  287. package/SVF-doxygen/html/html/classSVF_1_1SVFModule-members.html +1 -0
  288. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +113 -80
  289. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +3 -3
  290. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +16 -16
  291. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +5 -5
  292. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +1 -1
  293. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +14 -14
  294. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +2 -2
  295. package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +1 -1
  296. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
  297. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +49 -55
  298. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +300 -587
  299. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +28 -28
  300. package/SVF-doxygen/html/html/classSVF_1_1TCTNode.html +1 -1
  301. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
  302. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
  303. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +3 -3
  304. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +1 -1
  305. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +11 -11
  306. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +8 -8
  307. package/SVF-doxygen/html/html/classSVF_1_1TypeSystem.html +1 -1
  308. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +1 -1
  309. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  310. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +14 -14
  311. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
  312. package/SVF-doxygen/html/html/classSVF_1_1ValPN.html +2 -2
  313. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +2 -2
  314. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +35 -35
  315. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +11 -11
  316. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +3 -3
  317. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +11 -11
  318. package/SVF-doxygen/html/html/classes.html +91 -91
  319. package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
  320. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  321. package/SVF-doxygen/html/html/dir_5840dc76920ee0f379cd88b55fa041fd.html +1 -1
  322. package/SVF-doxygen/html/html/dir_770a542efe75a1b68c109cb4e4290224.html +1 -1
  323. package/SVF-doxygen/html/html/files.html +2 -2
  324. package/SVF-doxygen/html/html/functions_0x7e.html +5 -8
  325. package/SVF-doxygen/html/html/functions_a.html +13 -10
  326. package/SVF-doxygen/html/html/functions_b.html +1 -1
  327. package/SVF-doxygen/html/html/functions_c.html +38 -36
  328. package/SVF-doxygen/html/html/functions_e.html +1 -1
  329. package/SVF-doxygen/html/html/functions_f.html +3 -3
  330. package/SVF-doxygen/html/html/functions_func.html +12 -9
  331. package/SVF-doxygen/html/html/functions_func_0x7e.html +5 -8
  332. package/SVF-doxygen/html/html/functions_func_b.html +1 -1
  333. package/SVF-doxygen/html/html/functions_func_c.html +28 -26
  334. package/SVF-doxygen/html/html/functions_func_e.html +1 -1
  335. package/SVF-doxygen/html/html/functions_func_g.html +11 -13
  336. package/SVF-doxygen/html/html/functions_func_h.html +3 -3
  337. package/SVF-doxygen/html/html/functions_func_i.html +8 -7
  338. package/SVF-doxygen/html/html/functions_func_l.html +2 -8
  339. package/SVF-doxygen/html/html/functions_func_m.html +4 -1
  340. package/SVF-doxygen/html/html/functions_func_p.html +1 -1
  341. package/SVF-doxygen/html/html/functions_func_s.html +8 -5
  342. package/SVF-doxygen/html/html/functions_func_v.html +0 -3
  343. package/SVF-doxygen/html/html/functions_g.html +6 -8
  344. package/SVF-doxygen/html/html/functions_h.html +3 -3
  345. package/SVF-doxygen/html/html/functions_i.html +15 -14
  346. package/SVF-doxygen/html/html/functions_l.html +6 -10
  347. package/SVF-doxygen/html/html/functions_m.html +5 -1
  348. package/SVF-doxygen/html/html/functions_n.html +4 -4
  349. package/SVF-doxygen/html/html/functions_o.html +3 -3
  350. package/SVF-doxygen/html/html/functions_p.html +13 -9
  351. package/SVF-doxygen/html/html/functions_r.html +1 -1
  352. package/SVF-doxygen/html/html/functions_rela.html +3 -0
  353. package/SVF-doxygen/html/html/functions_s.html +20 -14
  354. package/SVF-doxygen/html/html/functions_t.html +4 -4
  355. package/SVF-doxygen/html/html/functions_u.html +3 -3
  356. package/SVF-doxygen/html/html/functions_v.html +2 -5
  357. package/SVF-doxygen/html/html/functions_vars_l.html +1 -1
  358. package/SVF-doxygen/html/html/functions_vars_s.html +2 -1
  359. package/SVF-doxygen/html/html/functions_w.html +3 -1
  360. package/SVF-doxygen/html/html/hierarchy.html +127 -128
  361. package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
  362. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  363. package/SVF-doxygen/html/html/namespaceSVF.html +1 -3
  364. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
  365. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +40 -39
  366. package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
  367. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  368. package/SVF-doxygen/html/html/search/all_1.js +3 -2
  369. package/SVF-doxygen/html/html/search/all_10.js +9 -9
  370. package/SVF-doxygen/html/html/search/all_12.js +2 -2
  371. package/SVF-doxygen/html/html/search/all_13.js +9 -8
  372. package/SVF-doxygen/html/html/search/all_14.js +6 -6
  373. package/SVF-doxygen/html/html/search/all_15.js +2 -2
  374. package/SVF-doxygen/html/html/search/all_16.js +0 -1
  375. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  376. package/SVF-doxygen/html/html/search/all_1b.js +3 -4
  377. package/SVF-doxygen/html/html/search/all_2.js +1 -1
  378. package/SVF-doxygen/html/html/search/all_3.js +11 -10
  379. package/SVF-doxygen/html/html/search/all_5.js +1 -1
  380. package/SVF-doxygen/html/html/search/all_6.js +1 -1
  381. package/SVF-doxygen/html/html/search/all_7.js +2 -2
  382. package/SVF-doxygen/html/html/search/all_8.js +3 -3
  383. package/SVF-doxygen/html/html/search/all_9.js +4 -3
  384. package/SVF-doxygen/html/html/search/all_c.js +4 -7
  385. package/SVF-doxygen/html/html/search/all_d.js +4 -1
  386. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  387. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  388. package/SVF-doxygen/html/html/search/classes_9.js +1 -3
  389. package/SVF-doxygen/html/html/search/classes_a.js +1 -0
  390. package/SVF-doxygen/html/html/search/files_8.js +1 -3
  391. package/SVF-doxygen/html/html/search/files_9.js +2 -0
  392. package/SVF-doxygen/html/html/search/functions_0.js +3 -2
  393. package/SVF-doxygen/html/html/search/functions_1.js +1 -1
  394. package/SVF-doxygen/html/html/search/functions_10.js +1 -0
  395. package/SVF-doxygen/html/html/search/functions_13.js +0 -1
  396. package/SVF-doxygen/html/html/search/functions_16.js +3 -4
  397. package/SVF-doxygen/html/html/search/functions_2.js +10 -9
  398. package/SVF-doxygen/html/html/search/functions_4.js +1 -1
  399. package/SVF-doxygen/html/html/search/functions_6.js +2 -2
  400. package/SVF-doxygen/html/html/search/functions_7.js +3 -3
  401. package/SVF-doxygen/html/html/search/functions_8.js +2 -1
  402. package/SVF-doxygen/html/html/search/functions_a.js +1 -3
  403. package/SVF-doxygen/html/html/search/functions_b.js +2 -1
  404. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  405. package/SVF-doxygen/html/html/search/related_3.js +1 -0
  406. package/SVF-doxygen/html/html/search/variables_13.js +1 -1
  407. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  408. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  409. package/SVF-doxygen/html/html/search/variables_c.js +1 -1
  410. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  411. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.html +12 -12
  412. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  413. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
  414. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PAG_01_5_01_4.html +17 -17
  415. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +2 -2
  416. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01TCT_01_5_01_4.html +1 -1
  417. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_4_01_4.html +14 -14
  418. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericGraph_3_01NodeTy_00_01EdgeTy_01_4_01_5_4.html +20 -20
  419. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_01_4.html +16 -16
  420. package/SVF-doxygen/html/html/svf-ex_8cpp.html +8 -7
  421. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +6 -5
  422. package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
  423. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  424. package/include/Graphs/GenericGraph.h +5 -8
  425. package/include/MemoryModel/MemModel.h +5 -21
  426. package/include/MemoryModel/PersistentPointsToCache.h +13 -7
  427. package/include/MemoryModel/PointerAnalysisImpl.h +1 -0
  428. package/include/SVF-FE/CHG.h +1 -1
  429. package/include/SVF-FE/MemModelBuilder.h +102 -0
  430. package/include/SVF-FE/SymbolTableInfo.h +12 -79
  431. package/include/Util/NodeIDAllocator.h +1 -1
  432. package/include/Util/SVFModule.h +16 -0
  433. package/include/WPA/Andersen.h +2 -7
  434. package/lib/Graphs/PAG.cpp +3 -10
  435. package/lib/MemoryModel/MemModel.cpp +10 -436
  436. package/lib/SVF-FE/CHG.cpp +0 -6
  437. package/lib/SVF-FE/CPPUtil.cpp +2 -0
  438. package/lib/SVF-FE/MemModelBuilder.cpp +616 -0
  439. package/lib/SVF-FE/SymbolTableInfo.cpp +10 -453
  440. package/lib/Util/NodeIDAllocator.cpp +2 -1
  441. package/lib/Util/Options.cpp +2 -10
  442. package/lib/Util/SVFModule.cpp +3 -2
  443. package/lib/WPA/Andersen.cpp +13 -1
  444. package/package.json +1 -1
  445. package/tools/Example/svf-ex.cpp +6 -3
  446. package/include/SVF-FE/LocMemModel.h +0 -35
  447. package/lib/SVF-FE/LocMemModel.cpp +0 -31
@@ -42,135 +42,27 @@ using namespace SVFUtil;
42
42
 
43
43
  u32_t StInfo::maxFieldLimit = 0;
44
44
 
45
- /*!
46
- * Analyse types of all flattened fields of this object
47
- */
48
- void ObjTypeInfo::analyzeGlobalStackObjType(const Value* val)
49
- {
50
-
51
- const PointerType * refty = SVFUtil::dyn_cast<PointerType>(val->getType());
52
- assert(SVFUtil::isa<PointerType>(refty) && "this value should be a pointer type!");
53
- Type* elemTy = refty->getElementType();
54
- bool isPtrObj = false;
55
- // Find the inter nested array element
56
- while (const ArrayType *AT= SVFUtil::dyn_cast<ArrayType>(elemTy))
57
- {
58
- elemTy = AT->getElementType();
59
- if(elemTy->isPointerTy())
60
- isPtrObj = true;
61
- if(SVFUtil::isa<GlobalVariable>(val) && SVFUtil::cast<GlobalVariable>(val)->hasInitializer()
62
- && SVFUtil::isa<ConstantArray>(SVFUtil::cast<GlobalVariable>(val)->getInitializer()))
63
- {
64
- setFlag(CONST_ARRAY_OBJ);
65
- }
66
- else
67
- setFlag(VAR_ARRAY_OBJ);
68
- }
69
- if (const StructType *ST= SVFUtil::dyn_cast<StructType>(elemTy))
70
- {
71
- const std::vector<FieldInfo>& flattenFields = SymbolTableInfo::SymbolInfo()->getFlattenFieldInfoVec(ST);
72
- for(std::vector<FieldInfo>::const_iterator it = flattenFields.begin(), eit = flattenFields.end();
73
- it!=eit; ++it)
74
- {
75
- if((*it).getFlattenElemTy()->isPointerTy())
76
- isPtrObj = true;
77
- }
78
- if(SVFUtil::isa<GlobalVariable>(val) && SVFUtil::cast<GlobalVariable>(val)->hasInitializer()
79
- && SVFUtil::isa<ConstantStruct>(SVFUtil::cast<GlobalVariable>(val)->getInitializer()))
80
- setFlag(CONST_STRUCT_OBJ);
81
- else
82
- setFlag(VAR_STRUCT_OBJ);
83
- }
84
- else if (elemTy->isPointerTy())
85
- {
86
- isPtrObj = true;
87
- }
88
-
89
- if(isPtrObj)
90
- setFlag(HASPTR_OBJ);
91
- }
92
45
 
93
46
  /*!
94
47
  * Analyse types of heap and static objects
95
48
  */
96
- void ObjTypeInfo::analyzeHeapStaticObjType(const Value*)
49
+ void ObjTypeInfo::analyzeHeapObjType(const Type*)
97
50
  {
98
51
  // TODO: Heap and static objects are considered as pointers right now.
99
52
  // Refine this function to get more details about heap and static objects.
53
+ setFlag(HEAP_OBJ);
100
54
  setFlag(HASPTR_OBJ);
101
55
  }
102
56
 
103
57
  /*!
104
- * Return size of this Object
105
- */
106
- u32_t ObjTypeInfo::getObjSize(const Value* val)
107
- {
108
-
109
- Type* ety = SVFUtil::cast<PointerType>(val->getType())->getElementType();
110
- u32_t numOfFields = 1;
111
- if (SVFUtil::isa<StructType>(ety) || SVFUtil::isa<ArrayType>(ety))
112
- {
113
- numOfFields = SymbolTableInfo::SymbolInfo()->getFlattenFieldInfoVec(ety).size();
114
- }
115
- return numOfFields;
116
- }
117
-
118
- /*!
119
- * Initialize the type info of an object
58
+ * Analyse types of heap and static objects
120
59
  */
121
- void ObjTypeInfo::init(const Value* val)
60
+ void ObjTypeInfo::analyzeStaticObjType(const Type*)
122
61
  {
123
-
124
- Size_t objSize = 1;
125
- // Global variable
126
- if (SVFUtil::isa<Function>(val))
127
- {
128
- setFlag(FUNCTION_OBJ);
129
- analyzeGlobalStackObjType(val);
130
- objSize = getObjSize(val);
131
- }
132
- else if(SVFUtil::isa<AllocaInst>(val))
133
- {
134
- setFlag(STACK_OBJ);
135
- analyzeGlobalStackObjType(val);
136
- objSize = getObjSize(val);
137
- }
138
- else if(SVFUtil::isa<GlobalVariable>(val))
139
- {
140
- setFlag(GLOBVAR_OBJ);
141
- if(SymbolTableInfo::SymbolInfo()->isConstantObjSym(val))
142
- setFlag(CONST_OBJ);
143
- analyzeGlobalStackObjType(val);
144
- objSize = getObjSize(val);
145
- }
146
- else if (SVFUtil::isa<Instruction>(val) && isHeapAllocExtCall(SVFUtil::cast<Instruction>(val)))
147
- {
148
- setFlag(HEAP_OBJ);
149
- analyzeHeapStaticObjType(val);
150
- // Heap object, label its field as infinite here
151
- objSize = -1;
152
- }
153
- else if (SVFUtil::isa<Instruction>(val) && isStaticExtCall(SVFUtil::cast<Instruction>(val)))
154
- {
155
- setFlag(STATIC_OBJ);
156
- analyzeHeapStaticObjType(val);
157
- // static object allocated before main, label its field as infinite here
158
- objSize = -1;
159
- }
160
- else if(ArgInProgEntryFunction(val))
161
- {
162
- setFlag(STATIC_OBJ);
163
- analyzeHeapStaticObjType(val);
164
- // user input data, label its field as infinite here
165
- objSize = -1;
166
- }
167
- else
168
- assert("what other object do we have??");
169
-
170
- // Reset maxOffsetLimit if it is over the total fieldNum of this object
171
- if(objSize > 0 && maxOffsetLimit > objSize)
172
- maxOffsetLimit = objSize;
173
-
62
+ // TODO: Heap and static objects are considered as pointers right now.
63
+ // Refine this function to get more details about heap and static objects.
64
+ setFlag(STATIC_OBJ);
65
+ setFlag(HASPTR_OBJ);
174
66
  }
175
67
 
176
68
  /*!
@@ -237,32 +129,14 @@ void MemObj::setFieldSensitive()
237
129
  {
238
130
  typeInfo->setMaxFieldOffsetLimit(StInfo::getMaxFieldLimit());
239
131
  }
240
- /*
241
- * Initial the memory object here
242
- */
243
- void MemObj::init(const Type* type)
244
- {
245
- typeInfo = new ObjTypeInfo(StInfo::getMaxFieldLimit(),type);
246
- typeInfo->setFlag(ObjTypeInfo::HEAP_OBJ);
247
- typeInfo->setFlag(ObjTypeInfo::HASPTR_OBJ);
248
- }
249
132
 
250
- /*!
251
- * Constructor of a memory object
252
- */
253
- MemObj::MemObj(const Value *val, SymID id) :
254
- refVal(val), GSymID(id), typeInfo(nullptr)
255
- {
256
- init(val);
257
- }
258
133
 
259
134
  /*!
260
135
  * Constructor of a memory object
261
136
  */
262
- MemObj::MemObj(SymID id, const Type* type) :
263
- refVal(nullptr), GSymID(id), typeInfo(nullptr)
137
+ MemObj::MemObj(SymID id, ObjTypeInfo* ti, const Value *val) :
138
+ refVal(val), GSymID(id), typeInfo(ti)
264
139
  {
265
- init(type);
266
140
  }
267
141
 
268
142
  /*!
@@ -299,303 +173,3 @@ void MemObj::destroy()
299
173
  }
300
174
 
301
175
 
302
- /*!
303
- * Compute gep offset
304
- */
305
- bool LocSymTableInfo::computeGepOffset(const User *V, LocationSet& ls)
306
- {
307
-
308
- assert(V);
309
- int baseIndex = -1;
310
- int index = 0;
311
- for (bridge_gep_iterator gi = bridge_gep_begin(*V), ge = bridge_gep_end(*V);
312
- gi != ge; ++gi, ++index)
313
- {
314
- if(SVFUtil::isa<ConstantInt>(gi.getOperand()) == false)
315
- baseIndex = index;
316
- }
317
-
318
- index = 0;
319
- for (bridge_gep_iterator gi = bridge_gep_begin(*V), ge = bridge_gep_end(*V);
320
- gi != ge; ++gi, ++index)
321
- {
322
-
323
- if (index <= baseIndex)
324
- {
325
- /// variant offset
326
- // Handling pointer types
327
- if (const PointerType* pty = SVFUtil::dyn_cast<PointerType>(*gi))
328
- {
329
- const Type* et = pty->getElementType();
330
- Size_t sz = getTypeSizeInBytes(et);
331
-
332
- Size_t num = 1;
333
- if (const ArrayType* aty = SVFUtil::dyn_cast<ArrayType>(et))
334
- num = aty->getNumElements();
335
- else
336
- num = StInfo::getMaxFieldLimit();
337
-
338
- ls.addElemNumStridePair(std::make_pair(num, sz));
339
- }
340
- // Calculate the size of the array element
341
- else if(const ArrayType* at = SVFUtil::dyn_cast<ArrayType>(*gi))
342
- {
343
- const Type* et = at->getElementType();
344
- Size_t sz = getTypeSizeInBytes(et);
345
- Size_t num = at->getNumElements();
346
- ls.addElemNumStridePair(std::make_pair(num, sz));
347
- }
348
- else
349
- assert(false && "what other types?");
350
- }
351
- // constant offset
352
- else
353
- {
354
- assert(SVFUtil::isa<ConstantInt>(gi.getOperand()) && "expecting a constant");
355
-
356
- ConstantInt *op = SVFUtil::cast<ConstantInt>(gi.getOperand());
357
-
358
- //The actual index
359
- Size_t idx = op->getSExtValue();
360
-
361
- // Handling pointer types
362
- // These GEP instructions are simply making address computations from the base pointer address
363
- // e.g. idx1 = (char*) &MyVar + 4, at this case gep only one offset index (idx)
364
- if (const PointerType* pty = SVFUtil::dyn_cast<PointerType>(*gi))
365
- {
366
- const Type* et = pty->getElementType();
367
- Size_t sz = getTypeSizeInBytes(et);
368
- ls.setByteOffset(ls.getByteOffset() + idx * sz);
369
- }
370
- // Calculate the size of the array element
371
- else if(const ArrayType* at = SVFUtil::dyn_cast<ArrayType>(*gi))
372
- {
373
- const Type* et = at->getElementType();
374
- Size_t sz = getTypeSizeInBytes(et);
375
- ls.setByteOffset(ls.getByteOffset() + idx * sz);
376
- }
377
- // Handling struct here
378
- else if (const StructType *ST = SVFUtil::dyn_cast<StructType>(*gi))
379
- {
380
- assert(op && "non-const struct index in GEP");
381
- const vector<u32_t> &so = SymbolTableInfo::SymbolInfo()->getFattenFieldOffsetVec(ST);
382
- if ((unsigned)idx >= so.size())
383
- {
384
- outs() << "!! Struct index out of bounds" << idx << "\n";
385
- assert(0);
386
- }
387
- //add the translated offset
388
- ls.setByteOffset(ls.getByteOffset() + so[idx]);
389
- }
390
- else
391
- assert(false && "what other types?");
392
- }
393
- }
394
- return true;
395
- }
396
-
397
- /*!
398
- * Collect array information
399
- */
400
- void LocSymTableInfo::collectArrayInfo(const llvm::ArrayType*)
401
- {
402
- /*
403
- StInfo *stinfo = new StInfo();
404
- typeToFieldInfo[ty] = stinfo;
405
-
406
- /// If this is an array type, calculate the outmost array
407
- /// information and append them to the inner elements' type
408
- /// information later.
409
- u64_t out_num = ty->getNumElements();
410
- const Type* elemTy = ty->getElementType();
411
- u32_t out_stride = getTypeSizeInBytes(elemTy);
412
-
413
- /// Array itself only has one field which is the inner most element
414
- stinfo->addOffsetWithType(0, elemTy);
415
-
416
- while (const ArrayType* aty = dyn_cast<ArrayType>(elemTy)) {
417
- out_num *= aty->getNumElements();
418
- elemTy = aty->getElementType();
419
- out_stride = getTypeSizeInBytes(elemTy);
420
- }
421
-
422
- /// Array's flatten field infor is the same as its element's
423
- /// flatten infor with an additional slot for array's element
424
- /// number and stride pair.
425
- StInfo* elemStInfo = getStructInfo(elemTy);
426
- u32_t nfE = elemStInfo->getFlattenFieldInfoVec().size();
427
- for (u32_t j = 0; j < nfE; j++) {
428
- u32_t off = elemStInfo->getFlattenFieldInfoVec()[j].getFlattenOffset();
429
- const Type* fieldTy = elemStInfo->getFlattenFieldInfoVec()[j].getFlattenElemTy();
430
- FieldInfo::ElemNumStridePairVec pair = elemStInfo->getFlattenFieldInfoVec()[j].getElemNumStridePairVect();
431
- /// append the additional number
432
- pair.push_back(std::make_pair(out_num, out_stride));
433
- FieldInfo field(off, fieldTy, pair);
434
- stinfo->getFlattenFieldInfoVec().push_back(field);
435
- }
436
- */
437
- }
438
-
439
-
440
- /*
441
- * Recursively collect the memory layout information for a struct type
442
- */
443
- void LocSymTableInfo::collectStructInfo(const StructType*)
444
- {
445
- /*
446
- StInfo *stinfo = new StInfo();
447
- typeToFieldInfo[ty] = stinfo;
448
-
449
- const StructLayout *stTySL = getDataLayout(getModule().getMainLLVMModule())->getStructLayout( const_cast<StructType *>(ty) );
450
-
451
- u32_t field_idx = 0;
452
- for (StructType::element_iterator it = ty->element_begin(), ie =
453
- ty->element_end(); it != ie; ++it, ++field_idx) {
454
- const Type *et = *it;
455
-
456
- // The offset is where this element will be placed in the struct.
457
- // This offset is computed after alignment with the current struct
458
- u64_t eOffsetInBytes = stTySL->getElementOffset(field_idx);
459
-
460
- //The offset is where this element will be placed in the exp. struct.
461
- /// FIXME: As the layout size is uint_64, here we assume
462
- /// offset with uint_32 (Size_t) is large enough and will not cause overflow
463
- stinfo->addOffsetWithType(static_cast<u32_t>(eOffsetInBytes), et);
464
-
465
- StInfo* fieldStinfo = getStructInfo(et);
466
- u32_t nfE = fieldStinfo->getFlattenFieldInfoVec().size();
467
- //Copy ST's info, whose element 0 is the size of ST itself.
468
- for (u32_t j = 0; j < nfE; j++) {
469
- u32_t oft = eOffsetInBytes + fieldStinfo->getFlattenFieldInfoVec()[j].getFlattenOffset();
470
- const Type* elemTy = fieldStinfo->getFlattenFieldInfoVec()[j].getFlattenElemTy();
471
- FieldInfo::ElemNumStridePairVec pair = fieldStinfo->getFlattenFieldInfoVec()[j].getElemNumStridePairVect();
472
- pair.push_back(std::make_pair(1, 0));
473
- FieldInfo newField(oft, elemTy, pair);
474
- stinfo->getFlattenFieldInfoVec().push_back(newField);
475
- }
476
- }
477
-
478
- // verifyStructSize(stinfo,stTySL->getSizeInBytes());
479
-
480
- //Record the size of the complete struct and update max_struct.
481
- if (stTySL->getSizeInBytes() > maxStSize) {
482
- maxStruct = ty;
483
- maxStSize = stTySL->getSizeInBytes();
484
- }
485
- */
486
- }
487
-
488
-
489
- /*!
490
- * Given LocationSet from a Gep Instruction, return a new LocationSet which matches
491
- * the field information of this ObjTypeInfo by considering memory layout
492
- */
493
- LocationSet LocSymTableInfo::getModulusOffset(const MemObj* obj, const LocationSet& ls)
494
- {
495
- const Type* ety = obj->getType();
496
-
497
- if (SVFUtil::isa<StructType>(ety) || SVFUtil::isa<ArrayType>(ety))
498
- {
499
- /// Find an appropriate field for this LocationSet
500
- const std::vector<FieldInfo>& infovec = SymbolTableInfo::SymbolInfo()->getFlattenFieldInfoVec(ety);
501
- std::vector<FieldInfo>::const_iterator it = infovec.begin();
502
- std::vector<FieldInfo>::const_iterator eit = infovec.end();
503
- for (; it != eit; ++it)
504
- {
505
- const FieldInfo& fieldLS = *it;
506
- LocationSet rhsLS(fieldLS);
507
- LocationSet::LSRelation result = LocationSet::checkRelation(ls, rhsLS);
508
- if (result == LocationSet::Same ||
509
- result == LocationSet::Superset ||
510
- result == LocationSet::Subset)
511
- return ls;
512
- else if (result == LocationSet::Overlap)
513
- {
514
- // TODO:
515
- return ls;
516
- }
517
- else if (result == LocationSet::NonOverlap)
518
- {
519
- continue;
520
- }
521
-
522
- assert(false && "cannot find an appropriate field for specified LocationSet");
523
- return ls;
524
- }
525
- }
526
- else
527
- {
528
- if (obj->isStaticObj() || obj->isHeap())
529
- {
530
- // TODO: Objects which cannot find proper field for a certain offset including
531
- // arguments in main(), static objects allocated before main and heap
532
- // objects. Right now they're considered to have infinite fields. So we
533
- // just return the location set without modifying it.
534
- return ls;
535
- }
536
- else
537
- {
538
- // TODO: Using new memory model (locMM) may create objects with spurious offset
539
- // as we simply return new offset by mod operation without checking its
540
- // correctness in LocSymTableInfo::getModulusOffset(). So the following
541
- // assertion may fail. Try to refine the new memory model.
542
- assert(ls.isConstantOffset() && "expecting a constant location set");
543
- return ls;
544
- }
545
- }
546
-
547
- /// This location set represent one object
548
- if (ls.isConstantOffset())
549
- {
550
- /// if the offset is negative, it's possible that we're looking for an obj node out of range
551
- /// of current struct. Make the offset positive so we can still get a node within current
552
- /// struct to represent this obj.
553
- Size_t offset = ls.getOffset();
554
- if(offset < 0)
555
- {
556
- writeWrnMsg("try to create a gep node with negative offset.");
557
- offset = abs(offset);
558
- }
559
- u32_t maxOffset = obj->getMaxFieldOffsetLimit();
560
- if (maxOffset != 0)
561
- offset = offset % maxOffset;
562
- else
563
- offset = 0;
564
- }
565
- /// This location set represents multiple objects
566
- else
567
- {
568
-
569
- }
570
-
571
- return ls;
572
- }
573
-
574
- /*!
575
- * Verify struct size
576
- */
577
- void LocSymTableInfo::verifyStructSize(StInfo *stinfo, u32_t structSize)
578
- {
579
-
580
- u32_t lastOff = stinfo->getFlattenFieldInfoVec().back().getFlattenByteOffset();
581
- u32_t strideSize = 0;
582
- FieldInfo::ElemNumStridePairVec::const_iterator pit = stinfo->getFlattenFieldInfoVec().back().elemStridePairBegin();
583
- FieldInfo::ElemNumStridePairVec::const_iterator epit = stinfo->getFlattenFieldInfoVec().back().elemStridePairEnd();
584
- for(; pit!=epit; ++pit)
585
- strideSize += pit->first * pit->second;
586
-
587
- u32_t lastSize = getTypeSizeInBytes(stinfo->getFlattenFieldInfoVec().back().getFlattenElemTy());
588
- /// Please note this verify may not be complete as different machine has different alignment mechanism
589
- assert((structSize == lastOff + strideSize + lastSize) && "struct size not consistent");
590
-
591
- }
592
-
593
- /*!
594
- * Get the size of this object
595
- */
596
- u32_t LocObjTypeInfo::getObjSize(const Value* val)
597
- {
598
-
599
- Type* ety = SVFUtil::cast<PointerType>(val->getType())->getElementType();
600
- return LocSymTableInfo::SymbolInfo()->getTypeSizeInBytes(ety);
601
- }
@@ -79,12 +79,6 @@ void CHNode::getVirtualFunctions(u32_t idx, FuncVector &virtualFunctions) const
79
79
  }
80
80
  }
81
81
 
82
- CHGraph::~CHGraph()
83
- {
84
- for (CHGraph::iterator it = this->begin(), eit = this->end(); it != eit; ++it)
85
- delete it->second;
86
- }
87
-
88
82
  void CHGraph::buildCHG()
89
83
  {
90
84
 
@@ -215,6 +215,7 @@ struct cppUtil::DemangledName cppUtil::demangle(const string &name)
215
215
  dname.funcName = beforeParenthesis.substr(colon + 2);
216
216
  }
217
217
  }
218
+ std::free(realname);
218
219
  }
219
220
 
220
221
  handleThunkFunction(dname);
@@ -444,6 +445,7 @@ string cppUtil::getClassNameFromVtblObj(const Value *value)
444
445
  {
445
446
  className = realnameStr.substr(vtblLabelAfterDemangle.size());
446
447
  }
448
+ std::free(realname);
447
449
  }
448
450
  return className;
449
451
  }