svf-tools 1.0.479 → 1.0.482
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/AndersenSFR_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/Andersen_8h_source.html +6 -6
- package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/CFLAlias_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +14 -15
- package/SVF-doxygen/html/html/CPPUtil_8h_source.html +14 -14
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +7 -7
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ExeState_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ExeState_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +35 -31
- package/SVF-doxygen/html/html/ExtAPI_8h.html +36 -0
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +65 -63
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +4 -4
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +12 -12
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitive_8cpp.html +0 -1
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +32 -38
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +66 -67
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -7
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Options_8cpp_source.html +17 -21
- package/SVF-doxygen/html/html/Options_8h_source.html +13 -16
- package/SVF-doxygen/html/html/PCG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +21 -22
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +17 -17
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp.html +0 -1
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +64 -69
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +109 -110
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +9 -9
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +7 -7
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +26 -32
- package/SVF-doxygen/html/html/SVFVariables_8h.html +0 -6
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +109 -130
- package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +15 -15
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +5 -5
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +4 -4
- package/SVF-doxygen/html/html/WPAPass_8cpp.html +0 -1
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +16 -19
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +6 -6
- package/SVF-doxygen/html/html/annotated.html +248 -253
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +173 -174
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +27 -29
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +146 -147
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +17 -19
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +185 -186
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +7 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +189 -190
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +6 -7
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +180 -181
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +8 -9
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +182 -183
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +11 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +185 -186
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +8 -9
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +177 -178
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +8 -9
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +103 -104
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +42 -48
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias-members.html +73 -74
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +13 -14
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +94 -95
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +26 -28
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +163 -164
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +33 -35
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar-members.html +72 -75
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +16 -27
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar-members.html +70 -73
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +17 -20
- package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI-members.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +146 -113
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar-members.html +72 -75
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +18 -29
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +112 -114
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +12 -15
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +163 -164
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +25 -27
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +106 -108
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +234 -314
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +77 -80
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +38 -49
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +73 -76
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +28 -31
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet-members.html +44 -45
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +4 -45
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar-members.html +71 -74
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +30 -42
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +104 -107
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +13 -94
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +69 -70
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +302 -319
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1RetPN-members.html +70 -73
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +18 -21
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar-members.html +73 -76
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +84 -99
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +2 -3
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +157 -158
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +6 -7
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +53 -52
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +150 -151
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +21 -23
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1ValVar-members.html +69 -72
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +23 -26
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN-members.html +70 -73
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +18 -21
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +125 -127
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +44 -48
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.html +6 -7
- package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +38 -40
- package/SVF-doxygen/html/html/classSVF_1_1WPASolver.html +17 -15
- package/SVF-doxygen/html/html/classSVF_1_1WPASolver.png +0 -0
- package/SVF-doxygen/html/html/classes.html +104 -105
- package/SVF-doxygen/html/html/dir_66541c162fd98954e2c32089ba9a721f.html +0 -4
- package/SVF-doxygen/html/html/dir_ea25a8a5b2904424d8a51916f8b475b2.html +0 -4
- package/SVF-doxygen/html/html/files.html +12 -16
- package/SVF-doxygen/html/html/functions_0x7e.html +0 -6
- package/SVF-doxygen/html/html/functions_a.html +8 -30
- package/SVF-doxygen/html/html/functions_b.html +8 -12
- package/SVF-doxygen/html/html/functions_c.html +24 -54
- package/SVF-doxygen/html/html/functions_d.html +1 -13
- package/SVF-doxygen/html/html/functions_e.html +1 -2
- package/SVF-doxygen/html/html/functions_eval_c.html +0 -9
- package/SVF-doxygen/html/html/functions_eval_f.html +0 -3
- package/SVF-doxygen/html/html/functions_f.html +19 -24
- package/SVF-doxygen/html/html/functions_func.html +6 -25
- package/SVF-doxygen/html/html/functions_func_0x7e.html +0 -6
- package/SVF-doxygen/html/html/functions_func_b.html +1 -5
- package/SVF-doxygen/html/html/functions_func_c.html +20 -37
- package/SVF-doxygen/html/html/functions_func_d.html +0 -6
- package/SVF-doxygen/html/html/functions_func_e.html +2 -3
- package/SVF-doxygen/html/html/functions_func_f.html +1 -5
- package/SVF-doxygen/html/html/functions_func_g.html +8 -48
- package/SVF-doxygen/html/html/functions_func_i.html +10 -17
- package/SVF-doxygen/html/html/functions_func_p.html +2 -16
- package/SVF-doxygen/html/html/functions_func_s.html +6 -19
- package/SVF-doxygen/html/html/functions_func_t.html +0 -6
- package/SVF-doxygen/html/html/functions_func_u.html +0 -4
- package/SVF-doxygen/html/html/functions_func_v.html +0 -3
- package/SVF-doxygen/html/html/functions_g.html +12 -55
- package/SVF-doxygen/html/html/functions_i.html +13 -20
- package/SVF-doxygen/html/html/functions_l.html +8 -14
- package/SVF-doxygen/html/html/functions_m.html +0 -6
- package/SVF-doxygen/html/html/functions_n.html +0 -36
- package/SVF-doxygen/html/html/functions_o.html +12 -20
- package/SVF-doxygen/html/html/functions_p.html +6 -28
- package/SVF-doxygen/html/html/functions_r.html +4 -2
- package/SVF-doxygen/html/html/functions_s.html +13 -29
- package/SVF-doxygen/html/html/functions_t.html +6 -18
- package/SVF-doxygen/html/html/functions_u.html +2 -9
- package/SVF-doxygen/html/html/functions_v.html +1 -4
- package/SVF-doxygen/html/html/functions_vars_a.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_c.html +0 -6
- package/SVF-doxygen/html/html/functions_vars_d.html +0 -6
- package/SVF-doxygen/html/html/functions_vars_g.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_l.html +0 -6
- package/SVF-doxygen/html/html/functions_vars_m.html +0 -6
- package/SVF-doxygen/html/html/functions_vars_n.html +0 -36
- package/SVF-doxygen/html/html/functions_vars_o.html +0 -12
- package/SVF-doxygen/html/html/functions_vars_p.html +0 -4
- package/SVF-doxygen/html/html/functions_vars_s.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_t.html +0 -6
- package/SVF-doxygen/html/html/functions_vars_u.html +0 -3
- package/SVF-doxygen/html/html/functions_w.html +10 -6
- package/SVF-doxygen/html/html/globals_defs_j.html +6 -0
- package/SVF-doxygen/html/html/globals_func_g.html +0 -3
- package/SVF-doxygen/html/html/globals_func_i.html +2 -7
- package/SVF-doxygen/html/html/globals_g.html +2 -5
- package/SVF-doxygen/html/html/globals_i.html +4 -7
- package/SVF-doxygen/html/html/globals_j.html +6 -0
- package/SVF-doxygen/html/html/globals_s.html +3 -3
- package/SVF-doxygen/html/html/hierarchy.html +13 -19
- package/SVF-doxygen/html/html/namespaceSVF.html +0 -10
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +36 -38
- package/SVF-doxygen/html/html/search/all_1.js +1 -8
- package/SVF-doxygen/html/html/search/all_10.js +18 -20
- package/SVF-doxygen/html/html/search/all_12.js +2 -2
- package/SVF-doxygen/html/html/search/all_13.js +13 -18
- package/SVF-doxygen/html/html/search/all_14.js +8 -12
- package/SVF-doxygen/html/html/search/all_15.js +4 -5
- package/SVF-doxygen/html/html/search/all_16.js +1 -2
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_1b.js +0 -2
- package/SVF-doxygen/html/html/search/all_2.js +0 -1
- package/SVF-doxygen/html/html/search/all_3.js +2 -11
- package/SVF-doxygen/html/html/search/all_4.js +0 -4
- package/SVF-doxygen/html/html/search/all_5.js +2 -2
- package/SVF-doxygen/html/html/search/all_6.js +2 -6
- package/SVF-doxygen/html/html/search/all_7.js +3 -16
- package/SVF-doxygen/html/html/search/all_9.js +5 -7
- package/SVF-doxygen/html/html/search/all_a.js +2 -0
- package/SVF-doxygen/html/html/search/all_c.js +4 -6
- package/SVF-doxygen/html/html/search/all_d.js +4 -6
- package/SVF-doxygen/html/html/search/all_e.js +2 -14
- package/SVF-doxygen/html/html/search/all_f.js +2 -6
- package/SVF-doxygen/html/html/search/classes_10.js +1 -2
- package/SVF-doxygen/html/html/search/classes_2.js +0 -3
- package/SVF-doxygen/html/html/search/classes_5.js +0 -1
- package/SVF-doxygen/html/html/search/defines_8.js +2 -0
- package/SVF-doxygen/html/html/search/enumvalues_2.js +0 -3
- package/SVF-doxygen/html/html/search/enumvalues_5.js +0 -1
- package/SVF-doxygen/html/html/search/files_5.js +0 -2
- package/SVF-doxygen/html/html/search/files_e.js +1 -3
- package/SVF-doxygen/html/html/search/functions_0.js +1 -7
- package/SVF-doxygen/html/html/search/functions_1.js +0 -1
- package/SVF-doxygen/html/html/search/functions_11.js +2 -6
- package/SVF-doxygen/html/html/search/functions_12.js +2 -3
- package/SVF-doxygen/html/html/search/functions_13.js +4 -4
- package/SVF-doxygen/html/html/search/functions_14.js +0 -1
- package/SVF-doxygen/html/html/search/functions_17.js +0 -2
- package/SVF-doxygen/html/html/search/functions_2.js +2 -6
- package/SVF-doxygen/html/html/search/functions_3.js +0 -2
- package/SVF-doxygen/html/html/search/functions_4.js +1 -1
- package/SVF-doxygen/html/html/search/functions_5.js +1 -2
- package/SVF-doxygen/html/html/search/functions_6.js +3 -15
- package/SVF-doxygen/html/html/search/functions_8.js +5 -7
- package/SVF-doxygen/html/html/search/functions_f.js +12 -13
- package/SVF-doxygen/html/html/search/variables_1.js +0 -1
- package/SVF-doxygen/html/html/search/variables_10.js +1 -2
- package/SVF-doxygen/html/html/search/variables_13.js +0 -1
- package/SVF-doxygen/html/html/search/variables_14.js +4 -6
- package/SVF-doxygen/html/html/search/variables_15.js +0 -1
- package/SVF-doxygen/html/html/search/variables_3.js +0 -2
- package/SVF-doxygen/html/html/search/variables_4.js +0 -2
- package/SVF-doxygen/html/html/search/variables_5.js +1 -1
- package/SVF-doxygen/html/html/search/variables_7.js +0 -1
- package/SVF-doxygen/html/html/search/variables_c.js +1 -3
- package/SVF-doxygen/html/html/search/variables_d.js +1 -3
- package/SVF-doxygen/html/html/search/variables_e.js +1 -13
- package/SVF-doxygen/html/html/search/variables_f.js +0 -4
- 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_01IRGraph_01_5_01_4.html +3 -3
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +4 -4
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
- package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
- package/build.sh +1 -28
- package/include/MemoryModel/PointerAnalysis.h +0 -1
- package/include/MemoryModel/SVFVariables.h +11 -140
- package/include/SVF-FE/LLVMModule.h +0 -24
- package/include/Util/ExtAPI.h +59 -42
- package/include/Util/Options.h +0 -7
- package/include/WPA/FlowSensitive.h +0 -4
- package/lib/MemoryModel/PointerAnalysis.cpp +4 -22
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
- package/lib/MemoryModel/SVFVariables.cpp +1 -28
- package/lib/SVF-FE/CPPUtil.cpp +0 -7
- package/lib/SVF-FE/SVFIRBuilder.cpp +2 -2
- package/lib/SVF-FE/SymbolTableBuilder.cpp +4 -0
- package/lib/Util/ExtAPI.cpp +34 -2
- package/lib/Util/ExtAPI.json +3268 -2585
- package/lib/Util/Options.cpp +0 -24
- package/lib/WPA/FlowSensitive.cpp +1 -75
- package/lib/WPA/WPAPass.cpp +0 -4
- package/package.json +1 -1
- package/include/WPA/FlowSensitiveTBHC.h +0 -122
- package/include/WPA/TypeBasedHeapCloning.h +0 -188
- package/lib/WPA/FlowSensitiveTBHC.cpp +0 -695
- package/lib/WPA/TypeBasedHeapCloning.cpp +0 -795
|
@@ -58,7 +58,6 @@ public:
|
|
|
58
58
|
/// GepValNode: tempory gep obj node for field sensitivity
|
|
59
59
|
/// FIObjNode: for field insensitive analysis
|
|
60
60
|
/// DummyValNode and DummyObjNode: for non-llvm-value node
|
|
61
|
-
/// Clone*Node: objects created by TBHC.
|
|
62
61
|
enum PNODEK
|
|
63
62
|
{
|
|
64
63
|
ValNode,
|
|
@@ -70,9 +69,6 @@ public:
|
|
|
70
69
|
FIObjNode,
|
|
71
70
|
DummyValNode,
|
|
72
71
|
DummyObjNode,
|
|
73
|
-
CloneGepObjNode, // NOTE: only used for TBHC.
|
|
74
|
-
CloneFIObjNode, // NOTE: only used for TBHC.
|
|
75
|
-
CloneDummyObjNode // NOTE: only used for TBHC.
|
|
76
72
|
};
|
|
77
73
|
|
|
78
74
|
|
|
@@ -327,20 +323,14 @@ public:
|
|
|
327
323
|
return node->getNodeKind() == SVFVar::ObjNode ||
|
|
328
324
|
node->getNodeKind() == SVFVar::GepObjNode ||
|
|
329
325
|
node->getNodeKind() == SVFVar::FIObjNode ||
|
|
330
|
-
node->getNodeKind() == SVFVar::DummyObjNode
|
|
331
|
-
node->getNodeKind() == SVFVar::CloneGepObjNode ||
|
|
332
|
-
node->getNodeKind() == SVFVar::CloneFIObjNode ||
|
|
333
|
-
node->getNodeKind() == SVFVar::CloneDummyObjNode;
|
|
326
|
+
node->getNodeKind() == SVFVar::DummyObjNode;
|
|
334
327
|
}
|
|
335
328
|
static inline bool classof(const GenericPAGNodeTy *node)
|
|
336
329
|
{
|
|
337
330
|
return node->getNodeKind() == SVFVar::ObjNode ||
|
|
338
331
|
node->getNodeKind() == SVFVar::GepObjNode ||
|
|
339
332
|
node->getNodeKind() == SVFVar::FIObjNode ||
|
|
340
|
-
node->getNodeKind() == SVFVar::DummyObjNode
|
|
341
|
-
node->getNodeKind() == SVFVar::CloneGepObjNode ||
|
|
342
|
-
node->getNodeKind() == SVFVar::CloneFIObjNode ||
|
|
343
|
-
node->getNodeKind() == SVFVar::CloneDummyObjNode;
|
|
333
|
+
node->getNodeKind() == SVFVar::DummyObjNode;
|
|
344
334
|
}
|
|
345
335
|
//@}
|
|
346
336
|
|
|
@@ -448,18 +438,15 @@ public:
|
|
|
448
438
|
}
|
|
449
439
|
static inline bool classof(const ObjVar * node)
|
|
450
440
|
{
|
|
451
|
-
return node->getNodeKind() == SVFVar::GepObjNode
|
|
452
|
-
|| node->getNodeKind() == SVFVar::CloneGepObjNode;
|
|
441
|
+
return node->getNodeKind() == SVFVar::GepObjNode;
|
|
453
442
|
}
|
|
454
443
|
static inline bool classof(const SVFVar *node)
|
|
455
444
|
{
|
|
456
|
-
return node->getNodeKind() == SVFVar::GepObjNode
|
|
457
|
-
|| node->getNodeKind() == SVFVar::CloneGepObjNode;
|
|
445
|
+
return node->getNodeKind() == SVFVar::GepObjNode;
|
|
458
446
|
}
|
|
459
447
|
static inline bool classof(const GenericPAGNodeTy *node)
|
|
460
448
|
{
|
|
461
|
-
return node->getNodeKind() == SVFVar::GepObjNode
|
|
462
|
-
|| node->getNodeKind() == SVFVar::CloneGepObjNode;
|
|
449
|
+
return node->getNodeKind() == SVFVar::GepObjNode;
|
|
463
450
|
}
|
|
464
451
|
//@}
|
|
465
452
|
|
|
@@ -527,18 +514,15 @@ public:
|
|
|
527
514
|
}
|
|
528
515
|
static inline bool classof(const ObjVar * node)
|
|
529
516
|
{
|
|
530
|
-
return node->getNodeKind() == SVFVar::FIObjNode
|
|
531
|
-
|| node->getNodeKind() == SVFVar::CloneFIObjNode;
|
|
517
|
+
return node->getNodeKind() == SVFVar::FIObjNode;
|
|
532
518
|
}
|
|
533
519
|
static inline bool classof(const SVFVar *node)
|
|
534
520
|
{
|
|
535
|
-
return node->getNodeKind() == SVFVar::FIObjNode
|
|
536
|
-
|| node->getNodeKind() == SVFVar::CloneFIObjNode;
|
|
521
|
+
return node->getNodeKind() == SVFVar::FIObjNode;
|
|
537
522
|
}
|
|
538
523
|
static inline bool classof(const GenericPAGNodeTy *node)
|
|
539
524
|
{
|
|
540
|
-
return node->getNodeKind() == SVFVar::FIObjNode
|
|
541
|
-
|| node->getNodeKind() == SVFVar::CloneFIObjNode;
|
|
525
|
+
return node->getNodeKind() == SVFVar::FIObjNode;
|
|
542
526
|
}
|
|
543
527
|
//@}
|
|
544
528
|
|
|
@@ -705,18 +689,15 @@ public:
|
|
|
705
689
|
}
|
|
706
690
|
static inline bool classof(const SVFVar *node)
|
|
707
691
|
{
|
|
708
|
-
return node->getNodeKind() == SVFVar::DummyObjNode
|
|
709
|
-
|| node->getNodeKind() == SVFVar::CloneDummyObjNode;
|
|
692
|
+
return node->getNodeKind() == SVFVar::DummyObjNode;
|
|
710
693
|
}
|
|
711
694
|
static inline bool classof(const ObjVar *node)
|
|
712
695
|
{
|
|
713
|
-
return node->getNodeKind() == SVFVar::DummyObjNode
|
|
714
|
-
|| node->getNodeKind() == SVFVar::CloneDummyObjNode;
|
|
696
|
+
return node->getNodeKind() == SVFVar::DummyObjNode;
|
|
715
697
|
}
|
|
716
698
|
static inline bool classof(const GenericPAGNodeTy *node)
|
|
717
699
|
{
|
|
718
|
-
return node->getNodeKind() == SVFVar::DummyObjNode
|
|
719
|
-
|| node->getNodeKind() == SVFVar::CloneDummyObjNode;
|
|
700
|
+
return node->getNodeKind() == SVFVar::DummyObjNode;
|
|
720
701
|
}
|
|
721
702
|
//@}
|
|
722
703
|
|
|
@@ -735,116 +716,6 @@ public:
|
|
|
735
716
|
virtual const std::string toString() const;
|
|
736
717
|
};
|
|
737
718
|
|
|
738
|
-
/*
|
|
739
|
-
* Clone object node for dummy objects.
|
|
740
|
-
*/
|
|
741
|
-
class CloneDummyObjVar: public DummyObjVar
|
|
742
|
-
{
|
|
743
|
-
public:
|
|
744
|
-
//@{ Methods to support type inquiry through isa, cast, and dyn_cast:
|
|
745
|
-
static inline bool classof(const CloneDummyObjVar *)
|
|
746
|
-
{
|
|
747
|
-
return true;
|
|
748
|
-
}
|
|
749
|
-
static inline bool classof(const SVFVar *node)
|
|
750
|
-
{
|
|
751
|
-
return node->getNodeKind() == SVFVar::CloneDummyObjNode;
|
|
752
|
-
}
|
|
753
|
-
static inline bool classof(const GenericPAGNodeTy *node)
|
|
754
|
-
{
|
|
755
|
-
return node->getNodeKind() == SVFVar::CloneDummyObjNode;
|
|
756
|
-
}
|
|
757
|
-
//@}
|
|
758
|
-
|
|
759
|
-
/// Constructor
|
|
760
|
-
CloneDummyObjVar(NodeID i, const MemObj* m, PNODEK ty = CloneDummyObjNode)
|
|
761
|
-
: DummyObjVar(i, m, ty)
|
|
762
|
-
{
|
|
763
|
-
}
|
|
764
|
-
|
|
765
|
-
/// Return name of this node
|
|
766
|
-
inline const std::string getValueName() const
|
|
767
|
-
{
|
|
768
|
-
return "clone of " + ObjVar::getValueName();
|
|
769
|
-
}
|
|
770
|
-
|
|
771
|
-
virtual const std::string toString() const;
|
|
772
|
-
};
|
|
773
|
-
|
|
774
|
-
/*
|
|
775
|
-
* Clone object for GEP objects.
|
|
776
|
-
*/
|
|
777
|
-
class CloneGepObjVar : public GepObjVar
|
|
778
|
-
{
|
|
779
|
-
public:
|
|
780
|
-
//@{ Methods to support type inquiry through isa, cast, and dyn_cast:
|
|
781
|
-
static inline bool classof(const CloneGepObjVar *)
|
|
782
|
-
{
|
|
783
|
-
return true;
|
|
784
|
-
}
|
|
785
|
-
static inline bool classof(const SVFVar *node)
|
|
786
|
-
{
|
|
787
|
-
return node->getNodeKind() == SVFVar::CloneGepObjNode;
|
|
788
|
-
}
|
|
789
|
-
static inline bool classof(const GenericPAGNodeTy *node)
|
|
790
|
-
{
|
|
791
|
-
return node->getNodeKind() == SVFVar::CloneGepObjNode;
|
|
792
|
-
}
|
|
793
|
-
//@}
|
|
794
|
-
|
|
795
|
-
/// Constructor
|
|
796
|
-
CloneGepObjVar(const MemObj* mem, NodeID i, const LocationSet& l, PNODEK ty = CloneGepObjNode) :
|
|
797
|
-
GepObjVar(mem, i, l, ty)
|
|
798
|
-
{
|
|
799
|
-
}
|
|
800
|
-
|
|
801
|
-
/// Return name of this node
|
|
802
|
-
inline const std::string getValueName() const
|
|
803
|
-
{
|
|
804
|
-
return "clone (gep) of " + GepObjVar::getValueName();
|
|
805
|
-
}
|
|
806
|
-
|
|
807
|
-
virtual const std::string toString() const;
|
|
808
|
-
};
|
|
809
|
-
|
|
810
|
-
/*
|
|
811
|
-
* Clone object for FI objects.
|
|
812
|
-
*/
|
|
813
|
-
class CloneFIObjVar : public FIObjVar
|
|
814
|
-
{
|
|
815
|
-
public:
|
|
816
|
-
//@{ Methods to support type inquiry through isa, cast, and dyn_cast:
|
|
817
|
-
static inline bool classof(const CloneFIObjVar *)
|
|
818
|
-
{
|
|
819
|
-
return true;
|
|
820
|
-
}
|
|
821
|
-
static inline bool classof(const SVFVar *node)
|
|
822
|
-
{
|
|
823
|
-
return node->getNodeKind() == SVFVar::CloneFIObjNode;
|
|
824
|
-
}
|
|
825
|
-
static inline bool classof(const GenericPAGNodeTy *node)
|
|
826
|
-
{
|
|
827
|
-
return node->getNodeKind() == SVFVar::CloneFIObjNode;
|
|
828
|
-
}
|
|
829
|
-
//@}
|
|
830
|
-
|
|
831
|
-
/// Constructor
|
|
832
|
-
CloneFIObjVar(const Value* val, NodeID i, const MemObj* mem, PNODEK ty = CloneFIObjNode) :
|
|
833
|
-
FIObjVar(val, i, mem, ty)
|
|
834
|
-
{
|
|
835
|
-
}
|
|
836
|
-
|
|
837
|
-
/// Return name of this node
|
|
838
|
-
inline const std::string getValueName() const
|
|
839
|
-
{
|
|
840
|
-
return "clone (FI) of " + FIObjVar::getValueName();
|
|
841
|
-
}
|
|
842
|
-
|
|
843
|
-
virtual const std::string toString() const;
|
|
844
|
-
};
|
|
845
|
-
|
|
846
719
|
} // End namespace SVF
|
|
847
720
|
|
|
848
|
-
|
|
849
|
-
|
|
850
721
|
#endif /* OBJECTANDSYMBOL_H_ */
|
|
@@ -208,30 +208,6 @@ public:
|
|
|
208
208
|
return getModuleNum() == 0;
|
|
209
209
|
}
|
|
210
210
|
|
|
211
|
-
/// Returns true if all LLVM modules are compiled with ctir.
|
|
212
|
-
bool allCTir(void) const
|
|
213
|
-
{
|
|
214
|
-
// Iterate over all modules. If a single module does not have the correct ctir module flag,
|
|
215
|
-
// short-circuit and return false.
|
|
216
|
-
for (u32_t i = 0; i < getModuleNum(); ++i)
|
|
217
|
-
{
|
|
218
|
-
llvm::Metadata *ctirModuleFlag = llvmModuleSet->getModule(i)->getModuleFlag(cppUtil::ctir::derefMDName);
|
|
219
|
-
if (ctirModuleFlag == nullptr)
|
|
220
|
-
{
|
|
221
|
-
return false;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
llvm::ConstantAsMetadata *flagConstMetadata = SVFUtil::dyn_cast<llvm::ConstantAsMetadata>(ctirModuleFlag);
|
|
225
|
-
ConstantInt *flagConstInt = SVFUtil::dyn_cast<ConstantInt>(flagConstMetadata->getValue());
|
|
226
|
-
if (flagConstInt->getZExtValue() != cppUtil::ctir::moduleFlagValue)
|
|
227
|
-
{
|
|
228
|
-
return false;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
return true;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
211
|
private:
|
|
236
212
|
void loadModules(const std::vector<std::string> &moduleNameVec);
|
|
237
213
|
void addSVFMain();
|
package/include/Util/ExtAPI.h
CHANGED
|
@@ -40,54 +40,66 @@
|
|
|
40
40
|
#include <map>
|
|
41
41
|
|
|
42
42
|
#define EXTAPI_JSON_PATH "/lib/Util/ExtAPI.json"
|
|
43
|
+
#define JSON_OPT_OVERWRITE "overwrite_app_function"
|
|
44
|
+
#define JSON_OPT_FUNCTIONTYPE "type"
|
|
43
45
|
|
|
44
46
|
namespace SVF
|
|
45
47
|
{
|
|
46
48
|
|
|
47
49
|
/*
|
|
48
50
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
51
|
+
** Specifications in ExtAPI.json
|
|
52
|
+
|
|
53
|
+
*** [1] Overview of the Specification Language
|
|
54
|
+
The specification language of external functions is based on the JSON format. And every function defined by the Specification Language is an object that represents the specification rules. These Specification Language objects for functions contain four parts:
|
|
55
|
+
1. the name of the function,
|
|
56
|
+
2. the switch that controls whether the specification rules defined in the ExtAPI.json overwrite the functions defined in the user code,
|
|
57
|
+
3. the type of the function,
|
|
58
|
+
4. the operations conducted by the function.
|
|
59
|
+
|
|
60
|
+
*** [2] Overwriting the user-defined functions
|
|
61
|
+
The switch *overwrite_app_function* controls whether the specification rules defined in the ExtAPI.json overwrite the functions defined in the user code (e.g., CPP files). When the switch *overwrite_app_function* is set to a value of 1, SVF will use the specification rules in ExtAPI.json to conduct the analysis and ignore the user-defined functions in the input CPP/bc files.
|
|
62
|
+
overwrite_app_function = 0: Analyze the user-defined functions.
|
|
63
|
+
overwrite_app_function = 1: Use specifications in ExtAPI.json to overwrite the user-defined functions.
|
|
64
|
+
|
|
65
|
+
*** [3] Function types
|
|
66
|
+
Function type represents the properties of the function.
|
|
67
|
+
For example,
|
|
68
|
+
"EFT_ALLOC" represents if this external function allocates a new object and assigns it to one of its arguments,
|
|
69
|
+
For the selection of function type and a more detailed explanation, please refer to the definition of enum *extf_t* in ExtAPI.h.
|
|
70
|
+
|
|
71
|
+
*** [4] Function operations
|
|
72
|
+
Function operations indicate the relationships between input and output,
|
|
73
|
+
mainly between function parameters or between parameters and return values after the execution.
|
|
74
|
+
For example,
|
|
75
|
+
"copy": ["A2", "L"] indicates that after this external function is executed, the value of the 2nd parameter is copied into the return value.
|
|
76
|
+
For the selection of function type and a more detailed explanation, please refer to the definition of enum *extType* in ExtAPI.h.
|
|
77
|
+
|
|
78
|
+
For operands of function operation, e.g., "A2", "L", there are the following options:
|
|
79
|
+
"A": represents a parameter;
|
|
80
|
+
"N": represents a number;
|
|
81
|
+
"R": represents a reference;
|
|
82
|
+
"L": represents a return value;
|
|
83
|
+
"V": represents a dummy node;
|
|
84
|
+
|
|
85
|
+
Among them, a parameter may have multiple forms because there may be various parameters, and the parameter may be a reference or complex structure,
|
|
86
|
+
|
|
87
|
+
Here we use regular expressions "(AN)(R|RN)^*" to represent parameters, for example,
|
|
88
|
+
"A0": represents the 1st parameter;
|
|
89
|
+
"A2R": represents that the 3rd parameter is a reference;
|
|
90
|
+
"A1R2": represents the 3rd substructure of the 2nd parameter "A1R", where "A1R" is a complex structure;
|
|
91
|
+
"A2R3R": represents the 4th substructure of the 3rd parameter "A2R" is a reference, where "A2R" is a complex structure;
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
** Specification format:
|
|
95
|
+
"functionName": {
|
|
96
|
+
"type": "functional type",
|
|
97
|
+
"overwrite_app_function:" 0/1,
|
|
98
|
+
"function operation_1": [ operand_1, operand_2, ... , operand_n],
|
|
99
|
+
"function operation_2": [ operand_1, operand_2, ... , operand_n],
|
|
100
|
+
...
|
|
101
|
+
"function operation_n": [ operand_1, operand_2, ... , operand_n]
|
|
102
|
+
}
|
|
91
103
|
*/
|
|
92
104
|
|
|
93
105
|
|
|
@@ -233,6 +245,11 @@ public:
|
|
|
233
245
|
// Get property of the operation, e.g. "EFT_A1R_A0R"
|
|
234
246
|
extType get_type(const SVF::SVFFunction *callee);
|
|
235
247
|
|
|
248
|
+
// Get priority of he function, return value
|
|
249
|
+
// 0: Apply user-defined functions
|
|
250
|
+
// 1: Apply function specification in ExtAPI.json
|
|
251
|
+
u32_t isOverwrittenAppFunction(const SVF::SVFFunction *callee);
|
|
252
|
+
|
|
236
253
|
// Does (F) have a static var X (unavailable to us) that its return points to?
|
|
237
254
|
bool has_static(const SVFFunction *F);
|
|
238
255
|
|
package/include/Util/Options.h
CHANGED
|
@@ -237,13 +237,6 @@ public:
|
|
|
237
237
|
static const llvm::cl::opt<bool> PtsDiff;
|
|
238
238
|
static const llvm::cl::opt<bool> MergePWC;
|
|
239
239
|
|
|
240
|
-
// FlowSensitive.cpp
|
|
241
|
-
static const llvm::cl::opt<bool> CTirAliasEval;
|
|
242
|
-
|
|
243
|
-
//FlowSensitiveTBHC.cpp
|
|
244
|
-
static const llvm::cl::opt<bool> TBHCStoreReuse;
|
|
245
|
-
static const llvm::cl::opt<bool> TBHCAllReuse;
|
|
246
|
-
|
|
247
240
|
// WPAPass.cpp
|
|
248
241
|
static const llvm::cl::opt<bool> AnderSVFG;
|
|
249
242
|
static const llvm::cl::opt<bool> SABERFULLSVFG;
|
|
@@ -240,10 +240,6 @@ protected:
|
|
|
240
240
|
/// Return TRUE if this is a strong update STORE statement.
|
|
241
241
|
bool isStrongUpdate(const SVFGNode* node, NodeID& singleton);
|
|
242
242
|
|
|
243
|
-
/// Prints some easily parseable stats on aliasing of relevant CTir TL PTS.
|
|
244
|
-
/// Format: eval-ctir-aliases #TOTAL_TESTS #MAY_ALIAS #NO_ALIAS
|
|
245
|
-
virtual void printCTirAliasStats(void);
|
|
246
|
-
|
|
247
243
|
/// Fills may/noAliases for the location/pointer pairs in cmp.
|
|
248
244
|
virtual void countAliases(Set<std::pair<NodeID, NodeID>> cmp, unsigned *mayAliases, unsigned *noAliases);
|
|
249
245
|
|
|
@@ -42,7 +42,6 @@
|
|
|
42
42
|
#include "MemoryModel/PTAStat.h"
|
|
43
43
|
#include "Graphs/ThreadCallGraph.h"
|
|
44
44
|
#include "Graphs/ICFG.h"
|
|
45
|
-
#include "WPA/FlowSensitiveTBHC.h"
|
|
46
45
|
|
|
47
46
|
#include <iomanip>
|
|
48
47
|
#include <iostream>
|
|
@@ -117,20 +116,10 @@ void PointerAnalysis::initialize()
|
|
|
117
116
|
assert(pag && "SVFIR has not been built!");
|
|
118
117
|
if (chgraph == nullptr)
|
|
119
118
|
{
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
dchg->buildCHG(true);
|
|
125
|
-
chgraph = dchg;
|
|
126
|
-
}
|
|
127
|
-
else
|
|
128
|
-
{
|
|
129
|
-
CHGraph *chg = new CHGraph(pag->getModule());
|
|
130
|
-
CHGBuilder builder(chg);
|
|
131
|
-
builder.buildCHG();
|
|
132
|
-
chgraph = chg;
|
|
133
|
-
}
|
|
119
|
+
CHGraph *chg = new CHGraph(pag->getModule());
|
|
120
|
+
CHGBuilder builder(chg);
|
|
121
|
+
builder.buildCHG();
|
|
122
|
+
chgraph = chg;
|
|
134
123
|
}
|
|
135
124
|
|
|
136
125
|
svfMod = pag->getModule();
|
|
@@ -209,8 +198,6 @@ void PointerAnalysis::finalize()
|
|
|
209
198
|
/// Print statistics
|
|
210
199
|
dumpStat();
|
|
211
200
|
|
|
212
|
-
SVFIR* pag = SVFIR::getPAG();
|
|
213
|
-
|
|
214
201
|
/// Dump results
|
|
215
202
|
if (Options::PTSPrint)
|
|
216
203
|
{
|
|
@@ -233,11 +220,6 @@ void PointerAnalysis::finalize()
|
|
|
233
220
|
if (Options::CallGraphDotGraph)
|
|
234
221
|
getPTACallGraph()->dump("callgraph_final");
|
|
235
222
|
|
|
236
|
-
// FSTBHC has its own TBHC-specific test validation.
|
|
237
|
-
if(!pag->isBuiltFromFile() && alias_validation
|
|
238
|
-
&& !SVFUtil::isa<FlowSensitiveTBHC>(this))
|
|
239
|
-
validateTests();
|
|
240
|
-
|
|
241
223
|
if (!Options::UsePreCompFieldSensitive)
|
|
242
224
|
resetObjFieldSensitive();
|
|
243
225
|
}
|
|
@@ -43,7 +43,7 @@ BVDataPTAImpl::BVDataPTAImpl(SVFIR* p, PointerAnalysis::PTATY type, bool alias_c
|
|
|
43
43
|
else if (Options::ptDataBacking == PTBackingType::Persistent) ptD = new PersDiffPTDataTy(getPtCache(), false);
|
|
44
44
|
else assert(false && "BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!");
|
|
45
45
|
}
|
|
46
|
-
else if (type == FSSPARSE_WPA
|
|
46
|
+
else if (type == FSSPARSE_WPA)
|
|
47
47
|
{
|
|
48
48
|
if (Options::INCDFPTData)
|
|
49
49
|
{
|
|
@@ -41,7 +41,7 @@ using namespace SVFUtil;
|
|
|
41
41
|
SVFVar::SVFVar(const Value* val, NodeID i, PNODEK k) :
|
|
42
42
|
GenericPAGNodeTy(i,k), value(val)
|
|
43
43
|
{
|
|
44
|
-
assert( ValNode <= k && k <=
|
|
44
|
+
assert( ValNode <= k && k <= DummyObjNode && "new SVFIR node kind?");
|
|
45
45
|
switch (k)
|
|
46
46
|
{
|
|
47
47
|
case ValNode:
|
|
@@ -67,9 +67,6 @@ SVFVar::SVFVar(const Value* val, NodeID i, PNODEK k) :
|
|
|
67
67
|
case GepObjNode:
|
|
68
68
|
case FIObjNode:
|
|
69
69
|
case DummyObjNode:
|
|
70
|
-
case CloneGepObjNode:
|
|
71
|
-
case CloneFIObjNode:
|
|
72
|
-
case CloneDummyObjNode:
|
|
73
70
|
{
|
|
74
71
|
isPtr = true;
|
|
75
72
|
if(val)
|
|
@@ -202,30 +199,6 @@ const std::string DummyObjVar::toString() const
|
|
|
202
199
|
return rawstr.str();
|
|
203
200
|
}
|
|
204
201
|
|
|
205
|
-
const std::string CloneDummyObjVar::toString() const
|
|
206
|
-
{
|
|
207
|
-
std::string str;
|
|
208
|
-
raw_string_ostream rawstr(str);
|
|
209
|
-
rawstr << "CloneDummyObjVar ID: " << getId();
|
|
210
|
-
return rawstr.str();
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
const std::string CloneGepObjVar::toString() const
|
|
214
|
-
{
|
|
215
|
-
std::string str;
|
|
216
|
-
raw_string_ostream rawstr(str);
|
|
217
|
-
rawstr << "CloneGepObjVar ID: " << getId();
|
|
218
|
-
return rawstr.str();
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
const std::string CloneFIObjVar::toString() const
|
|
222
|
-
{
|
|
223
|
-
std::string str;
|
|
224
|
-
raw_string_ostream rawstr(str);
|
|
225
|
-
rawstr << "CloneFIObjVar ID: " << getId();
|
|
226
|
-
return rawstr.str();
|
|
227
|
-
}
|
|
228
|
-
|
|
229
202
|
/// Whether it is constant data, i.e., "0", "1.001", "str"
|
|
230
203
|
/// or llvm's metadata, i.e., metadata !4087
|
|
231
204
|
bool SVFVar::isConstantData() const
|
package/lib/SVF-FE/CPPUtil.cpp
CHANGED
|
@@ -263,13 +263,6 @@ bool cppUtil::isVirtualCallSite(CallSite cs)
|
|
|
263
263
|
if (cs.getCalledFunction() != nullptr || cs.arg_empty())
|
|
264
264
|
return false;
|
|
265
265
|
|
|
266
|
-
// When compiled with ctir, we'd be using the DCHG which has its own
|
|
267
|
-
// virtual annotations.
|
|
268
|
-
if (LLVMModuleSet::getLLVMModuleSet()->allCTir())
|
|
269
|
-
{
|
|
270
|
-
return cs.getInstruction()->getMetadata(cppUtil::ctir::derefMDName) != nullptr;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
266
|
const Value *vfunc = cs.getCalledValue();
|
|
274
267
|
if (const LoadInst *vfuncloadinst = SVFUtil::dyn_cast<LoadInst>(vfunc))
|
|
275
268
|
{
|
|
@@ -1207,9 +1207,9 @@ void SVFIRBuilder::handleExtCall(CallSite cs, const SVFFunction *callee)
|
|
|
1207
1207
|
// The external function exists in ExtAPI.json
|
|
1208
1208
|
if (item != nullptr)
|
|
1209
1209
|
{
|
|
1210
|
-
// Get the first operation of the function
|
|
1211
1210
|
cJSON *obj = item->child;
|
|
1212
|
-
|
|
1211
|
+
// Get the first operation of the function
|
|
1212
|
+
obj = obj -> next -> next;
|
|
1213
1213
|
while (obj)
|
|
1214
1214
|
{
|
|
1215
1215
|
std::string op = obj->string;
|
|
@@ -114,6 +114,10 @@ void SymbolTableBuilder::buildMemModel(SVFModule* svfModule)
|
|
|
114
114
|
{
|
|
115
115
|
collectSym(ld->getPointerOperand());
|
|
116
116
|
}
|
|
117
|
+
else if (const AllocaInst *alloc = SVFUtil::dyn_cast<AllocaInst>(inst))
|
|
118
|
+
{
|
|
119
|
+
collectSym(alloc->getArraySize());
|
|
120
|
+
}
|
|
117
121
|
else if (const PHINode *phi = SVFUtil::dyn_cast<PHINode>(inst))
|
|
118
122
|
{
|
|
119
123
|
for (u32_t i = 0; i < phi->getNumIncomingValues(); ++i)
|
package/lib/Util/ExtAPI.cpp
CHANGED
|
@@ -138,7 +138,7 @@ ExtAPI::extType ExtAPI::get_type(const SVF::SVFFunction *F)
|
|
|
138
138
|
{
|
|
139
139
|
// Get the first operation of the function
|
|
140
140
|
cJSON *obj = item->child;
|
|
141
|
-
if (strcmp(obj->string,
|
|
141
|
+
if (strcmp(obj->string, JSON_OPT_FUNCTIONTYPE) == 0)
|
|
142
142
|
type = obj->valuestring;
|
|
143
143
|
else
|
|
144
144
|
assert(false && "The function operation format is illegal!");
|
|
@@ -150,6 +150,25 @@ ExtAPI::extType ExtAPI::get_type(const SVF::SVFFunction *F)
|
|
|
150
150
|
return it->second;
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
+
// Get priority of he function, return value
|
|
154
|
+
// 0: Apply user-defined functions
|
|
155
|
+
// 1: Apply function specification in ExtAPI.json
|
|
156
|
+
u32_t ExtAPI::isOverwrittenAppFunction(const SVF::SVFFunction *callee)
|
|
157
|
+
{
|
|
158
|
+
std::string funName = get_name(callee);
|
|
159
|
+
cJSON *item = get_FunJson(funName);
|
|
160
|
+
if (item != nullptr)
|
|
161
|
+
{
|
|
162
|
+
cJSON *obj = item->child;
|
|
163
|
+
obj = obj->next;
|
|
164
|
+
if (strcmp(obj->string, JSON_OPT_OVERWRITE) == 0)
|
|
165
|
+
return obj->valueint;
|
|
166
|
+
else
|
|
167
|
+
assert(false && "The function operation format is illegal!");
|
|
168
|
+
}
|
|
169
|
+
return 0;
|
|
170
|
+
}
|
|
171
|
+
|
|
153
172
|
// Does (F) have a static var X (unavailable to us) that its return points to?
|
|
154
173
|
bool ExtAPI::has_static(const SVFFunction *F)
|
|
155
174
|
{
|
|
@@ -240,7 +259,20 @@ bool ExtAPI::is_ext(const SVFFunction *F)
|
|
|
240
259
|
else
|
|
241
260
|
{
|
|
242
261
|
ExtAPI::extType t = get_type(F);
|
|
243
|
-
|
|
262
|
+
if (t != EFT_NULL)
|
|
263
|
+
{
|
|
264
|
+
u32_t overwrittenAppFunction = isOverwrittenAppFunction(F);
|
|
265
|
+
// overwrittenAppFunction = 1: Execute function specification in ExtAPI.json
|
|
266
|
+
// F is considered as external function
|
|
267
|
+
if (overwrittenAppFunction == 1)
|
|
268
|
+
res = 1;
|
|
269
|
+
// overwrittenAppFunction = 0: Execute user-defined functions
|
|
270
|
+
// F is not considered as external function
|
|
271
|
+
else
|
|
272
|
+
res = 0;
|
|
273
|
+
}
|
|
274
|
+
else
|
|
275
|
+
res = 0;
|
|
244
276
|
}
|
|
245
277
|
return res;
|
|
246
278
|
}
|