svf-tools 1.0.340 → 1.0.344
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/AndersenSCD_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/BasicTypes_8h_source.html +2 -2
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +7 -7
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +7 -7
- package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +7 -7
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +2 -2
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +15 -15
- package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGNode_8h.html +7 -7
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +69 -69
- package/SVF-doxygen/html/html/ICFGStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +64 -61
- package/SVF-doxygen/html/html/ICFG_8h_source.html +46 -46
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/LeakChecker_8h_source.html +6 -6
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +5 -5
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/MHP_8h_source.html +6 -6
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +9 -9
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +27 -27
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +18 -18
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +12 -12
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Options_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Options_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PCG_8h_source.html +4 -4
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +17 -17
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +17 -17
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ProgSlice_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +17 -17
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +9 -9
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +32 -32
- package/SVF-doxygen/html/html/SVFG_8h_source.html +27 -27
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +13 -13
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +32 -32
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +20 -20
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +14 -14
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +7 -7
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +16 -15
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +30 -28
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +44 -42
- package/SVF-doxygen/html/html/TCT_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +20 -20
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +2 -2
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +11 -11
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +20 -20
- package/SVF-doxygen/html/html/VFG_8h_source.html +19 -19
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/annotated.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +47 -47
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +38 -38
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +6 -5
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +15 -12
- package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +5 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallCHI-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallCHI.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode-members.html +158 -0
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +852 -0
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CallMU-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallMU.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +6 -5
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +60 -60
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +51 -51
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +33 -33
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +52 -52
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +33 -33
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +4 -2
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode-members.html +150 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +618 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +4 -2
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode-members.html +149 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +624 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode.html +3 -1
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode-members.html +144 -0
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +413 -0
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +224 -217
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +74 -71
- package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +51 -51
- package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode-members.html +144 -0
- package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.html +399 -0
- package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +7 -3
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +51 -51
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode-members.html +146 -0
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +494 -0
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +61 -61
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1MHP-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +198 -198
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +70 -47
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +77 -77
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo-members.html +17 -15
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +141 -106
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PCG-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph-members.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +118 -118
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +109 -109
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +5 -3
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode-members.html +153 -0
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +696 -0
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +160 -160
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +76 -76
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +133 -133
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +62 -62
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +17 -16
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1TCT-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph-members.html +40 -40
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +220 -220
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +42 -42
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +96 -96
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +37 -37
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +12 -12
- package/SVF-doxygen/html/html/classes.html +16 -16
- package/SVF-doxygen/html/html/functions_a.html +59 -59
- package/SVF-doxygen/html/html/functions_c.html +74 -71
- package/SVF-doxygen/html/html/functions_eval_c.html +5 -2
- package/SVF-doxygen/html/html/functions_f.html +14 -14
- package/SVF-doxygen/html/html/functions_func.html +56 -56
- package/SVF-doxygen/html/html/functions_func_c.html +28 -28
- package/SVF-doxygen/html/html/functions_func_f.html +6 -6
- package/SVF-doxygen/html/html/functions_func_g.html +88 -88
- package/SVF-doxygen/html/html/functions_func_h.html +17 -17
- package/SVF-doxygen/html/html/functions_func_i.html +31 -29
- package/SVF-doxygen/html/html/functions_func_m.html +1 -1
- package/SVF-doxygen/html/html/functions_func_p.html +1 -1
- package/SVF-doxygen/html/html/functions_func_r.html +6 -6
- package/SVF-doxygen/html/html/functions_func_s.html +1 -1
- package/SVF-doxygen/html/html/functions_func_t.html +7 -7
- package/SVF-doxygen/html/html/functions_func_u.html +3 -3
- package/SVF-doxygen/html/html/functions_g.html +88 -88
- package/SVF-doxygen/html/html/functions_h.html +16 -16
- package/SVF-doxygen/html/html/functions_i.html +37 -35
- package/SVF-doxygen/html/html/functions_m.html +2 -2
- package/SVF-doxygen/html/html/functions_n.html +3 -3
- package/SVF-doxygen/html/html/functions_o.html +10 -10
- package/SVF-doxygen/html/html/functions_p.html +21 -30
- package/SVF-doxygen/html/html/functions_r.html +6 -6
- package/SVF-doxygen/html/html/functions_s.html +15 -14
- package/SVF-doxygen/html/html/functions_t.html +13 -15
- package/SVF-doxygen/html/html/functions_type.html +1 -1
- package/SVF-doxygen/html/html/functions_type_c.html +24 -24
- package/SVF-doxygen/html/html/functions_type_f.html +3 -3
- package/SVF-doxygen/html/html/functions_type_i.html +2 -2
- package/SVF-doxygen/html/html/functions_type_p.html +1 -1
- package/SVF-doxygen/html/html/functions_type_s.html +1 -1
- package/SVF-doxygen/html/html/functions_type_v.html +2 -2
- package/SVF-doxygen/html/html/functions_u.html +3 -3
- package/SVF-doxygen/html/html/functions_v.html +5 -5
- package/SVF-doxygen/html/html/functions_vars_a.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_c.html +11 -11
- package/SVF-doxygen/html/html/functions_vars_f.html +5 -5
- package/SVF-doxygen/html/html/functions_vars_g.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_i.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_p.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_r.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_s.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +5 -9
- package/SVF-doxygen/html/html/hierarchy.html +7 -7
- package/SVF-doxygen/html/html/namespaceSVF.html +11 -11
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +11 -11
- package/SVF-doxygen/html/html/search/all_1.js +58 -58
- package/SVF-doxygen/html/html/search/all_10.js +13 -14
- package/SVF-doxygen/html/html/search/all_12.js +5 -5
- package/SVF-doxygen/html/html/search/all_13.js +9 -8
- package/SVF-doxygen/html/html/search/all_14.js +6 -6
- package/SVF-doxygen/html/html/search/all_15.js +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 +37 -35
- package/SVF-doxygen/html/html/search/all_6.js +12 -12
- package/SVF-doxygen/html/html/search/all_7.js +62 -61
- package/SVF-doxygen/html/html/search/all_8.js +17 -17
- package/SVF-doxygen/html/html/search/all_9.js +19 -19
- package/SVF-doxygen/html/html/search/all_c.js +1 -1
- package/SVF-doxygen/html/html/search/all_d.js +2 -2
- package/SVF-doxygen/html/html/search/all_e.js +1 -1
- package/SVF-doxygen/html/html/search/all_f.js +2 -2
- package/SVF-doxygen/html/html/search/classes_2.js +1 -1
- package/SVF-doxygen/html/html/search/classes_5.js +2 -2
- package/SVF-doxygen/html/html/search/classes_6.js +1 -1
- package/SVF-doxygen/html/html/search/classes_8.js +2 -2
- package/SVF-doxygen/html/html/search/classes_e.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_2.js +2 -1
- package/SVF-doxygen/html/html/search/functions_0.js +55 -55
- package/SVF-doxygen/html/html/search/functions_10.js +2 -2
- package/SVF-doxygen/html/html/search/functions_11.js +4 -4
- package/SVF-doxygen/html/html/search/functions_12.js +1 -1
- package/SVF-doxygen/html/html/search/functions_2.js +10 -10
- package/SVF-doxygen/html/html/search/functions_5.js +4 -4
- package/SVF-doxygen/html/html/search/functions_6.js +61 -61
- package/SVF-doxygen/html/html/search/functions_7.js +17 -17
- package/SVF-doxygen/html/html/search/functions_8.js +16 -16
- package/SVF-doxygen/html/html/search/functions_b.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.js +2 -2
- package/SVF-doxygen/html/html/search/functions_f.js +4 -4
- package/SVF-doxygen/html/html/search/typedefs_0.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_14.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_2.js +21 -21
- package/SVF-doxygen/html/html/search/typedefs_5.js +3 -3
- package/SVF-doxygen/html/html/search/typedefs_8.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_f.js +1 -1
- package/SVF-doxygen/html/html/search/variables_1.js +2 -2
- package/SVF-doxygen/html/html/search/variables_10.js +0 -1
- package/SVF-doxygen/html/html/search/variables_12.js +1 -1
- package/SVF-doxygen/html/html/search/variables_13.js +1 -0
- package/SVF-doxygen/html/html/search/variables_14.js +1 -1
- package/SVF-doxygen/html/html/search/variables_3.js +4 -4
- package/SVF-doxygen/html/html/search/variables_6.js +5 -5
- package/SVF-doxygen/html/html/search/variables_7.js +1 -1
- package/SVF-doxygen/html/html/search/variables_9.js +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +23 -23
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
- package/include/DDA/ContextDDA.h +3 -3
- package/include/DDA/DDAClient.h +2 -2
- package/include/DDA/DDAVFSolver.h +2 -2
- package/include/DDA/FlowDDA.h +2 -2
- package/include/Graphs/ICFG.h +32 -32
- package/include/Graphs/ICFGNode.h +33 -33
- package/include/Graphs/ICFGStat.h +11 -11
- package/include/Graphs/PTACallGraph.h +19 -19
- package/include/Graphs/SVFG.h +16 -16
- package/include/Graphs/SVFGNode.h +14 -14
- package/include/Graphs/SVFGOPT.h +1 -1
- package/include/Graphs/ThreadCallGraph.h +25 -25
- package/include/Graphs/VFG.h +10 -10
- package/include/Graphs/VFGNode.h +8 -8
- package/include/MSSA/MSSAMuChi.h +6 -6
- package/include/MSSA/MemRegion.h +24 -24
- package/include/MSSA/MemSSA.h +10 -10
- package/include/MTA/LockResultValidator.h +2 -2
- package/include/MTA/MHP.h +4 -4
- package/include/MTA/PCG.h +1 -1
- package/include/MTA/TCT.h +2 -2
- package/include/MemoryModel/PointerAnalysis.h +12 -12
- package/include/MemoryModel/SVFIR.h +22 -22
- package/include/MemoryModel/SVFStatements.h +11 -11
- package/include/MemoryModel/SymbolTableInfo.h +15 -9
- package/include/SABER/LeakChecker.h +4 -4
- package/include/SABER/ProgSlice.h +2 -2
- package/include/SABER/SaberCheckerAPI.h +4 -4
- package/include/SABER/SaberSVFGBuilder.h +1 -1
- package/include/SABER/SrcSnkDDA.h +1 -1
- package/include/SVF-FE/ICFGBuilder.h +4 -4
- package/include/SVF-FE/SVFIRBuilder.h +5 -5
- package/include/Util/Options.h +1 -1
- package/lib/DDA/ContextDDA.cpp +3 -3
- package/lib/DDA/DDAClient.cpp +1 -1
- package/lib/DDA/FlowDDA.cpp +1 -1
- package/lib/Graphs/ICFG.cpp +88 -71
- package/lib/Graphs/PTACallGraph.cpp +5 -5
- package/lib/Graphs/SVFG.cpp +7 -7
- package/lib/Graphs/ThreadCallGraph.cpp +6 -6
- package/lib/Graphs/VFG.cpp +6 -6
- package/lib/MSSA/MemRegion.cpp +17 -17
- package/lib/MSSA/MemSSA.cpp +3 -3
- package/lib/MTA/LockAnalysis.cpp +4 -4
- package/lib/MTA/MHP.cpp +5 -5
- package/lib/MTA/MTAResultValidator.cpp +1 -1
- package/lib/MTA/PCG.cpp +1 -1
- package/lib/MemoryModel/PointerAnalysis.cpp +10 -10
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
- package/lib/MemoryModel/SVFIR.cpp +5 -5
- package/lib/MemoryModel/SVFStatements.cpp +53 -49
- package/lib/MemoryModel/SVFVariables.cpp +10 -10
- package/lib/MemoryModel/SymbolTableInfo.cpp +12 -7
- package/lib/SABER/DoubleFreeChecker.cpp +1 -1
- package/lib/SABER/FileChecker.cpp +2 -2
- package/lib/SABER/LeakChecker.cpp +8 -8
- package/lib/SABER/ProgSlice.cpp +2 -2
- package/lib/SVF-FE/CallGraphBuilder.cpp +4 -4
- package/lib/SVF-FE/Graph2Json.cpp +5 -5
- package/lib/SVF-FE/ICFGBuilder.cpp +31 -25
- package/lib/SVF-FE/SVFIRBuilder.cpp +8 -8
- package/lib/SVF-FE/SymbolTableBuilder.cpp +2 -2
- package/lib/Util/Options.cpp +3 -3
- package/lib/Util/PTAStat.cpp +3 -3
- package/lib/Util/SVFUtil.cpp +2 -0
- package/lib/Util/TypeBasedHeapCloning.cpp +1 -1
- package/lib/WPA/Andersen.cpp +3 -3
- package/lib/WPA/FlowSensitive.cpp +2 -2
- package/lib/WPA/TypeAnalysis.cpp +1 -1
- package/lib/WPA/VersionedFlowSensitive.cpp +4 -4
- package/lib/WPA/WPAPass.cpp +4 -4
- package/package.json +1 -1
|
@@ -162,8 +162,8 @@ public:
|
|
|
162
162
|
|
|
163
163
|
/// Get callsite ID and get returnsiteID from SVFGEdge
|
|
164
164
|
//@{
|
|
165
|
-
const
|
|
166
|
-
const
|
|
165
|
+
const CallICFGNode* getCallSite(const SVFGEdge* edge) const;
|
|
166
|
+
const CallICFGNode* getRetSite(const SVFGEdge* edge) const;
|
|
167
167
|
//@}
|
|
168
168
|
|
|
169
169
|
/// Condition operations
|
|
@@ -105,7 +105,7 @@ public:
|
|
|
105
105
|
{
|
|
106
106
|
return getType(SVFUtil::getCallee(inst)) == CK_ALLOC;
|
|
107
107
|
}
|
|
108
|
-
inline bool isMemAlloc(const
|
|
108
|
+
inline bool isMemAlloc(const CallICFGNode* cs) const
|
|
109
109
|
{
|
|
110
110
|
return isMemAlloc(cs->getCallSite());
|
|
111
111
|
}
|
|
@@ -121,7 +121,7 @@ public:
|
|
|
121
121
|
{
|
|
122
122
|
return getType(SVFUtil::getCallee(inst)) == CK_FREE;
|
|
123
123
|
}
|
|
124
|
-
inline bool isMemDealloc(const
|
|
124
|
+
inline bool isMemDealloc(const CallICFGNode* cs) const
|
|
125
125
|
{
|
|
126
126
|
return isMemDealloc(cs->getCallSite());
|
|
127
127
|
}
|
|
@@ -137,7 +137,7 @@ public:
|
|
|
137
137
|
{
|
|
138
138
|
return getType(SVFUtil::getCallee(inst)) == CK_FOPEN;
|
|
139
139
|
}
|
|
140
|
-
inline bool isFOpen(const
|
|
140
|
+
inline bool isFOpen(const CallICFGNode* cs) const
|
|
141
141
|
{
|
|
142
142
|
return isFOpen(cs->getCallSite());
|
|
143
143
|
}
|
|
@@ -153,7 +153,7 @@ public:
|
|
|
153
153
|
{
|
|
154
154
|
return getType(SVFUtil::getCallee(inst)) == CK_FCLOSE;
|
|
155
155
|
}
|
|
156
|
-
inline bool isFClose(const
|
|
156
|
+
inline bool isFClose(const CallICFGNode* cs) const
|
|
157
157
|
{
|
|
158
158
|
return isFClose(cs->getCallSite());
|
|
159
159
|
}
|
|
@@ -57,7 +57,7 @@ public:
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
/// Add ActualParmVFGNode
|
|
60
|
-
inline void addActualParmVFGNode(const PAGNode* pagNode, const
|
|
60
|
+
inline void addActualParmVFGNode(const PAGNode* pagNode, const CallICFGNode* cs)
|
|
61
61
|
{
|
|
62
62
|
svfg->addActualParmVFGNode(pagNode, cs);
|
|
63
63
|
}
|
|
@@ -53,7 +53,7 @@ public:
|
|
|
53
53
|
typedef CxtDPItem DPIm;
|
|
54
54
|
typedef Set<DPIm> DPImSet; ///< dpitem set
|
|
55
55
|
typedef Map<const SVFGNode*, DPImSet> SVFGNodeToDPItemsMap; ///< map a SVFGNode to its visited dpitems
|
|
56
|
-
typedef Set<const
|
|
56
|
+
typedef Set<const CallICFGNode*> CallSiteSet;
|
|
57
57
|
typedef NodeBS SVFGNodeBS;
|
|
58
58
|
typedef ProgSlice::VFWorkList WorkList;
|
|
59
59
|
|
|
@@ -69,7 +69,7 @@ private:
|
|
|
69
69
|
void connectGlobalToProgEntry(SVFModule* svfModule);
|
|
70
70
|
|
|
71
71
|
/// Add/Get an inter block ICFGNode
|
|
72
|
-
|
|
72
|
+
InterICFGNode* getOrAddInterBlockICFGNode(const Instruction* inst);
|
|
73
73
|
|
|
74
74
|
/// Add/Get a basic block ICFGNode
|
|
75
75
|
inline ICFGNode* getOrAddBlockICFGNode(const Instruction* inst)
|
|
@@ -84,18 +84,18 @@ private:
|
|
|
84
84
|
void addICFGInterEdges(const Instruction* cs, const SVFFunction* callee);
|
|
85
85
|
|
|
86
86
|
/// Add a call node
|
|
87
|
-
inline
|
|
87
|
+
inline CallICFGNode* getOrAddCallICFGNode(const Instruction* cs)
|
|
88
88
|
{
|
|
89
89
|
return icfg->getCallBlockNode(cs);
|
|
90
90
|
}
|
|
91
91
|
/// Add a return node
|
|
92
|
-
inline
|
|
92
|
+
inline RetICFGNode* getOrAddRetICFGNode(const Instruction* cs)
|
|
93
93
|
{
|
|
94
94
|
return icfg->getRetBlockNode(cs);
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
/// Add and get IntraBlock ICFGNode
|
|
98
|
-
|
|
98
|
+
IntraICFGNode* getOrAddIntraBlockICFGNode(const Instruction* inst)
|
|
99
99
|
{
|
|
100
100
|
return icfg->getIntraBlockNode(inst);
|
|
101
101
|
}
|
|
@@ -343,7 +343,7 @@ public:
|
|
|
343
343
|
/// Add Store edge
|
|
344
344
|
inline StoreStmt* addStoreEdge(NodeID src, NodeID dst)
|
|
345
345
|
{
|
|
346
|
-
|
|
346
|
+
IntraICFGNode* node;
|
|
347
347
|
if(const Instruction* inst = SVFUtil::dyn_cast<Instruction>(curVal))
|
|
348
348
|
node = pag->getICFG()->getIntraBlockNode(inst);
|
|
349
349
|
else
|
|
@@ -353,14 +353,14 @@ public:
|
|
|
353
353
|
return edge;
|
|
354
354
|
}
|
|
355
355
|
/// Add Call edge
|
|
356
|
-
inline CallPE* addCallEdge(NodeID src, NodeID dst, const
|
|
356
|
+
inline CallPE* addCallEdge(NodeID src, NodeID dst, const CallICFGNode* cs)
|
|
357
357
|
{
|
|
358
358
|
CallPE *edge = pag->addCallPE(src, dst, cs);
|
|
359
359
|
setCurrentBBAndValueForPAGEdge(edge);
|
|
360
360
|
return edge;
|
|
361
361
|
}
|
|
362
362
|
/// Add Return edge
|
|
363
|
-
inline RetPE* addRetEdge(NodeID src, NodeID dst, const
|
|
363
|
+
inline RetPE* addRetEdge(NodeID src, NodeID dst, const CallICFGNode* cs)
|
|
364
364
|
{
|
|
365
365
|
RetPE *edge = pag->addRetPE(src, dst, cs);
|
|
366
366
|
setCurrentBBAndValueForPAGEdge(edge);
|
|
@@ -388,14 +388,14 @@ public:
|
|
|
388
388
|
return edge;
|
|
389
389
|
}
|
|
390
390
|
/// Add Thread fork edge for parameter passing
|
|
391
|
-
inline TDForkPE* addThreadForkEdge(NodeID src, NodeID dst, const
|
|
391
|
+
inline TDForkPE* addThreadForkEdge(NodeID src, NodeID dst, const CallICFGNode* cs)
|
|
392
392
|
{
|
|
393
393
|
TDForkPE *edge = pag->addThreadForkPE(src, dst, cs);
|
|
394
394
|
setCurrentBBAndValueForPAGEdge(edge);
|
|
395
395
|
return edge;
|
|
396
396
|
}
|
|
397
397
|
/// Add Thread join edge for parameter passing
|
|
398
|
-
inline TDJoinPE* addThreadJoinEdge(NodeID src, NodeID dst, const
|
|
398
|
+
inline TDJoinPE* addThreadJoinEdge(NodeID src, NodeID dst, const CallICFGNode* cs)
|
|
399
399
|
{
|
|
400
400
|
TDJoinPE *edge = pag->addThreadJoinPE(src, dst, cs);
|
|
401
401
|
setCurrentBBAndValueForPAGEdge(edge);
|
package/include/Util/Options.h
CHANGED
|
@@ -131,7 +131,7 @@ public:
|
|
|
131
131
|
static const llvm::cl::opt<bool> PStat;
|
|
132
132
|
static const llvm::cl::opt<unsigned> StatBudget;
|
|
133
133
|
static const llvm::cl::opt<bool> PAGDotGraph;
|
|
134
|
-
static const llvm::cl::opt<bool>
|
|
134
|
+
static const llvm::cl::opt<bool> ShowSVFIRValue;
|
|
135
135
|
static const llvm::cl::opt<bool> DumpICFG;
|
|
136
136
|
static const llvm::cl::opt<bool> CallGraphDotGraph;
|
|
137
137
|
static const llvm::cl::opt<bool> PAGPrint;
|
package/lib/DDA/ContextDDA.cpp
CHANGED
|
@@ -164,7 +164,7 @@ CxtPtSet ContextDDA::processGepPts(const GepSVFGNode* gep, const CxtPtSet& srcPt
|
|
|
164
164
|
return tmpDstPts;
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
bool ContextDDA::testIndCallReachability(CxtLocDPItem& dpm, const SVFFunction* callee, const
|
|
167
|
+
bool ContextDDA::testIndCallReachability(CxtLocDPItem& dpm, const SVFFunction* callee, const CallICFGNode* cs)
|
|
168
168
|
{
|
|
169
169
|
if(getPAG()->isIndirectCallSites(cs))
|
|
170
170
|
{
|
|
@@ -194,7 +194,7 @@ CallSiteID ContextDDA::getCSIDAtCall(CxtLocDPItem&, const SVFGEdge* edge)
|
|
|
194
194
|
else
|
|
195
195
|
svfg_csId = SVFUtil::cast<CallIndSVFGEdge>(edge)->getCallSiteId();
|
|
196
196
|
|
|
197
|
-
const
|
|
197
|
+
const CallICFGNode* cbn = getSVFG()->getCallSite(svfg_csId);
|
|
198
198
|
const SVFFunction* callee = edge->getDstNode()->getFun();
|
|
199
199
|
|
|
200
200
|
if(getPTACallGraph()->hasCallSiteID(cbn,callee))
|
|
@@ -218,7 +218,7 @@ CallSiteID ContextDDA::getCSIDAtRet(CxtLocDPItem&, const SVFGEdge* edge)
|
|
|
218
218
|
else
|
|
219
219
|
svfg_csId = SVFUtil::cast<RetIndSVFGEdge>(edge)->getCallSiteId();
|
|
220
220
|
|
|
221
|
-
const
|
|
221
|
+
const CallICFGNode* cbn = getSVFG()->getCallSite(svfg_csId);
|
|
222
222
|
const SVFFunction* callee = edge->getSrcNode()->getFun();
|
|
223
223
|
|
|
224
224
|
if(getPTACallGraph()->hasCallSiteID(cbn,callee))
|
package/lib/DDA/DDAClient.cpp
CHANGED
|
@@ -95,7 +95,7 @@ void FunptrDDAClient::performStat(PointerAnalysis* pta)
|
|
|
95
95
|
const PointsTo& anderPts = ander->getPts(vtptr);
|
|
96
96
|
|
|
97
97
|
PTACallGraph* callgraph = ander->getPTACallGraph();
|
|
98
|
-
const
|
|
98
|
+
const CallICFGNode* cbn = nIter->second;
|
|
99
99
|
|
|
100
100
|
if(!callgraph->hasIndCSCallees(cbn))
|
|
101
101
|
{
|
package/lib/DDA/FlowDDA.cpp
CHANGED
|
@@ -59,7 +59,7 @@ void FlowDDA::handleOutOfBudgetDpm(const LocDPItem& dpm)
|
|
|
59
59
|
bool FlowDDA::testIndCallReachability(LocDPItem&, const SVFFunction* callee, CallSiteID csId)
|
|
60
60
|
{
|
|
61
61
|
|
|
62
|
-
const
|
|
62
|
+
const CallICFGNode* cbn = getSVFG()->getCallSite(csId);
|
|
63
63
|
|
|
64
64
|
if(getPAG()->isIndirectCallSites(cbn))
|
|
65
65
|
{
|
package/lib/Graphs/ICFG.cpp
CHANGED
|
@@ -38,7 +38,7 @@ using namespace SVF;
|
|
|
38
38
|
using namespace SVFUtil;
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
FunEntryICFGNode::FunEntryICFGNode(NodeID id, const SVFFunction* f) : InterICFGNode(id, FunEntryBlock)
|
|
42
42
|
{
|
|
43
43
|
fun = f;
|
|
44
44
|
// if function is implemented
|
|
@@ -47,7 +47,7 @@ FunEntryBlockNode::FunEntryBlockNode(NodeID id, const SVFFunction* f) : InterBlo
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
FunExitICFGNode::FunExitICFGNode(NodeID id, const SVFFunction* f) : InterICFGNode(id, FunExitBlock), fun(f), formalRet(nullptr)
|
|
51
51
|
{
|
|
52
52
|
fun = f;
|
|
53
53
|
// if function is implemented
|
|
@@ -61,7 +61,7 @@ FunExitBlockNode::FunExitBlockNode(NodeID id, const SVFFunction* f) : InterBlock
|
|
|
61
61
|
const std::string ICFGNode::toString() const {
|
|
62
62
|
std::string str;
|
|
63
63
|
raw_string_ostream rawstr(str);
|
|
64
|
-
rawstr << "ICFGNode
|
|
64
|
+
rawstr << "ICFGNode" << getId();
|
|
65
65
|
return rawstr.str();
|
|
66
66
|
}
|
|
67
67
|
|
|
@@ -69,68 +69,80 @@ void ICFGNode::dump() const {
|
|
|
69
69
|
outs() << this->toString() << "\n";
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
const std::string
|
|
72
|
+
const std::string GlobalICFGNode::toString() const {
|
|
73
73
|
std::string str;
|
|
74
74
|
raw_string_ostream rawstr(str);
|
|
75
|
-
rawstr << "
|
|
75
|
+
rawstr << "GlobalICFGNode" << getId();
|
|
76
|
+
for (const SVFStmt *stmt : getSVFStmts())
|
|
77
|
+
rawstr << "\n" << stmt->toString();
|
|
76
78
|
return rawstr.str();
|
|
77
79
|
}
|
|
78
80
|
|
|
79
81
|
|
|
80
|
-
const std::string
|
|
82
|
+
const std::string IntraICFGNode::toString() const {
|
|
81
83
|
std::string str;
|
|
82
84
|
raw_string_ostream rawstr(str);
|
|
83
|
-
rawstr << "
|
|
84
|
-
rawstr <<
|
|
85
|
+
rawstr << "IntraICFGNode" << getId();
|
|
86
|
+
rawstr << " {fun: " << getFun()->getName() << getSourceLoc(getInst()) << "}";
|
|
87
|
+
for (const SVFStmt *stmt : getSVFStmts())
|
|
88
|
+
rawstr << "\n" << stmt->toString();
|
|
89
|
+
if(getSVFStmts().empty())
|
|
90
|
+
rawstr << "\n" << value2String(getInst());
|
|
85
91
|
return rawstr.str();
|
|
86
92
|
}
|
|
87
93
|
|
|
88
94
|
|
|
89
|
-
const std::string
|
|
95
|
+
const std::string FunEntryICFGNode::toString() const {
|
|
90
96
|
std::string str;
|
|
91
97
|
raw_string_ostream rawstr(str);
|
|
92
|
-
rawstr << "
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
+
rawstr << "FunEntryICFGNode" << getId();
|
|
99
|
+
rawstr << " {fun: " << getFun()->getName();
|
|
100
|
+
if (isExtCall(getFun())==false)
|
|
101
|
+
rawstr << getSourceLoc(getFun()->getLLVMFun());
|
|
102
|
+
rawstr << "}";
|
|
103
|
+
for (const SVFStmt *stmt : getSVFStmts())
|
|
104
|
+
rawstr << "\n" << stmt->toString();
|
|
98
105
|
return rawstr.str();
|
|
99
106
|
}
|
|
100
107
|
|
|
101
|
-
const std::string
|
|
108
|
+
const std::string FunExitICFGNode::toString() const {
|
|
102
109
|
std::string str;
|
|
103
110
|
raw_string_ostream rawstr(str);
|
|
104
|
-
rawstr << "
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
rawstr << "FunExitICFGNode" << getId();
|
|
112
|
+
rawstr << " {fun: " << getFun()->getName();
|
|
113
|
+
if (isExtCall(getFun())==false)
|
|
114
|
+
rawstr << getSourceLoc(getFunExitBB(getFun()->getLLVMFun())->getFirstNonPHI());
|
|
115
|
+
rawstr << "}";
|
|
116
|
+
for (const SVFStmt *stmt : getSVFStmts())
|
|
117
|
+
rawstr << "\n" << stmt->toString();
|
|
110
118
|
return rawstr.str();
|
|
111
119
|
}
|
|
112
120
|
|
|
113
121
|
|
|
114
|
-
const std::string
|
|
122
|
+
const std::string CallICFGNode::toString() const {
|
|
115
123
|
std::string str;
|
|
116
124
|
raw_string_ostream rawstr(str);
|
|
117
|
-
rawstr << "
|
|
118
|
-
rawstr <<
|
|
125
|
+
rawstr << "CallICFGNode" << getId();
|
|
126
|
+
rawstr << " {fun: " << getFun()->getName() << getSourceLoc(getCallSite()) << "}";
|
|
127
|
+
for (const SVFStmt *stmt : getSVFStmts())
|
|
128
|
+
rawstr << "\n" << stmt->toString();
|
|
119
129
|
return rawstr.str();
|
|
120
130
|
}
|
|
121
131
|
|
|
122
|
-
const std::string
|
|
132
|
+
const std::string RetICFGNode::toString() const {
|
|
123
133
|
std::string str;
|
|
124
134
|
raw_string_ostream rawstr(str);
|
|
125
|
-
rawstr << "
|
|
126
|
-
rawstr <<
|
|
135
|
+
rawstr << "RetICFGNode" << getId();
|
|
136
|
+
rawstr << " {fun: " << getFun()->getName() << getSourceLoc(getCallSite()) << "}";
|
|
137
|
+
for (const SVFStmt *stmt : getSVFStmts())
|
|
138
|
+
rawstr << "\n" << stmt->toString();
|
|
127
139
|
return rawstr.str();
|
|
128
140
|
}
|
|
129
141
|
|
|
130
142
|
const std::string ICFGEdge::toString() const {
|
|
131
143
|
std::string str;
|
|
132
144
|
raw_string_ostream rawstr(str);
|
|
133
|
-
rawstr << "ICFGEdge: [" << getDstID() << "<--" << getSrcID() << "]\t";
|
|
145
|
+
rawstr << "ICFGEdge: [ICFGNode" << getDstID() << " <-- ICFGNode" << getSrcID() << "]\t";
|
|
134
146
|
return rawstr.str();
|
|
135
147
|
}
|
|
136
148
|
|
|
@@ -138,9 +150,9 @@ const std::string IntraCFGEdge::toString() const {
|
|
|
138
150
|
std::string str;
|
|
139
151
|
raw_string_ostream rawstr(str);
|
|
140
152
|
if(brCondition.first == nullptr)
|
|
141
|
-
rawstr << "IntraCFGEdge: [" << getDstID() << "<--" << getSrcID() << "]\t";
|
|
153
|
+
rawstr << "IntraCFGEdge: [ICFGNode" << getDstID() << " <-- ICFGNode" << getSrcID() << "]\t";
|
|
142
154
|
else
|
|
143
|
-
rawstr << "IntraCFGEdge: [" << getDstID() << "<--" << getSrcID() << "] with condition (" << *brCondition.first << "==" << brCondition.second << ") \t";
|
|
155
|
+
rawstr << "IntraCFGEdge: [ICFGNode" << getDstID() << " <-- ICFGNode" << getSrcID() << "] with condition (" << *brCondition.first << "==" << brCondition.second << ") \t";
|
|
144
156
|
|
|
145
157
|
return rawstr.str();
|
|
146
158
|
}
|
|
@@ -148,16 +160,16 @@ const std::string IntraCFGEdge::toString() const {
|
|
|
148
160
|
const std::string CallCFGEdge::toString() const {
|
|
149
161
|
std::string str;
|
|
150
162
|
raw_string_ostream rawstr(str);
|
|
151
|
-
rawstr << "CallCFGEdge " << " [";
|
|
152
|
-
rawstr << getDstID() << "<--" << getSrcID() << "]\t CallSite: " << *cs << "\t";
|
|
163
|
+
rawstr << "CallCFGEdge " << " [ICFGNode";
|
|
164
|
+
rawstr << getDstID() << " <-- ICFGNode" << getSrcID() << "]\t CallSite: " << *cs << "\t";
|
|
153
165
|
return rawstr.str();
|
|
154
166
|
}
|
|
155
167
|
|
|
156
168
|
const std::string RetCFGEdge::toString() const {
|
|
157
169
|
std::string str;
|
|
158
170
|
raw_string_ostream rawstr(str);
|
|
159
|
-
rawstr << "RetCFGEdge " << " [";
|
|
160
|
-
rawstr << getDstID() << "<--" << getSrcID() << "]\t CallSite: " << *cs << "\t";
|
|
171
|
+
rawstr << "RetCFGEdge " << " [ICFGNode";
|
|
172
|
+
rawstr << getDstID() << " <-- ICFGNode" << getSrcID() << "]\t CallSite: " << *cs << "\t";
|
|
161
173
|
return rawstr.str();
|
|
162
174
|
}
|
|
163
175
|
|
|
@@ -172,7 +184,7 @@ const std::string RetCFGEdge::toString() const {
|
|
|
172
184
|
ICFG::ICFG(): totalICFGNode(0)
|
|
173
185
|
{
|
|
174
186
|
DBOUT(DGENERAL, outs() << pasMsg("\tCreate ICFG ...\n"));
|
|
175
|
-
globalBlockNode = new
|
|
187
|
+
globalBlockNode = new GlobalICFGNode(totalICFGNode++);
|
|
176
188
|
addICFGNode(globalBlockNode);
|
|
177
189
|
}
|
|
178
190
|
|
|
@@ -194,51 +206,51 @@ ICFGNode* ICFG::getBlockICFGNode(const Instruction* inst)
|
|
|
194
206
|
}
|
|
195
207
|
|
|
196
208
|
|
|
197
|
-
|
|
209
|
+
CallICFGNode* ICFG::getCallBlockNode(const Instruction* inst)
|
|
198
210
|
{
|
|
199
211
|
if(SVFUtil::isCallSite(inst) ==false)
|
|
200
212
|
outs() << *inst << "\n";
|
|
201
213
|
assert(SVFUtil::isCallSite(inst) && "not a call instruction?");
|
|
202
214
|
assert(SVFUtil::isNonInstricCallSite(inst) && "associating an intrinsic debug instruction with an ICFGNode!");
|
|
203
|
-
|
|
215
|
+
CallICFGNode* node = getCallICFGNode(inst);
|
|
204
216
|
if(node==nullptr)
|
|
205
217
|
node = addCallICFGNode(inst);
|
|
206
|
-
assert (node!=nullptr && "no
|
|
218
|
+
assert (node!=nullptr && "no CallICFGNode for this instruction?");
|
|
207
219
|
return node;
|
|
208
220
|
}
|
|
209
221
|
|
|
210
|
-
|
|
222
|
+
RetICFGNode* ICFG::getRetBlockNode(const Instruction* inst)
|
|
211
223
|
{
|
|
212
224
|
assert(SVFUtil::isCallSite(inst) && "not a call instruction?");
|
|
213
225
|
assert(SVFUtil::isNonInstricCallSite(inst) && "associating an intrinsic debug instruction with an ICFGNode!");
|
|
214
|
-
|
|
226
|
+
RetICFGNode* node = getRetICFGNode(inst);
|
|
215
227
|
if(node==nullptr)
|
|
216
228
|
node = addRetICFGNode(inst);
|
|
217
|
-
assert (node!=nullptr && "no
|
|
229
|
+
assert (node!=nullptr && "no RetICFGNode for this instruction?");
|
|
218
230
|
return node;
|
|
219
231
|
}
|
|
220
232
|
|
|
221
|
-
|
|
233
|
+
IntraICFGNode* ICFG::getIntraBlockNode(const Instruction* inst)
|
|
222
234
|
{
|
|
223
|
-
|
|
235
|
+
IntraICFGNode* node = getIntraBlockICFGNode(inst);
|
|
224
236
|
if(node==nullptr)
|
|
225
237
|
node = addIntraBlockICFGNode(inst);
|
|
226
238
|
return node;
|
|
227
239
|
}
|
|
228
240
|
|
|
229
241
|
/// Add a function entry node
|
|
230
|
-
|
|
242
|
+
FunEntryICFGNode* ICFG::getFunEntryBlockNode(const SVFFunction* fun)
|
|
231
243
|
{
|
|
232
|
-
|
|
244
|
+
FunEntryICFGNode* b = getFunEntryICFGNode(fun);
|
|
233
245
|
if (b == nullptr)
|
|
234
246
|
return addFunEntryICFGNode(fun);
|
|
235
247
|
else
|
|
236
248
|
return b;
|
|
237
249
|
}
|
|
238
250
|
/// Add a function exit node
|
|
239
|
-
|
|
251
|
+
FunExitICFGNode* ICFG::getFunExitBlockNode(const SVFFunction* fun)
|
|
240
252
|
{
|
|
241
|
-
|
|
253
|
+
FunExitICFGNode* b = getFunExitICFGNode(fun);
|
|
242
254
|
if (b == nullptr)
|
|
243
255
|
return addFunExitICFGNode(fun);
|
|
244
256
|
else
|
|
@@ -417,22 +429,27 @@ void ICFG::updateCallGraph(PTACallGraph* callgraph)
|
|
|
417
429
|
PTACallGraph::CallEdgeMap::const_iterator eiter = callgraph->getIndCallMap().end();
|
|
418
430
|
for (; iter != eiter; iter++)
|
|
419
431
|
{
|
|
420
|
-
const
|
|
432
|
+
const CallICFGNode* callBlock = iter->first;
|
|
421
433
|
const Instruction* cs = callBlock->getCallSite();
|
|
422
434
|
assert(callBlock->isIndirectCall() && "this is not an indirect call?");
|
|
423
435
|
const PTACallGraph::FunctionSet & functions = iter->second;
|
|
424
436
|
for (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)
|
|
425
437
|
{
|
|
426
438
|
const SVFFunction* callee = *func_iter;
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
439
|
+
CallICFGNode* callBlockNode = getCallBlockNode(cs);
|
|
440
|
+
RetICFGNode* retBlockNode = getRetBlockNode(cs);
|
|
441
|
+
FunEntryICFGNode* calleeEntryNode = getFunEntryICFGNode(callee);
|
|
442
|
+
FunExitICFGNode* calleeExitNode = getFunExitICFGNode(callee);
|
|
443
|
+
addCallEdge(callBlockNode, calleeEntryNode, cs);
|
|
444
|
+
addRetEdge(calleeExitNode, retBlockNode, cs);
|
|
445
|
+
|
|
446
|
+
/// if this is an external function (no function body), connect calleeEntryNode to calleeExitNode
|
|
447
|
+
if (isExtCall(callee))
|
|
448
|
+
addIntraEdge(calleeEntryNode, calleeExitNode);
|
|
449
|
+
|
|
450
|
+
/// Remove callBlockNode to retBlockNode intraICFGEdge since we found at least one inter procedural edge
|
|
451
|
+
if(ICFGEdge* edge = hasIntraICFGEdge(callBlockNode,retBlockNode, ICFGEdge::IntraCF))
|
|
452
|
+
removeICFGEdge(edge);
|
|
436
453
|
}
|
|
437
454
|
}
|
|
438
455
|
}
|
|
@@ -469,9 +486,9 @@ struct DOTGraphTraits<ICFG*> : public DOTGraphTraits<SVFIR*>
|
|
|
469
486
|
std::string str;
|
|
470
487
|
raw_string_ostream rawstr(str);
|
|
471
488
|
rawstr << "NodeID: " << node->getId() << "\n";
|
|
472
|
-
if (
|
|
489
|
+
if (IntraICFGNode* bNode = SVFUtil::dyn_cast<IntraICFGNode>(node))
|
|
473
490
|
{
|
|
474
|
-
rawstr << "
|
|
491
|
+
rawstr << "IntraICFGNode ID: " << bNode->getId() << " \t";
|
|
475
492
|
SVFIR::SVFStmtList& edges = SVFIR::getPAG()->getSVFStmtList(bNode);
|
|
476
493
|
if (edges.empty()) {
|
|
477
494
|
rawstr << value2String(bNode->getInst()) << " \t";
|
|
@@ -484,23 +501,23 @@ struct DOTGraphTraits<ICFG*> : public DOTGraphTraits<SVFIR*>
|
|
|
484
501
|
}
|
|
485
502
|
rawstr << " {fun: " << bNode->getFun()->getName() << "}";
|
|
486
503
|
}
|
|
487
|
-
else if (
|
|
504
|
+
else if (FunEntryICFGNode* entry = SVFUtil::dyn_cast<FunEntryICFGNode>(node))
|
|
488
505
|
{
|
|
489
506
|
rawstr << entry->toString();
|
|
490
507
|
}
|
|
491
|
-
else if (
|
|
508
|
+
else if (FunExitICFGNode* exit = SVFUtil::dyn_cast<FunExitICFGNode>(node))
|
|
492
509
|
{
|
|
493
510
|
rawstr << exit->toString();
|
|
494
511
|
}
|
|
495
|
-
else if (
|
|
512
|
+
else if (CallICFGNode* call = SVFUtil::dyn_cast<CallICFGNode>(node))
|
|
496
513
|
{
|
|
497
514
|
rawstr << call->toString();
|
|
498
515
|
}
|
|
499
|
-
else if (
|
|
516
|
+
else if (RetICFGNode* ret = SVFUtil::dyn_cast<RetICFGNode>(node))
|
|
500
517
|
{
|
|
501
518
|
rawstr << ret->toString();
|
|
502
519
|
}
|
|
503
|
-
else if (
|
|
520
|
+
else if (GlobalICFGNode* glob = SVFUtil::dyn_cast<GlobalICFGNode>(node) )
|
|
504
521
|
{
|
|
505
522
|
SVFIR::SVFStmtList& edges = SVFIR::getPAG()->getSVFStmtList(glob);
|
|
506
523
|
for (SVFIR::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)
|
|
@@ -520,27 +537,27 @@ struct DOTGraphTraits<ICFG*> : public DOTGraphTraits<SVFIR*>
|
|
|
520
537
|
std::string str;
|
|
521
538
|
raw_string_ostream rawstr(str);
|
|
522
539
|
|
|
523
|
-
if(SVFUtil::isa<
|
|
540
|
+
if(SVFUtil::isa<IntraICFGNode>(node))
|
|
524
541
|
{
|
|
525
542
|
rawstr << "color=black";
|
|
526
543
|
}
|
|
527
|
-
else if(SVFUtil::isa<
|
|
544
|
+
else if(SVFUtil::isa<FunEntryICFGNode>(node))
|
|
528
545
|
{
|
|
529
546
|
rawstr << "color=yellow";
|
|
530
547
|
}
|
|
531
|
-
else if(SVFUtil::isa<
|
|
548
|
+
else if(SVFUtil::isa<FunExitICFGNode>(node))
|
|
532
549
|
{
|
|
533
550
|
rawstr << "color=green";
|
|
534
551
|
}
|
|
535
|
-
else if(SVFUtil::isa<
|
|
552
|
+
else if(SVFUtil::isa<CallICFGNode>(node))
|
|
536
553
|
{
|
|
537
554
|
rawstr << "color=red";
|
|
538
555
|
}
|
|
539
|
-
else if(SVFUtil::isa<
|
|
556
|
+
else if(SVFUtil::isa<RetICFGNode>(node))
|
|
540
557
|
{
|
|
541
558
|
rawstr << "color=blue";
|
|
542
559
|
}
|
|
543
|
-
else if(SVFUtil::isa<
|
|
560
|
+
else if(SVFUtil::isa<GlobalICFGNode>(node))
|
|
544
561
|
{
|
|
545
562
|
rawstr << "color=purple";
|
|
546
563
|
}
|
|
@@ -42,13 +42,13 @@ CallSiteID PTACallGraph::totalCallSiteNum = 1;
|
|
|
42
42
|
|
|
43
43
|
/// Add direct and indirect callsite
|
|
44
44
|
//@{
|
|
45
|
-
void PTACallGraphEdge::addDirectCallSite(const
|
|
45
|
+
void PTACallGraphEdge::addDirectCallSite(const CallICFGNode* call)
|
|
46
46
|
{
|
|
47
47
|
assert(SVFUtil::getCallee(call->getCallSite()) && "not a direct callsite??");
|
|
48
48
|
directCalls.insert(call);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
void PTACallGraphEdge::addInDirectCallSite(const
|
|
51
|
+
void PTACallGraphEdge::addInDirectCallSite(const CallICFGNode* call)
|
|
52
52
|
{
|
|
53
53
|
assert((nullptr == SVFUtil::getCallee(call->getCallSite()) || nullptr == SVFUtil::dyn_cast<Function> (SVFUtil::getForkedFun(call->getCallSite()))) && "not an indirect callsite??");
|
|
54
54
|
indirectCalls.insert(call);
|
|
@@ -162,7 +162,7 @@ PTACallGraphEdge* PTACallGraph::getGraphEdge(PTACallGraphNode* src, PTACallGraph
|
|
|
162
162
|
/*!
|
|
163
163
|
* Add direct call edges
|
|
164
164
|
*/
|
|
165
|
-
void PTACallGraph::addDirectCallGraphEdge(const
|
|
165
|
+
void PTACallGraph::addDirectCallGraphEdge(const CallICFGNode* cs,const SVFFunction* callerFun, const SVFFunction* calleeFun)
|
|
166
166
|
{
|
|
167
167
|
|
|
168
168
|
PTACallGraphNode* caller = getCallGraphNode(callerFun);
|
|
@@ -182,7 +182,7 @@ void PTACallGraph::addDirectCallGraphEdge(const CallBlockNode* cs,const SVFFunct
|
|
|
182
182
|
/*!
|
|
183
183
|
* Add indirect call edge to update call graph
|
|
184
184
|
*/
|
|
185
|
-
void PTACallGraph::addIndirectCallGraphEdge(const
|
|
185
|
+
void PTACallGraph::addIndirectCallGraphEdge(const CallICFGNode* cs,const SVFFunction* callerFun, const SVFFunction* calleeFun)
|
|
186
186
|
{
|
|
187
187
|
|
|
188
188
|
PTACallGraphNode* caller = getCallGraphNode(callerFun);
|
|
@@ -269,7 +269,7 @@ void PTACallGraph::verifyCallGraph()
|
|
|
269
269
|
const FunctionSet& targets = it->second;
|
|
270
270
|
if (targets.empty() == false)
|
|
271
271
|
{
|
|
272
|
-
const
|
|
272
|
+
const CallICFGNode* cs = it->first;
|
|
273
273
|
const SVFFunction* func = cs->getCaller();
|
|
274
274
|
if (getCallGraphNode(func)->isReachableFromProgEntry() == false)
|
|
275
275
|
writeWrnMsg(func->getName().str() + " has indirect call site but not reachable from main");
|
package/lib/Graphs/SVFG.cpp
CHANGED
|
@@ -163,7 +163,7 @@ const std::string ThreadMHPIndSVFGEdge::toString() const {
|
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
|
|
166
|
-
FormalOUTSVFGNode::FormalOUTSVFGNode(NodeID id, const MRVer* mrVer, const
|
|
166
|
+
FormalOUTSVFGNode::FormalOUTSVFGNode(NodeID id, const MRVer* mrVer, const FunExitICFGNode* funExit): MRSVFGNode(id, FPOUT)
|
|
167
167
|
{
|
|
168
168
|
cpts = mrVer->getMR()->getPointsTo();
|
|
169
169
|
ver = mrVer;
|
|
@@ -326,7 +326,7 @@ void SVFG::connectIndirectSVFGEdges()
|
|
|
326
326
|
mssa->getPTA()->getPTACallGraph()->getDirCallSitesInvokingCallee(formalIn->getFun(),callInstSet);
|
|
327
327
|
for(PTACallGraphEdge::CallInstSet::iterator it = callInstSet.begin(), eit = callInstSet.end(); it!=eit; ++it)
|
|
328
328
|
{
|
|
329
|
-
const
|
|
329
|
+
const CallICFGNode* cs = *it;
|
|
330
330
|
if(!mssa->hasMU(cs))
|
|
331
331
|
continue;
|
|
332
332
|
ActualINSVFGNodeSet& actualIns = getActualINSVFGNodes(cs);
|
|
@@ -344,7 +344,7 @@ void SVFG::connectIndirectSVFGEdges()
|
|
|
344
344
|
mssa->getPTA()->getPTACallGraph()->getDirCallSitesInvokingCallee(formalOut->getFun(),callInstSet);
|
|
345
345
|
for(PTACallGraphEdge::CallInstSet::iterator it = callInstSet.begin(), eit = callInstSet.end(); it!=eit; ++it)
|
|
346
346
|
{
|
|
347
|
-
const
|
|
347
|
+
const CallICFGNode* cs = *it;
|
|
348
348
|
if(!mssa->hasCHI(cs))
|
|
349
349
|
continue;
|
|
350
350
|
ActualOUTSVFGNodeSet& actualOuts = getActualOUTSVFGNodes(cs);
|
|
@@ -564,10 +564,10 @@ std::set<const SVFGNode*> SVFG::fromValue(const llvm::Value* value) const
|
|
|
564
564
|
/**
|
|
565
565
|
* Get all inter value flow edges at this indirect call site, including call and return edges.
|
|
566
566
|
*/
|
|
567
|
-
void SVFG::getInterVFEdgesForIndirectCallSite(const
|
|
567
|
+
void SVFG::getInterVFEdgesForIndirectCallSite(const CallICFGNode* callBlockNode, const SVFFunction* callee, SVFGEdgeSetTy& edges)
|
|
568
568
|
{
|
|
569
569
|
CallSiteID csId = getCallSiteID(callBlockNode, callee);
|
|
570
|
-
|
|
570
|
+
RetICFGNode* retBlockNode = pag->getICFG()->getRetBlockNode(callBlockNode->getCallSite());
|
|
571
571
|
|
|
572
572
|
// Find inter direct call edges between actual param and formal param.
|
|
573
573
|
if (pag->hasCallSiteArgsMap(callBlockNode) && pag->hasFunArgsList(callee))
|
|
@@ -638,7 +638,7 @@ void SVFG::getInterVFEdgesForIndirectCallSite(const CallBlockNode* callBlockNode
|
|
|
638
638
|
* Connect actual params/return to formal params/return for top-level variables.
|
|
639
639
|
* Also connect indirect actual in/out and formal in/out.
|
|
640
640
|
*/
|
|
641
|
-
void SVFG::connectCallerAndCallee(const
|
|
641
|
+
void SVFG::connectCallerAndCallee(const CallICFGNode* cs, const SVFFunction* callee, SVFGEdgeSetTy& edges)
|
|
642
642
|
{
|
|
643
643
|
VFG::connectCallerAndCallee(cs,callee,edges);
|
|
644
644
|
|
|
@@ -712,7 +712,7 @@ const SVFFunction* SVFG::isFunEntrySVFGNode(const SVFGNode* node) const
|
|
|
712
712
|
/*!
|
|
713
713
|
* Whether this is an callsite return SVFGNode (actual return, actual out)
|
|
714
714
|
*/
|
|
715
|
-
const
|
|
715
|
+
const CallICFGNode* SVFG::isCallSiteRetSVFGNode(const SVFGNode* node) const
|
|
716
716
|
{
|
|
717
717
|
if(const ActualRetSVFGNode* ar = SVFUtil::dyn_cast<ActualRetSVFGNode>(node))
|
|
718
718
|
{
|