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
|
@@ -47,39 +47,15 @@ using namespace SVFUtil;
|
|
|
47
47
|
DataLayout* SymbolTableInfo::dl = nullptr;
|
|
48
48
|
SymbolTableInfo* SymbolTableInfo::symInfo = nullptr;
|
|
49
49
|
|
|
50
|
+
|
|
50
51
|
/*
|
|
51
|
-
* Initial the memory object here
|
|
52
|
+
* Initial the memory object here (for a dummy object)
|
|
52
53
|
*/
|
|
53
|
-
|
|
54
|
+
ObjTypeInfo* SymbolTableInfo::createObjTypeInfo(const Type* type)
|
|
54
55
|
{
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
// We consider two types of objects:
|
|
60
|
-
// (1) A heap/static object from a callsite
|
|
61
|
-
if (I && isNonInstricCallSite(I))
|
|
62
|
-
refTy = getRefTypeOfHeapAllocOrStatic(I);
|
|
63
|
-
// (2) Other objects (e.g., alloca, global, etc.)
|
|
64
|
-
else
|
|
65
|
-
refTy = SVFUtil::dyn_cast<PointerType>(val->getType());
|
|
66
|
-
|
|
67
|
-
if (refTy)
|
|
68
|
-
{
|
|
69
|
-
Type *objTy = refTy->getElementType();
|
|
70
|
-
if(Options::LocMemModel)
|
|
71
|
-
typeInfo = new LocObjTypeInfo(val, objTy, Options::MaxFieldLimit);
|
|
72
|
-
else
|
|
73
|
-
typeInfo = new ObjTypeInfo(val, objTy, Options::MaxFieldLimit);
|
|
74
|
-
typeInfo->init(val);
|
|
75
|
-
}
|
|
76
|
-
else
|
|
77
|
-
{
|
|
78
|
-
writeWrnMsg("try to create an object with a non-pointer type.");
|
|
79
|
-
writeWrnMsg(val->getName().str());
|
|
80
|
-
writeWrnMsg("(" + getSourceLoc(val) + ")");
|
|
81
|
-
assert(false && "Memory object must be held by a pointer-typed ref value.");
|
|
82
|
-
}
|
|
56
|
+
ObjTypeInfo* typeInfo = new ObjTypeInfo(StInfo::getMaxFieldLimit(),type);
|
|
57
|
+
typeInfo->analyzeHeapObjType(type);
|
|
58
|
+
return typeInfo;
|
|
83
59
|
}
|
|
84
60
|
|
|
85
61
|
/*!
|
|
@@ -89,10 +65,7 @@ SymbolTableInfo* SymbolTableInfo::SymbolInfo()
|
|
|
89
65
|
{
|
|
90
66
|
if (symInfo == nullptr)
|
|
91
67
|
{
|
|
92
|
-
|
|
93
|
-
symInfo = new LocSymTableInfo();
|
|
94
|
-
else
|
|
95
|
-
symInfo = new SymbolTableInfo();
|
|
68
|
+
symInfo = new SymbolTableInfo();
|
|
96
69
|
symInfo->setModelConstants(Options::ModelConsts);
|
|
97
70
|
}
|
|
98
71
|
return symInfo;
|
|
@@ -405,161 +378,6 @@ LocationSet SymbolTableInfo::getModulusOffset(const MemObj* obj, const LocationS
|
|
|
405
378
|
}
|
|
406
379
|
|
|
407
380
|
|
|
408
|
-
/*!
|
|
409
|
-
* This method identify which is value sym and which is object sym
|
|
410
|
-
*/
|
|
411
|
-
void SymbolTableInfo::buildMemModel(SVFModule* svfModule)
|
|
412
|
-
{
|
|
413
|
-
SVFUtil::increaseStackSize();
|
|
414
|
-
|
|
415
|
-
mod = svfModule;
|
|
416
|
-
|
|
417
|
-
StInfo::setMaxFieldLimit(Options::MaxFieldLimit);
|
|
418
|
-
|
|
419
|
-
// Object #0 is black hole the object that may point to any object
|
|
420
|
-
assert(totalSymNum == BlackHole && "Something changed!");
|
|
421
|
-
symTyMap.insert(std::make_pair(totalSymNum++, BlackHole));
|
|
422
|
-
createBlkOrConstantObj(BlackHole);
|
|
423
|
-
|
|
424
|
-
// Object #1 always represents the constant
|
|
425
|
-
assert(totalSymNum == ConstantObj && "Something changed!");
|
|
426
|
-
symTyMap.insert(std::make_pair(totalSymNum++, ConstantObj));
|
|
427
|
-
createBlkOrConstantObj(ConstantObj);
|
|
428
|
-
|
|
429
|
-
// Pointer #2 always represents the pointer points-to black hole.
|
|
430
|
-
assert(totalSymNum == BlkPtr && "Something changed!");
|
|
431
|
-
symTyMap.insert(std::make_pair(totalSymNum++, BlkPtr));
|
|
432
|
-
|
|
433
|
-
// Pointer #3 always represents the null pointer.
|
|
434
|
-
assert(totalSymNum == NullPtr && "Something changed!");
|
|
435
|
-
symTyMap.insert(std::make_pair(totalSymNum, NullPtr));
|
|
436
|
-
|
|
437
|
-
// Add symbols for all the globals .
|
|
438
|
-
for (SVFModule::global_iterator I = svfModule->global_begin(), E =
|
|
439
|
-
svfModule->global_end(); I != E; ++I)
|
|
440
|
-
{
|
|
441
|
-
collectSym(*I);
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
// Add symbols for all the global aliases
|
|
445
|
-
for (SVFModule::alias_iterator I = svfModule->alias_begin(), E =
|
|
446
|
-
svfModule->alias_end(); I != E; I++)
|
|
447
|
-
{
|
|
448
|
-
collectSym(*I);
|
|
449
|
-
collectSym((*I)->getAliasee());
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
// Add symbols for all of the functions and the instructions in them.
|
|
453
|
-
for (SVFModule::llvm_iterator F = svfModule->llvmFunBegin(), E = svfModule->llvmFunEnd(); F != E; ++F)
|
|
454
|
-
{
|
|
455
|
-
Function *fun = *F;
|
|
456
|
-
collectSym(fun);
|
|
457
|
-
collectRet(fun);
|
|
458
|
-
if (fun->getFunctionType()->isVarArg())
|
|
459
|
-
collectVararg(fun);
|
|
460
|
-
|
|
461
|
-
// Add symbols for all formal parameters.
|
|
462
|
-
for (Function::arg_iterator I = fun->arg_begin(), E = fun->arg_end();
|
|
463
|
-
I != E; ++I)
|
|
464
|
-
{
|
|
465
|
-
collectSym(&*I);
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
// collect and create symbols inside the function body
|
|
469
|
-
for (inst_iterator II = inst_begin(*fun), E = inst_end(*fun); II != E; ++II)
|
|
470
|
-
{
|
|
471
|
-
const Instruction *inst = &*II;
|
|
472
|
-
collectSym(inst);
|
|
473
|
-
|
|
474
|
-
// initialization for some special instructions
|
|
475
|
-
//{@
|
|
476
|
-
if (const StoreInst *st = SVFUtil::dyn_cast<StoreInst>(inst))
|
|
477
|
-
{
|
|
478
|
-
collectSym(st->getPointerOperand());
|
|
479
|
-
collectSym(st->getValueOperand());
|
|
480
|
-
}
|
|
481
|
-
else if (const LoadInst *ld = SVFUtil::dyn_cast<LoadInst>(inst))
|
|
482
|
-
{
|
|
483
|
-
collectSym(ld->getPointerOperand());
|
|
484
|
-
}
|
|
485
|
-
else if (const PHINode *phi = SVFUtil::dyn_cast<PHINode>(inst))
|
|
486
|
-
{
|
|
487
|
-
for (u32_t i = 0; i < phi->getNumIncomingValues(); ++i)
|
|
488
|
-
{
|
|
489
|
-
collectSym(phi->getIncomingValue(i));
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
else if (const GetElementPtrInst *gep = SVFUtil::dyn_cast<GetElementPtrInst>(
|
|
493
|
-
inst))
|
|
494
|
-
{
|
|
495
|
-
collectSym(gep->getPointerOperand());
|
|
496
|
-
}
|
|
497
|
-
else if (const SelectInst *sel = SVFUtil::dyn_cast<SelectInst>(inst))
|
|
498
|
-
{
|
|
499
|
-
collectSym(sel->getTrueValue());
|
|
500
|
-
collectSym(sel->getFalseValue());
|
|
501
|
-
}
|
|
502
|
-
else if (const BinaryOperator *binary = SVFUtil::dyn_cast<BinaryOperator>(inst))
|
|
503
|
-
{
|
|
504
|
-
for (u32_t i = 0; i < binary->getNumOperands(); i++)
|
|
505
|
-
collectSym(binary->getOperand(i));
|
|
506
|
-
}
|
|
507
|
-
else if (const UnaryOperator *unary = SVFUtil::dyn_cast<UnaryOperator>(inst))
|
|
508
|
-
{
|
|
509
|
-
for (u32_t i = 0; i < unary->getNumOperands(); i++)
|
|
510
|
-
collectSym(unary->getOperand(i));
|
|
511
|
-
}
|
|
512
|
-
else if (const CmpInst *cmp = SVFUtil::dyn_cast<CmpInst>(inst))
|
|
513
|
-
{
|
|
514
|
-
for (u32_t i = 0; i < cmp->getNumOperands(); i++)
|
|
515
|
-
collectSym(cmp->getOperand(i));
|
|
516
|
-
}
|
|
517
|
-
else if (const CastInst *cast = SVFUtil::dyn_cast<CastInst>(inst))
|
|
518
|
-
{
|
|
519
|
-
collectSym(cast->getOperand(0));
|
|
520
|
-
}
|
|
521
|
-
else if (const ReturnInst *ret = SVFUtil::dyn_cast<ReturnInst>(inst))
|
|
522
|
-
{
|
|
523
|
-
if(ret->getReturnValue())
|
|
524
|
-
collectSym(ret->getReturnValue());
|
|
525
|
-
}
|
|
526
|
-
else if (const BranchInst *br = SVFUtil::dyn_cast<BranchInst>(inst))
|
|
527
|
-
{
|
|
528
|
-
Value* opnd = br->isConditional() ? br->getCondition() : br->getOperand(0);
|
|
529
|
-
collectSym(opnd);
|
|
530
|
-
}
|
|
531
|
-
else if (const SwitchInst *sw = SVFUtil::dyn_cast<SwitchInst>(inst))
|
|
532
|
-
{
|
|
533
|
-
collectSym(sw->getCondition());
|
|
534
|
-
}
|
|
535
|
-
else if (isNonInstricCallSite(inst))
|
|
536
|
-
{
|
|
537
|
-
|
|
538
|
-
CallSite cs = SVFUtil::getLLVMCallSite(inst);
|
|
539
|
-
callSiteSet.insert(cs);
|
|
540
|
-
for (CallSite::arg_iterator it = cs.arg_begin();
|
|
541
|
-
it != cs.arg_end(); ++it)
|
|
542
|
-
{
|
|
543
|
-
collectSym(*it);
|
|
544
|
-
}
|
|
545
|
-
// Calls to inline asm need to be added as well because the callee isn't
|
|
546
|
-
// referenced anywhere else.
|
|
547
|
-
const Value *Callee = cs.getCalledValue();
|
|
548
|
-
collectSym(Callee);
|
|
549
|
-
|
|
550
|
-
//TODO handle inlineAsm
|
|
551
|
-
///if (SVFUtil::isa<InlineAsm>(Callee))
|
|
552
|
-
|
|
553
|
-
}
|
|
554
|
-
//@}
|
|
555
|
-
}
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
NodeIDAllocator::get()->endSymbolAllocation();
|
|
559
|
-
if (Options::SymTabPrint) {
|
|
560
|
-
SymbolTableInfo::SymbolInfo()->dump();
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
381
|
|
|
564
382
|
/*!
|
|
565
383
|
* Destroy the memory for this symbol table after use
|
|
@@ -579,121 +397,9 @@ void SymbolTableInfo::destroy()
|
|
|
579
397
|
if (iter->second)
|
|
580
398
|
delete iter->second;
|
|
581
399
|
}
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
/*!
|
|
585
|
-
* Collect symbols, including value and object syms
|
|
586
|
-
*/
|
|
587
|
-
void SymbolTableInfo::collectSym(const Value *val)
|
|
588
|
-
{
|
|
589
|
-
|
|
590
|
-
//TODO: filter the non-pointer type // if (!SVFUtil::isa<PointerType>(val->getType())) return;
|
|
591
|
-
|
|
592
|
-
DBOUT(DMemModel, outs() << "collect sym from ##" << *val << " \n");
|
|
593
|
-
|
|
594
|
-
// special sym here
|
|
595
|
-
if (isNullPtrSym(val) || isBlackholeSym(val))
|
|
596
|
-
return;
|
|
597
|
-
|
|
598
|
-
//TODO handle constant expression value here??
|
|
599
|
-
handleCE(val);
|
|
600
|
-
|
|
601
|
-
// create a value sym
|
|
602
|
-
collectVal(val);
|
|
603
|
-
|
|
604
|
-
// create an object If it is a heap, stack, global, function.
|
|
605
|
-
if (isObject(val))
|
|
606
|
-
{
|
|
607
|
-
collectObj(val);
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
/*!
|
|
612
|
-
* Get value sym, if not available create a new one
|
|
613
|
-
*/
|
|
614
|
-
void SymbolTableInfo::collectVal(const Value *val)
|
|
615
|
-
{
|
|
616
|
-
ValueToIDMapTy::iterator iter = valSymMap.find(val);
|
|
617
|
-
if (iter == valSymMap.end())
|
|
618
|
-
{
|
|
619
|
-
// create val sym and sym type
|
|
620
|
-
SymID id = NodeIDAllocator::get()->allocateValueId();
|
|
621
|
-
valSymMap.insert(std::make_pair(val, id));
|
|
622
|
-
symTyMap.insert(std::make_pair(id, ValSym));
|
|
623
|
-
DBOUT(DMemModel,
|
|
624
|
-
outs() << "create a new value sym " << id << "\n");
|
|
625
|
-
/// handle global constant expression here
|
|
626
|
-
if (const GlobalVariable* globalVar = SVFUtil::dyn_cast<GlobalVariable>(val))
|
|
627
|
-
handleGlobalCE(globalVar);
|
|
628
|
-
}
|
|
629
400
|
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
/*!
|
|
635
|
-
* Get memory object sym, if not available create a new one
|
|
636
|
-
*/
|
|
637
|
-
void SymbolTableInfo::collectObj(const Value *val)
|
|
638
|
-
{
|
|
639
|
-
val = getGlobalRep(val);
|
|
640
|
-
ValueToIDMapTy::iterator iter = objSymMap.find(val);
|
|
641
|
-
if (iter == objSymMap.end())
|
|
642
|
-
{
|
|
643
|
-
// if the object pointed by the pointer is a constant data (e.g., i32 0) or a global constant object (e.g. string)
|
|
644
|
-
// then we treat them as one ConstantObj
|
|
645
|
-
if(isConstantData(val) || (isConstantObjSym(val) && !getModelConstants()))
|
|
646
|
-
{
|
|
647
|
-
objSymMap.insert(std::make_pair(val, constantSymID()));
|
|
648
|
-
}
|
|
649
|
-
// otherwise, we will create an object for each abstract memory location
|
|
650
|
-
else
|
|
651
|
-
{
|
|
652
|
-
// create obj sym and sym type
|
|
653
|
-
SymID id = NodeIDAllocator::get()->allocateObjectId();
|
|
654
|
-
objSymMap.insert(std::make_pair(val, id));
|
|
655
|
-
symTyMap.insert(std::make_pair(id, ObjSym));
|
|
656
|
-
DBOUT(DMemModel,
|
|
657
|
-
outs() << "create a new obj sym " << id << "\n");
|
|
658
|
-
|
|
659
|
-
// create a memory object
|
|
660
|
-
MemObj* mem = new MemObj(val, id);
|
|
661
|
-
assert(objMap.find(id) == objMap.end());
|
|
662
|
-
objMap[id] = mem;
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
|
|
667
|
-
/*!
|
|
668
|
-
* Create unique return sym, if not available create a new one
|
|
669
|
-
*/
|
|
670
|
-
void SymbolTableInfo::collectRet(const Function *val)
|
|
671
|
-
{
|
|
672
|
-
FunToIDMapTy::iterator iter = returnSymMap.find(val);
|
|
673
|
-
if (iter == returnSymMap.end())
|
|
674
|
-
{
|
|
675
|
-
SymID id = NodeIDAllocator::get()->allocateValueId();
|
|
676
|
-
returnSymMap.insert(std::make_pair(val, id));
|
|
677
|
-
symTyMap.insert(std::make_pair(id, RetSym));
|
|
678
|
-
DBOUT(DMemModel,
|
|
679
|
-
outs() << "create a return sym " << id << "\n");
|
|
680
|
-
}
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
/*!
|
|
684
|
-
* Create vararg sym, if not available create a new one
|
|
685
|
-
*/
|
|
686
|
-
void SymbolTableInfo::collectVararg(const Function *val)
|
|
687
|
-
{
|
|
688
|
-
FunToIDMapTy::iterator iter = varargSymMap.find(val);
|
|
689
|
-
if (iter == varargSymMap.end())
|
|
690
|
-
{
|
|
691
|
-
SymID id = NodeIDAllocator::get()->allocateValueId();
|
|
692
|
-
varargSymMap.insert(std::make_pair(val, id));
|
|
693
|
-
symTyMap.insert(std::make_pair(id, VarargSym));
|
|
694
|
-
DBOUT(DMemModel,
|
|
695
|
-
outs() << "create a vararg sym " << id << "\n");
|
|
696
|
-
}
|
|
401
|
+
delete dl;
|
|
402
|
+
dl = nullptr;
|
|
697
403
|
}
|
|
698
404
|
|
|
699
405
|
/*!
|
|
@@ -751,156 +457,6 @@ bool SymbolTableInfo::isConstantObjSym(const Value *val)
|
|
|
751
457
|
}
|
|
752
458
|
|
|
753
459
|
|
|
754
|
-
/*!
|
|
755
|
-
* Handle constant expression
|
|
756
|
-
*/
|
|
757
|
-
void SymbolTableInfo::handleCE(const Value *val)
|
|
758
|
-
{
|
|
759
|
-
if (const Constant* ref = SVFUtil::dyn_cast<Constant>(val))
|
|
760
|
-
{
|
|
761
|
-
if (const ConstantExpr* ce = isGepConstantExpr(ref))
|
|
762
|
-
{
|
|
763
|
-
DBOUT(DMemModelCE,
|
|
764
|
-
outs() << "handle constant expression " << *ref << "\n");
|
|
765
|
-
collectVal(ce);
|
|
766
|
-
collectVal(ce->getOperand(0));
|
|
767
|
-
// handle the recursive constant express case
|
|
768
|
-
// like (gep (bitcast (gep X 1)) 1); the inner gep is ce->getOperand(0)
|
|
769
|
-
handleCE(ce->getOperand(0));
|
|
770
|
-
}
|
|
771
|
-
else if (const ConstantExpr* ce = isCastConstantExpr(ref))
|
|
772
|
-
{
|
|
773
|
-
DBOUT(DMemModelCE,
|
|
774
|
-
outs() << "handle constant expression " << *ref << "\n");
|
|
775
|
-
collectVal(ce);
|
|
776
|
-
collectVal(ce->getOperand(0));
|
|
777
|
-
// handle the recursive constant express case
|
|
778
|
-
// like (gep (bitcast (gep X 1)) 1); the inner gep is ce->getOperand(0)
|
|
779
|
-
handleCE(ce->getOperand(0));
|
|
780
|
-
}
|
|
781
|
-
else if (const ConstantExpr* ce = isSelectConstantExpr(ref))
|
|
782
|
-
{
|
|
783
|
-
DBOUT(DMemModelCE,
|
|
784
|
-
outs() << "handle constant expression " << *ref << "\n");
|
|
785
|
-
collectVal(ce);
|
|
786
|
-
collectVal(ce->getOperand(0));
|
|
787
|
-
collectVal(ce->getOperand(1));
|
|
788
|
-
collectVal(ce->getOperand(2));
|
|
789
|
-
// handle the recursive constant express case
|
|
790
|
-
// like (gep (bitcast (gep X 1)) 1); the inner gep is ce->getOperand(0)
|
|
791
|
-
handleCE(ce->getOperand(0));
|
|
792
|
-
handleCE(ce->getOperand(1));
|
|
793
|
-
handleCE(ce->getOperand(2));
|
|
794
|
-
}
|
|
795
|
-
// if we meet a int2ptr, then it points-to black hole
|
|
796
|
-
else if (const ConstantExpr *int2Ptrce = isInt2PtrConstantExpr(ref)) {
|
|
797
|
-
collectVal(int2Ptrce);
|
|
798
|
-
} else if (const ConstantExpr *ptr2Intce = isPtr2IntConstantExpr(ref)) {
|
|
799
|
-
collectVal(ptr2Intce);
|
|
800
|
-
const Constant *opnd = ptr2Intce->getOperand(0);
|
|
801
|
-
handleCE(opnd);
|
|
802
|
-
} else if (isTruncConstantExpr(ref) || isCmpConstantExpr(ref)) {
|
|
803
|
-
collectVal(ref);
|
|
804
|
-
} else if (isBinaryConstantExpr(ref)) {
|
|
805
|
-
collectVal(ref);
|
|
806
|
-
} else if (isUnaryConstantExpr(ref)) {
|
|
807
|
-
// we don't handle unary constant expression like fneg(x) now
|
|
808
|
-
collectVal(ref);
|
|
809
|
-
} else if (SVFUtil::isa<ConstantAggregate>(ref)) {
|
|
810
|
-
// we don't handle constant agrgregate like constant vectors
|
|
811
|
-
collectVal(ref);
|
|
812
|
-
} else {
|
|
813
|
-
if (SVFUtil::isa<ConstantExpr>(val))
|
|
814
|
-
assert(false && "we don't handle all other constant expression for now!");
|
|
815
|
-
collectVal(ref);
|
|
816
|
-
}
|
|
817
|
-
}
|
|
818
|
-
}
|
|
819
|
-
|
|
820
|
-
/*!
|
|
821
|
-
* Handle global constant expression
|
|
822
|
-
*/
|
|
823
|
-
void SymbolTableInfo::handleGlobalCE(const GlobalVariable *G)
|
|
824
|
-
{
|
|
825
|
-
assert(G);
|
|
826
|
-
|
|
827
|
-
//The type this global points to
|
|
828
|
-
const Type *T = G->getType()->getContainedType(0);
|
|
829
|
-
bool is_array = 0;
|
|
830
|
-
//An array is considered a single variable of its type.
|
|
831
|
-
while (const ArrayType *AT = SVFUtil::dyn_cast<ArrayType>(T))
|
|
832
|
-
{
|
|
833
|
-
T = AT->getElementType();
|
|
834
|
-
is_array = 1;
|
|
835
|
-
}
|
|
836
|
-
|
|
837
|
-
if (SVFUtil::isa<StructType>(T))
|
|
838
|
-
{
|
|
839
|
-
//A struct may be used in constant GEP expr.
|
|
840
|
-
for (Value::const_user_iterator it = G->user_begin(), ie = G->user_end();
|
|
841
|
-
it != ie; ++it)
|
|
842
|
-
{
|
|
843
|
-
handleCE(*it);
|
|
844
|
-
}
|
|
845
|
-
}
|
|
846
|
-
else
|
|
847
|
-
{
|
|
848
|
-
if (is_array)
|
|
849
|
-
{
|
|
850
|
-
for (Value::const_user_iterator it = G->user_begin(), ie =
|
|
851
|
-
G->user_end(); it != ie; ++it)
|
|
852
|
-
{
|
|
853
|
-
handleCE(*it);
|
|
854
|
-
}
|
|
855
|
-
}
|
|
856
|
-
}
|
|
857
|
-
|
|
858
|
-
if (G->hasInitializer())
|
|
859
|
-
{
|
|
860
|
-
handleGlobalInitializerCE(G->getInitializer(), 0);
|
|
861
|
-
}
|
|
862
|
-
}
|
|
863
|
-
|
|
864
|
-
/*!
|
|
865
|
-
* Handle global variable initialization
|
|
866
|
-
*/
|
|
867
|
-
void SymbolTableInfo::handleGlobalInitializerCE(const Constant *C,
|
|
868
|
-
u32_t offset)
|
|
869
|
-
{
|
|
870
|
-
|
|
871
|
-
if (C->getType()->isSingleValueType())
|
|
872
|
-
{
|
|
873
|
-
if (const ConstantExpr *E = SVFUtil::dyn_cast<ConstantExpr>(C))
|
|
874
|
-
{
|
|
875
|
-
handleCE(E);
|
|
876
|
-
}
|
|
877
|
-
else
|
|
878
|
-
{
|
|
879
|
-
collectVal(C);
|
|
880
|
-
}
|
|
881
|
-
}
|
|
882
|
-
else if (SVFUtil::isa<ConstantArray>(C))
|
|
883
|
-
{
|
|
884
|
-
for (u32_t i = 0, e = C->getNumOperands(); i != e; i++)
|
|
885
|
-
{
|
|
886
|
-
handleGlobalInitializerCE(SVFUtil::cast<Constant>(C->getOperand(i)), offset);
|
|
887
|
-
}
|
|
888
|
-
}
|
|
889
|
-
else if (SVFUtil::isa<ConstantStruct>(C))
|
|
890
|
-
{
|
|
891
|
-
const StructType *sty = SVFUtil::cast<StructType>(C->getType());
|
|
892
|
-
const std::vector<u32_t>& offsetvect =
|
|
893
|
-
SymbolTableInfo::SymbolInfo()->getFattenFieldIdxVec(sty);
|
|
894
|
-
for (u32_t i = 0, e = C->getNumOperands(); i != e; i++)
|
|
895
|
-
{
|
|
896
|
-
u32_t off = offsetvect[i];
|
|
897
|
-
handleGlobalInitializerCE(SVFUtil::cast<Constant>(C->getOperand(i)),
|
|
898
|
-
offset + off);
|
|
899
|
-
}
|
|
900
|
-
}
|
|
901
|
-
}
|
|
902
|
-
|
|
903
|
-
|
|
904
460
|
/*
|
|
905
461
|
* Print out the composite type information
|
|
906
462
|
*/
|
|
@@ -1089,3 +645,4 @@ u32_t SymbolTableInfo::getTypeSizeInBytes(const StructType *sty, u32_t field_idx
|
|
|
1089
645
|
|
|
1090
646
|
|
|
1091
647
|
|
|
648
|
+
|
|
@@ -148,9 +148,10 @@ namespace SVF
|
|
|
148
148
|
return id;
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
NodeID NodeIDAllocator::endSymbolAllocation(void)
|
|
152
152
|
{
|
|
153
153
|
numSymbols = numNodes;
|
|
154
|
+
return numSymbols;
|
|
154
155
|
}
|
|
155
156
|
|
|
156
157
|
const std::string NodeIDAllocator::Clusterer::NumObjects = "NumObjects";
|
package/lib/Util/Options.cpp
CHANGED
|
@@ -26,8 +26,8 @@ namespace SVF
|
|
|
26
26
|
llvm::cl::desc("Method of allocating (LLVM) values and memory objects as node IDs"),
|
|
27
27
|
llvm::cl::values(
|
|
28
28
|
clEnumValN(NodeIDAllocator::Strategy::DENSE, "dense", "allocate objects together and values together, separately"),
|
|
29
|
-
clEnumValN(NodeIDAllocator::Strategy::SEQ, "seq", "allocate values and objects sequentially, intermixed"),
|
|
30
|
-
clEnumValN(NodeIDAllocator::Strategy::DEBUG, "debug", "allocate value and objects sequentially, intermixed, except GEP objects as offsets
|
|
29
|
+
clEnumValN(NodeIDAllocator::Strategy::SEQ, "seq", "allocate values and objects sequentially, intermixed (default)"),
|
|
30
|
+
clEnumValN(NodeIDAllocator::Strategy::DEBUG, "debug", "allocate value and objects sequentially, intermixed, except GEP objects as offsets")));
|
|
31
31
|
|
|
32
32
|
const llvm::cl::opt<unsigned> Options::MaxFieldLimit(
|
|
33
33
|
"field-limit",
|
|
@@ -629,14 +629,6 @@ namespace SVF
|
|
|
629
629
|
llvm::cl::desc("add svf.main()")
|
|
630
630
|
);
|
|
631
631
|
|
|
632
|
-
|
|
633
|
-
// SymbolTableInfo.cpp
|
|
634
|
-
const llvm::cl::opt<bool> Options::LocMemModel(
|
|
635
|
-
"loc-mm",
|
|
636
|
-
llvm::cl::init(false),
|
|
637
|
-
llvm::cl::desc("Bytes/bits modeling of memory locations")
|
|
638
|
-
);
|
|
639
|
-
|
|
640
632
|
const llvm::cl::opt<bool> Options::ModelConsts(
|
|
641
633
|
"model-consts",
|
|
642
634
|
llvm::cl::init(false),
|
package/lib/Util/SVFModule.cpp
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
#include "Util/SVFModule.h"
|
|
25
|
-
#include "SVF-FE/
|
|
25
|
+
#include "SVF-FE/MemModelBuilder.h"
|
|
26
26
|
#include "Util/SVFUtil.h"
|
|
27
27
|
|
|
28
28
|
using namespace SVF;
|
|
@@ -34,6 +34,7 @@ void SVFModule::buildSymbolTableInfo()
|
|
|
34
34
|
/// building symbol table
|
|
35
35
|
DBOUT(DGENERAL, SVFUtil::outs() << SVFUtil::pasMsg("Building Symbol table ...\n"));
|
|
36
36
|
SymbolTableInfo *symInfo = SymbolTableInfo::SymbolInfo();
|
|
37
|
-
symInfo
|
|
37
|
+
MemModelBuilder builder(symInfo);
|
|
38
|
+
builder.buildMemModel(this);
|
|
38
39
|
}
|
|
39
40
|
}
|
package/lib/WPA/Andersen.cpp
CHANGED
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
#include "Util/Options.h"
|
|
31
|
+
#include "SVF-FE/CommonCHG.h"
|
|
31
32
|
#include "SVF-FE/LLVMUtil.h"
|
|
32
33
|
#include "MemoryModel/PointsTo.h"
|
|
33
|
-
#include "Util/Options.h"
|
|
34
34
|
#include "WPA/Andersen.h"
|
|
35
35
|
#include "WPA/Steensgaard.h"
|
|
36
36
|
|
|
@@ -57,6 +57,18 @@ double AndersenBase::timeOfProcessCopyGep = 0;
|
|
|
57
57
|
double AndersenBase::timeOfProcessLoadStore = 0;
|
|
58
58
|
double AndersenBase::timeOfUpdateCallGraph = 0;
|
|
59
59
|
|
|
60
|
+
/*!
|
|
61
|
+
* Destructor
|
|
62
|
+
*/
|
|
63
|
+
AndersenBase::~AndersenBase()
|
|
64
|
+
{
|
|
65
|
+
delete consCG;
|
|
66
|
+
consCG = nullptr;
|
|
67
|
+
|
|
68
|
+
auto * chg = getCHGraph();
|
|
69
|
+
delete chg;
|
|
70
|
+
chg = nullptr;
|
|
71
|
+
}
|
|
60
72
|
|
|
61
73
|
/*!
|
|
62
74
|
* Initilize analysis
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.314",
|
|
4
4
|
"description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
package/tools/Example/svf-ex.cpp
CHANGED
|
@@ -160,9 +160,9 @@ int main(int argc, char ** argv)
|
|
|
160
160
|
SVFModule* svfModule = LLVMModuleSet::getLLVMModuleSet()->buildSVFModule(moduleNameVec);
|
|
161
161
|
svfModule->buildSymbolTableInfo();
|
|
162
162
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
163
|
+
/// Build Program Assignment Graph (PAG)
|
|
164
|
+
PAGBuilder builder;
|
|
165
|
+
PAG* pag = builder.build(svfModule);
|
|
166
166
|
|
|
167
167
|
/// Create Andersen's pointer analysis
|
|
168
168
|
Andersen* ander = AndersenWaveDiff::createAndersenWaveDiff(pag);
|
|
@@ -199,7 +199,10 @@ int main(int argc, char ** argv)
|
|
|
199
199
|
PAG::releasePAG();
|
|
200
200
|
|
|
201
201
|
LLVMModuleSet::getLLVMModuleSet()->dumpModulesToFile(".svf.bc");
|
|
202
|
+
SVF::LLVMModuleSet::releaseLLVMModuleSet();
|
|
203
|
+
delete svfModule;
|
|
202
204
|
|
|
205
|
+
llvm::llvm_shutdown();
|
|
203
206
|
return 0;
|
|
204
207
|
}
|
|
205
208
|
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
//===- LocMemModel.h -- Location set based memory model-----------------------//
|
|
2
|
-
//
|
|
3
|
-
// SVF: Static Value-Flow Analysis
|
|
4
|
-
//
|
|
5
|
-
// Copyright (C) <2013-2017> <Yulei Sui>
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
// This program is free software: you can redistribute it and/or modify
|
|
9
|
-
// it under the terms of the GNU General Public License as published by
|
|
10
|
-
// the Free Software Foundation, either version 3 of the License, or
|
|
11
|
-
// (at your option) any later version.
|
|
12
|
-
|
|
13
|
-
// This program is distributed in the hope that it will be useful,
|
|
14
|
-
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
-
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
-
// GNU General Public License for more details.
|
|
17
|
-
|
|
18
|
-
// You should have received a copy of the GNU General Public License
|
|
19
|
-
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
-
//
|
|
21
|
-
//===----------------------------------------------------------------------===//
|
|
22
|
-
|
|
23
|
-
/*
|
|
24
|
-
* LocMemModel.h
|
|
25
|
-
*
|
|
26
|
-
* Created on: Apr 28, 2014
|
|
27
|
-
* Author: Yulei
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
#ifndef LOCMEMMODEL_H_
|
|
31
|
-
#define LOCMEMMODEL_H_
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
#endif /* LOCMEMMODEL_H_ */
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
//===- LocMemModel.cpp -- Location set based memory model---------------------//
|
|
2
|
-
//
|
|
3
|
-
// SVF: Static Value-Flow Analysis
|
|
4
|
-
//
|
|
5
|
-
// Copyright (C) <2013-2017> <Yulei Sui>
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
// This program is free software: you can redistribute it and/or modify
|
|
9
|
-
// it under the terms of the GNU General Public License as published by
|
|
10
|
-
// the Free Software Foundation, either version 3 of the License, or
|
|
11
|
-
// (at your option) any later version.
|
|
12
|
-
|
|
13
|
-
// This program is distributed in the hope that it will be useful,
|
|
14
|
-
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
-
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
-
// GNU General Public License for more details.
|
|
17
|
-
|
|
18
|
-
// You should have received a copy of the GNU General Public License
|
|
19
|
-
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
-
//
|
|
21
|
-
//===----------------------------------------------------------------------===//
|
|
22
|
-
|
|
23
|
-
/*
|
|
24
|
-
* LocMemModel.cpp
|
|
25
|
-
*
|
|
26
|
-
* Created on: Apr 28, 2014
|
|
27
|
-
* Author: Yulei Sui
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|