svf-tools 1.0.351 → 1.0.352
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/AndersenSFR_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CSC_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +44 -45
- package/SVF-doxygen/html/html/ConsG_8h_source.html +21 -21
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +10 -8
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +5 -5
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +4 -2
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +24 -22
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +17 -17
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +15 -14
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +11 -11
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +4 -4
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +3 -4
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +19 -21
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +38 -40
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +35 -37
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +21 -23
- package/SVF-doxygen/html/html/SVFStatements_8h.html +0 -4
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +146 -156
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +98 -98
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +13 -13
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +50 -51
- package/SVF-doxygen/html/html/VFG_8h_source.html +35 -35
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/annotated.html +100 -102
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt-members.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +17 -18
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AssignStmt-members.html +28 -29
- package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.html +25 -30
- package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt-members.html +28 -29
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +23 -24
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +31 -32
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +38 -39
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CSC.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +27 -28
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt-members.html +30 -31
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +95 -96
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +17 -16
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt-members.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +17 -18
- package/SVF-doxygen/html/html/classSVF_1_1DCHEdge-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DCHEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +6 -5
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +36 -36
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +56 -55
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +21 -20
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +39 -39
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +16 -14
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +139 -50
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +39 -39
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +7 -8
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt-members.html +27 -28
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +17 -18
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +33 -34
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +32 -33
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +5 -6
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +30 -31
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +23 -24
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +27 -28
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +77 -78
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +29 -29
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt-members.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +49 -53
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +18 -19
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +26 -27
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +18 -19
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +26 -27
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +18 -19
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt-members.html +29 -30
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +30 -31
- package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +79 -80
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +2 -2
- package/SVF-doxygen/html/html/classes.html +95 -93
- package/SVF-doxygen/html/html/functions_a.html +5 -5
- package/SVF-doxygen/html/html/functions_c.html +22 -22
- package/SVF-doxygen/html/html/functions_eval_g.html +2 -1
- package/SVF-doxygen/html/html/functions_eval_n.html +0 -1
- package/SVF-doxygen/html/html/functions_eval_v.html +0 -1
- package/SVF-doxygen/html/html/functions_func.html +5 -5
- package/SVF-doxygen/html/html/functions_func_c.html +20 -22
- package/SVF-doxygen/html/html/functions_func_g.html +13 -13
- package/SVF-doxygen/html/html/functions_func_i.html +7 -4
- package/SVF-doxygen/html/html/functions_func_n.html +0 -3
- package/SVF-doxygen/html/html/functions_func_o.html +3 -5
- package/SVF-doxygen/html/html/functions_func_t.html +0 -2
- package/SVF-doxygen/html/html/functions_func_v.html +0 -3
- package/SVF-doxygen/html/html/functions_g.html +17 -16
- package/SVF-doxygen/html/html/functions_i.html +9 -6
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_m.html +1 -1
- package/SVF-doxygen/html/html/functions_n.html +0 -4
- package/SVF-doxygen/html/html/functions_o.html +3 -5
- package/SVF-doxygen/html/html/functions_p.html +10 -10
- package/SVF-doxygen/html/html/functions_r.html +8 -4
- package/SVF-doxygen/html/html/functions_s.html +12 -10
- package/SVF-doxygen/html/html/functions_t.html +7 -9
- package/SVF-doxygen/html/html/functions_v.html +4 -5
- package/SVF-doxygen/html/html/functions_vars_v.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +5 -9
- package/SVF-doxygen/html/html/hierarchy.html +55 -57
- package/SVF-doxygen/html/html/namespaceSVF.html +0 -4
- package/SVF-doxygen/html/html/search/all_1.js +5 -5
- package/SVF-doxygen/html/html/search/all_10.js +8 -8
- package/SVF-doxygen/html/html/search/all_12.js +2 -2
- package/SVF-doxygen/html/html/search/all_13.js +9 -9
- package/SVF-doxygen/html/html/search/all_14.js +5 -5
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +3 -3
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +1 -1
- package/SVF-doxygen/html/html/search/all_7.js +4 -4
- package/SVF-doxygen/html/html/search/all_9.js +2 -1
- package/SVF-doxygen/html/html/search/all_c.js +2 -2
- package/SVF-doxygen/html/html/search/all_d.js +3 -3
- package/SVF-doxygen/html/html/search/all_e.js +3 -4
- package/SVF-doxygen/html/html/search/all_f.js +1 -1
- package/SVF-doxygen/html/html/search/classes_12.js +0 -1
- package/SVF-doxygen/html/html/search/classes_b.js +0 -1
- package/SVF-doxygen/html/html/search/enumvalues_12.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_6.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_b.js +1 -1
- package/SVF-doxygen/html/html/search/functions_0.js +5 -5
- package/SVF-doxygen/html/html/search/functions_10.js +1 -1
- package/SVF-doxygen/html/html/search/functions_11.js +1 -1
- package/SVF-doxygen/html/html/search/functions_13.js +0 -1
- package/SVF-doxygen/html/html/search/functions_2.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +3 -3
- package/SVF-doxygen/html/html/search/functions_8.js +2 -1
- package/SVF-doxygen/html/html/search/functions_c.js +0 -1
- package/SVF-doxygen/html/html/search/functions_d.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.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_16.js +1 -0
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +16 -16
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +18 -18
- package/include/Graphs/ConsG.h +2 -2
- package/include/Graphs/ConsGEdge.h +1 -1
- package/include/Graphs/VFG.h +2 -2
- package/include/MemoryModel/SVFIR.h +2 -2
- package/include/MemoryModel/SVFStatements.h +17 -94
- package/include/MemoryModel/SVFVariables.h +9 -6
- package/include/SVF-FE/DCHG.h +1 -1
- package/include/SVF-FE/SVFIRBuilder.h +5 -5
- package/include/Util/IRAnnotator.h +1 -1
- package/lib/DDA/ContextDDA.cpp +4 -5
- package/lib/DDA/DDAClient.cpp +6 -6
- package/lib/DDA/DDAStat.cpp +1 -1
- package/lib/DDA/FlowDDA.cpp +4 -5
- package/lib/Graphs/ConsG.cpp +26 -31
- package/lib/Graphs/SVFG.cpp +2 -2
- package/lib/Graphs/VFG.cpp +36 -43
- package/lib/MTA/MTAAnnotator.cpp +3 -3
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
- package/lib/MemoryModel/SVFIR.cpp +26 -34
- package/lib/MemoryModel/SVFStatements.cpp +0 -22
- package/lib/MemoryModel/SVFVariables.cpp +1 -1
- package/lib/MemoryModel/SymbolTableInfo.cpp +1 -1
- package/lib/SVF-FE/DCHG.cpp +1 -1
- package/lib/SVF-FE/Graph2Json.cpp +24 -27
- package/lib/Util/PTAStat.cpp +9 -9
- package/lib/Util/TypeBasedHeapCloning.cpp +5 -5
- package/lib/WPA/AndersenSFR.cpp +2 -2
- package/lib/WPA/AndersenStat.cpp +2 -2
- package/lib/WPA/CSC.cpp +2 -2
- package/lib/WPA/FlowSensitive.cpp +4 -7
- package/lib/WPA/FlowSensitiveStat.cpp +2 -2
- package/lib/WPA/FlowSensitiveTBHC.cpp +6 -9
- package/package.json +1 -1
package/lib/Graphs/VFG.cpp
CHANGED
|
@@ -336,16 +336,16 @@ void VFG::addVFGNodes()
|
|
|
336
336
|
addNullPtrVFGNode(pag->getGNode(pag->getNullPtr()));
|
|
337
337
|
|
|
338
338
|
// initialize address nodes
|
|
339
|
-
|
|
340
|
-
for (
|
|
339
|
+
SVFStmt::SVFStmtSetTy& addrs = getPAGEdgeSet(SVFStmt::Addr);
|
|
340
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =
|
|
341
341
|
addrs.end(); iter != eiter; ++iter)
|
|
342
342
|
{
|
|
343
343
|
addAddrVFGNode(SVFUtil::cast<AddrStmt>(*iter));
|
|
344
344
|
}
|
|
345
345
|
|
|
346
346
|
// initialize copy nodes
|
|
347
|
-
|
|
348
|
-
for (
|
|
347
|
+
SVFStmt::SVFStmtSetTy& copys = getPAGEdgeSet(SVFStmt::Copy);
|
|
348
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = copys.begin(), eiter =
|
|
349
349
|
copys.end(); iter != eiter; ++iter)
|
|
350
350
|
{
|
|
351
351
|
const CopyStmt* edge = SVFUtil::cast<CopyStmt>(*iter);
|
|
@@ -354,38 +354,31 @@ void VFG::addVFGNodes()
|
|
|
354
354
|
}
|
|
355
355
|
|
|
356
356
|
// initialize gep nodes
|
|
357
|
-
|
|
358
|
-
for (
|
|
357
|
+
SVFStmt::SVFStmtSetTy& ngeps = getPAGEdgeSet(SVFStmt::Gep);
|
|
358
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =
|
|
359
359
|
ngeps.end(); iter != eiter; ++iter)
|
|
360
360
|
{
|
|
361
|
-
addGepVFGNode(SVFUtil::cast<
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
PAGEdge::SVFStmtSetTy& vgeps = getPAGEdgeSet(PAGEdge::VariantGep);
|
|
365
|
-
for (PAGEdge::SVFStmtSetTy::iterator iter = vgeps.begin(), eiter =
|
|
366
|
-
vgeps.end(); iter != eiter; ++iter)
|
|
367
|
-
{
|
|
368
|
-
addGepVFGNode(SVFUtil::cast<VariantGepStmt>(*iter));
|
|
361
|
+
addGepVFGNode(SVFUtil::cast<GepStmt>(*iter));
|
|
369
362
|
}
|
|
370
363
|
|
|
371
364
|
// initialize load nodes
|
|
372
|
-
|
|
373
|
-
for (
|
|
365
|
+
SVFStmt::SVFStmtSetTy& loads = getPAGEdgeSet(SVFStmt::Load);
|
|
366
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = loads.begin(), eiter =
|
|
374
367
|
loads.end(); iter != eiter; ++iter)
|
|
375
368
|
{
|
|
376
369
|
addLoadVFGNode(SVFUtil::cast<LoadStmt>(*iter));
|
|
377
370
|
}
|
|
378
371
|
|
|
379
372
|
// initialize store nodes
|
|
380
|
-
|
|
381
|
-
for (
|
|
373
|
+
SVFStmt::SVFStmtSetTy& stores = getPAGEdgeSet(SVFStmt::Store);
|
|
374
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
|
|
382
375
|
stores.end(); iter != eiter; ++iter)
|
|
383
376
|
{
|
|
384
377
|
addStoreVFGNode(SVFUtil::cast<StoreStmt>(*iter));
|
|
385
378
|
}
|
|
386
379
|
|
|
387
|
-
|
|
388
|
-
for (
|
|
380
|
+
SVFStmt::SVFStmtSetTy& forks = getPAGEdgeSet(SVFStmt::ThreadFork);
|
|
381
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = forks.begin(), eiter =
|
|
389
382
|
forks.end(); iter != eiter; ++iter)
|
|
390
383
|
{
|
|
391
384
|
TDForkPE* forkedge = SVFUtil::cast<TDForkPE>(*iter);
|
|
@@ -429,10 +422,10 @@ void VFG::addVFGNodes()
|
|
|
429
422
|
continue;
|
|
430
423
|
|
|
431
424
|
CallPESet callPEs;
|
|
432
|
-
if (param->hasIncomingEdges(
|
|
425
|
+
if (param->hasIncomingEdges(SVFStmt::Call))
|
|
433
426
|
{
|
|
434
|
-
for (
|
|
435
|
-
param->getIncomingEdgesEnd(
|
|
427
|
+
for (SVFStmt::SVFStmtSetTy::const_iterator cit = param->getIncomingEdgesBegin(SVFStmt::Call), ecit =
|
|
428
|
+
param->getIncomingEdgesEnd(SVFStmt::Call); cit != ecit; ++cit)
|
|
436
429
|
{
|
|
437
430
|
CallPE* callPE = SVFUtil::cast<CallPE>(*cit);
|
|
438
431
|
if (isInterestedPAGNode(callPE->getRHSVar()))
|
|
@@ -449,10 +442,10 @@ void VFG::addVFGNodes()
|
|
|
449
442
|
continue;
|
|
450
443
|
|
|
451
444
|
CallPESet callPEs;
|
|
452
|
-
if (varParam->hasIncomingEdges(
|
|
445
|
+
if (varParam->hasIncomingEdges(SVFStmt::Call))
|
|
453
446
|
{
|
|
454
|
-
for(
|
|
455
|
-
ecit = varParam->getIncomingEdgesEnd(
|
|
447
|
+
for(SVFStmt::SVFStmtSetTy::const_iterator cit = varParam->getIncomingEdgesBegin(SVFStmt::Call),
|
|
448
|
+
ecit = varParam->getIncomingEdgesEnd(SVFStmt::Call); cit!=ecit; ++cit)
|
|
456
449
|
{
|
|
457
450
|
CallPE* callPE = SVFUtil::cast<CallPE>(*cit);
|
|
458
451
|
if(isInterestedPAGNode(callPE->getRHSVar()))
|
|
@@ -471,10 +464,10 @@ void VFG::addVFGNodes()
|
|
|
471
464
|
const PAGNode* uniqueFunRetNode = it->second;
|
|
472
465
|
|
|
473
466
|
RetPESet retPEs;
|
|
474
|
-
if (uniqueFunRetNode->hasOutgoingEdges(
|
|
467
|
+
if (uniqueFunRetNode->hasOutgoingEdges(SVFStmt::Ret))
|
|
475
468
|
{
|
|
476
|
-
for (
|
|
477
|
-
ecit = uniqueFunRetNode->getOutgoingEdgesEnd(
|
|
469
|
+
for (SVFStmt::SVFStmtSetTy::const_iterator cit = uniqueFunRetNode->getOutgoingEdgesBegin(SVFStmt::Ret),
|
|
470
|
+
ecit = uniqueFunRetNode->getOutgoingEdgesEnd(SVFStmt::Ret);
|
|
478
471
|
cit != ecit; ++cit)
|
|
479
472
|
{
|
|
480
473
|
const RetPE* retPE = SVFUtil::cast<RetPE>(*cit);
|
|
@@ -488,8 +481,8 @@ void VFG::addVFGNodes()
|
|
|
488
481
|
}
|
|
489
482
|
|
|
490
483
|
// initialize llvm phi nodes (phi of top level pointers)
|
|
491
|
-
|
|
492
|
-
for (
|
|
484
|
+
SVFStmt::SVFStmtSetTy& phis = getPAGEdgeSet(SVFStmt::Phi);
|
|
485
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = phis.begin(), eiter =
|
|
493
486
|
phis.end(); iter != eiter; ++iter)
|
|
494
487
|
{
|
|
495
488
|
const PhiStmt* edge = SVFUtil::cast<PhiStmt>(*iter);
|
|
@@ -497,8 +490,8 @@ void VFG::addVFGNodes()
|
|
|
497
490
|
addIntraPHIVFGNode(edge);
|
|
498
491
|
}
|
|
499
492
|
// initialize llvm binary nodes (binary operators)
|
|
500
|
-
|
|
501
|
-
for (
|
|
493
|
+
SVFStmt::SVFStmtSetTy& binaryops = getPAGEdgeSet(SVFStmt::BinaryOp);
|
|
494
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = binaryops.begin(), eiter =
|
|
502
495
|
binaryops.end(); iter != eiter; ++iter)
|
|
503
496
|
{
|
|
504
497
|
const BinaryOPStmt* edge = SVFUtil::cast<BinaryOPStmt>(*iter);
|
|
@@ -506,8 +499,8 @@ void VFG::addVFGNodes()
|
|
|
506
499
|
addBinaryOPVFGNode(edge);
|
|
507
500
|
}
|
|
508
501
|
// initialize llvm unary nodes (unary operators)
|
|
509
|
-
|
|
510
|
-
for (
|
|
502
|
+
SVFStmt::SVFStmtSetTy& unaryops = getPAGEdgeSet(SVFStmt::UnaryOp);
|
|
503
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = unaryops.begin(), eiter =
|
|
511
504
|
unaryops.end(); iter != eiter; ++iter)
|
|
512
505
|
{
|
|
513
506
|
const UnaryOPStmt* edge = SVFUtil::cast<UnaryOPStmt>(*iter);
|
|
@@ -515,8 +508,8 @@ void VFG::addVFGNodes()
|
|
|
515
508
|
addUnaryOPVFGNode(edge);
|
|
516
509
|
}
|
|
517
510
|
// initialize llvm unary nodes (unary operators)
|
|
518
|
-
|
|
519
|
-
for (
|
|
511
|
+
SVFStmt::SVFStmtSetTy& brs = getPAGEdgeSet(SVFStmt::Branch);
|
|
512
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = brs.begin(), eiter =
|
|
520
513
|
brs.end(); iter != eiter; ++iter)
|
|
521
514
|
{
|
|
522
515
|
const BranchStmt* edge = SVFUtil::cast<BranchStmt>(*iter);
|
|
@@ -524,8 +517,8 @@ void VFG::addVFGNodes()
|
|
|
524
517
|
addBranchVFGNode(edge);
|
|
525
518
|
}
|
|
526
519
|
// initialize llvm cmp nodes (comparision)
|
|
527
|
-
|
|
528
|
-
for (
|
|
520
|
+
SVFStmt::SVFStmtSetTy& cmps = getPAGEdgeSet(SVFStmt::Cmp);
|
|
521
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = cmps.begin(), eiter =
|
|
529
522
|
cmps.end(); iter != eiter; ++iter)
|
|
530
523
|
{
|
|
531
524
|
const CmpStmt* edge = SVFUtil::cast<CmpStmt>(*iter);
|
|
@@ -692,8 +685,8 @@ void VFG::connectDirectVFGEdges()
|
|
|
692
685
|
/// connect direct value-flow edges (parameter passing) for thread fork/join
|
|
693
686
|
if(Options::EnableThreadCallGraph){
|
|
694
687
|
/// add fork edge
|
|
695
|
-
|
|
696
|
-
for (
|
|
688
|
+
SVFStmt::SVFStmtSetTy& forks = getPAGEdgeSet(SVFStmt::ThreadFork);
|
|
689
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = forks.begin(), eiter =
|
|
697
690
|
forks.end(); iter != eiter; ++iter)
|
|
698
691
|
{
|
|
699
692
|
TDForkPE* forkedge = SVFUtil::cast<TDForkPE>(*iter);
|
|
@@ -702,8 +695,8 @@ void VFG::connectDirectVFGEdges()
|
|
|
702
695
|
addInterEdgeFromAPToFP(acutalParm,formalParm,getCallSiteID(forkedge->getCallSite(), formalParm->getFun()));
|
|
703
696
|
}
|
|
704
697
|
/// add join edge
|
|
705
|
-
|
|
706
|
-
for (
|
|
698
|
+
SVFStmt::SVFStmtSetTy& joins = getPAGEdgeSet(SVFStmt::ThreadJoin);
|
|
699
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = joins.begin(), eiter =
|
|
707
700
|
joins.end(); iter != eiter; ++iter)
|
|
708
701
|
{
|
|
709
702
|
TDJoinPE* joinedge = SVFUtil::cast<TDJoinPE>(*iter);
|
package/lib/MTA/MTAAnnotator.cpp
CHANGED
|
@@ -122,8 +122,8 @@ void MTAAnnotator::pruneThreadLocal(PointerAnalysis* pta)
|
|
|
122
122
|
PointsTo worklist;
|
|
123
123
|
|
|
124
124
|
/// find fork arguments' objects
|
|
125
|
-
const
|
|
126
|
-
for (
|
|
125
|
+
const SVFStmt::SVFStmtSetTy& forkedges = pag->getPTASVFStmtSet(SVFStmt::ThreadFork);
|
|
126
|
+
for (SVFStmt::SVFStmtSetTy::const_iterator it = forkedges.begin(), eit = forkedges.end(); it != eit; ++it)
|
|
127
127
|
{
|
|
128
128
|
PAGEdge* edge = *it;
|
|
129
129
|
worklist |= pta->getPts(edge->getDstID());
|
|
@@ -135,7 +135,7 @@ void MTAAnnotator::pruneThreadLocal(PointerAnalysis* pta)
|
|
|
135
135
|
for (SVFIR::SVFStmtSet::const_iterator it = globaledges.begin(), eit = globaledges.end(); it != eit; ++it)
|
|
136
136
|
{
|
|
137
137
|
const PAGEdge* edge = *it;
|
|
138
|
-
if (edge->getEdgeKind() ==
|
|
138
|
+
if (edge->getEdgeKind() == SVFStmt::Addr)
|
|
139
139
|
{
|
|
140
140
|
worklist.set(edge->getSrcID());
|
|
141
141
|
}
|
|
@@ -154,7 +154,7 @@ void BVDataPTAImpl::writeToFile(const string& filename)
|
|
|
154
154
|
{
|
|
155
155
|
F.os() << it->first << " ";
|
|
156
156
|
F.os() << pag->getBaseObjVar(it->first) << " ";
|
|
157
|
-
F.os() << gepObjPN->
|
|
157
|
+
F.os() << gepObjPN->getConstantFieldIdx() << "\n";
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
160
|
|
|
@@ -312,7 +312,7 @@ GepStmt* SVFIR::addGepStmt(NodeID src, NodeID dst, const LocationSet& ls, bool c
|
|
|
312
312
|
if (!constGep || node->hasIncomingVariantGepEdge())
|
|
313
313
|
{
|
|
314
314
|
/// Since the offset from base to src is variant,
|
|
315
|
-
/// the new gep edge being created is also a
|
|
315
|
+
/// the new gep edge being created is also a Variant GepStmt edge.
|
|
316
316
|
return addVariantGepStmt(src, dst, ls);
|
|
317
317
|
}
|
|
318
318
|
else
|
|
@@ -324,16 +324,16 @@ GepStmt* SVFIR::addGepStmt(NodeID src, NodeID dst, const LocationSet& ls, bool c
|
|
|
324
324
|
/*!
|
|
325
325
|
* Add normal (Gep) edge
|
|
326
326
|
*/
|
|
327
|
-
|
|
327
|
+
GepStmt* SVFIR::addNormalGepStmt(NodeID src, NodeID dst, const LocationSet& ls)
|
|
328
328
|
{
|
|
329
329
|
const LocationSet& baseLS = getLocationSetFromBaseNode(src);
|
|
330
330
|
SVFVar* baseNode = getGNode(getBaseValVar(src));
|
|
331
331
|
SVFVar* dstNode = getGNode(dst);
|
|
332
|
-
if(SVFStmt* edge = hasNonlabeledEdge(baseNode, dstNode, SVFStmt::
|
|
333
|
-
return SVFUtil::cast<
|
|
332
|
+
if(SVFStmt* edge = hasNonlabeledEdge(baseNode, dstNode, SVFStmt::Gep))
|
|
333
|
+
return SVFUtil::cast<GepStmt>(edge);
|
|
334
334
|
else
|
|
335
335
|
{
|
|
336
|
-
|
|
336
|
+
GepStmt* gepPE = new GepStmt(baseNode, dstNode, baseLS+ls);
|
|
337
337
|
addToStmt2TypeMap(gepPE);
|
|
338
338
|
addEdge(baseNode, dstNode, gepPE);
|
|
339
339
|
return gepPE;
|
|
@@ -344,16 +344,16 @@ NormalGepStmt* SVFIR::addNormalGepStmt(NodeID src, NodeID dst, const LocationSet
|
|
|
344
344
|
* Add variant(Gep) edge
|
|
345
345
|
* Find the base node id of src and connect base node to dst node
|
|
346
346
|
*/
|
|
347
|
-
|
|
347
|
+
GepStmt* SVFIR::addVariantGepStmt(NodeID src, NodeID dst, const LocationSet& ls)
|
|
348
348
|
{
|
|
349
349
|
const LocationSet& baseLS = getLocationSetFromBaseNode(src);
|
|
350
350
|
SVFVar* baseNode = getGNode(getBaseValVar(src));
|
|
351
351
|
SVFVar* dstNode = getGNode(dst);
|
|
352
|
-
if(SVFStmt* edge = hasNonlabeledEdge(baseNode, dstNode, SVFStmt::
|
|
353
|
-
return SVFUtil::cast<
|
|
352
|
+
if(SVFStmt* edge = hasNonlabeledEdge(baseNode, dstNode, SVFStmt::Gep))
|
|
353
|
+
return SVFUtil::cast<GepStmt>(edge);
|
|
354
354
|
else
|
|
355
355
|
{
|
|
356
|
-
|
|
356
|
+
GepStmt* gepPE = new GepStmt(baseNode, dstNode,baseLS+ls, true);
|
|
357
357
|
addToStmt2TypeMap(gepPE);
|
|
358
358
|
addEdge(baseNode, dstNode, gepPE);
|
|
359
359
|
return gepPE;
|
|
@@ -500,18 +500,13 @@ NodeBS SVFIR::getFieldsAfterCollapse(NodeID id)
|
|
|
500
500
|
NodeID SVFIR::getBaseValVar(NodeID nodeId)
|
|
501
501
|
{
|
|
502
502
|
SVFVar* node = getGNode(nodeId);
|
|
503
|
-
if (node->hasIncomingEdges(SVFStmt::
|
|
503
|
+
if (node->hasIncomingEdges(SVFStmt::Gep))
|
|
504
504
|
{
|
|
505
|
-
SVFStmt::SVFStmtSetTy&
|
|
506
|
-
SVFStmt::SVFStmtSetTy& vgeps = node->getIncomingEdges(SVFStmt::VariantGep);
|
|
505
|
+
SVFStmt::SVFStmtSetTy& geps = node->getIncomingEdges(SVFStmt::Gep);
|
|
507
506
|
|
|
508
|
-
assert((
|
|
507
|
+
assert((geps.size()==1) && "one node can only be connected by at most one gep edge!");
|
|
509
508
|
|
|
510
|
-
SVFVar::iterator it;
|
|
511
|
-
if(!ngeps.empty())
|
|
512
|
-
it = ngeps.begin();
|
|
513
|
-
else
|
|
514
|
-
it = vgeps.begin();
|
|
509
|
+
SVFVar::iterator it = geps.begin();
|
|
515
510
|
|
|
516
511
|
assert(SVFUtil::isa<GepStmt>(*it) && "not a gep edge??");
|
|
517
512
|
return (*it)->getSrcID();
|
|
@@ -529,17 +524,18 @@ NodeID SVFIR::getBaseValVar(NodeID nodeId)
|
|
|
529
524
|
LocationSet SVFIR::getLocationSetFromBaseNode(NodeID nodeId)
|
|
530
525
|
{
|
|
531
526
|
SVFVar* node = getGNode(nodeId);
|
|
532
|
-
SVFStmt::SVFStmtSetTy& geps = node->getIncomingEdges(SVFStmt::
|
|
527
|
+
SVFStmt::SVFStmtSetTy& geps = node->getIncomingEdges(SVFStmt::Gep);
|
|
533
528
|
/// if this node is already a base node
|
|
534
529
|
if(geps.empty())
|
|
535
530
|
return LocationSet(0);
|
|
536
531
|
|
|
537
532
|
assert(geps.size()==1 && "one node can only be connected by at most one gep edge!");
|
|
538
533
|
SVFVar::iterator it = geps.begin();
|
|
539
|
-
const
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
534
|
+
const GepStmt* gepEdge = SVFUtil::cast<GepStmt>(*it);
|
|
535
|
+
if(gepEdge->isVariantFieldGep())
|
|
536
|
+
return LocationSet(0);
|
|
537
|
+
else
|
|
538
|
+
return gepEdge->getLocationSet();
|
|
543
539
|
}
|
|
544
540
|
|
|
545
541
|
/*!
|
|
@@ -606,21 +602,17 @@ void SVFIR::print()
|
|
|
606
602
|
<< (*iter)->getDstID() << "\n";
|
|
607
603
|
}
|
|
608
604
|
|
|
609
|
-
SVFStmt::SVFStmtSetTy& ngeps = pag->getSVFStmtSet(SVFStmt::
|
|
605
|
+
SVFStmt::SVFStmtSetTy& ngeps = pag->getSVFStmtSet(SVFStmt::Gep);
|
|
610
606
|
for (SVFStmt::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =
|
|
611
607
|
ngeps.end(); iter != eiter; ++iter)
|
|
612
608
|
{
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
SVFStmt::SVFStmtSetTy& vgeps = pag->getSVFStmtSet(SVFStmt::VariantGep);
|
|
619
|
-
for (SVFStmt::SVFStmtSetTy::iterator iter = vgeps.begin(), eiter =
|
|
620
|
-
vgeps.end(); iter != eiter; ++iter)
|
|
621
|
-
{
|
|
622
|
-
outs() << (*iter)->getSrcID() << " -- VariantGep --> "
|
|
609
|
+
GepStmt* gep = SVFUtil::cast<GepStmt>(*iter);
|
|
610
|
+
if(gep->isVariantFieldGep())
|
|
611
|
+
outs() << (*iter)->getSrcID() << " -- VariantGep --> "
|
|
623
612
|
<< (*iter)->getDstID() << "\n";
|
|
613
|
+
else
|
|
614
|
+
outs() << gep->getRHSVarID() << " -- Gep (" << gep->getConstantFieldIdx()
|
|
615
|
+
<< ") --> " << gep->getLHSVarID() << "\n";
|
|
624
616
|
}
|
|
625
617
|
|
|
626
618
|
SVFStmt::SVFStmtSetTy& loads = pag->getSVFStmtSet(SVFStmt::Load);
|
|
@@ -186,28 +186,6 @@ const std::string GepStmt::toString() const{
|
|
|
186
186
|
return rawstr.str();
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
-
const std::string NormalGepStmt::toString() const{
|
|
190
|
-
std::string str;
|
|
191
|
-
raw_string_ostream rawstr(str);
|
|
192
|
-
rawstr << "NormalGepStmt: [Var" << getLHSVarID() << " <-- Var" << getRHSVarID() << "]\t";
|
|
193
|
-
if (Options::ShowSVFIRValue) {
|
|
194
|
-
rawstr << "\n";
|
|
195
|
-
rawstr << value2String(getValue());
|
|
196
|
-
}
|
|
197
|
-
return rawstr.str();
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
const std::string VariantGepStmt::toString() const{
|
|
201
|
-
std::string str;
|
|
202
|
-
raw_string_ostream rawstr(str);
|
|
203
|
-
rawstr << "VariantGepStmt: [Var" << getLHSVarID() << " <-- Var" << getRHSVarID() << "]\t";
|
|
204
|
-
if (Options::ShowSVFIRValue) {
|
|
205
|
-
rawstr << "\n";
|
|
206
|
-
rawstr << value2String(getValue());
|
|
207
|
-
}
|
|
208
|
-
return rawstr.str();
|
|
209
|
-
}
|
|
210
|
-
|
|
211
189
|
const std::string CallPE::toString() const{
|
|
212
190
|
std::string str;
|
|
213
191
|
raw_string_ostream rawstr(str);
|
|
@@ -133,7 +133,7 @@ const std::string ObjVar::toString() const {
|
|
|
133
133
|
const std::string GepValVar::toString() const {
|
|
134
134
|
std::string str;
|
|
135
135
|
raw_string_ostream rawstr(str);
|
|
136
|
-
rawstr << "GepValVar ID: " << getId() << " with offset_" + llvm::utostr(
|
|
136
|
+
rawstr << "GepValVar ID: " << getId() << " with offset_" + llvm::utostr(getConstantFieldIdx());
|
|
137
137
|
if (Options::ShowSVFIRValue) {
|
|
138
138
|
rawstr << "\n";
|
|
139
139
|
rawstr << value2String(value);
|
|
@@ -582,7 +582,7 @@ bool ObjTypeInfo::isNonPtrFieldObj(const LocationSet& ls)
|
|
|
582
582
|
// as we simply return new offset by mod operation without checking its
|
|
583
583
|
// correctness in LocSymTableInfo::getModulusOffset(). So the following
|
|
584
584
|
// assertion may fail. Try to refine the new memory model.
|
|
585
|
-
//assert(ls.
|
|
585
|
+
//assert(ls.getConstantFieldIdx() == 0 && "cannot get a field from a non-struct type");
|
|
586
586
|
return (hasPtrObj() == false);
|
|
587
587
|
}
|
|
588
588
|
}
|
package/lib/SVF-FE/DCHG.cpp
CHANGED
|
@@ -103,7 +103,7 @@ void DCHGraph::handleDIDerivedType(const DIDerivedType *derivedType)
|
|
|
103
103
|
assert(SVFUtil::isa<DIType>(derivedType->getScope()) && "inheriting from non-type?");
|
|
104
104
|
DCHEdge *edge = addEdge(SVFUtil::dyn_cast<DIType>(derivedType->getScope()),
|
|
105
105
|
derivedType->getBaseType(), DCHEdge::INHERITANCE);
|
|
106
|
-
// If the offset does not exist (for primary base),
|
|
106
|
+
// If the offset does not exist (for primary base), getConstantFieldIdx should return 0.
|
|
107
107
|
edge->setOffset(derivedType->getOffsetInBits());
|
|
108
108
|
break;
|
|
109
109
|
}
|
|
@@ -50,10 +50,10 @@ void ICFGPrinter::printICFGToJson(const std::string& filename)
|
|
|
50
50
|
edge_obj["Edge Type"] = getPAGEdgeKindValue(edge->getEdgeKind());
|
|
51
51
|
edge_obj["srcValueName"] = edge->getSrcNode()->getValueName();
|
|
52
52
|
edge_obj["dstValueName"] = edge->getDstNode()->getValueName();
|
|
53
|
-
if(edge->getEdgeKind()==
|
|
53
|
+
if(edge->getEdgeKind()==SVFStmt::Gep)
|
|
54
54
|
{
|
|
55
|
-
const
|
|
56
|
-
edge_obj["offset"] = gepEdge->
|
|
55
|
+
const GepStmt* gepEdge = SVFUtil::cast<GepStmt>(edge);
|
|
56
|
+
edge_obj["offset"] = gepEdge->getConstantFieldIdx();
|
|
57
57
|
}
|
|
58
58
|
llvm::json::Value edge_value = llvm::json::Object{edge_obj};
|
|
59
59
|
PAGEdge_array.push_back(edge_value);
|
|
@@ -169,31 +169,31 @@ std::string ICFGPrinter::getPAGNodeKindValue(int kind)
|
|
|
169
169
|
{
|
|
170
170
|
switch (kind)
|
|
171
171
|
{
|
|
172
|
-
case (
|
|
172
|
+
case (SVFVar::ValNode):
|
|
173
173
|
return "ValNode";
|
|
174
174
|
break;
|
|
175
|
-
case
|
|
175
|
+
case SVFVar::ObjNode:
|
|
176
176
|
return "ObjNode";
|
|
177
177
|
break;
|
|
178
|
-
case
|
|
178
|
+
case SVFVar::RetNode:
|
|
179
179
|
return "RetNode";
|
|
180
180
|
break;
|
|
181
|
-
case
|
|
181
|
+
case SVFVar::VarargNode:
|
|
182
182
|
return "VarargNode";
|
|
183
183
|
break;
|
|
184
|
-
case
|
|
184
|
+
case SVFVar::GepValNode:
|
|
185
185
|
return "GepValNode";
|
|
186
186
|
break;
|
|
187
|
-
case
|
|
187
|
+
case SVFVar::GepObjNode:
|
|
188
188
|
return "GepObjNode";
|
|
189
189
|
break;
|
|
190
|
-
case
|
|
190
|
+
case SVFVar::FIObjNode:
|
|
191
191
|
return "FIObjNode";
|
|
192
192
|
break;
|
|
193
|
-
case
|
|
193
|
+
case SVFVar::DummyValNode:
|
|
194
194
|
return "DummyValNode";
|
|
195
195
|
break;
|
|
196
|
-
case
|
|
196
|
+
case SVFVar::DummyObjNode:
|
|
197
197
|
return "DummyObjNode";
|
|
198
198
|
break;
|
|
199
199
|
}
|
|
@@ -204,43 +204,40 @@ std::string ICFGPrinter::getPAGEdgeKindValue(int kind)
|
|
|
204
204
|
{
|
|
205
205
|
switch(kind)
|
|
206
206
|
{
|
|
207
|
-
case (
|
|
207
|
+
case (SVFStmt::Addr):
|
|
208
208
|
return "Addr";
|
|
209
209
|
break;
|
|
210
|
-
case (
|
|
210
|
+
case (SVFStmt::Copy):
|
|
211
211
|
return "Copy";
|
|
212
212
|
break;
|
|
213
|
-
case (
|
|
213
|
+
case (SVFStmt::Store):
|
|
214
214
|
return "Store";
|
|
215
215
|
break;
|
|
216
|
-
case (
|
|
216
|
+
case (SVFStmt::Load):
|
|
217
217
|
return "Load";
|
|
218
218
|
break;
|
|
219
|
-
case (
|
|
219
|
+
case (SVFStmt::Call):
|
|
220
220
|
return "Call";
|
|
221
221
|
break;
|
|
222
|
-
case (
|
|
222
|
+
case (SVFStmt::Ret):
|
|
223
223
|
return "Ret";
|
|
224
224
|
break;
|
|
225
|
-
case (
|
|
225
|
+
case (SVFStmt::Gep):
|
|
226
226
|
return "NormalGep";
|
|
227
227
|
break;
|
|
228
|
-
case (
|
|
229
|
-
return "VariantGep";
|
|
230
|
-
break;
|
|
231
|
-
case (PAGEdge::ThreadFork):
|
|
228
|
+
case (SVFStmt::ThreadFork):
|
|
232
229
|
return "ThreadFork";
|
|
233
230
|
break;
|
|
234
|
-
case (
|
|
231
|
+
case (SVFStmt::ThreadJoin):
|
|
235
232
|
return "ThreadJoin";
|
|
236
233
|
break;
|
|
237
|
-
case (
|
|
234
|
+
case (SVFStmt::Cmp):
|
|
238
235
|
return "Cmp";
|
|
239
236
|
break;
|
|
240
|
-
case (
|
|
237
|
+
case (SVFStmt::BinaryOp):
|
|
241
238
|
return "BinaryOp";
|
|
242
239
|
break;
|
|
243
|
-
case (
|
|
240
|
+
case (SVFStmt::UnaryOp):
|
|
244
241
|
return "UnaryOp";
|
|
245
242
|
break;
|
|
246
243
|
}
|
package/lib/Util/PTAStat.cpp
CHANGED
|
@@ -48,7 +48,7 @@ const char* PTAStat:: TotalNumOfPointers = "TotalPointers"; ///< SVFIR value nod
|
|
|
48
48
|
const char* PTAStat:: TotalNumOfObjects = "TotalObjects"; ///< Total SVFIR object node
|
|
49
49
|
const char* PTAStat:: TotalNumOfFieldObjects = "TotalFieldObjects"; ///< Total SVFIR field object node
|
|
50
50
|
const char* PTAStat:: MaxStructSize = "MaxStructSize"; ///< Max struct size (bytes)
|
|
51
|
-
const char* PTAStat:: TotalNumOfEdges = "
|
|
51
|
+
const char* PTAStat:: TotalNumOfEdges = "TotalSVFStmts"; ///< Total SVFIR edge number
|
|
52
52
|
|
|
53
53
|
const char* PTAStat:: NumOfFunctionObjs = "FunctionObjs"; ///< function numbers
|
|
54
54
|
const char* PTAStat:: NumOfGlobalObjs = "GlobalObjs"; ///< SVFIR global object node
|
|
@@ -198,17 +198,17 @@ void PTAStat::performStat()
|
|
|
198
198
|
generalNumMap[TotalNumOfFieldObjects] = pag->getFieldObjNodeNum();
|
|
199
199
|
generalNumMap[MaxStructSize] = SymbolTableInfo::SymbolInfo()->getMaxStructSize();
|
|
200
200
|
generalNumMap[TotalNumOfEdges] = pag->getPAGEdgeNum();
|
|
201
|
-
generalNumMap["
|
|
201
|
+
generalNumMap["TotalPTASVFStmts"] = pag->getPTAPAGEdgeNum();
|
|
202
202
|
generalNumMap[NumberOfFieldInsensitiveObj] = fiObjNumber;
|
|
203
203
|
generalNumMap[NumberOfFieldSensitiveObj] = fsObjNumber;
|
|
204
204
|
|
|
205
|
-
generalNumMap[NumOfAddrs] = pag->getSVFStmtSet(
|
|
206
|
-
generalNumMap[NumOfLoads] = pag->getSVFStmtSet(
|
|
207
|
-
generalNumMap[NumOfStores] = pag->getSVFStmtSet(
|
|
208
|
-
generalNumMap[NumOfCopys] = pag->getSVFStmtSet(
|
|
209
|
-
generalNumMap[NumOfGeps] = pag->getSVFStmtSet(
|
|
210
|
-
generalNumMap[NumOfCalls] = pag->getSVFStmtSet(
|
|
211
|
-
generalNumMap[NumOfReturns] = pag->getSVFStmtSet(
|
|
205
|
+
generalNumMap[NumOfAddrs] = pag->getSVFStmtSet(SVFStmt::Addr).size();
|
|
206
|
+
generalNumMap[NumOfLoads] = pag->getSVFStmtSet(SVFStmt::Load).size();
|
|
207
|
+
generalNumMap[NumOfStores] = pag->getSVFStmtSet(SVFStmt::Store).size();
|
|
208
|
+
generalNumMap[NumOfCopys] = pag->getSVFStmtSet(SVFStmt::Copy).size();
|
|
209
|
+
generalNumMap[NumOfGeps] = pag->getSVFStmtSet(SVFStmt::Gep).size();
|
|
210
|
+
generalNumMap[NumOfCalls] = pag->getSVFStmtSet(SVFStmt::Call).size();
|
|
211
|
+
generalNumMap[NumOfReturns] = pag->getSVFStmtSet(SVFStmt::Ret).size();
|
|
212
212
|
|
|
213
213
|
generalNumMap[NumOfFunctionObjs] = numOfFunction;
|
|
214
214
|
generalNumMap[NumOfGlobalObjs] = numOfGlobal;
|
|
@@ -155,7 +155,7 @@ const NodeBS TypeBasedHeapCloning::getGepObjClones(NodeID base, unsigned offset)
|
|
|
155
155
|
s64_t totalOffset = offset;
|
|
156
156
|
if (const GepObjVar *baseGep = SVFUtil::dyn_cast<GepObjVar>(baseNode))
|
|
157
157
|
{
|
|
158
|
-
totalOffset += baseGep->
|
|
158
|
+
totalOffset += baseGep->getConstantFieldIdx();
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
const DIType *baseType = getType(base);
|
|
@@ -189,7 +189,7 @@ const NodeBS TypeBasedHeapCloning::getGepObjClones(NodeID base, unsigned offset)
|
|
|
189
189
|
|
|
190
190
|
if (GepObjVar *gepNode = SVFUtil::dyn_cast<GepObjVar>(node))
|
|
191
191
|
{
|
|
192
|
-
if (gepNode->
|
|
192
|
+
if (gepNode->getConstantFieldIdx() == totalOffset)
|
|
193
193
|
{
|
|
194
194
|
geps.set(gep);
|
|
195
195
|
}
|
|
@@ -211,7 +211,7 @@ const NodeBS TypeBasedHeapCloning::getGepObjClones(NodeID base, unsigned offset)
|
|
|
211
211
|
// No gep node has even be created, so create one.
|
|
212
212
|
NodeID newGep;
|
|
213
213
|
LocationSet newLS;
|
|
214
|
-
// fldIdx is what is returned by
|
|
214
|
+
// fldIdx is what is returned by getConstantFieldIdx.
|
|
215
215
|
newLS.setFldIdx(totalOffset);
|
|
216
216
|
|
|
217
217
|
if (isClone(base))
|
|
@@ -414,7 +414,7 @@ NodeID TypeBasedHeapCloning::cloneObject(NodeID o, const DIType *type, bool)
|
|
|
414
414
|
const PAGNode *obj = ppag->getGNode(o);
|
|
415
415
|
if (const GepObjVar *gepObj = SVFUtil::dyn_cast<GepObjVar>(obj))
|
|
416
416
|
{
|
|
417
|
-
const NodeBS &clones = getGepObjClones(gepObj->getBaseNode(), gepObj->
|
|
417
|
+
const NodeBS &clones = getGepObjClones(gepObj->getBaseNode(), gepObj->getConstantFieldIdx());
|
|
418
418
|
// TODO: a bit of repetition.
|
|
419
419
|
for (NodeID clone : clones)
|
|
420
420
|
{
|
|
@@ -427,7 +427,7 @@ NodeID TypeBasedHeapCloning::cloneObject(NodeID o, const DIType *type, bool)
|
|
|
427
427
|
clone = addCloneGepObjNode(gepObj->getMemObj(), gepObj->getLocationSet());
|
|
428
428
|
|
|
429
429
|
// The base needs to know about the new clone.
|
|
430
|
-
addGepToObj(clone, gepObj->getBaseNode(), gepObj->
|
|
430
|
+
addGepToObj(clone, gepObj->getBaseNode(), gepObj->getConstantFieldIdx());
|
|
431
431
|
|
|
432
432
|
addClone(o, clone);
|
|
433
433
|
addClone(getOriginalObj(o), clone);
|
package/lib/WPA/AndersenSFR.cpp
CHANGED
|
@@ -96,7 +96,7 @@ bool AndersenSFR::processGepPts(PointsTo& pts, const GepCGEdge* edge)
|
|
|
96
96
|
for (NodeID ptd : srcInits)
|
|
97
97
|
sortSrcInits.insert(ptd);
|
|
98
98
|
|
|
99
|
-
s64_t offset = SVFUtil::dyn_cast<NormalGepCGEdge>(edge)->
|
|
99
|
+
s64_t offset = SVFUtil::dyn_cast<NormalGepCGEdge>(edge)->getConstantFieldIdx();
|
|
100
100
|
fieldExpand(sortSrcInits, offset, dst->strides, tmpDstPts);
|
|
101
101
|
}
|
|
102
102
|
|
|
@@ -134,7 +134,7 @@ void AndersenSFR::fieldExpand(NodeSet& initials, s64_t offset, NodeBS& strides,
|
|
|
134
134
|
const u32_t maxLimit = obj->getMaxFieldOffsetLimit();
|
|
135
135
|
s64_t initOffset;
|
|
136
136
|
if (GepObjVar *gepNode = SVFUtil::dyn_cast<GepObjVar>(initPN))
|
|
137
|
-
initOffset = gepNode->
|
|
137
|
+
initOffset = gepNode->getConstantFieldIdx();
|
|
138
138
|
else if (SVFUtil::isa<FIObjVar>(initPN) || SVFUtil::isa<DummyObjVar>(initPN))
|
|
139
139
|
initOffset = 0;
|
|
140
140
|
else
|
package/lib/WPA/AndersenStat.cpp
CHANGED
|
@@ -228,8 +228,8 @@ void AndersenStat::statNullPtr()
|
|
|
228
228
|
PAGNode* pagNode = iter->second;
|
|
229
229
|
if (pagNode->isTopLevelPtr() == false)
|
|
230
230
|
continue;
|
|
231
|
-
|
|
232
|
-
|
|
231
|
+
SVFStmt::SVFStmtSetTy& inComingStore = pagNode->getIncomingEdges(SVFStmt::Store);
|
|
232
|
+
SVFStmt::SVFStmtSetTy& outGoingLoad = pagNode->getOutgoingEdges(SVFStmt::Load);
|
|
233
233
|
if (inComingStore.empty()==false || outGoingLoad.empty()==false)
|
|
234
234
|
{
|
|
235
235
|
///TODO: change the condition here to fetch the points-to set
|
package/lib/WPA/CSC.cpp
CHANGED
|
@@ -87,7 +87,7 @@ void CSC::visit(NodeID nodeId, s64_t _w)
|
|
|
87
87
|
{
|
|
88
88
|
s64_t offset;
|
|
89
89
|
if (NormalGepCGEdge* gepCGEdge = SVFUtil::dyn_cast<NormalGepCGEdge>(*eit))
|
|
90
|
-
offset = gepCGEdge->
|
|
90
|
+
offset = gepCGEdge->getConstantFieldIdx();
|
|
91
91
|
else
|
|
92
92
|
offset = 0;
|
|
93
93
|
NodeID dstId = (*eit)->getDstID();
|
|
@@ -107,7 +107,7 @@ void CSC::visit(NodeID nodeId, s64_t _w)
|
|
|
107
107
|
if (_consG->hasEdge(node, backNode, ConstraintEdge::NormalGep))
|
|
108
108
|
{
|
|
109
109
|
NormalGepCGEdge* normalGep = SVFUtil::dyn_cast<NormalGepCGEdge>(_consG->getEdge(node, backNode, ConstraintEdge::NormalGep));
|
|
110
|
-
s64_t _w = normalGep->
|
|
110
|
+
s64_t _w = normalGep->getConstantFieldIdx();
|
|
111
111
|
s64_t _l = _D[nodeId] +_w - _D[backNodeId];
|
|
112
112
|
backNode->strides.set(_l);
|
|
113
113
|
for (auto cNodeId : _C)
|