svf-tools 1.0.342 → 1.0.346
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 +8 -8
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +9 -9
- 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 +8 -8
- 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/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 +45 -44
- package/SVF-doxygen/html/html/ICFG_8h_source.html +34 -34
- 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/LockAnalysis_8cpp_source.html +2 -2
- 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 +26 -26
- 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 +41 -41
- package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +47 -46
- package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -1
- 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/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 +16 -16
- 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 +31 -31
- 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 +31 -31
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +14 -14
- 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 +2 -2
- 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 +4 -4
- 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 +19 -19
- package/SVF-doxygen/html/html/VFG_8h_source.html +19 -19
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +6 -6
- 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_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 +51 -51
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +32 -32
- 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_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 +27 -27
- 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 +2 -2
- 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_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_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 +45 -45
- 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_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_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_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 +191 -184
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +69 -66
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +9 -9
- 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 +20 -20
- 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_1LeakChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +61 -61
- 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 +10 -10
- 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 +196 -196
- 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_1MemSSA-members.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +77 -77
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator-members.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +43 -39
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +90 -90
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
- 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_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_1PointerAnalysis-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +107 -107
- 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_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 +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +159 -159
- 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 +132 -132
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +58 -58
- 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_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 +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +4 -4
- 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 +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +15 -15
- 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 +41 -41
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +3 -3
- 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_1VersionedFlowSensitive-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +39 -39
- 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 +65 -67
- package/SVF-doxygen/html/html/functions_eval_r.html +3 -0
- 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 +86 -86
- package/SVF-doxygen/html/html/functions_func_h.html +17 -17
- package/SVF-doxygen/html/html/functions_func_i.html +12 -12
- 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 +2 -2
- 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 +22 -22
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_m.html +2 -2
- package/SVF-doxygen/html/html/functions_o.html +13 -13
- package/SVF-doxygen/html/html/functions_p.html +14 -14
- package/SVF-doxygen/html/html/functions_r.html +13 -12
- package/SVF-doxygen/html/html/functions_s.html +13 -13
- package/SVF-doxygen/html/html/functions_t.html +12 -14
- 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 +8 -8
- 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_r.html +1 -1
- package/SVF-doxygen/html/html/functions_w.html +9 -5
- package/SVF-doxygen/html/html/hierarchy.html +7 -7
- package/SVF-doxygen/html/html/namespaceSVF.html +11 -11
- package/SVF-doxygen/html/html/search/all_1.js +58 -58
- package/SVF-doxygen/html/html/search/all_10.js +8 -8
- package/SVF-doxygen/html/html/search/all_12.js +8 -7
- package/SVF-doxygen/html/html/search/all_13.js +11 -11
- package/SVF-doxygen/html/html/search/all_14.js +8 -8
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +4 -4
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +35 -34
- 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 +16 -16
- package/SVF-doxygen/html/html/search/all_c.js +2 -2
- package/SVF-doxygen/html/html/search/all_d.js +5 -5
- package/SVF-doxygen/html/html/search/all_e.js +3 -3
- package/SVF-doxygen/html/html/search/all_f.js +3 -3
- 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_e.js +2 -1
- package/SVF-doxygen/html/html/search/functions_0.js +55 -55
- package/SVF-doxygen/html/html/search/functions_10.js +3 -3
- 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 +12 -12
- package/SVF-doxygen/html/html/search/functions_b.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- 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_12.js +1 -1
- 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/search/variables_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +22 -22
- 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 +33 -33
- 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 +21 -21
- package/include/MemoryModel/SVFStatements.h +11 -11
- 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/NodeIDAllocator.h +3 -0
- 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 +55 -50
- 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/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/Util/NodeIDAllocator.cpp +12 -0
- package/lib/Util/Options.cpp +2 -1
- 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
package/lib/MTA/LockAnalysis.cpp
CHANGED
|
@@ -406,7 +406,7 @@ void LockAnalysis::handleFork(const CxtStmt& cts)
|
|
|
406
406
|
{
|
|
407
407
|
const CallInst* call = SVFUtil::cast<CallInst>(cts.getStmt());
|
|
408
408
|
const CallStrCxt& curCxt = cts.getContext();
|
|
409
|
-
|
|
409
|
+
CallICFGNode* cbn = tct->getCallBlockNode(call);
|
|
410
410
|
if(getTCG()->hasThreadForkEdge(cbn))
|
|
411
411
|
{
|
|
412
412
|
for (ThreadCallGraph::ForkEdgeSet::const_iterator cgIt = getTCG()->getForkEdgeBegin(cbn),
|
|
@@ -429,7 +429,7 @@ void LockAnalysis::handleCall(const CxtStmt& cts)
|
|
|
429
429
|
|
|
430
430
|
const CallInst* call = SVFUtil::cast<CallInst>(cts.getStmt());
|
|
431
431
|
const CallStrCxt& curCxt = cts.getContext();
|
|
432
|
-
|
|
432
|
+
CallICFGNode* cbn = tct->getCallBlockNode(call);
|
|
433
433
|
if (getTCG()->hasCallGraphEdge(cbn))
|
|
434
434
|
{
|
|
435
435
|
for (PTACallGraph::CallGraphEdgeSet::const_iterator cgIt = getTCG()->getCallEdgeBegin(cbn), ecgIt = getTCG()->getCallEdgeEnd(cbn);
|
|
@@ -518,7 +518,7 @@ void LockAnalysis::pushCxt(CallStrCxt& cxt, const Instruction* call, const Funct
|
|
|
518
518
|
const Function* caller = call->getParent()->getParent();
|
|
519
519
|
const SVFFunction* svfcallee = tct->getSVFFun(callee);
|
|
520
520
|
const SVFFunction* svfcaller = tct->getSVFFun(caller);
|
|
521
|
-
|
|
521
|
+
CallICFGNode* cbn = tct->getCallBlockNode(call);
|
|
522
522
|
CallSiteID csId = getTCG()->getCallSiteID(cbn, svfcallee);
|
|
523
523
|
|
|
524
524
|
// /// handle calling context for candidate functions only
|
|
@@ -537,7 +537,7 @@ bool LockAnalysis::matchCxt(CallStrCxt& cxt, const Instruction* call, const Func
|
|
|
537
537
|
const Function* caller = call->getParent()->getParent();
|
|
538
538
|
const SVFFunction* svfcallee = tct->getSVFFun(callee);
|
|
539
539
|
const SVFFunction* svfcaller = tct->getSVFFun(caller);
|
|
540
|
-
|
|
540
|
+
CallICFGNode* cbn = tct->getCallBlockNode(call);
|
|
541
541
|
CallSiteID csId = getTCG()->getCallSiteID(cbn, svfcallee);
|
|
542
542
|
|
|
543
543
|
// /// handle calling context for candidate functions only
|
package/lib/MTA/MHP.cpp
CHANGED
|
@@ -244,7 +244,7 @@ void MHP::handleFork(const CxtThreadStmt& cts, NodeID rootTid)
|
|
|
244
244
|
const CallStrCxt& curCxt = cts.getContext();
|
|
245
245
|
|
|
246
246
|
assert(isTDFork(call));
|
|
247
|
-
|
|
247
|
+
CallICFGNode* cbn = getCBN(call);
|
|
248
248
|
if(tct->getThreadCallGraph()->hasCallGraphEdge(cbn))
|
|
249
249
|
{
|
|
250
250
|
|
|
@@ -324,7 +324,7 @@ void MHP::handleCall(const CxtThreadStmt& cts, NodeID rootTid)
|
|
|
324
324
|
|
|
325
325
|
const CallInst* call = SVFUtil::cast<CallInst>(cts.getStmt());
|
|
326
326
|
const CallStrCxt& curCxt = cts.getContext();
|
|
327
|
-
|
|
327
|
+
CallICFGNode* cbn = getCBN(call);
|
|
328
328
|
if(tct->getThreadCallGraph()->hasCallGraphEdge(cbn))
|
|
329
329
|
{
|
|
330
330
|
for (PTACallGraph::CallGraphEdgeSet::const_iterator cgIt = tcg->getCallEdgeBegin(cbn),
|
|
@@ -830,7 +830,7 @@ void ForkJoinAnalysis::handleFork(const CxtStmt& cts, NodeID rootTid)
|
|
|
830
830
|
const CallStrCxt& curCxt = cts.getContext();
|
|
831
831
|
|
|
832
832
|
assert(isTDFork(call));
|
|
833
|
-
|
|
833
|
+
CallICFGNode* cbn = getCBN(call);
|
|
834
834
|
if(getTCG()->hasThreadForkEdge(cbn))
|
|
835
835
|
{
|
|
836
836
|
for (ThreadCallGraph::ForkEdgeSet::const_iterator cgIt = getTCG()->getForkEdgeBegin(cbn),
|
|
@@ -856,7 +856,7 @@ void ForkJoinAnalysis::handleJoin(const CxtStmt& cts, NodeID rootTid)
|
|
|
856
856
|
const CallStrCxt& curCxt = cts.getContext();
|
|
857
857
|
|
|
858
858
|
assert(isTDJoin(call));
|
|
859
|
-
|
|
859
|
+
CallICFGNode* cbn = getCBN(call);
|
|
860
860
|
if(getTCG()->hasCallGraphEdge(cbn))
|
|
861
861
|
{
|
|
862
862
|
const Instruction* forkSite = tct->getTCTNode(rootTid)->getCxtThread().getThread();
|
|
@@ -915,7 +915,7 @@ void ForkJoinAnalysis::handleCall(const CxtStmt& cts, NodeID rootTid)
|
|
|
915
915
|
|
|
916
916
|
const CallInst* call = SVFUtil::cast<CallInst>(cts.getStmt());
|
|
917
917
|
const CallStrCxt& curCxt = cts.getContext();
|
|
918
|
-
|
|
918
|
+
CallICFGNode* cbn = getCBN(call);
|
|
919
919
|
if(getTCG()->hasCallGraphEdge(cbn))
|
|
920
920
|
{
|
|
921
921
|
for (PTACallGraph::CallGraphEdgeSet::const_iterator cgIt = getTCG()->getCallEdgeBegin(cbn),
|
|
@@ -96,7 +96,7 @@ CallStrCxt MTAResultValidator::getCxtArg(const Instruction* inst, unsigned int a
|
|
|
96
96
|
const SVFFunction* callee = SVFUtil::getFunction(y[1]);
|
|
97
97
|
CallSite cs = SVFUtil::getLLVMCallSite(csnumToInstMap[atoi(y[0].c_str())]);
|
|
98
98
|
assert(callee && "callee error");
|
|
99
|
-
|
|
99
|
+
CallICFGNode* cbn = mhp->getTCT()->getCallBlockNode(cs.getInstruction());
|
|
100
100
|
CallSiteID csId = tcg->getCallSiteID(cbn, callee);
|
|
101
101
|
cxt.push_back(csId);
|
|
102
102
|
}
|
package/lib/MTA/PCG.cpp
CHANGED
|
@@ -206,7 +206,7 @@ void PCG::identifyFollowers()
|
|
|
206
206
|
// if this is an call/invoke instruction but not a spawn site
|
|
207
207
|
if ((SVFUtil::isa<CallInst>(inst) || SVFUtil::isa<InvokeInst>(inst)) && !isSpawnsite(inst))
|
|
208
208
|
{
|
|
209
|
-
|
|
209
|
+
CallICFGNode* cbn = getCallBlockNode(inst);
|
|
210
210
|
if (callgraph->hasCallGraphEdge(cbn))
|
|
211
211
|
{
|
|
212
212
|
for (PTACallGraph::CallGraphEdgeSet::const_iterator cgIt = callgraph->getCallEdgeBegin(cbn),
|
|
@@ -348,7 +348,7 @@ void PointerAnalysis::dumpPts(NodeID ptr, const PointsTo& pts)
|
|
|
348
348
|
/*!
|
|
349
349
|
* Print indirect call targets at an indirect callsite
|
|
350
350
|
*/
|
|
351
|
-
void PointerAnalysis::printIndCSTargets(const
|
|
351
|
+
void PointerAnalysis::printIndCSTargets(const CallICFGNode* cs, const FunctionSet& targets)
|
|
352
352
|
{
|
|
353
353
|
outs() << "\nNodeID: " << getFunPtr(cs);
|
|
354
354
|
outs() << "\nCallSite: ";
|
|
@@ -385,7 +385,7 @@ void PointerAnalysis::printIndCSTargets()
|
|
|
385
385
|
CallEdgeMap::const_iterator eit = callEdges.end();
|
|
386
386
|
for (; it != eit; ++it)
|
|
387
387
|
{
|
|
388
|
-
const
|
|
388
|
+
const CallICFGNode* cs = it->first;
|
|
389
389
|
const FunctionSet& targets = it->second;
|
|
390
390
|
printIndCSTargets(cs, targets);
|
|
391
391
|
}
|
|
@@ -395,7 +395,7 @@ void PointerAnalysis::printIndCSTargets()
|
|
|
395
395
|
CallSiteToFunPtrMap::const_iterator csEit = indCS.end();
|
|
396
396
|
for (; csIt != csEit; ++csIt)
|
|
397
397
|
{
|
|
398
|
-
const
|
|
398
|
+
const CallICFGNode* cs = csIt->first;
|
|
399
399
|
if (hasIndCSCallees(cs) == false)
|
|
400
400
|
{
|
|
401
401
|
outs() << "\nNodeID: " << csIt->second;
|
|
@@ -412,7 +412,7 @@ void PointerAnalysis::printIndCSTargets()
|
|
|
412
412
|
/*!
|
|
413
413
|
* Resolve indirect calls
|
|
414
414
|
*/
|
|
415
|
-
void PointerAnalysis::resolveIndCalls(const
|
|
415
|
+
void PointerAnalysis::resolveIndCalls(const CallICFGNode* cs, const PointsTo& target, CallEdgeMap& newEdges, LLVMCallGraph*)
|
|
416
416
|
{
|
|
417
417
|
|
|
418
418
|
assert(pag->isIndirectCallSites(cs) && "not an indirect callsite?");
|
|
@@ -460,7 +460,7 @@ void PointerAnalysis::resolveIndCalls(const CallBlockNode* cs, const PointsTo& t
|
|
|
460
460
|
/*!
|
|
461
461
|
* Match arguments for callsite at caller and callee
|
|
462
462
|
*/
|
|
463
|
-
bool PointerAnalysis::matchArgs(const
|
|
463
|
+
bool PointerAnalysis::matchArgs(const CallICFGNode* cs, const SVFFunction* callee)
|
|
464
464
|
{
|
|
465
465
|
if(ThreadAPI::getThreadAPI()->isTDFork(cs->getCallSite()))
|
|
466
466
|
return true;
|
|
@@ -471,7 +471,7 @@ bool PointerAnalysis::matchArgs(const CallBlockNode* cs, const SVFFunction* call
|
|
|
471
471
|
/*
|
|
472
472
|
* Get virtual functions "vfns" based on CHA
|
|
473
473
|
*/
|
|
474
|
-
void PointerAnalysis::getVFnsFromCHA(const
|
|
474
|
+
void PointerAnalysis::getVFnsFromCHA(const CallICFGNode* cs, VFunSet &vfns)
|
|
475
475
|
{
|
|
476
476
|
if (chgraph->csHasVFnsBasedonCHA(SVFUtil::getLLVMCallSite(cs->getCallSite())))
|
|
477
477
|
vfns = chgraph->getCSVFsBasedonCHA(SVFUtil::getLLVMCallSite(cs->getCallSite()));
|
|
@@ -480,7 +480,7 @@ void PointerAnalysis::getVFnsFromCHA(const CallBlockNode* cs, VFunSet &vfns)
|
|
|
480
480
|
/*
|
|
481
481
|
* Get virtual functions "vfns" from PoninsTo set "target" for callsite "cs"
|
|
482
482
|
*/
|
|
483
|
-
void PointerAnalysis::getVFnsFromPts(const
|
|
483
|
+
void PointerAnalysis::getVFnsFromPts(const CallICFGNode* cs, const PointsTo &target, VFunSet &vfns)
|
|
484
484
|
{
|
|
485
485
|
|
|
486
486
|
if (chgraph->csHasVtblsBasedonCHA(SVFUtil::getLLVMCallSite(cs->getCallSite())))
|
|
@@ -506,7 +506,7 @@ void PointerAnalysis::getVFnsFromPts(const CallBlockNode* cs, const PointsTo &ta
|
|
|
506
506
|
/*
|
|
507
507
|
* Connect callsite "cs" to virtual functions in "vfns"
|
|
508
508
|
*/
|
|
509
|
-
void PointerAnalysis::connectVCallToVFns(const
|
|
509
|
+
void PointerAnalysis::connectVCallToVFns(const CallICFGNode* cs, const VFunSet &vfns, CallEdgeMap& newEdges)
|
|
510
510
|
{
|
|
511
511
|
//// connect all valid functions
|
|
512
512
|
for (VFunSet::const_iterator fit = vfns.begin(),
|
|
@@ -521,14 +521,14 @@ void PointerAnalysis::connectVCallToVFns(const CallBlockNode* cs, const VFunSet
|
|
|
521
521
|
{
|
|
522
522
|
newEdges[cs].insert(callee);
|
|
523
523
|
getIndCallMap()[cs].insert(callee);
|
|
524
|
-
const
|
|
524
|
+
const CallICFGNode* callBlockNode = pag->getICFG()->getCallBlockNode(cs->getCallSite());
|
|
525
525
|
ptaCallGraph->addIndirectCallGraphEdge(callBlockNode, cs->getCaller(),callee);
|
|
526
526
|
}
|
|
527
527
|
}
|
|
528
528
|
}
|
|
529
529
|
|
|
530
530
|
/// Resolve cpp indirect call edges
|
|
531
|
-
void PointerAnalysis::resolveCPPIndCalls(const
|
|
531
|
+
void PointerAnalysis::resolveCPPIndCalls(const CallICFGNode* cs, const PointsTo& target, CallEdgeMap& newEdges)
|
|
532
532
|
{
|
|
533
533
|
assert(isVirtualCallSite(SVFUtil::getLLVMCallSite(cs->getCallSite())) && "not cpp virtual call");
|
|
534
534
|
|
|
@@ -382,7 +382,7 @@ void BVDataPTAImpl::onTheFlyCallGraphSolve(const CallSiteToFunPtrMap& callsites,
|
|
|
382
382
|
{
|
|
383
383
|
for(CallSiteToFunPtrMap::const_iterator iter = callsites.begin(), eiter = callsites.end(); iter!=eiter; ++iter)
|
|
384
384
|
{
|
|
385
|
-
const
|
|
385
|
+
const CallICFGNode* cs = iter->first;
|
|
386
386
|
|
|
387
387
|
if (isVirtualCallSite(SVFUtil::getLLVMCallSite(cs->getCallSite())))
|
|
388
388
|
{
|
|
@@ -201,7 +201,7 @@ LoadStmt* SVFIR::addLoadStmt(NodeID src, NodeID dst)
|
|
|
201
201
|
* Add Store edge
|
|
202
202
|
* Note that two store instructions may share the same Store SVFStmt
|
|
203
203
|
*/
|
|
204
|
-
StoreStmt* SVFIR::addStoreStmt(NodeID src, NodeID dst, const
|
|
204
|
+
StoreStmt* SVFIR::addStoreStmt(NodeID src, NodeID dst, const IntraICFGNode* curVal)
|
|
205
205
|
{
|
|
206
206
|
SVFVar* srcNode = getGNode(src);
|
|
207
207
|
SVFVar* dstNode = getGNode(dst);
|
|
@@ -219,7 +219,7 @@ StoreStmt* SVFIR::addStoreStmt(NodeID src, NodeID dst, const IntraBlockNode* cur
|
|
|
219
219
|
/*!
|
|
220
220
|
* Add Call edge
|
|
221
221
|
*/
|
|
222
|
-
CallPE* SVFIR::addCallPE(NodeID src, NodeID dst, const
|
|
222
|
+
CallPE* SVFIR::addCallPE(NodeID src, NodeID dst, const CallICFGNode* cs)
|
|
223
223
|
{
|
|
224
224
|
SVFVar* srcNode = getGNode(src);
|
|
225
225
|
SVFVar* dstNode = getGNode(dst);
|
|
@@ -237,7 +237,7 @@ CallPE* SVFIR::addCallPE(NodeID src, NodeID dst, const CallBlockNode* cs)
|
|
|
237
237
|
/*!
|
|
238
238
|
* Add Return edge
|
|
239
239
|
*/
|
|
240
|
-
RetPE* SVFIR::addRetPE(NodeID src, NodeID dst, const
|
|
240
|
+
RetPE* SVFIR::addRetPE(NodeID src, NodeID dst, const CallICFGNode* cs)
|
|
241
241
|
{
|
|
242
242
|
SVFVar* srcNode = getGNode(src);
|
|
243
243
|
SVFVar* dstNode = getGNode(dst);
|
|
@@ -266,7 +266,7 @@ SVFStmt* SVFIR::addBlackHoleAddrStmt(NodeID node)
|
|
|
266
266
|
/*!
|
|
267
267
|
* Add Thread fork edge for parameter passing from a spawner to its spawnees
|
|
268
268
|
*/
|
|
269
|
-
TDForkPE* SVFIR::addThreadForkPE(NodeID src, NodeID dst, const
|
|
269
|
+
TDForkPE* SVFIR::addThreadForkPE(NodeID src, NodeID dst, const CallICFGNode* cs)
|
|
270
270
|
{
|
|
271
271
|
SVFVar* srcNode = getGNode(src);
|
|
272
272
|
SVFVar* dstNode = getGNode(dst);
|
|
@@ -284,7 +284,7 @@ TDForkPE* SVFIR::addThreadForkPE(NodeID src, NodeID dst, const CallBlockNode* cs
|
|
|
284
284
|
/*!
|
|
285
285
|
* Add Thread fork edge for parameter passing from a spawnee back to its spawners
|
|
286
286
|
*/
|
|
287
|
-
TDJoinPE* SVFIR::addThreadJoinPE(NodeID src, NodeID dst, const
|
|
287
|
+
TDJoinPE* SVFIR::addThreadJoinPE(NodeID src, NodeID dst, const CallICFGNode* cs)
|
|
288
288
|
{
|
|
289
289
|
SVFVar* srcNode = getGNode(src);
|
|
290
290
|
SVFVar* dstNode = getGNode(dst);
|
|
@@ -38,7 +38,7 @@ void DoubleFreeChecker::reportBug(ProgSlice* slice)
|
|
|
38
38
|
if(slice->isSatisfiableForPairs() == false)
|
|
39
39
|
{
|
|
40
40
|
const SVFGNode* src = slice->getSource();
|
|
41
|
-
const
|
|
41
|
+
const CallICFGNode* cs = getSrcCSID(src);
|
|
42
42
|
SVFUtil::errs() << bugMsg2("\t Double Free :") << " memory allocation at : ("
|
|
43
43
|
<< getSourceLoc(cs->getCallSite()) << ")\n";
|
|
44
44
|
SVFUtil::errs() << "\t\t double free path: \n" << slice->evalFinalCond() << "\n";
|
|
@@ -35,14 +35,14 @@ using namespace SVFUtil;
|
|
|
35
35
|
|
|
36
36
|
void FileChecker::reportNeverClose(const SVFGNode* src)
|
|
37
37
|
{
|
|
38
|
-
const
|
|
38
|
+
const CallICFGNode* cs = getSrcCSID(src);
|
|
39
39
|
SVFUtil::errs() << bugMsg1("\t FileNeverClose :") << " file open location at : ("
|
|
40
40
|
<< getSourceLoc(cs->getCallSite()) << ")\n";
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
void FileChecker::reportPartialClose(const SVFGNode* src)
|
|
44
44
|
{
|
|
45
|
-
const
|
|
45
|
+
const CallICFGNode* cs = getSrcCSID(src);
|
|
46
46
|
SVFUtil::errs() << bugMsg2("\t PartialFileClose :") << " file open location at : ("
|
|
47
47
|
<< getSourceLoc(cs->getCallSite()) << ")\n";
|
|
48
48
|
}
|
|
@@ -46,7 +46,7 @@ void LeakChecker::initSrcs()
|
|
|
46
46
|
for(SVFIR::CSToRetMap::iterator it = pag->getCallSiteRets().begin(),
|
|
47
47
|
eit = pag->getCallSiteRets().end(); it!=eit; ++it)
|
|
48
48
|
{
|
|
49
|
-
const
|
|
49
|
+
const RetICFGNode* cs = it->first;
|
|
50
50
|
/// if this callsite return reside in a dead function then we do not care about its leaks
|
|
51
51
|
/// for example instruction `int* p = malloc(size)` is in a dead function, then program won't allocate this memory
|
|
52
52
|
/// for example a customized malloc `int p = malloc()` returns an integer value, then program treat it as a system malloc
|
|
@@ -65,8 +65,8 @@ void LeakChecker::initSrcs()
|
|
|
65
65
|
worklist.push(it->first->getCallBlockNode());
|
|
66
66
|
while (!worklist.empty())
|
|
67
67
|
{
|
|
68
|
-
const
|
|
69
|
-
const
|
|
68
|
+
const CallICFGNode* cs = worklist.pop();
|
|
69
|
+
const RetICFGNode* retBlockNode = icfg->getRetBlockNode(cs->getCallSite());
|
|
70
70
|
const PAGNode* pagNode = pag->getCallSiteRet(retBlockNode);
|
|
71
71
|
const SVFGNode* node = getSVFG()->getDefSVFGNode(pagNode);
|
|
72
72
|
if (visited.test(node->getId()) == 0)
|
|
@@ -138,14 +138,14 @@ void LeakChecker::initSnks()
|
|
|
138
138
|
|
|
139
139
|
void LeakChecker::reportNeverFree(const SVFGNode* src)
|
|
140
140
|
{
|
|
141
|
-
const
|
|
141
|
+
const CallICFGNode* cs = getSrcCSID(src);
|
|
142
142
|
SVFUtil::errs() << bugMsg1("\t NeverFree :") << " memory allocation at : ("
|
|
143
143
|
<< getSourceLoc(cs->getCallSite()) << ")\n";
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
void LeakChecker::reportPartialLeak(const SVFGNode* src)
|
|
147
147
|
{
|
|
148
|
-
const
|
|
148
|
+
const CallICFGNode* cs = getSrcCSID(src);
|
|
149
149
|
SVFUtil::errs() << bugMsg2("\t PartialLeak :") << " memory allocation at : ("
|
|
150
150
|
<< getSourceLoc(cs->getCallSite()) << ")\n";
|
|
151
151
|
}
|
|
@@ -175,7 +175,7 @@ void LeakChecker::reportBug(ProgSlice* slice)
|
|
|
175
175
|
void LeakChecker::testsValidation(const ProgSlice* slice)
|
|
176
176
|
{
|
|
177
177
|
const SVFGNode* source = slice->getSource();
|
|
178
|
-
const
|
|
178
|
+
const CallICFGNode* cs = getSrcCSID(source);
|
|
179
179
|
const SVFFunction* fun = getCallee(cs->getCallSite());
|
|
180
180
|
if(fun==nullptr)
|
|
181
181
|
return;
|
|
@@ -188,7 +188,7 @@ void LeakChecker::testsValidation(const ProgSlice* slice)
|
|
|
188
188
|
void LeakChecker::validateSuccessTests(const SVFGNode* source, const SVFFunction* fun)
|
|
189
189
|
{
|
|
190
190
|
|
|
191
|
-
const
|
|
191
|
+
const CallICFGNode* cs = getSrcCSID(source);
|
|
192
192
|
|
|
193
193
|
bool success = false;
|
|
194
194
|
|
|
@@ -241,7 +241,7 @@ void LeakChecker::validateSuccessTests(const SVFGNode* source, const SVFFunction
|
|
|
241
241
|
void LeakChecker::validateExpectedFailureTests(const SVFGNode* source, const SVFFunction* fun)
|
|
242
242
|
{
|
|
243
243
|
|
|
244
|
-
const
|
|
244
|
+
const CallICFGNode* cs = getSrcCSID(source);
|
|
245
245
|
|
|
246
246
|
bool expectedFailure = false;
|
|
247
247
|
|
package/lib/SABER/ProgSlice.cpp
CHANGED
|
@@ -130,7 +130,7 @@ bool ProgSlice::isSatisfiableForPairs()
|
|
|
130
130
|
return true;
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
const
|
|
133
|
+
const CallICFGNode* ProgSlice::getCallSite(const SVFGEdge* edge) const
|
|
134
134
|
{
|
|
135
135
|
assert(edge->isCallVFGEdge() && "not a call svfg edge?");
|
|
136
136
|
if(const CallDirSVFGEdge* callEdge = SVFUtil::dyn_cast<CallDirSVFGEdge>(edge))
|
|
@@ -138,7 +138,7 @@ const CallBlockNode* ProgSlice::getCallSite(const SVFGEdge* edge) const
|
|
|
138
138
|
else
|
|
139
139
|
return getSVFG()->getCallSite(SVFUtil::cast<CallIndSVFGEdge>(edge)->getCallSiteId());
|
|
140
140
|
}
|
|
141
|
-
const
|
|
141
|
+
const CallICFGNode* ProgSlice::getRetSite(const SVFGEdge* edge) const
|
|
142
142
|
{
|
|
143
143
|
assert(edge->isRetVFGEdge() && "not a return svfg edge?");
|
|
144
144
|
if(const RetDirSVFGEdge* callEdge = SVFUtil::dyn_cast<RetDirSVFGEdge>(edge))
|
|
@@ -55,7 +55,7 @@ PTACallGraph* CallGraphBuilder::buildCallGraph(SVFModule* svfModule)
|
|
|
55
55
|
{
|
|
56
56
|
if(const SVFFunction* callee = getCallee(inst))
|
|
57
57
|
{
|
|
58
|
-
const
|
|
58
|
+
const CallICFGNode* callBlockNode = icfg->getCallBlockNode(inst);
|
|
59
59
|
const SVFFunction* caller = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(fun);
|
|
60
60
|
callgraph->addDirectCallGraphEdge(callBlockNode,caller,callee);
|
|
61
61
|
}
|
|
@@ -83,7 +83,7 @@ PTACallGraph* ThreadCallGraphBuilder::buildThreadCallGraph(SVFModule* svfModule)
|
|
|
83
83
|
const Instruction *inst = &*II;
|
|
84
84
|
if (tdAPI->isTDFork(inst))
|
|
85
85
|
{
|
|
86
|
-
const
|
|
86
|
+
const CallICFGNode* cs = icfg->getCallBlockNode(inst);
|
|
87
87
|
cg->addForksite(cs);
|
|
88
88
|
const Function* forkee = SVFUtil::dyn_cast<Function>(tdAPI->getForkedFun(inst));
|
|
89
89
|
if (forkee)
|
|
@@ -98,7 +98,7 @@ PTACallGraph* ThreadCallGraphBuilder::buildThreadCallGraph(SVFModule* svfModule)
|
|
|
98
98
|
}
|
|
99
99
|
else if (tdAPI->isHareParFor(inst))
|
|
100
100
|
{
|
|
101
|
-
const
|
|
101
|
+
const CallICFGNode* cs = icfg->getCallBlockNode(inst);
|
|
102
102
|
cg->addParForSite(cs);
|
|
103
103
|
const Function* taskFunc = SVFUtil::dyn_cast<Function>(tdAPI->getTaskFuncAtHareParForSite(inst));
|
|
104
104
|
if (taskFunc)
|
|
@@ -122,7 +122,7 @@ PTACallGraph* ThreadCallGraphBuilder::buildThreadCallGraph(SVFModule* svfModule)
|
|
|
122
122
|
const Instruction *inst = &*II;
|
|
123
123
|
if (tdAPI->isTDJoin(inst))
|
|
124
124
|
{
|
|
125
|
-
const
|
|
125
|
+
const CallICFGNode* cs = icfg->getCallBlockNode(inst);
|
|
126
126
|
cg->addJoinsite(cs);
|
|
127
127
|
}
|
|
128
128
|
}
|
|
@@ -31,7 +31,7 @@ void ICFGPrinter::printICFGToJson(const std::string& filename)
|
|
|
31
31
|
llvm::json::Object ICFGNode_Obj;
|
|
32
32
|
ICFGNode_Obj["ICFG_ID"] = id;
|
|
33
33
|
ICFGNode_Obj["Node Type"] = getICFGKind(node->getNodeKind());
|
|
34
|
-
if(
|
|
34
|
+
if(IntraICFGNode* bNode = SVFUtil::dyn_cast<IntraICFGNode>(node))
|
|
35
35
|
{
|
|
36
36
|
ICFGNode_Obj["Source Location"] = getSourceLoc(bNode->getInst());
|
|
37
37
|
SVFIR::SVFStmtList& edges = SVFIR::getPAG()->getPTASVFStmtList(bNode);
|
|
@@ -61,7 +61,7 @@ void ICFGPrinter::printICFGToJson(const std::string& filename)
|
|
|
61
61
|
llvm::json::Value PagEdge_value = llvm::json::Array{PAGEdge_array};
|
|
62
62
|
ICFGNode_Obj["SVFIR Edges"] = PagEdge_value;
|
|
63
63
|
}
|
|
64
|
-
else if(
|
|
64
|
+
else if(FunEntryICFGNode* entry = SVFUtil::dyn_cast<FunEntryICFGNode>(node))
|
|
65
65
|
{
|
|
66
66
|
if (isExtCall(entry->getFun()))
|
|
67
67
|
ICFGNode_Obj["isExtCall"] = true;
|
|
@@ -72,7 +72,7 @@ void ICFGPrinter::printICFGToJson(const std::string& filename)
|
|
|
72
72
|
}
|
|
73
73
|
ICFGNode_Obj["Function Name"] = entry->getFun()->getName();
|
|
74
74
|
}
|
|
75
|
-
else if (
|
|
75
|
+
else if (FunExitICFGNode* exit = SVFUtil::dyn_cast<FunExitICFGNode>(node))
|
|
76
76
|
{
|
|
77
77
|
if (isExtCall(exit->getFun()))
|
|
78
78
|
ICFGNode_Obj["isExtCall"] = true;
|
|
@@ -83,11 +83,11 @@ void ICFGPrinter::printICFGToJson(const std::string& filename)
|
|
|
83
83
|
}
|
|
84
84
|
ICFGNode_Obj["Function Name"] = exit->getFun()->getName();
|
|
85
85
|
}
|
|
86
|
-
else if (
|
|
86
|
+
else if (CallICFGNode* call = SVFUtil::dyn_cast<CallICFGNode>(node))
|
|
87
87
|
{
|
|
88
88
|
ICFGNode_Obj["Source Location"] = getSourceLoc(call->getCallSite());
|
|
89
89
|
}
|
|
90
|
-
else if (
|
|
90
|
+
else if (RetICFGNode* ret = SVFUtil::dyn_cast<RetICFGNode>(node))
|
|
91
91
|
{
|
|
92
92
|
ICFGNode_Obj["Source Location"] = getSourceLoc(ret->getCallSite());
|
|
93
93
|
}
|
|
@@ -58,7 +58,7 @@ void ICFGBuilder::build(SVFModule* svfModule)
|
|
|
58
58
|
*/
|
|
59
59
|
void ICFGBuilder::processFunEntry(const SVFFunction* fun, WorkList& worklist)
|
|
60
60
|
{
|
|
61
|
-
|
|
61
|
+
FunEntryICFGNode* FunEntryICFGNode = icfg->getFunEntryBlockNode(fun);
|
|
62
62
|
const Instruction* entryInst = &((fun->getLLVMFun()->getEntryBlock()).front());
|
|
63
63
|
InstVec insts;
|
|
64
64
|
if (isIntrinsicInst(entryInst))
|
|
@@ -69,7 +69,7 @@ void ICFGBuilder::processFunEntry(const SVFFunction* fun, WorkList& worklist)
|
|
|
69
69
|
nit != enit; ++nit)
|
|
70
70
|
{
|
|
71
71
|
ICFGNode* instNode = getOrAddBlockICFGNode(*nit); //add interprocedure edge
|
|
72
|
-
icfg->addIntraEdge(
|
|
72
|
+
icfg->addIntraEdge(FunEntryICFGNode, instNode);
|
|
73
73
|
worklist.push(*nit);
|
|
74
74
|
}
|
|
75
75
|
}
|
|
@@ -92,8 +92,8 @@ void ICFGBuilder::processFunBody(WorkList& worklist)
|
|
|
92
92
|
{
|
|
93
93
|
const Function* fun = inst->getFunction();
|
|
94
94
|
const SVFFunction* svfFun = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(fun);
|
|
95
|
-
|
|
96
|
-
icfg->addIntraEdge(srcNode,
|
|
95
|
+
FunExitICFGNode* FunExitICFGNode = icfg->getFunExitBlockNode(svfFun);
|
|
96
|
+
icfg->addIntraEdge(srcNode, FunExitICFGNode);
|
|
97
97
|
}
|
|
98
98
|
InstVec nextInsts;
|
|
99
99
|
getNextInsts(inst, nextInsts);
|
|
@@ -105,8 +105,7 @@ void ICFGBuilder::processFunBody(WorkList& worklist)
|
|
|
105
105
|
ICFGNode* dstNode = getOrAddBlockICFGNode(succ);
|
|
106
106
|
if (isNonInstricCallSite(inst))
|
|
107
107
|
{
|
|
108
|
-
|
|
109
|
-
icfg->addIntraEdge(srcNode, retICFGNode);
|
|
108
|
+
RetICFGNode* retICFGNode = getOrAddRetICFGNode(inst);
|
|
110
109
|
srcNode = retICFGNode;
|
|
111
110
|
}
|
|
112
111
|
|
|
@@ -118,8 +117,7 @@ void ICFGBuilder::processFunBody(WorkList& worklist)
|
|
|
118
117
|
else
|
|
119
118
|
icfg->addIntraEdge(srcNode, dstNode);
|
|
120
119
|
}
|
|
121
|
-
|
|
122
|
-
if (const SwitchInst* si = SVFUtil::dyn_cast<SwitchInst>(inst))
|
|
120
|
+
else if (const SwitchInst* si = SVFUtil::dyn_cast<SwitchInst>(inst))
|
|
123
121
|
{
|
|
124
122
|
icfg->addConditionalIntraEdge(srcNode, dstNode, si->getCondition(),branchID);
|
|
125
123
|
}
|
|
@@ -140,14 +138,14 @@ void ICFGBuilder::processFunBody(WorkList& worklist)
|
|
|
140
138
|
*/
|
|
141
139
|
void ICFGBuilder::processFunExit(const SVFFunction* fun)
|
|
142
140
|
{
|
|
143
|
-
|
|
141
|
+
FunExitICFGNode* FunExitICFGNode = icfg->getFunExitBlockNode(fun);
|
|
144
142
|
|
|
145
143
|
for (inst_iterator II = inst_begin(fun->getLLVMFun()), EE = inst_end(fun->getLLVMFun()); II != EE; ++II)
|
|
146
144
|
{
|
|
147
145
|
const Instruction *inst = &*II;
|
|
148
146
|
if(SVFUtil::isa<ReturnInst>(inst)) {
|
|
149
147
|
ICFGNode* instNode = getOrAddBlockICFGNode(inst);
|
|
150
|
-
icfg->addIntraEdge(instNode,
|
|
148
|
+
icfg->addIntraEdge(instNode, FunExitICFGNode);
|
|
151
149
|
}
|
|
152
150
|
}
|
|
153
151
|
}
|
|
@@ -159,13 +157,12 @@ void ICFGBuilder::processFunExit(const SVFFunction* fun)
|
|
|
159
157
|
* (1) Add and get CallBlockICFGNode
|
|
160
158
|
* (2) Handle call instruction by creating interprocedural edges
|
|
161
159
|
*/
|
|
162
|
-
|
|
160
|
+
InterICFGNode* ICFGBuilder::getOrAddInterBlockICFGNode(const Instruction* inst)
|
|
163
161
|
{
|
|
164
162
|
assert(SVFUtil::isCallSite(inst) && "not a call instruction?");
|
|
165
163
|
assert(SVFUtil::isNonInstricCallSite(inst) && "associating an intrinsic debug instruction with an ICFGNode!");
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
addICFGInterEdges(inst, callee); //creating interprocedural edges
|
|
164
|
+
CallICFGNode* callICFGNode = getOrAddCallICFGNode(inst);
|
|
165
|
+
addICFGInterEdges(inst, getCallee(inst)); //creating interprocedural edges
|
|
169
166
|
return callICFGNode;
|
|
170
167
|
}
|
|
171
168
|
|
|
@@ -174,15 +171,24 @@ InterBlockNode* ICFGBuilder::getOrAddInterBlockICFGNode(const Instruction* inst)
|
|
|
174
171
|
*/
|
|
175
172
|
void ICFGBuilder::addICFGInterEdges(const Instruction* cs, const SVFFunction* callee)
|
|
176
173
|
{
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
if
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
174
|
+
CallICFGNode* CallICFGNode = getOrAddCallICFGNode(cs);
|
|
175
|
+
RetICFGNode* retBlockNode = getOrAddRetICFGNode(cs);
|
|
176
|
+
|
|
177
|
+
/// direct call
|
|
178
|
+
if(callee){
|
|
179
|
+
FunEntryICFGNode* calleeEntryNode = icfg->getFunEntryBlockNode(callee);
|
|
180
|
+
FunExitICFGNode* calleeExitNode = icfg->getFunExitBlockNode(callee);
|
|
181
|
+
icfg->addCallEdge(CallICFGNode, calleeEntryNode, cs);
|
|
185
182
|
icfg->addRetEdge(calleeExitNode, retBlockNode, cs);
|
|
183
|
+
/// if this is an external function (no function body)
|
|
184
|
+
if (isExtCall(callee))
|
|
185
|
+
{
|
|
186
|
+
icfg->addIntraEdge(calleeEntryNode, calleeExitNode);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/// indirect call (don't know callee)
|
|
190
|
+
else{
|
|
191
|
+
icfg->addIntraEdge(CallICFGNode, retBlockNode);
|
|
186
192
|
}
|
|
187
193
|
}
|
|
188
194
|
/*
|
|
@@ -196,15 +202,15 @@ void ICFGBuilder::connectGlobalToProgEntry(SVFModule* svfModule)
|
|
|
196
202
|
if(mainFunc == nullptr)
|
|
197
203
|
return;
|
|
198
204
|
|
|
199
|
-
|
|
200
|
-
|
|
205
|
+
FunEntryICFGNode* entryNode = icfg->getFunEntryBlockNode(mainFunc);
|
|
206
|
+
GlobalICFGNode* globalNode = icfg->getGlobalBlockNode();
|
|
201
207
|
|
|
202
208
|
std::vector<ICFGEdge*> toBeRemovedEdges;
|
|
203
209
|
for(ICFGEdge* edge : entryNode->getOutEdges())
|
|
204
210
|
toBeRemovedEdges.push_back(edge);
|
|
205
211
|
|
|
206
212
|
for(ICFGEdge* edge : toBeRemovedEdges){
|
|
207
|
-
assert(SVFUtil::isa<IntraCFGEdge>(edge) && "the outgoing edge of
|
|
213
|
+
assert(SVFUtil::isa<IntraCFGEdge>(edge) && "the outgoing edge of FunEntryICFGNode is not an intraCFGEdge?");
|
|
208
214
|
icfg->removeICFGEdge(edge);
|
|
209
215
|
IntraCFGEdge* intraEdge = new IntraCFGEdge(globalNode, edge->getDstNode());
|
|
210
216
|
icfg->addICFGEdge(intraEdge);
|
|
@@ -754,8 +754,8 @@ void SVFIRBuilder::visitCallSite(CallSite cs)
|
|
|
754
754
|
DBOUT(DPAGBuild,
|
|
755
755
|
outs() << "process callsite " << *cs.getInstruction() << "\n");
|
|
756
756
|
|
|
757
|
-
|
|
758
|
-
|
|
757
|
+
CallICFGNode* callBlockNode = pag->getICFG()->getCallBlockNode(cs.getInstruction());
|
|
758
|
+
RetICFGNode* retBlockNode = pag->getICFG()->getRetBlockNode(cs.getInstruction());
|
|
759
759
|
|
|
760
760
|
pag->addCallSite(callBlockNode);
|
|
761
761
|
|
|
@@ -918,7 +918,7 @@ void SVFIRBuilder::handleDirectCall(CallSite cs, const SVFFunction *F)
|
|
|
918
918
|
if (!cs.getType()->isVoidTy())
|
|
919
919
|
{
|
|
920
920
|
NodeID srcret = getReturnNode(F);
|
|
921
|
-
|
|
921
|
+
CallICFGNode* icfgNode = pag->getICFG()->getCallBlockNode(cs.getInstruction());
|
|
922
922
|
addRetEdge(srcret, dstrec,icfgNode);
|
|
923
923
|
}
|
|
924
924
|
//Iterators for the actual and formal parameters
|
|
@@ -940,7 +940,7 @@ void SVFIRBuilder::handleDirectCall(CallSite cs, const SVFFunction *F)
|
|
|
940
940
|
|
|
941
941
|
NodeID dstFA = getValueNode(FA);
|
|
942
942
|
NodeID srcAA = getValueNode(AA);
|
|
943
|
-
|
|
943
|
+
CallICFGNode* icfgNode = pag->getICFG()->getCallBlockNode(cs.getInstruction());
|
|
944
944
|
addCallEdge(srcAA, dstFA, icfgNode);
|
|
945
945
|
}
|
|
946
946
|
//Any remaining actual args must be varargs.
|
|
@@ -952,7 +952,7 @@ void SVFIRBuilder::handleDirectCall(CallSite cs, const SVFFunction *F)
|
|
|
952
952
|
{
|
|
953
953
|
Value *AA = *itA;
|
|
954
954
|
NodeID vnAA = getValueNode(AA);
|
|
955
|
-
|
|
955
|
+
CallICFGNode* icfgNode = pag->getICFG()->getCallBlockNode(cs.getInstruction());
|
|
956
956
|
addCallEdge(vnAA,vaF, icfgNode);
|
|
957
957
|
}
|
|
958
958
|
}
|
|
@@ -1435,7 +1435,7 @@ void SVFIRBuilder::handleExtCall(CallSite cs, const SVFFunction *callee)
|
|
|
1435
1435
|
/// Connect actual parameter to formal parameter of the start routine
|
|
1436
1436
|
if(SVFUtil::isa<PointerType>(actualParm->getType()) && SVFUtil::isa<PointerType>(formalParm->getType()) )
|
|
1437
1437
|
{
|
|
1438
|
-
|
|
1438
|
+
CallICFGNode* icfgNode = pag->getICFG()->getCallBlockNode(inst);
|
|
1439
1439
|
addThreadForkEdge(pag->getValueNode(actualParm), pag->getValueNode(formalParm),icfgNode);
|
|
1440
1440
|
}
|
|
1441
1441
|
}
|
|
@@ -1464,7 +1464,7 @@ void SVFIRBuilder::handleExtCall(CallSite cs, const SVFFunction *callee)
|
|
|
1464
1464
|
/// Connect actual parameter to formal parameter of the start routine
|
|
1465
1465
|
if(SVFUtil::isa<PointerType>(actualParm->getType()) && SVFUtil::isa<PointerType>(formalParm->getType()) )
|
|
1466
1466
|
{
|
|
1467
|
-
|
|
1467
|
+
CallICFGNode* icfgNode = pag->getICFG()->getCallBlockNode(inst);
|
|
1468
1468
|
addThreadForkEdge(pag->getValueNode(actualParm), pag->getValueNode(formalParm),icfgNode);
|
|
1469
1469
|
}
|
|
1470
1470
|
}
|
|
@@ -1486,7 +1486,7 @@ void SVFIRBuilder::handleExtCall(CallSite cs, const SVFFunction *callee)
|
|
|
1486
1486
|
*/
|
|
1487
1487
|
void SVFIRBuilder::handleIndCall(CallSite cs)
|
|
1488
1488
|
{
|
|
1489
|
-
const
|
|
1489
|
+
const CallICFGNode* cbn = pag->getICFG()->getCallBlockNode(cs.getInstruction());
|
|
1490
1490
|
pag->addIndirectCallsites(cbn,pag->getValueNode(cs.getCalledValue()));
|
|
1491
1491
|
}
|
|
1492
1492
|
|