svf-tools 1.0.317 → 1.0.321
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/AndersenStat_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/Andersen_8cpp.html +1 -1
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp.html +138 -0
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +178 -0
- package/SVF-doxygen/html/html/CHGBuilder_8h.html +95 -0
- package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +109 -0
- package/SVF-doxygen/html/html/CHG_8cpp.html +10 -64
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +31 -108
- package/SVF-doxygen/html/html/CHG_8h.html +9 -3
- package/SVF-doxygen/html/html/CHG_8h_source.html +82 -76
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +37 -33
- package/SVF-doxygen/html/html/ConsG_8h_source.html +32 -32
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DCHG_8h.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8h_source.html +8 -8
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +5 -5
- 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/DDAStat_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +12 -12
- package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ExternalPAG_8cpp.html +1 -1
- package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +22 -22
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +4 -4
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +6 -6
- package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/GenericGraph_8h_source.html +3 -3
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +20 -21
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +37 -40
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/OfflineConsG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +5 -5
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp.html +1 -2
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +30 -33
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +31 -31
- package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +48 -48
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +36 -36
- package/SVF-doxygen/html/html/SVFG_8h_source.html +25 -25
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp.html +0 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +5 -6
- package/SVF-doxygen/html/html/SVFIRBuilder_8h.html +1 -7
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +90 -85
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +70 -62
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +168 -182
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +39 -23
- package/SVF-doxygen/html/html/SVFStatements_8h.html +6 -0
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +146 -94
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TCT_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/VFGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VFGNode_8h.html +2 -0
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +143 -126
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +136 -129
- package/SVF-doxygen/html/html/VFG_8h_source.html +144 -133
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/annotated.html +265 -261
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +75 -74
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +75 -74
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +73 -72
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +31 -30
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +75 -74
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +35 -34
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AddrPE-members.html +42 -39
- package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +27 -22
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode-members.html +77 -76
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode-members.html +69 -68
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +30 -29
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE-members.html +49 -28
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +295 -34
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode-members.html +76 -75
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +12 -11
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +70 -22
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +633 -89
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode-members.html +164 -0
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +694 -0
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CHEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHEdge.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder-members.html +100 -0
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +777 -0
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +31 -46
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +103 -651
- package/SVF-doxygen/html/html/classSVF_1_1CHNode.html +54 -54
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +48 -45
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +33 -28
- package/SVF-doxygen/html/html/classSVF_1_1CmpPE-members.html +49 -28
- package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +295 -34
- package/SVF-doxygen/html/html/classSVF_1_1CmpPE.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode-members.html +79 -78
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +13 -12
- package/SVF-doxygen/html/html/classSVF_1_1CommonCHGraph.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +90 -86
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1CopyCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CopyPE-members.html +45 -42
- package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +27 -22
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode-members.html +80 -79
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +11 -10
- package/SVF-doxygen/html/html/classSVF_1_1DCHEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode-members.html +72 -71
- package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +76 -75
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +76 -75
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode-members.html +76 -75
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +38 -37
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode-members.html +79 -78
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +38 -37
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +8 -7
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GepPE-members.html +45 -42
- package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +22 -17
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode-members.html +80 -79
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph-members.html +36 -37
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +149 -163
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +88 -87
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +86 -85
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +46 -45
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode-members.html +85 -84
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode-members.html +84 -83
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +33 -32
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LoadCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LoadCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LoadPE-members.html +45 -42
- package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +27 -22
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode-members.html +80 -79
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +11 -10
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode-members.html +70 -69
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode-members.html +81 -80
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +143 -0
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +669 -0
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE-members.html +47 -44
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE.html +34 -29
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode-members.html +66 -65
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +37 -36
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +17 -16
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode-members.html +77 -76
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +44 -43
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1PhiPE-members.html +153 -0
- package/SVF-doxygen/html/html/classSVF_1_1PhiPE.html +717 -0
- package/SVF-doxygen/html/html/classSVF_1_1PhiPE.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +77 -79
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +48 -45
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +33 -28
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +90 -86
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +81 -71
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +105 -101
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +149 -138
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +106 -119
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +621 -1090
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +14 -12
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +401 -288
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt-members.html +41 -35
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +174 -37
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode-members.html +76 -75
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +14 -13
- package/SVF-doxygen/html/html/classSVF_1_1StoreCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1StorePE-members.html +45 -42
- package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +27 -22
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode-members.html +80 -79
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +11 -10
- package/SVF-doxygen/html/html/classSVF_1_1TCTEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TCTEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +49 -46
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +22 -17
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +49 -46
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +22 -17
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE-members.html +56 -43
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +329 -30
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode-members.html +34 -32
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +63 -30
- package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +52 -48
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +515 -441
- package/SVF-doxygen/html/html/classSVF_1_1VFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode-members.html +65 -64
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +22 -18
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE-members.html +47 -44
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE.html +28 -23
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +8 -8
- package/SVF-doxygen/html/html/classes.html +95 -94
- package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/dir_1870ebf480d659cc38d2dd7ac3aa8993.html +2 -2
- package/SVF-doxygen/html/html/dir_5840dc76920ee0f379cd88b55fa041fd.html +1 -1
- package/SVF-doxygen/html/html/dir_770a542efe75a1b68c109cb4e4290224.html +1 -3
- package/SVF-doxygen/html/html/dir_fa02919a30fec2d2c2d591b4d920d648.html +2 -2
- package/SVF-doxygen/html/html/files.html +18 -19
- package/SVF-doxygen/html/html/functions_0x7e.html +0 -3
- package/SVF-doxygen/html/html/functions_a.html +35 -36
- package/SVF-doxygen/html/html/functions_b.html +24 -17
- package/SVF-doxygen/html/html/functions_c.html +44 -43
- package/SVF-doxygen/html/html/functions_d.html +0 -3
- package/SVF-doxygen/html/html/functions_e.html +7 -9
- package/SVF-doxygen/html/html/functions_eval_b.html +4 -0
- package/SVF-doxygen/html/html/functions_eval_p.html +3 -0
- package/SVF-doxygen/html/html/functions_f.html +6 -15
- package/SVF-doxygen/html/html/functions_func.html +40 -38
- package/SVF-doxygen/html/html/functions_func_0x7e.html +0 -3
- package/SVF-doxygen/html/html/functions_func_b.html +14 -8
- package/SVF-doxygen/html/html/functions_func_c.html +32 -28
- package/SVF-doxygen/html/html/functions_func_d.html +0 -3
- package/SVF-doxygen/html/html/functions_func_e.html +0 -3
- package/SVF-doxygen/html/html/functions_func_g.html +92 -60
- package/SVF-doxygen/html/html/functions_func_h.html +3 -9
- package/SVF-doxygen/html/html/functions_func_i.html +12 -16
- package/SVF-doxygen/html/html/functions_func_m.html +6 -0
- package/SVF-doxygen/html/html/functions_func_o.html +11 -4
- package/SVF-doxygen/html/html/functions_func_p.html +6 -6
- package/SVF-doxygen/html/html/functions_func_r.html +3 -4
- package/SVF-doxygen/html/html/functions_func_s.html +6 -9
- package/SVF-doxygen/html/html/functions_func_t.html +14 -11
- package/SVF-doxygen/html/html/functions_g.html +91 -59
- package/SVF-doxygen/html/html/functions_h.html +2 -11
- package/SVF-doxygen/html/html/functions_i.html +12 -16
- package/SVF-doxygen/html/html/functions_l.html +6 -6
- package/SVF-doxygen/html/html/functions_m.html +9 -0
- package/SVF-doxygen/html/html/functions_n.html +6 -6
- package/SVF-doxygen/html/html/functions_o.html +31 -16
- package/SVF-doxygen/html/html/functions_p.html +23 -18
- package/SVF-doxygen/html/html/functions_r.html +4 -8
- package/SVF-doxygen/html/html/functions_rela.html +3 -0
- package/SVF-doxygen/html/html/functions_s.html +14 -16
- package/SVF-doxygen/html/html/functions_t.html +18 -15
- package/SVF-doxygen/html/html/functions_type_b.html +0 -6
- package/SVF-doxygen/html/html/functions_type_c.html +2 -7
- package/SVF-doxygen/html/html/functions_type_o.html +3 -0
- package/SVF-doxygen/html/html/functions_type_p.html +4 -1
- package/SVF-doxygen/html/html/functions_type_u.html +0 -6
- package/SVF-doxygen/html/html/functions_type_v.html +3 -0
- package/SVF-doxygen/html/html/functions_type_w.html +1 -0
- package/SVF-doxygen/html/html/functions_u.html +4 -13
- package/SVF-doxygen/html/html/functions_v.html +8 -5
- package/SVF-doxygen/html/html/functions_vars_a.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_b.html +6 -3
- package/SVF-doxygen/html/html/functions_vars_c.html +5 -4
- package/SVF-doxygen/html/html/functions_vars_e.html +1 -2
- package/SVF-doxygen/html/html/functions_vars_f.html +0 -9
- package/SVF-doxygen/html/html/functions_vars_h.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_m.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_o.html +8 -3
- package/SVF-doxygen/html/html/functions_vars_p.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_r.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_s.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_u.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_v.html +3 -3
- package/SVF-doxygen/html/html/functions_w.html +9 -4
- package/SVF-doxygen/html/html/globals_d.html +0 -4
- package/SVF-doxygen/html/html/globals_e.html +6 -9
- package/SVF-doxygen/html/html/globals_func_d.html +0 -3
- package/SVF-doxygen/html/html/globals_func_e.html +6 -9
- package/SVF-doxygen/html/html/globals_func_g.html +2 -5
- package/SVF-doxygen/html/html/globals_g.html +0 -3
- package/SVF-doxygen/html/html/globals_o.html +0 -9
- package/SVF-doxygen/html/html/globals_p.html +1 -1
- package/SVF-doxygen/html/html/globals_r.html +3 -3
- package/SVF-doxygen/html/html/globals_s.html +3 -3
- package/SVF-doxygen/html/html/globals_vars.html +2 -5
- package/SVF-doxygen/html/html/globals_z.html +1 -1
- package/SVF-doxygen/html/html/hierarchy.html +105 -101
- package/SVF-doxygen/html/html/menudata.js +0 -1
- package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF.html +27 -37
- package/SVF-doxygen/html/html/namespacemembers_p.html +0 -3
- package/SVF-doxygen/html/html/namespacemembers_type_p.html +0 -3
- package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/search/all_1.js +20 -21
- package/SVF-doxygen/html/html/search/all_10.js +11 -10
- package/SVF-doxygen/html/html/search/all_12.js +6 -7
- package/SVF-doxygen/html/html/search/all_13.js +13 -13
- package/SVF-doxygen/html/html/search/all_14.js +3 -3
- package/SVF-doxygen/html/html/search/all_15.js +2 -4
- package/SVF-doxygen/html/html/search/all_16.js +2 -2
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_1a.js +1 -1
- package/SVF-doxygen/html/html/search/all_1b.js +0 -1
- package/SVF-doxygen/html/html/search/all_2.js +13 -10
- package/SVF-doxygen/html/html/search/all_3.js +15 -15
- package/SVF-doxygen/html/html/search/all_4.js +2 -4
- package/SVF-doxygen/html/html/search/all_5.js +3 -6
- package/SVF-doxygen/html/html/search/all_6.js +1 -4
- package/SVF-doxygen/html/html/search/all_7.js +34 -34
- package/SVF-doxygen/html/html/search/all_8.js +2 -5
- package/SVF-doxygen/html/html/search/all_9.js +4 -5
- package/SVF-doxygen/html/html/search/all_b.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +3 -3
- package/SVF-doxygen/html/html/search/all_d.js +6 -3
- package/SVF-doxygen/html/html/search/all_e.js +6 -6
- package/SVF-doxygen/html/html/search/all_f.js +7 -8
- package/SVF-doxygen/html/html/search/classes_1.js +2 -0
- package/SVF-doxygen/html/html/search/classes_2.js +1 -0
- package/SVF-doxygen/html/html/search/classes_4.js +1 -2
- package/SVF-doxygen/html/html/search/classes_a.js +1 -0
- package/SVF-doxygen/html/html/search/classes_d.js +1 -0
- package/SVF-doxygen/html/html/search/enumvalues_1.js +1 -0
- package/SVF-doxygen/html/html/search/enumvalues_d.js +1 -0
- package/SVF-doxygen/html/html/search/files_2.js +2 -1
- package/SVF-doxygen/html/html/search/files_4.js +1 -3
- package/SVF-doxygen/html/html/search/functions_0.js +20 -20
- package/SVF-doxygen/html/html/search/functions_1.js +10 -8
- package/SVF-doxygen/html/html/search/functions_10.js +2 -3
- package/SVF-doxygen/html/html/search/functions_11.js +1 -1
- package/SVF-doxygen/html/html/search/functions_12.js +1 -1
- package/SVF-doxygen/html/html/search/functions_13.js +1 -1
- package/SVF-doxygen/html/html/search/functions_16.js +0 -1
- package/SVF-doxygen/html/html/search/functions_2.js +8 -8
- package/SVF-doxygen/html/html/search/functions_3.js +2 -4
- package/SVF-doxygen/html/html/search/functions_4.js +0 -2
- package/SVF-doxygen/html/html/search/functions_6.js +34 -34
- package/SVF-doxygen/html/html/search/functions_7.js +2 -4
- package/SVF-doxygen/html/html/search/functions_8.js +3 -4
- package/SVF-doxygen/html/html/search/functions_b.js +2 -0
- package/SVF-doxygen/html/html/search/functions_d.js +4 -6
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/functions_f.js +2 -2
- package/SVF-doxygen/html/html/search/related_0.js +1 -2
- package/SVF-doxygen/html/html/search/related_1.js +2 -1
- package/SVF-doxygen/html/html/search/related_2.js +1 -1
- package/SVF-doxygen/html/html/search/related_3.js +1 -2
- package/SVF-doxygen/html/html/search/related_4.js +2 -1
- package/SVF-doxygen/html/html/search/related_5.js +1 -4
- package/SVF-doxygen/html/html/search/related_6.js +4 -1
- package/SVF-doxygen/html/html/search/related_7.js +1 -5
- package/SVF-doxygen/html/html/search/related_8.js +5 -2
- package/SVF-doxygen/html/html/search/related_9.js +2 -1
- package/SVF-doxygen/html/html/search/related_a.html +26 -0
- package/SVF-doxygen/html/html/search/related_a.js +4 -0
- package/SVF-doxygen/html/html/search/searchdata.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_1.js +0 -2
- package/SVF-doxygen/html/html/search/typedefs_13.js +0 -2
- package/SVF-doxygen/html/html/search/typedefs_14.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_15.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_2.js +1 -3
- package/SVF-doxygen/html/html/search/typedefs_d.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_e.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_f.js +2 -2
- package/SVF-doxygen/html/html/search/variables_1.js +0 -1
- package/SVF-doxygen/html/html/search/variables_10.js +2 -1
- package/SVF-doxygen/html/html/search/variables_12.js +0 -1
- package/SVF-doxygen/html/html/search/variables_13.js +2 -1
- package/SVF-doxygen/html/html/search/variables_14.js +1 -1
- package/SVF-doxygen/html/html/search/variables_15.js +1 -2
- package/SVF-doxygen/html/html/search/variables_16.js +1 -1
- package/SVF-doxygen/html/html/search/variables_1a.js +1 -1
- package/SVF-doxygen/html/html/search/variables_2.js +2 -1
- package/SVF-doxygen/html/html/search/variables_3.js +2 -2
- package/SVF-doxygen/html/html/search/variables_4.js +0 -1
- package/SVF-doxygen/html/html/search/variables_5.js +1 -1
- package/SVF-doxygen/html/html/search/variables_6.js +1 -4
- package/SVF-doxygen/html/html/search/variables_8.js +0 -1
- package/SVF-doxygen/html/html/search/variables_b.js +1 -1
- package/SVF-doxygen/html/html/search/variables_d.js +2 -1
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/search/variables_f.js +2 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.html +14 -14
- 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_01ICFG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +18 -18
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +11 -11
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +29 -29
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CHNode_01_5_01_4_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1SVFVar_01_5_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1VFGNode_01_5_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html +3 -3
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CHNode_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1IRGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1SVFVar_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFGNode_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +5 -6
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
- package/include/{SVF-FE → Graphs}/CHG.h +37 -20
- package/include/Graphs/GenericGraph.h +1 -1
- package/include/Graphs/IRGraph.h +6 -15
- package/include/Graphs/SVFGOPT.h +3 -2
- package/include/Graphs/VFG.h +42 -41
- package/include/Graphs/VFGNode.h +60 -7
- package/include/MemoryModel/SVFIR.h +93 -159
- package/include/MemoryModel/SVFStatements.h +253 -21
- package/include/SVF-FE/CHGBuilder.h +69 -0
- package/include/SVF-FE/DCHG.h +1 -1
- package/include/SVF-FE/SVFIRBuilder.h +21 -8
- package/lib/Graphs/CHG.cpp +280 -0
- package/lib/Graphs/ConsG.cpp +9 -0
- package/lib/Graphs/IRGraph.cpp +23 -8
- package/lib/Graphs/VFG.cpp +45 -19
- package/lib/MSSA/SVFGBuilder.cpp +3 -2
- package/lib/MemoryModel/PAGBuilderFromFile.cpp +9 -3
- package/lib/MemoryModel/PointerAnalysis.cpp +3 -5
- package/lib/MemoryModel/SVFIR.cpp +68 -12
- package/lib/MemoryModel/SVFStatements.cpp +65 -4
- package/lib/SVF-FE/{CHG.cpp → CHGBuilder.cpp} +82 -324
- package/lib/SVF-FE/SVFIRBuilder.cpp +58 -57
- package/lib/WPA/Andersen.cpp +1 -1
- package/lib/WPA/TypeAnalysis.cpp +1 -1
- package/package.json +1 -1
- package/tools/Example/svf-ex.cpp +1 -1
- package/include/Graphs/ExternalPAG.h +0 -147
- package/include/SVF-FE/CommonCHG.h +0 -49
- package/lib/Graphs/ExternalPAG.cpp +0 -623
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
//===-----
|
|
1
|
+
//===----- CHGBuiler.cpp -- Class hierarchy graph builder ---------------------------//
|
|
2
2
|
//
|
|
3
3
|
// SVF: Static Value-Flow Analysis
|
|
4
4
|
//
|
|
5
|
-
// Copyright (C) <2013
|
|
5
|
+
// Copyright (C) <2013-> <Yulei Sui>
|
|
6
6
|
//
|
|
7
7
|
|
|
8
8
|
// This program is free software: you can redistribute it and/or modify
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
//===----------------------------------------------------------------------===//
|
|
22
22
|
|
|
23
23
|
/*
|
|
24
|
-
*
|
|
24
|
+
* CHGBuiler.cpp
|
|
25
25
|
*
|
|
26
|
-
* Created on:
|
|
27
|
-
* Author:
|
|
26
|
+
* Created on: Jun 4, 2021
|
|
27
|
+
* Author: Yulei Sui
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
#include <set>
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
#include <assert.h>
|
|
37
37
|
#include <stack>
|
|
38
38
|
|
|
39
|
+
#include "SVF-FE/CHGBuilder.h"
|
|
39
40
|
#include "Util/Options.h"
|
|
40
41
|
#include "SVF-FE/CPPUtil.h"
|
|
41
|
-
#include "SVF-FE/CHG.h"
|
|
42
42
|
#include "MemoryModel/SymbolTableInfo.h"
|
|
43
43
|
#include "Util/SVFUtil.h"
|
|
44
44
|
#include "SVF-FE/LLVMUtil.h"
|
|
@@ -48,38 +48,13 @@
|
|
|
48
48
|
using namespace SVF;
|
|
49
49
|
using namespace SVFUtil;
|
|
50
50
|
using namespace cppUtil;
|
|
51
|
-
using namespace std;
|
|
52
|
-
|
|
53
51
|
|
|
54
52
|
const string pureVirtualFunName = "__cxa_pure_virtual";
|
|
55
53
|
|
|
56
54
|
const string ztiLabel = "_ZTI";
|
|
57
55
|
|
|
58
|
-
static bool hasEdge(const CHNode *src, const CHNode *dst,
|
|
59
|
-
CHEdge::CHEDGETYPE et)
|
|
60
|
-
{
|
|
61
|
-
for (CHEdge::CHEdgeSetTy::const_iterator it = src->getOutEdges().begin(),
|
|
62
|
-
eit = src->getOutEdges().end(); it != eit; ++it)
|
|
63
|
-
{
|
|
64
|
-
CHNode *node = (*it)->getDstNode();
|
|
65
|
-
CHEdge::CHEDGETYPE edgeType = (*it)->getEdgeType();
|
|
66
|
-
if (node == dst && edgeType == et)
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
56
|
|
|
72
|
-
void
|
|
73
|
-
{
|
|
74
|
-
for (vector<FuncVector>::const_iterator it = virtualFunctionVectors.begin(),
|
|
75
|
-
eit = virtualFunctionVectors.end(); it != eit; ++it)
|
|
76
|
-
{
|
|
77
|
-
if ((*it).size() > idx)
|
|
78
|
-
virtualFunctions.push_back((*it)[idx]);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
void CHGraph::buildCHG()
|
|
57
|
+
void CHGBuilder::buildCHG()
|
|
83
58
|
{
|
|
84
59
|
|
|
85
60
|
double timeStart, timeEnd;
|
|
@@ -105,20 +80,20 @@ void CHGraph::buildCHG()
|
|
|
105
80
|
buildInternalMaps();
|
|
106
81
|
|
|
107
82
|
timeEnd = PTAStat::getClk(true);
|
|
108
|
-
buildingCHGTime = (timeEnd - timeStart) / TIMEINTERVAL;
|
|
83
|
+
chg->buildingCHGTime = (timeEnd - timeStart) / TIMEINTERVAL;
|
|
109
84
|
|
|
110
85
|
if (Options::DumpCHA)
|
|
111
|
-
dump("cha");
|
|
86
|
+
chg->dump("cha");
|
|
112
87
|
}
|
|
113
88
|
|
|
114
|
-
void
|
|
89
|
+
void CHGBuilder::buildCHGNodes(const GlobalValue *globalvalue)
|
|
115
90
|
{
|
|
116
91
|
if (isValVtbl(globalvalue) && globalvalue->getNumOperands() > 0)
|
|
117
92
|
{
|
|
118
93
|
const ConstantStruct *vtblStruct = SVFUtil::dyn_cast<ConstantStruct>(globalvalue->getOperand(0));
|
|
119
94
|
assert(vtblStruct && "Initializer of a vtable not a struct?");
|
|
120
95
|
string className = getClassNameFromVtblObj(globalvalue);
|
|
121
|
-
if (!getNode(className))
|
|
96
|
+
if (!chg->getNode(className))
|
|
122
97
|
createNode(className);
|
|
123
98
|
|
|
124
99
|
for (unsigned int ei = 0; ei < vtblStruct->getNumOperands(); ++ei)
|
|
@@ -133,7 +108,7 @@ void CHGraph::buildCHGNodes(const GlobalValue *globalvalue)
|
|
|
133
108
|
if (const Function* func = SVFUtil::dyn_cast<Function>(bitcastValue))
|
|
134
109
|
{
|
|
135
110
|
struct DemangledName dname = demangle(func->getName().str());
|
|
136
|
-
if (!getNode(dname.className))
|
|
111
|
+
if (!chg->getNode(dname.className))
|
|
137
112
|
createNode(dname.className);
|
|
138
113
|
}
|
|
139
114
|
}
|
|
@@ -142,19 +117,19 @@ void CHGraph::buildCHGNodes(const GlobalValue *globalvalue)
|
|
|
142
117
|
}
|
|
143
118
|
}
|
|
144
119
|
|
|
145
|
-
void
|
|
120
|
+
void CHGBuilder::buildCHGNodes(const SVFFunction* fun)
|
|
146
121
|
{
|
|
147
122
|
const Function* F = fun->getLLVMFun();
|
|
148
123
|
if (isConstructor(F) || isDestructor(F))
|
|
149
124
|
{
|
|
150
125
|
struct DemangledName dname = demangle(F->getName().str());
|
|
151
126
|
DBOUT(DCHA, outs() << "\t build CHANode for class " + dname.className + "...\n");
|
|
152
|
-
if (!getNode(dname.className))
|
|
127
|
+
if (!chg->getNode(dname.className))
|
|
153
128
|
createNode(dname.className);
|
|
154
129
|
}
|
|
155
130
|
}
|
|
156
131
|
|
|
157
|
-
void
|
|
132
|
+
void CHGBuilder::buildCHGEdges(const SVFFunction* fun)
|
|
158
133
|
{
|
|
159
134
|
const Function* F = fun->getLLVMFun();
|
|
160
135
|
|
|
@@ -179,14 +154,14 @@ void CHGraph::buildCHGEdges(const SVFFunction* fun)
|
|
|
179
154
|
}
|
|
180
155
|
|
|
181
156
|
|
|
182
|
-
void
|
|
157
|
+
void CHGBuilder::buildInternalMaps()
|
|
183
158
|
{
|
|
184
159
|
buildClassNameToAncestorsDescendantsMap();
|
|
185
160
|
buildVirtualFunctionToIDMap();
|
|
186
161
|
buildCSToCHAVtblsAndVfnsMap();
|
|
187
162
|
}
|
|
188
163
|
|
|
189
|
-
void
|
|
164
|
+
void CHGBuilder::connectInheritEdgeViaCall(const SVFFunction* callerfun, CallSite cs)
|
|
190
165
|
{
|
|
191
166
|
if (getCallee(cs) == nullptr)
|
|
192
167
|
return;
|
|
@@ -209,13 +184,13 @@ void CHGraph::connectInheritEdgeViaCall(const SVFFunction* callerfun, CallSite c
|
|
|
209
184
|
if (!SVFUtil::isCallSite(csThisPtr) &&
|
|
210
185
|
basename.className.size() > 0)
|
|
211
186
|
{
|
|
212
|
-
addEdge(dname.className, basename.className, CHEdge::INHERITANCE);
|
|
187
|
+
chg->addEdge(dname.className, basename.className, CHEdge::INHERITANCE);
|
|
213
188
|
}
|
|
214
189
|
}
|
|
215
190
|
}
|
|
216
191
|
}
|
|
217
192
|
|
|
218
|
-
void
|
|
193
|
+
void CHGBuilder::connectInheritEdgeViaStore(const SVFFunction* caller, const StoreInst* storeInst)
|
|
219
194
|
{
|
|
220
195
|
struct DemangledName dname = demangle(caller->getName().str());
|
|
221
196
|
if (const ConstantExpr *ce = SVFUtil::dyn_cast<ConstantExpr>(storeInst->getValueOperand()))
|
|
@@ -233,7 +208,7 @@ void CHGraph::connectInheritEdgeViaStore(const SVFFunction* caller, const StoreI
|
|
|
233
208
|
string vtblClassName = getClassNameFromVtblObj(gepval);
|
|
234
209
|
if (vtblClassName.size() > 0 && dname.className.compare(vtblClassName) != 0)
|
|
235
210
|
{
|
|
236
|
-
addEdge(dname.className, vtblClassName, CHEdge::INHERITANCE);
|
|
211
|
+
chg->addEdge(dname.className, vtblClassName, CHEdge::INHERITANCE);
|
|
237
212
|
}
|
|
238
213
|
}
|
|
239
214
|
}
|
|
@@ -242,7 +217,7 @@ void CHGraph::connectInheritEdgeViaStore(const SVFFunction* caller, const StoreI
|
|
|
242
217
|
}
|
|
243
218
|
}
|
|
244
219
|
|
|
245
|
-
void
|
|
220
|
+
void CHGBuilder::readInheritanceMetadataFromModule(const Module &M)
|
|
246
221
|
{
|
|
247
222
|
for (Module::const_named_metadata_iterator mdit = M.named_metadata_begin(),
|
|
248
223
|
mdeit = M.named_metadata_end(); mdit != mdeit; ++mdit)
|
|
@@ -258,52 +233,29 @@ void CHGraph::readInheritanceMetadataFromModule(const Module &M)
|
|
|
258
233
|
const MDNode *N = *opit;
|
|
259
234
|
const MDString &mdstr = SVFUtil::cast<MDString>(N->getOperand(0));
|
|
260
235
|
string baseName = mdstr.getString().str();
|
|
261
|
-
addEdge(className, baseName, CHEdge::INHERITANCE);
|
|
236
|
+
chg->addEdge(className, baseName, CHEdge::INHERITANCE);
|
|
262
237
|
}
|
|
263
238
|
}
|
|
264
239
|
}
|
|
265
240
|
|
|
266
|
-
|
|
267
|
-
CHEdge::CHEDGETYPE edgeType)
|
|
268
|
-
{
|
|
269
|
-
CHNode *srcNode = getNode(className);
|
|
270
|
-
CHNode *dstNode = getNode(baseClassName);
|
|
271
|
-
assert(srcNode && dstNode && "node not found?");
|
|
272
|
-
|
|
273
|
-
if (!hasEdge(srcNode, dstNode, edgeType))
|
|
274
|
-
{
|
|
275
|
-
CHEdge *edge = new CHEdge(srcNode, dstNode, edgeType);
|
|
276
|
-
srcNode->addOutgoingEdge(edge);
|
|
277
|
-
dstNode->addIncomingEdge(edge);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
CHNode *CHGraph::getNode(const string name) const
|
|
282
|
-
{
|
|
283
|
-
auto chNode = classNameToNodeMap.find(name);
|
|
284
|
-
if (chNode != classNameToNodeMap.end()) return chNode->second;
|
|
285
|
-
else return nullptr;
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
CHNode *CHGraph::createNode(const std::string className)
|
|
241
|
+
CHNode *CHGBuilder::createNode(const std::string className)
|
|
290
242
|
{
|
|
291
|
-
assert(!getNode(className) && "this node should never be created before!");
|
|
292
|
-
CHNode * node = new CHNode(className, classNum++);
|
|
293
|
-
classNameToNodeMap[className] = node;
|
|
294
|
-
addGNode(node->getId(), node);
|
|
243
|
+
assert(!chg->getNode(className) && "this node should never be created before!");
|
|
244
|
+
CHNode * node = new CHNode(className, chg->classNum++);
|
|
245
|
+
chg->classNameToNodeMap[className] = node;
|
|
246
|
+
chg->addGNode(node->getId(), node);
|
|
295
247
|
if (className.size() > 0 && className[className.size() - 1] == '>')
|
|
296
248
|
{
|
|
297
249
|
string templateName = getBeforeBrackets(className);
|
|
298
|
-
CHNode* templateNode = getNode(templateName);
|
|
250
|
+
CHNode* templateNode = chg->getNode(templateName);
|
|
299
251
|
if (!templateNode)
|
|
300
252
|
{
|
|
301
253
|
DBOUT(DCHA, outs() << "\t Create Template CHANode " + templateName + " for class " + className + "...\n");
|
|
302
254
|
templateNode = createNode(templateName);
|
|
303
255
|
templateNode->setTemplate();
|
|
304
256
|
}
|
|
305
|
-
addEdge(className, templateName, CHEdge::INSTANTCE);
|
|
306
|
-
addInstances(templateName,node);
|
|
257
|
+
chg->addEdge(className, templateName, CHEdge::INSTANTCE);
|
|
258
|
+
chg->addInstances(templateName,node);
|
|
307
259
|
}
|
|
308
260
|
return node;
|
|
309
261
|
}
|
|
@@ -311,12 +263,12 @@ CHNode *CHGraph::createNode(const std::string className)
|
|
|
311
263
|
/*
|
|
312
264
|
* build the following two maps:
|
|
313
265
|
* classNameToDescendantsMap
|
|
314
|
-
* classNameToAncestorsMap
|
|
266
|
+
* chg->classNameToAncestorsMap
|
|
315
267
|
*/
|
|
316
|
-
void
|
|
268
|
+
void CHGBuilder::buildClassNameToAncestorsDescendantsMap()
|
|
317
269
|
{
|
|
318
270
|
|
|
319
|
-
for (CHGraph::const_iterator it =
|
|
271
|
+
for (CHGraph::const_iterator it = chg->begin(), eit = chg->end();
|
|
320
272
|
it != eit; ++it)
|
|
321
273
|
{
|
|
322
274
|
const CHNode *node = it->second;
|
|
@@ -335,8 +287,8 @@ void CHGraph::buildClassNameToAncestorsDescendantsMap()
|
|
|
335
287
|
if ((*it)->getEdgeType() == CHEdge::INHERITANCE)
|
|
336
288
|
{
|
|
337
289
|
CHNode *succnode = (*it)->getDstNode();
|
|
338
|
-
classNameToAncestorsMap[node->getName()].insert(succnode);
|
|
339
|
-
classNameToDescendantsMap[succnode->getName()].insert(node);
|
|
290
|
+
chg->classNameToAncestorsMap[node->getName()].insert(succnode);
|
|
291
|
+
chg->classNameToDescendantsMap[succnode->getName()].insert(node);
|
|
340
292
|
worklist.push(succnode);
|
|
341
293
|
}
|
|
342
294
|
}
|
|
@@ -347,47 +299,38 @@ void CHGraph::buildClassNameToAncestorsDescendantsMap()
|
|
|
347
299
|
}
|
|
348
300
|
|
|
349
301
|
|
|
350
|
-
const CHGraph::CHNodeSetTy&
|
|
302
|
+
const CHGraph::CHNodeSetTy& CHGBuilder::getInstancesAndDescendants(const string className)
|
|
351
303
|
{
|
|
352
304
|
|
|
353
|
-
NameToCHNodesMap::const_iterator it = classNameToInstAndDescsMap.find(className);
|
|
354
|
-
if (it != classNameToInstAndDescsMap.end())
|
|
305
|
+
CHGraph::NameToCHNodesMap::const_iterator it = chg->classNameToInstAndDescsMap.find(className);
|
|
306
|
+
if (it != chg->classNameToInstAndDescsMap.end())
|
|
355
307
|
{
|
|
356
308
|
return it->second;
|
|
357
309
|
}
|
|
358
310
|
else
|
|
359
311
|
{
|
|
360
|
-
classNameToInstAndDescsMap[className] = getDescendants(className);
|
|
361
|
-
if (getNode(className)->isTemplate())
|
|
312
|
+
chg->classNameToInstAndDescsMap[className] = chg->getDescendants(className);
|
|
313
|
+
if (chg->getNode(className)->isTemplate())
|
|
362
314
|
{
|
|
363
|
-
const CHNodeSetTy& instances = getInstances(className);
|
|
315
|
+
const CHNodeSetTy& instances = chg->getInstances(className);
|
|
364
316
|
for (CHNodeSetTy::const_iterator it = instances.begin(), eit = instances.end(); it != eit; ++it)
|
|
365
317
|
{
|
|
366
318
|
const CHNode *node = *it;
|
|
367
|
-
classNameToInstAndDescsMap[className].insert(node);
|
|
368
|
-
const CHNodeSetTy& instance_descendants = getDescendants(node->getName());
|
|
319
|
+
chg->classNameToInstAndDescsMap[className].insert(node);
|
|
320
|
+
const CHNodeSetTy& instance_descendants = chg->getDescendants(node->getName());
|
|
369
321
|
for (CHNodeSetTy::const_iterator dit =
|
|
370
322
|
instance_descendants.begin(), deit =
|
|
371
323
|
instance_descendants.end(); dit != deit; ++dit)
|
|
372
324
|
{
|
|
373
|
-
classNameToInstAndDescsMap[className].insert(*dit);
|
|
325
|
+
chg->classNameToInstAndDescsMap[className].insert(*dit);
|
|
374
326
|
}
|
|
375
327
|
}
|
|
376
328
|
}
|
|
377
|
-
return classNameToInstAndDescsMap[className];
|
|
329
|
+
return chg->classNameToInstAndDescsMap[className];
|
|
378
330
|
}
|
|
379
331
|
}
|
|
380
332
|
|
|
381
333
|
|
|
382
|
-
void CHGraph::addFuncToFuncVector(CHNode::FuncVector &v, const SVFFunction *f) {
|
|
383
|
-
const auto *lf = f->getLLVMFun();
|
|
384
|
-
if (isCPPThunkFunction(lf)) {
|
|
385
|
-
if(const auto *tf = getThunkTarget(lf))
|
|
386
|
-
v.push_back(svfMod->getSVFFunction(tf));
|
|
387
|
-
} else {
|
|
388
|
-
v.push_back(f);
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
334
|
|
|
392
335
|
|
|
393
336
|
/*
|
|
@@ -421,7 +364,7 @@ void CHGraph::addFuncToFuncVector(CHNode::FuncVector &v, const SVFFunction *f) {
|
|
|
421
364
|
* number of "i8 *null" is the same as the number of virtual methods in
|
|
422
365
|
* "class A"
|
|
423
366
|
*/
|
|
424
|
-
void
|
|
367
|
+
void CHGBuilder::analyzeVTables(const Module &M)
|
|
425
368
|
{
|
|
426
369
|
for (Module::const_global_iterator I = M.global_begin(),
|
|
427
370
|
E = M.global_end(); I != E; ++I)
|
|
@@ -434,7 +377,7 @@ void CHGraph::analyzeVTables(const Module &M)
|
|
|
434
377
|
assert(vtblStruct && "Initializer of a vtable not a struct?");
|
|
435
378
|
|
|
436
379
|
string vtblClassName = getClassNameFromVtblObj(globalvalue);
|
|
437
|
-
CHNode *node = getNode(vtblClassName);
|
|
380
|
+
CHNode *node = chg->getNode(vtblClassName);
|
|
438
381
|
assert(node && "node not found?");
|
|
439
382
|
|
|
440
383
|
node->setVTable(globalvalue);
|
|
@@ -528,7 +471,7 @@ void CHGraph::analyzeVTables(const Module &M)
|
|
|
528
471
|
if (dname.className.size() > 0 &&
|
|
529
472
|
vtblClassName.compare(dname.className) != 0)
|
|
530
473
|
{
|
|
531
|
-
addEdge(vtblClassName, dname.className, CHEdge::INHERITANCE);
|
|
474
|
+
chg->addEdge(vtblClassName, dname.className, CHEdge::INHERITANCE);
|
|
532
475
|
}
|
|
533
476
|
}
|
|
534
477
|
else
|
|
@@ -595,7 +538,7 @@ void CHGraph::analyzeVTables(const Module &M)
|
|
|
595
538
|
}
|
|
596
539
|
|
|
597
540
|
|
|
598
|
-
void
|
|
541
|
+
void CHGBuilder::buildVirtualFunctionToIDMap()
|
|
599
542
|
{
|
|
600
543
|
/*
|
|
601
544
|
* 1. Divide classes into groups
|
|
@@ -603,9 +546,9 @@ void CHGraph::buildVirtualFunctionToIDMap()
|
|
|
603
546
|
* 3. Assign consecutive IDs to virtual functions that have
|
|
604
547
|
* the same name (after demangling) in a group
|
|
605
548
|
*/
|
|
606
|
-
CHNodeSetTy visitedNodes;
|
|
607
|
-
for (CHGraph::const_iterator nit =
|
|
608
|
-
neit =
|
|
549
|
+
CHGraph::CHNodeSetTy visitedNodes;
|
|
550
|
+
for (CHGraph::const_iterator nit = chg->begin(),
|
|
551
|
+
neit = chg->end(); nit != neit; ++nit)
|
|
609
552
|
{
|
|
610
553
|
CHNode *node = nit->second;
|
|
611
554
|
if (visitedNodes.find(node) != visitedNodes.end())
|
|
@@ -616,7 +559,7 @@ void CHGraph::buildVirtualFunctionToIDMap()
|
|
|
616
559
|
/*
|
|
617
560
|
* get all the classes in a specific group
|
|
618
561
|
*/
|
|
619
|
-
CHNodeSetTy group;
|
|
562
|
+
CHGraph::CHNodeSetTy group;
|
|
620
563
|
stack<const CHNode*> nodeStack;
|
|
621
564
|
nodeStack.push(node);
|
|
622
565
|
while (!nodeStack.empty())
|
|
@@ -647,7 +590,7 @@ void CHGraph::buildVirtualFunctionToIDMap()
|
|
|
647
590
|
* get all virtual functions in a specific group
|
|
648
591
|
*/
|
|
649
592
|
set<const SVFFunction*> virtualFunctions;
|
|
650
|
-
for (CHNodeSetTy::iterator it = group.begin(),
|
|
593
|
+
for (CHGraph::CHNodeSetTy::iterator it = group.begin(),
|
|
651
594
|
eit = group.end(); it != eit; ++it)
|
|
652
595
|
{
|
|
653
596
|
const vector<CHNode::FuncVector> &vecs = (*it)->getVirtualFunctionVectors();
|
|
@@ -677,7 +620,7 @@ void CHGraph::buildVirtualFunctionToIDMap()
|
|
|
677
620
|
* <~C, C::~C>
|
|
678
621
|
* ...
|
|
679
622
|
*/
|
|
680
|
-
set<pair<string, const SVFFunction
|
|
623
|
+
set<pair<string, const SVFFunction*> > fNameSet;
|
|
681
624
|
for (set<const SVFFunction*>::iterator fit = virtualFunctions.begin(),
|
|
682
625
|
feit = virtualFunctions.end(); fit != feit; ++fit)
|
|
683
626
|
{
|
|
@@ -688,141 +631,13 @@ void CHGraph::buildVirtualFunctionToIDMap()
|
|
|
688
631
|
for (set<pair<string, const SVFFunction*>>::iterator it = fNameSet.begin(),
|
|
689
632
|
eit = fNameSet.end(); it != eit; ++it)
|
|
690
633
|
{
|
|
691
|
-
virtualFunctionToIDMap[it->second] = vfID++;
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
}
|
|
695
|
-
|
|
696
|
-
const CHGraph::CHNodeSetTy& CHGraph::getCSClasses(CallSite cs)
|
|
697
|
-
{
|
|
698
|
-
assert(isVirtualCallSite(cs) && "not virtual callsite!");
|
|
699
|
-
|
|
700
|
-
CallSiteToCHNodesMap::const_iterator it = csToClassesMap.find(cs);
|
|
701
|
-
if (it != csToClassesMap.end())
|
|
702
|
-
{
|
|
703
|
-
return it->second;
|
|
704
|
-
}
|
|
705
|
-
else
|
|
706
|
-
{
|
|
707
|
-
string thisPtrClassName = getClassNameOfThisPtr(cs);
|
|
708
|
-
if (const CHNode* thisNode = getNode(thisPtrClassName))
|
|
709
|
-
{
|
|
710
|
-
const CHNodeSetTy& instAndDesces = getInstancesAndDescendants(thisPtrClassName);
|
|
711
|
-
csToClassesMap[cs].insert(thisNode);
|
|
712
|
-
for (CHNodeSetTy::const_iterator it = instAndDesces.begin(), eit = instAndDesces.end(); it != eit; ++it)
|
|
713
|
-
csToClassesMap[cs].insert(*it);
|
|
634
|
+
chg->virtualFunctionToIDMap[it->second] = chg->vfID++;
|
|
714
635
|
}
|
|
715
|
-
return csToClassesMap[cs];
|
|
716
636
|
}
|
|
717
637
|
}
|
|
718
638
|
|
|
719
|
-
static bool checkArgTypes(CallSite cs, const Function *fn) {
|
|
720
|
-
|
|
721
|
-
// here we skip the first argument (i.e., this pointer)
|
|
722
|
-
u32_t arg_size = (fn->arg_size() > cs.arg_size()) ? cs.arg_size(): fn->arg_size();
|
|
723
|
-
if(arg_size > 1){
|
|
724
|
-
for (unsigned i = 1; i < arg_size; i++) {
|
|
725
|
-
auto cs_arg = cs.getArgOperand(i);
|
|
726
|
-
auto fn_arg = fn->getArg(i);
|
|
727
|
-
if (cs_arg->getType() != fn_arg->getType()) {
|
|
728
|
-
return false;
|
|
729
|
-
}
|
|
730
|
-
}
|
|
731
|
-
}
|
|
732
|
-
|
|
733
|
-
return true;
|
|
734
|
-
}
|
|
735
639
|
|
|
736
|
-
|
|
737
|
-
* Get virtual functions for callsite "cs" based on vtbls (calculated
|
|
738
|
-
* based on pointsto set)
|
|
739
|
-
*/
|
|
740
|
-
void CHGraph::getVFnsFromVtbls(CallSite cs, const VTableSet &vtbls, VFunSet &virtualFunctions)
|
|
741
|
-
{
|
|
742
|
-
|
|
743
|
-
/// get target virtual functions
|
|
744
|
-
size_t idx = getVCallIdx(cs);
|
|
745
|
-
/// get the function name of the virtual callsite
|
|
746
|
-
string funName = getFunNameOfVCallSite(cs);
|
|
747
|
-
for (const GlobalValue *vt : vtbls)
|
|
748
|
-
{
|
|
749
|
-
const CHNode *child = getNode(getClassNameFromVtblObj(vt));
|
|
750
|
-
if (child == nullptr)
|
|
751
|
-
continue;
|
|
752
|
-
CHNode::FuncVector vfns;
|
|
753
|
-
child->getVirtualFunctions(idx, vfns);
|
|
754
|
-
for (CHNode::FuncVector::const_iterator fit = vfns.begin(),
|
|
755
|
-
feit = vfns.end(); fit != feit; ++fit)
|
|
756
|
-
{
|
|
757
|
-
const SVFFunction* callee = *fit;
|
|
758
|
-
if (cs.arg_size() == callee->arg_size() ||
|
|
759
|
-
(cs.getFunctionType()->isVarArg() && callee->isVarArg()))
|
|
760
|
-
{
|
|
761
|
-
|
|
762
|
-
// if argument types do not match
|
|
763
|
-
// skip this one
|
|
764
|
-
if (!checkArgTypes(cs, callee->getLLVMFun()))
|
|
765
|
-
continue;
|
|
766
|
-
|
|
767
|
-
DemangledName dname = demangle(callee->getName().str());
|
|
768
|
-
string calleeName = dname.funcName;
|
|
769
|
-
|
|
770
|
-
/*
|
|
771
|
-
* The compiler will add some special suffix (e.g.,
|
|
772
|
-
* "[abi:cxx11]") to the end of some virtual function:
|
|
773
|
-
* In dealII
|
|
774
|
-
* function: FE_Q<3>::get_name
|
|
775
|
-
* will be mangled as: _ZNK4FE_QILi3EE8get_nameB5cxx11Ev
|
|
776
|
-
* after demangling: FE_Q<3>::get_name[abi:cxx11]
|
|
777
|
-
* The special suffix ("[abi:cxx11]") needs to be removed
|
|
778
|
-
*/
|
|
779
|
-
const std::string suffix("[abi:cxx11]");
|
|
780
|
-
size_t suffix_pos = calleeName.rfind(suffix);
|
|
781
|
-
if (suffix_pos != string::npos)
|
|
782
|
-
calleeName.erase(suffix_pos, suffix.size());
|
|
783
|
-
|
|
784
|
-
/*
|
|
785
|
-
* if we can't get the function name of a virtual callsite, all virtual
|
|
786
|
-
* functions calculated by idx will be valid
|
|
787
|
-
*/
|
|
788
|
-
if (funName.size() == 0)
|
|
789
|
-
{
|
|
790
|
-
virtualFunctions.insert(callee);
|
|
791
|
-
}
|
|
792
|
-
else if (funName[0] == '~')
|
|
793
|
-
{
|
|
794
|
-
/*
|
|
795
|
-
* if the virtual callsite is calling a destructor, then all
|
|
796
|
-
* destructors in the ch will be valid
|
|
797
|
-
* class A { virtual ~A(){} };
|
|
798
|
-
* class B: public A { virtual ~B(){} };
|
|
799
|
-
* int main() {
|
|
800
|
-
* A *a = new B;
|
|
801
|
-
* delete a; /// the function name of this virtual callsite is ~A()
|
|
802
|
-
* }
|
|
803
|
-
*/
|
|
804
|
-
if (calleeName[0] == '~')
|
|
805
|
-
{
|
|
806
|
-
virtualFunctions.insert(callee);
|
|
807
|
-
}
|
|
808
|
-
}
|
|
809
|
-
else
|
|
810
|
-
{
|
|
811
|
-
/*
|
|
812
|
-
* for other virtual function calls, the function name of the callsite
|
|
813
|
-
* and the function name of the target callee should match exactly
|
|
814
|
-
*/
|
|
815
|
-
if (funName.compare(calleeName) == 0)
|
|
816
|
-
{
|
|
817
|
-
virtualFunctions.insert(callee);
|
|
818
|
-
}
|
|
819
|
-
}
|
|
820
|
-
}
|
|
821
|
-
}
|
|
822
|
-
}
|
|
823
|
-
}
|
|
824
|
-
|
|
825
|
-
void CHGraph::buildCSToCHAVtblsAndVfnsMap()
|
|
640
|
+
void CHGBuilder::buildCSToCHAVtblsAndVfnsMap()
|
|
826
641
|
{
|
|
827
642
|
|
|
828
643
|
for (SymbolTableInfo::CallSiteSet::const_iterator it =
|
|
@@ -845,101 +660,44 @@ void CHGraph::buildCSToCHAVtblsAndVfnsMap()
|
|
|
845
660
|
}
|
|
846
661
|
if (vtbls.size() > 0)
|
|
847
662
|
{
|
|
848
|
-
csToCHAVtblsMap[cs] = vtbls;
|
|
663
|
+
chg->csToCHAVtblsMap[cs] = vtbls;
|
|
849
664
|
VFunSet virtualFunctions;
|
|
850
|
-
getVFnsFromVtbls(cs, vtbls, virtualFunctions);
|
|
665
|
+
chg->getVFnsFromVtbls(cs, vtbls, virtualFunctions);
|
|
851
666
|
if (virtualFunctions.size() > 0)
|
|
852
|
-
csToCHAVFnsMap[cs] = virtualFunctions;
|
|
667
|
+
chg->csToCHAVFnsMap[cs] = virtualFunctions;
|
|
853
668
|
}
|
|
854
669
|
}
|
|
855
670
|
}
|
|
856
671
|
|
|
857
|
-
|
|
672
|
+
const CHGraph::CHNodeSetTy& CHGBuilder::getCSClasses(CallSite cs)
|
|
858
673
|
{
|
|
859
|
-
|
|
860
|
-
it != eit; ++it)
|
|
861
|
-
{
|
|
862
|
-
const CHNode *node = it->second;
|
|
863
|
-
outs() << "class: " << node->getName() << "\n";
|
|
864
|
-
for (CHEdge::CHEdgeSetTy::const_iterator it = node->OutEdgeBegin();
|
|
865
|
-
it != node->OutEdgeEnd(); ++it)
|
|
866
|
-
{
|
|
867
|
-
if ((*it)->getEdgeType() == CHEdge::INHERITANCE)
|
|
868
|
-
outs() << (*it)->getDstNode()->getName() << " --inheritance--> "
|
|
869
|
-
<< (*it)->getSrcNode()->getName() << "\n";
|
|
870
|
-
else
|
|
871
|
-
outs() << (*it)->getSrcNode()->getName() << " --instance--> "
|
|
872
|
-
<< (*it)->getDstNode()->getName() << "\n";
|
|
873
|
-
}
|
|
874
|
-
}
|
|
875
|
-
outs() << '\n';
|
|
876
|
-
}
|
|
877
|
-
|
|
878
|
-
/*!
|
|
879
|
-
* Dump call graph into dot file
|
|
880
|
-
*/
|
|
881
|
-
void CHGraph::dump(const std::string& filename)
|
|
882
|
-
{
|
|
883
|
-
GraphPrinter::WriteGraphToFile(outs(), filename, this);
|
|
884
|
-
printCH();
|
|
885
|
-
}
|
|
886
|
-
|
|
887
|
-
void CHGraph::view()
|
|
888
|
-
{
|
|
889
|
-
llvm::ViewGraph(this, "Class Hierarchy Graph");
|
|
890
|
-
}
|
|
891
|
-
|
|
892
|
-
namespace llvm
|
|
893
|
-
{
|
|
894
|
-
|
|
895
|
-
/*!
|
|
896
|
-
* Write value flow graph into dot file for debugging
|
|
897
|
-
*/
|
|
898
|
-
template<>
|
|
899
|
-
struct DOTGraphTraits<CHGraph*> : public DefaultDOTGraphTraits
|
|
900
|
-
{
|
|
901
|
-
|
|
902
|
-
typedef CHNode NodeType;
|
|
903
|
-
DOTGraphTraits(bool isSimple = false) :
|
|
904
|
-
DefaultDOTGraphTraits(isSimple)
|
|
905
|
-
{
|
|
906
|
-
}
|
|
674
|
+
assert(isVirtualCallSite(cs) && "not virtual callsite!");
|
|
907
675
|
|
|
908
|
-
|
|
909
|
-
|
|
676
|
+
CHGraph::CallSiteToCHNodesMap::const_iterator it = chg->csToClassesMap.find(cs);
|
|
677
|
+
if (it != chg->csToClassesMap.end())
|
|
910
678
|
{
|
|
911
|
-
return
|
|
912
|
-
}
|
|
913
|
-
/// Return function name;
|
|
914
|
-
static std::string getNodeLabel(CHNode *node, CHGraph*)
|
|
915
|
-
{
|
|
916
|
-
return node->getName();
|
|
679
|
+
return it->second;
|
|
917
680
|
}
|
|
918
|
-
|
|
919
|
-
static std::string getNodeAttributes(CHNode *node, CHGraph*)
|
|
681
|
+
else
|
|
920
682
|
{
|
|
921
|
-
|
|
683
|
+
string thisPtrClassName = getClassNameOfThisPtr(cs);
|
|
684
|
+
if (const CHNode* thisNode = chg->getNode(thisPtrClassName))
|
|
922
685
|
{
|
|
923
|
-
|
|
686
|
+
const CHGraph::CHNodeSetTy& instAndDesces = getInstancesAndDescendants(thisPtrClassName);
|
|
687
|
+
chg->csToClassesMap[cs].insert(thisNode);
|
|
688
|
+
for (CHGraph::CHNodeSetTy::const_iterator it = instAndDesces.begin(), eit = instAndDesces.end(); it != eit; ++it)
|
|
689
|
+
chg->csToClassesMap[cs].insert(*it);
|
|
924
690
|
}
|
|
925
|
-
|
|
926
|
-
return "shape=box";
|
|
691
|
+
return chg->csToClassesMap[cs];
|
|
927
692
|
}
|
|
693
|
+
}
|
|
928
694
|
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
{
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
{
|
|
937
|
-
return "style=solid";
|
|
938
|
-
}
|
|
939
|
-
else
|
|
940
|
-
{
|
|
941
|
-
return "style=dashed";
|
|
942
|
-
}
|
|
695
|
+
void CHGBuilder::addFuncToFuncVector(CHNode::FuncVector &v, const SVFFunction *f) {
|
|
696
|
+
const auto *lf = f->getLLVMFun();
|
|
697
|
+
if (isCPPThunkFunction(lf)) {
|
|
698
|
+
if(const auto *tf = getThunkTarget(lf))
|
|
699
|
+
v.push_back(chg->svfMod->getSVFFunction(tf));
|
|
700
|
+
} else {
|
|
701
|
+
v.push_back(f);
|
|
943
702
|
}
|
|
944
|
-
}
|
|
945
|
-
} // End namespace llvm
|
|
703
|
+
}
|