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.
- package/SVF-doxygen/html/html/AndersenHCD_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/AndersenHLCD_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +6 -6
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +21 -21
- package/SVF-doxygen/html/html/AndersenWaveDiffWithType_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/Andersen_8cpp.html +1 -0
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +58 -56
- package/SVF-doxygen/html/html/Andersen_8h_source.html +118 -118
- package/SVF-doxygen/html/html/CHG_8cpp.html +3 -3
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +49 -50
- package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +17 -16
- package/SVF-doxygen/html/html/CPPUtil_8h_source.html +16 -16
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/CallGraphBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/ConsG_8h_source.html +7 -7
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +5 -5
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/DCHG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +10 -10
- package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ExternalPAG_8cpp.html +1 -1
- package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/ExternalPAG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +5 -5
- package/SVF-doxygen/html/html/GenericGraph_8h_source.html +82 -81
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGStat_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ICFG_8h_source.html +6 -6
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +4 -4
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +4 -4
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +1 -2
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MTA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MemModelBuilder_8cpp.html +90 -0
- package/SVF-doxygen/html/html/MemModelBuilder_8cpp_source.html +205 -0
- package/SVF-doxygen/html/html/MemModelBuilder_8h.html +97 -0
- package/SVF-doxygen/html/html/MemModelBuilder_8h_source.html +105 -0
- package/SVF-doxygen/html/html/MemModel_8cpp_source.html +9 -53
- package/SVF-doxygen/html/html/MemModel_8h_source.html +44 -44
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +17 -17
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +12 -12
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -2
- package/SVF-doxygen/html/html/Options_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PAGBuilder_8cpp_source.html +25 -25
- package/SVF-doxygen/html/html/PAGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PAGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PAGNode_8h_source.html +11 -11
- package/SVF-doxygen/html/html/PAG_8cpp_source.html +34 -34
- package/SVF-doxygen/html/html/PAG_8h_source.html +41 -41
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +24 -24
- package/SVF-doxygen/html/html/PTAType_8h_source.html +4 -4
- package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +34 -33
- package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +7 -7
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +66 -66
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +7 -7
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +8 -8
- package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/SVFG_8h_source.html +7 -7
- package/SVF-doxygen/html/html/SVFModule_8cpp.html +1 -1
- package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +6 -5
- package/SVF-doxygen/html/html/SVFModule_8h.html +3 -0
- package/SVF-doxygen/html/html/SVFModule_8h_source.html +53 -46
- package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Steensgaard_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +5 -55
- package/SVF-doxygen/html/html/SymbolTableInfo_8h.html +0 -4
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +88 -101
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/TCT_8h_source.html +10 -10
- package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +2 -2
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/VFG_8h_source.html +6 -6
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/html/annotated.html +135 -136
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +228 -228
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +60 -58
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +52 -52
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +38 -38
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +38 -38
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +73 -72
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +123 -120
- package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +115 -115
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DummyValPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1FIObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +44 -44
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1GenericGraph.html +47 -47
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +58 -57
- package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepValPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LocObjTypeInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LocSymTableInfo.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MemModelBuilder-members.html +95 -0
- package/SVF-doxygen/html/html/classSVF_1_1MemModelBuilder.html +711 -0
- package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +7 -10
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +92 -199
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ObjPN.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo-members.html +8 -10
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +68 -168
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1PAG.html +67 -67
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilder.html +41 -41
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PAGEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1PAGNode.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache-members.html +39 -38
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +153 -116
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +35 -35
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule-members.html +1 -0
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +113 -80
- package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +49 -55
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +300 -587
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +28 -28
- package/SVF-doxygen/html/html/classSVF_1_1TCTNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1TypeSystem.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ValPN.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +35 -35
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +11 -11
- package/SVF-doxygen/html/html/classes.html +91 -91
- package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
- package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/dir_5840dc76920ee0f379cd88b55fa041fd.html +1 -1
- package/SVF-doxygen/html/html/dir_770a542efe75a1b68c109cb4e4290224.html +1 -1
- package/SVF-doxygen/html/html/files.html +2 -2
- package/SVF-doxygen/html/html/functions_0x7e.html +5 -8
- package/SVF-doxygen/html/html/functions_a.html +13 -10
- package/SVF-doxygen/html/html/functions_b.html +1 -1
- package/SVF-doxygen/html/html/functions_c.html +38 -36
- package/SVF-doxygen/html/html/functions_e.html +1 -1
- package/SVF-doxygen/html/html/functions_f.html +3 -3
- package/SVF-doxygen/html/html/functions_func.html +12 -9
- package/SVF-doxygen/html/html/functions_func_0x7e.html +5 -8
- package/SVF-doxygen/html/html/functions_func_b.html +1 -1
- package/SVF-doxygen/html/html/functions_func_c.html +28 -26
- package/SVF-doxygen/html/html/functions_func_e.html +1 -1
- package/SVF-doxygen/html/html/functions_func_g.html +11 -13
- package/SVF-doxygen/html/html/functions_func_h.html +3 -3
- package/SVF-doxygen/html/html/functions_func_i.html +8 -7
- package/SVF-doxygen/html/html/functions_func_l.html +2 -8
- package/SVF-doxygen/html/html/functions_func_m.html +4 -1
- package/SVF-doxygen/html/html/functions_func_p.html +1 -1
- package/SVF-doxygen/html/html/functions_func_s.html +8 -5
- package/SVF-doxygen/html/html/functions_func_v.html +0 -3
- package/SVF-doxygen/html/html/functions_g.html +6 -8
- package/SVF-doxygen/html/html/functions_h.html +3 -3
- package/SVF-doxygen/html/html/functions_i.html +15 -14
- package/SVF-doxygen/html/html/functions_l.html +6 -10
- package/SVF-doxygen/html/html/functions_m.html +5 -1
- package/SVF-doxygen/html/html/functions_n.html +4 -4
- package/SVF-doxygen/html/html/functions_o.html +3 -3
- package/SVF-doxygen/html/html/functions_p.html +13 -9
- package/SVF-doxygen/html/html/functions_r.html +1 -1
- package/SVF-doxygen/html/html/functions_rela.html +3 -0
- package/SVF-doxygen/html/html/functions_s.html +20 -14
- package/SVF-doxygen/html/html/functions_t.html +4 -4
- package/SVF-doxygen/html/html/functions_u.html +3 -3
- package/SVF-doxygen/html/html/functions_v.html +2 -5
- package/SVF-doxygen/html/html/functions_vars_l.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_s.html +2 -1
- package/SVF-doxygen/html/html/functions_w.html +3 -1
- package/SVF-doxygen/html/html/hierarchy.html +127 -128
- package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
- package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF.html +1 -3
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +40 -39
- package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
- package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/search/all_1.js +3 -2
- package/SVF-doxygen/html/html/search/all_10.js +9 -9
- package/SVF-doxygen/html/html/search/all_12.js +2 -2
- package/SVF-doxygen/html/html/search/all_13.js +9 -8
- package/SVF-doxygen/html/html/search/all_14.js +6 -6
- package/SVF-doxygen/html/html/search/all_15.js +2 -2
- package/SVF-doxygen/html/html/search/all_16.js +0 -1
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_1b.js +3 -4
- package/SVF-doxygen/html/html/search/all_2.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +11 -10
- package/SVF-doxygen/html/html/search/all_5.js +1 -1
- package/SVF-doxygen/html/html/search/all_6.js +1 -1
- package/SVF-doxygen/html/html/search/all_7.js +2 -2
- package/SVF-doxygen/html/html/search/all_8.js +3 -3
- package/SVF-doxygen/html/html/search/all_9.js +4 -3
- package/SVF-doxygen/html/html/search/all_c.js +4 -7
- package/SVF-doxygen/html/html/search/all_d.js +4 -1
- package/SVF-doxygen/html/html/search/all_e.js +2 -2
- package/SVF-doxygen/html/html/search/all_f.js +1 -1
- package/SVF-doxygen/html/html/search/classes_9.js +1 -3
- package/SVF-doxygen/html/html/search/classes_a.js +1 -0
- package/SVF-doxygen/html/html/search/files_8.js +1 -3
- package/SVF-doxygen/html/html/search/files_9.js +2 -0
- package/SVF-doxygen/html/html/search/functions_0.js +3 -2
- package/SVF-doxygen/html/html/search/functions_1.js +1 -1
- package/SVF-doxygen/html/html/search/functions_10.js +1 -0
- package/SVF-doxygen/html/html/search/functions_13.js +0 -1
- package/SVF-doxygen/html/html/search/functions_16.js +3 -4
- package/SVF-doxygen/html/html/search/functions_2.js +10 -9
- package/SVF-doxygen/html/html/search/functions_4.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +2 -2
- package/SVF-doxygen/html/html/search/functions_7.js +3 -3
- package/SVF-doxygen/html/html/search/functions_8.js +2 -1
- package/SVF-doxygen/html/html/search/functions_a.js +1 -3
- package/SVF-doxygen/html/html/search/functions_b.js +2 -1
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/related_3.js +1 -0
- package/SVF-doxygen/html/html/search/variables_13.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +2 -2
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/SVF-doxygen/html/html/search/variables_c.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.html +12 -12
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PAG_01_5_01_4.html +17 -17
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01TCT_01_5_01_4.html +1 -1
- 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
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericGraph_3_01NodeTy_00_01EdgeTy_01_4_01_5_4.html +20 -20
- 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
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +8 -7
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +6 -5
- package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
- package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
- package/include/Graphs/GenericGraph.h +5 -8
- package/include/MemoryModel/MemModel.h +5 -21
- package/include/MemoryModel/PersistentPointsToCache.h +13 -7
- package/include/MemoryModel/PointerAnalysisImpl.h +1 -0
- package/include/SVF-FE/CHG.h +1 -1
- package/include/SVF-FE/MemModelBuilder.h +102 -0
- package/include/SVF-FE/SymbolTableInfo.h +12 -79
- package/include/Util/NodeIDAllocator.h +1 -1
- package/include/Util/SVFModule.h +16 -0
- package/include/WPA/Andersen.h +2 -7
- package/lib/Graphs/PAG.cpp +3 -10
- package/lib/MemoryModel/MemModel.cpp +10 -436
- package/lib/SVF-FE/CHG.cpp +0 -6
- package/lib/SVF-FE/CPPUtil.cpp +2 -0
- package/lib/SVF-FE/MemModelBuilder.cpp +616 -0
- package/lib/SVF-FE/SymbolTableInfo.cpp +10 -453
- package/lib/Util/NodeIDAllocator.cpp +2 -1
- package/lib/Util/Options.cpp +2 -10
- package/lib/Util/SVFModule.cpp +3 -2
- package/lib/WPA/Andersen.cpp +13 -1
- package/package.json +1 -1
- package/tools/Example/svf-ex.cpp +6 -3
- package/include/SVF-FE/LocMemModel.h +0 -35
- 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::
|
|
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
|
-
*
|
|
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::
|
|
60
|
+
void ObjTypeInfo::analyzeStaticObjType(const Type*)
|
|
122
61
|
{
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
|
263
|
-
refVal(
|
|
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
|
-
}
|
package/lib/SVF-FE/CHG.cpp
CHANGED
|
@@ -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
|
|
package/lib/SVF-FE/CPPUtil.cpp
CHANGED
|
@@ -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
|
}
|