svf-tools 1.0.795 → 1.0.796
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/AccessPath_8cpp_source.html +167 -161
- package/SVF-doxygen/html/AccessPath_8h_source.html +51 -51
- package/SVF-doxygen/html/AndersenSCD_8cpp_source.html +1 -1
- package/SVF-doxygen/html/AndersenStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/AndersenWaveDiff_8cpp_source.html +1 -1
- package/SVF-doxygen/html/Andersen_8cpp_source.html +6 -6
- package/SVF-doxygen/html/CFLAlias_8cpp_source.html +5 -5
- package/SVF-doxygen/html/CFLAlias_8h_source.html +3 -3
- package/SVF-doxygen/html/CFLBase_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CHGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/ConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ContextDDA_8cpp_source.html +5 -5
- package/SVF-doxygen/html/ContextDDA_8h_source.html +2 -2
- package/SVF-doxygen/html/CxtStmt_8h_source.html +1 -1
- package/SVF-doxygen/html/DDAClient_8cpp_source.html +5 -5
- package/SVF-doxygen/html/DDAPass_8cpp_source.html +2 -2
- package/SVF-doxygen/html/DDAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/DDAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/DDAVFSolver_8h_source.html +4 -4
- package/SVF-doxygen/html/FSMPTA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/FlowDDA_8cpp_source.html +5 -5
- package/SVF-doxygen/html/FlowDDA_8h_source.html +2 -2
- package/SVF-doxygen/html/FlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +5 -5
- package/SVF-doxygen/html/ICFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/ICFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/IRGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/LLVMLoopAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/LLVMModule_8cpp_source.html +10 -10
- package/SVF-doxygen/html/LLVMUtil_8cpp_source.html +40 -27
- package/SVF-doxygen/html/LeakChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/LockAnalysis_8cpp_source.html +5 -5
- package/SVF-doxygen/html/LockAnalysis_8h_source.html +2 -2
- package/SVF-doxygen/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MHP_8cpp_source.html +6 -6
- package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/MTA_8cpp_source.html +5 -5
- package/SVF-doxygen/html/MemRegion_8cpp_source.html +7 -7
- package/SVF-doxygen/html/MemRegion_8h_source.html +1 -1
- package/SVF-doxygen/html/MemSSA_8cpp_source.html +4 -4
- package/SVF-doxygen/html/NodeIDAllocator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/PCG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +3 -3
- package/SVF-doxygen/html/PointerAnalysisImpl_8h_source.html +4 -4
- package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +7 -7
- package/SVF-doxygen/html/PointerAnalysis_8h_source.html +1 -1
- package/SVF-doxygen/html/ProgSlice_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SVFFileSystem_8cpp_source.html +6 -6
- package/SVF-doxygen/html/SVFFileSystem_8h_source.html +6 -6
- package/SVF-doxygen/html/SVFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SVFGOPT_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SVFGStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +3 -3
- package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +773 -777
- package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +20 -20
- package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFStatements_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFStatements_8h_source.html +5 -5
- package/SVF-doxygen/html/SVFType_8cpp.html +2 -2
- package/SVF-doxygen/html/SVFType_8cpp_source.html +70 -61
- package/SVF-doxygen/html/SVFType_8h.html +23 -23
- package/SVF-doxygen/html/SVFType_8h_source.html +401 -378
- package/SVF-doxygen/html/SVFUtil_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFValue_8cpp_source.html +4 -4
- package/SVF-doxygen/html/SVFValue_8h_source.html +3 -3
- package/SVF-doxygen/html/SVFVariables_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +3 -3
- package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SrcSnkDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/Steensgaard_8cpp_source.html +5 -5
- package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/SymbolTableInfo_8cpp_source.html +7 -7
- package/SVF-doxygen/html/SymbolTableInfo_8h_source.html +1 -1
- package/SVF-doxygen/html/TCT_8cpp_source.html +2 -2
- package/SVF-doxygen/html/ThreadCallGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/VFG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/VersionedFlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/WPAPass_8cpp_source.html +4 -4
- package/SVF-doxygen/html/WPAPass_8h_source.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1AccessPath-members.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1AccessPath.html +167 -161
- package/SVF-doxygen/html/classSVF_1_1ActualINSVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1AddrStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1AliasDDAClient.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1Andersen.html +5 -5
- package/SVF-doxygen/html/classSVF_1_1AndersenBase.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1AndersenSCD.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1AndersenStat.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1AndersenWaveDiff.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1BVDataPTAImpl.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1BinaryOPStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1BranchStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CFLAlias.html +7 -7
- package/SVF-doxygen/html/classSVF_1_1CFLBase.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CHGBuilder.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1CallCFGEdge.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CallPE.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CmpStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CmpVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CondPTAImpl.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +5 -5
- package/SVF-doxygen/html/classSVF_1_1CopyStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CxtStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CxtThread.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CxtThreadStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1DDAClient.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1DDAPass.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1DDAStat.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1DDAVFSolver.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1DoubleFreeChecker.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1FIObjVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +5 -5
- package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +5 -5
- package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ForkJoinAnalysis.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1GepObjVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1GepStmt-members.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1GepStmt.html +9 -10
- package/SVF-doxygen/html/classSVF_1_1GepValVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ICFG.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ICFGBuilder.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1IRGraph.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1IntraCFGEdge.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1IntraICFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1LLVMLoopAnalysis.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +10 -10
- package/SVF-doxygen/html/classSVF_1_1LeakChecker.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1LoadStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1LockAnalysis.html +5 -5
- package/SVF-doxygen/html/classSVF_1_1LockResultValidator.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1MHP.html +6 -6
- package/SVF-doxygen/html/classSVF_1_1MRGenerator.html +6 -6
- package/SVF-doxygen/html/classSVF_1_1MTA.html +5 -5
- package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1MTAResultValidator.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1MTASVFGBuilder.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1MemObj.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1MemSSA.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1MemSSAStat.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1ObjTypeInfo.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1PCG.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1PHIVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1PhiStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +7 -7
- package/SVF-doxygen/html/classSVF_1_1ProgSlice.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1RetCFGEdge.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1RetPE.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SVFArrayType-members.html +11 -7
- package/SVF-doxygen/html/classSVF_1_1SVFArrayType.html +65 -27
- package/SVF-doxygen/html/classSVF_1_1SVFFunction.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SVFFunctionType-members.html +30 -27
- package/SVF-doxygen/html/classSVF_1_1SVFFunctionType.html +28 -22
- package/SVF-doxygen/html/classSVF_1_1SVFG.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1SVFGBuilder.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1SVFGOPT.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1SVFGStat.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState-members.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +749 -769
- package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +6 -6
- package/SVF-doxygen/html/classSVF_1_1SVFIntegerType-members.html +30 -27
- package/SVF-doxygen/html/classSVF_1_1SVFIntegerType.html +32 -26
- package/SVF-doxygen/html/classSVF_1_1SVFOtherType-members.html +32 -29
- package/SVF-doxygen/html/classSVF_1_1SVFOtherType.html +33 -27
- package/SVF-doxygen/html/classSVF_1_1SVFPointerType-members.html +30 -27
- package/SVF-doxygen/html/classSVF_1_1SVFPointerType.html +28 -22
- package/SVF-doxygen/html/classSVF_1_1SVFStat.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SVFStructType-members.html +32 -29
- package/SVF-doxygen/html/classSVF_1_1SVFStructType.html +33 -27
- package/SVF-doxygen/html/classSVF_1_1SVFType-members.html +27 -24
- package/SVF-doxygen/html/classSVF_1_1SVFType.html +120 -23
- package/SVF-doxygen/html/classSVF_1_1SVFValue.html +23 -23
- package/SVF-doxygen/html/classSVF_1_1SVFVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1SelectStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SrcSnkDDA.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1Steensgaard.html +5 -5
- package/SVF-doxygen/html/classSVF_1_1StoreStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1SymbolTableInfo.html +5 -5
- package/SVF-doxygen/html/classSVF_1_1TCT.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1TDForkPE.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1TDJoinPE.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ThreadCallGraph.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1UnaryOPStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1VFG.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1ValVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitive.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1WPAPass.html +3 -3
- package/SVF-doxygen/html/functions_a.html +1 -1
- package/SVF-doxygen/html/functions_c.html +1 -1
- package/SVF-doxygen/html/functions_func.html +1 -1
- package/SVF-doxygen/html/functions_func_c.html +1 -1
- package/SVF-doxygen/html/functions_func_g.html +24 -18
- package/SVF-doxygen/html/functions_func_i.html +17 -11
- package/SVF-doxygen/html/functions_g.html +25 -19
- package/SVF-doxygen/html/functions_i.html +16 -10
- package/SVF-doxygen/html/functions_p.html +19 -23
- package/SVF-doxygen/html/functions_r.html +5 -5
- package/SVF-doxygen/html/functions_s.html +14 -12
- package/SVF-doxygen/html/functions_t.html +7 -7
- package/SVF-doxygen/html/functions_v.html +3 -3
- package/SVF-doxygen/html/globals_func_t.html +3 -0
- package/SVF-doxygen/html/globals_t.html +3 -0
- package/SVF-doxygen/html/namespaceSVF.html +45 -36
- package/SVF-doxygen/html/namespacemembers.html +1 -1
- package/SVF-doxygen/html/namespacemembers_func.html +1 -1
- package/SVF-doxygen/html/search/all_0.js +1 -1
- package/SVF-doxygen/html/search/all_1.js +1 -1
- package/SVF-doxygen/html/search/all_10.js +324 -324
- package/SVF-doxygen/html/search/all_11.js +224 -224
- package/SVF-doxygen/html/search/all_12.js +541 -541
- package/SVF-doxygen/html/search/all_13.js +191 -190
- package/SVF-doxygen/html/search/all_14.js +67 -67
- package/SVF-doxygen/html/search/all_15.js +170 -170
- package/SVF-doxygen/html/search/all_16.js +63 -63
- package/SVF-doxygen/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/search/all_18.js +1 -1
- package/SVF-doxygen/html/search/all_19.js +11 -11
- package/SVF-doxygen/html/search/all_1a.js +172 -172
- package/SVF-doxygen/html/search/all_3.js +1 -1
- package/SVF-doxygen/html/search/all_7.js +457 -455
- package/SVF-doxygen/html/search/all_8.js +194 -194
- package/SVF-doxygen/html/search/all_9.js +610 -608
- package/SVF-doxygen/html/search/all_a.js +46 -46
- package/SVF-doxygen/html/search/all_b.js +26 -26
- package/SVF-doxygen/html/search/all_c.js +116 -116
- package/SVF-doxygen/html/search/all_d.js +196 -196
- package/SVF-doxygen/html/search/all_e.js +207 -207
- package/SVF-doxygen/html/search/all_f.js +116 -116
- package/SVF-doxygen/html/search/classes_0.js +26 -26
- package/SVF-doxygen/html/search/classes_1.js +9 -9
- package/SVF-doxygen/html/search/classes_10.js +73 -73
- package/SVF-doxygen/html/search/classes_11.js +15 -15
- package/SVF-doxygen/html/search/classes_12.js +2 -2
- package/SVF-doxygen/html/search/classes_13.js +10 -10
- package/SVF-doxygen/html/search/classes_14.js +14 -14
- package/SVF-doxygen/html/search/classes_15.js +1 -1
- package/SVF-doxygen/html/search/classes_2.js +80 -80
- package/SVF-doxygen/html/search/classes_3.js +37 -37
- package/SVF-doxygen/html/search/classes_4.js +9 -9
- package/SVF-doxygen/html/search/classes_5.js +28 -28
- package/SVF-doxygen/html/search/classes_6.js +104 -104
- package/SVF-doxygen/html/search/classes_7.js +33 -33
- package/SVF-doxygen/html/search/classes_8.js +56 -56
- package/SVF-doxygen/html/search/classes_9.js +1 -1
- package/SVF-doxygen/html/search/classes_a.js +12 -12
- package/SVF-doxygen/html/search/classes_b.js +29 -29
- package/SVF-doxygen/html/search/classes_c.js +6 -6
- package/SVF-doxygen/html/search/classes_d.js +18 -18
- package/SVF-doxygen/html/search/classes_e.js +36 -36
- package/SVF-doxygen/html/search/classes_f.js +25 -25
- package/SVF-doxygen/html/search/defines_0.js +3 -3
- package/SVF-doxygen/html/search/defines_1.js +2 -2
- package/SVF-doxygen/html/search/defines_2.js +30 -30
- package/SVF-doxygen/html/search/defines_3.js +21 -21
- package/SVF-doxygen/html/search/defines_4.js +2 -2
- package/SVF-doxygen/html/search/defines_5.js +4 -4
- package/SVF-doxygen/html/search/defines_6.js +2 -2
- package/SVF-doxygen/html/search/defines_7.js +5 -5
- package/SVF-doxygen/html/search/defines_8.js +11 -11
- package/SVF-doxygen/html/search/defines_9.js +9 -9
- package/SVF-doxygen/html/search/defines_a.js +2 -2
- package/SVF-doxygen/html/search/defines_b.js +1 -1
- package/SVF-doxygen/html/search/defines_c.js +3 -3
- package/SVF-doxygen/html/search/defines_d.js +2 -2
- package/SVF-doxygen/html/search/defines_e.js +7 -7
- package/SVF-doxygen/html/search/defines_f.js +3 -3
- package/SVF-doxygen/html/search/enums_0.js +3 -3
- package/SVF-doxygen/html/search/enums_1.js +2 -2
- package/SVF-doxygen/html/search/enums_10.js +1 -1
- package/SVF-doxygen/html/search/enums_11.js +1 -1
- package/SVF-doxygen/html/search/enums_2.js +8 -8
- package/SVF-doxygen/html/search/enums_3.js +1 -1
- package/SVF-doxygen/html/search/enums_4.js +3 -3
- package/SVF-doxygen/html/search/enums_5.js +1 -1
- package/SVF-doxygen/html/search/enums_6.js +2 -2
- package/SVF-doxygen/html/search/enums_7.js +2 -2
- package/SVF-doxygen/html/search/enums_8.js +4 -4
- package/SVF-doxygen/html/search/enums_9.js +1 -1
- package/SVF-doxygen/html/search/enums_a.js +1 -1
- package/SVF-doxygen/html/search/enums_b.js +7 -7
- package/SVF-doxygen/html/search/enums_c.js +1 -1
- package/SVF-doxygen/html/search/enums_d.js +4 -4
- package/SVF-doxygen/html/search/enums_e.js +2 -2
- package/SVF-doxygen/html/search/enums_f.js +4 -4
- package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
- package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
- package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
- package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
- package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
- package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
- package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
- package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
- package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
- package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
- package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
- package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
- package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
- package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
- package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
- package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
- package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
- package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
- package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
- package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
- package/SVF-doxygen/html/search/files_0.js +13 -13
- package/SVF-doxygen/html/search/files_1.js +7 -7
- package/SVF-doxygen/html/search/files_10.js +8 -8
- package/SVF-doxygen/html/search/files_11.js +8 -8
- package/SVF-doxygen/html/search/files_12.js +2 -2
- package/SVF-doxygen/html/search/files_2.js +55 -55
- package/SVF-doxygen/html/search/files_3.js +14 -14
- package/SVF-doxygen/html/search/files_4.js +5 -5
- package/SVF-doxygen/html/search/files_5.js +13 -13
- package/SVF-doxygen/html/search/files_6.js +9 -9
- package/SVF-doxygen/html/search/files_7.js +14 -14
- package/SVF-doxygen/html/search/files_8.js +13 -13
- package/SVF-doxygen/html/search/files_9.js +18 -18
- package/SVF-doxygen/html/search/files_a.js +3 -3
- package/SVF-doxygen/html/search/files_b.js +2 -2
- package/SVF-doxygen/html/search/files_c.js +20 -20
- package/SVF-doxygen/html/search/files_d.js +4 -4
- package/SVF-doxygen/html/search/files_e.js +62 -62
- package/SVF-doxygen/html/search/files_f.js +8 -8
- package/SVF-doxygen/html/search/functions_0.js +12 -12
- package/SVF-doxygen/html/search/functions_1.js +359 -359
- package/SVF-doxygen/html/search/functions_10.js +140 -140
- package/SVF-doxygen/html/search/functions_11.js +138 -138
- package/SVF-doxygen/html/search/functions_12.js +276 -276
- package/SVF-doxygen/html/search/functions_13.js +59 -58
- package/SVF-doxygen/html/search/functions_14.js +39 -39
- package/SVF-doxygen/html/search/functions_15.js +71 -71
- package/SVF-doxygen/html/search/functions_16.js +32 -32
- package/SVF-doxygen/html/search/functions_17.js +3 -3
- package/SVF-doxygen/html/search/functions_18.js +172 -172
- package/SVF-doxygen/html/search/functions_2.js +86 -86
- package/SVF-doxygen/html/search/functions_3.js +257 -257
- package/SVF-doxygen/html/search/functions_4.js +75 -75
- package/SVF-doxygen/html/search/functions_5.js +53 -53
- package/SVF-doxygen/html/search/functions_6.js +59 -59
- package/SVF-doxygen/html/search/functions_7.js +851 -849
- package/SVF-doxygen/html/search/functions_8.js +146 -146
- package/SVF-doxygen/html/search/functions_9.js +428 -426
- package/SVF-doxygen/html/search/functions_a.js +30 -30
- package/SVF-doxygen/html/search/functions_b.js +2 -2
- package/SVF-doxygen/html/search/functions_c.js +26 -26
- package/SVF-doxygen/html/search/functions_d.js +77 -77
- package/SVF-doxygen/html/search/functions_e.js +35 -35
- package/SVF-doxygen/html/search/functions_f.js +56 -56
- package/SVF-doxygen/html/search/namespaces_0.js +1 -1
- package/SVF-doxygen/html/search/namespaces_1.js +7 -7
- package/SVF-doxygen/html/search/related_0.js +2 -2
- package/SVF-doxygen/html/search/related_1.js +2 -2
- package/SVF-doxygen/html/search/related_2.js +2 -2
- package/SVF-doxygen/html/search/related_3.js +2 -2
- package/SVF-doxygen/html/search/related_4.js +2 -2
- package/SVF-doxygen/html/search/related_5.js +1 -1
- package/SVF-doxygen/html/search/related_6.js +2 -2
- package/SVF-doxygen/html/search/related_7.js +4 -4
- package/SVF-doxygen/html/search/related_8.js +2 -2
- package/SVF-doxygen/html/search/related_9.js +4 -4
- package/SVF-doxygen/html/search/related_a.js +19 -19
- package/SVF-doxygen/html/search/related_b.js +4 -4
- package/SVF-doxygen/html/search/related_c.js +1 -1
- package/SVF-doxygen/html/search/related_d.js +11 -11
- package/SVF-doxygen/html/search/related_e.js +2 -2
- package/SVF-doxygen/html/search/related_f.js +2 -2
- package/SVF-doxygen/html/search/typedefs_0.js +18 -18
- package/SVF-doxygen/html/search/typedefs_1.js +26 -26
- package/SVF-doxygen/html/search/typedefs_10.js +61 -61
- package/SVF-doxygen/html/search/typedefs_11.js +13 -13
- package/SVF-doxygen/html/search/typedefs_12.js +11 -11
- package/SVF-doxygen/html/search/typedefs_13.js +35 -35
- package/SVF-doxygen/html/search/typedefs_14.js +8 -8
- package/SVF-doxygen/html/search/typedefs_2.js +129 -129
- package/SVF-doxygen/html/search/typedefs_3.js +39 -39
- package/SVF-doxygen/html/search/typedefs_4.js +17 -17
- package/SVF-doxygen/html/search/typedefs_5.js +41 -41
- package/SVF-doxygen/html/search/typedefs_6.js +55 -55
- package/SVF-doxygen/html/search/typedefs_7.js +42 -42
- package/SVF-doxygen/html/search/typedefs_8.js +1 -1
- package/SVF-doxygen/html/search/typedefs_9.js +6 -6
- package/SVF-doxygen/html/search/typedefs_a.js +29 -29
- package/SVF-doxygen/html/search/typedefs_b.js +29 -29
- package/SVF-doxygen/html/search/typedefs_c.js +41 -41
- package/SVF-doxygen/html/search/typedefs_d.js +15 -15
- package/SVF-doxygen/html/search/typedefs_e.js +52 -52
- package/SVF-doxygen/html/search/typedefs_f.js +14 -14
- package/SVF-doxygen/html/search/variables_0.js +151 -151
- package/SVF-doxygen/html/search/variables_1.js +75 -75
- package/SVF-doxygen/html/search/variables_10.js +97 -97
- package/SVF-doxygen/html/search/variables_11.js +46 -46
- package/SVF-doxygen/html/search/variables_12.js +92 -92
- package/SVF-doxygen/html/search/variables_13.js +75 -75
- package/SVF-doxygen/html/search/variables_14.js +14 -14
- package/SVF-doxygen/html/search/variables_15.js +48 -48
- package/SVF-doxygen/html/search/variables_16.js +9 -9
- package/SVF-doxygen/html/search/variables_17.js +1 -1
- package/SVF-doxygen/html/search/variables_18.js +2 -2
- package/SVF-doxygen/html/search/variables_2.js +37 -37
- package/SVF-doxygen/html/search/variables_3.js +142 -142
- package/SVF-doxygen/html/search/variables_4.js +55 -55
- package/SVF-doxygen/html/search/variables_5.js +39 -39
- package/SVF-doxygen/html/search/variables_6.js +66 -66
- package/SVF-doxygen/html/search/variables_7.js +33 -33
- package/SVF-doxygen/html/search/variables_8.js +7 -7
- package/SVF-doxygen/html/search/variables_9.js +77 -77
- package/SVF-doxygen/html/search/variables_a.js +4 -4
- package/SVF-doxygen/html/search/variables_b.js +10 -10
- package/SVF-doxygen/html/search/variables_c.js +45 -45
- package/SVF-doxygen/html/search/variables_d.js +56 -56
- package/SVF-doxygen/html/search/variables_e.js +123 -123
- package/SVF-doxygen/html/search/variables_f.js +30 -30
- package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/structSVF_1_1Hash_3_01NodePair_01_4.html +11 -11
- package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1AccessPath_01_4.html +8 -8
- package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1NodePair_01_4.html +11 -11
- package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1SparseBitVector_3_01N_01_4_01_4.html +7 -7
- package/SVF-doxygen/html/structstd_1_1hash_3_01std_1_1vector_3_01T_01_4_01_4.html +14 -14
- package/SVF-doxygen/html/svf-ex_8cpp.html +235 -125
- package/SVF-doxygen/html/svf-ex_8cpp_source.html +234 -144
- package/package.json +1 -1
- package/svf/include/AbstractExecution/SVFIR2ItvExeState.h +5 -5
- package/svf/include/MemoryModel/AccessPath.h +24 -6
- package/svf/include/SVFIR/SVFStatements.h +2 -2
- package/svf/include/SVFIR/SVFType.h +19 -0
- package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +16 -21
- package/svf/lib/MemoryModel/AccessPath.cpp +15 -14
- package/svf/lib/SVFIR/SVFType.cpp +7 -0
- package/svf-llvm/lib/LLVMUtil.cpp +10 -0
- package/svf-llvm/tools/Example/svf-ex.cpp +65 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.796",
|
|
4
4
|
"description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -74,17 +74,17 @@ public:
|
|
|
74
74
|
VAddrs getGepObjAddress(u32_t pointer, APOffset offset);
|
|
75
75
|
|
|
76
76
|
/// Return the byte offset from one gep param offset
|
|
77
|
-
std::pair<APOffset, APOffset> getBytefromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep
|
|
77
|
+
std::pair<APOffset, APOffset> getBytefromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep);
|
|
78
78
|
|
|
79
79
|
/// Return the Index offset from one gep param offset
|
|
80
80
|
std::pair<APOffset, APOffset> getIndexfromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep);
|
|
81
81
|
|
|
82
82
|
/// Return the byte offset expression of a GepStmt
|
|
83
83
|
/// elemBytesize is the element byte size of an static alloc or heap alloc array
|
|
84
|
-
/// e.g. GepStmt* gep =
|
|
85
|
-
/// s32_t
|
|
86
|
-
///
|
|
87
|
-
std::pair<APOffset, APOffset> getGepByteOffset(const GepStmt *gep
|
|
84
|
+
/// e.g. GepStmt* gep = [i32*10], x, and x is [0,3]
|
|
85
|
+
/// std::pair<s32_t, s32_t> byteOffset = getGepByteOffset(gep);
|
|
86
|
+
/// byteOffset should be [0, 12] since i32 is 4 bytes.
|
|
87
|
+
std::pair<APOffset, APOffset> getGepByteOffset(const GepStmt *gep);
|
|
88
88
|
|
|
89
89
|
/// Return the offset expression of a GepStmt
|
|
90
90
|
std::pair<APOffset, APOffset> getGepOffset(const GepStmt *gep);
|
|
@@ -109,13 +109,31 @@ public:
|
|
|
109
109
|
}
|
|
110
110
|
//@}
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Computes the total constant byte offset of an access path.
|
|
114
|
+
* This function iterates over the offset-variable-type pairs in reverse order,
|
|
115
|
+
* accumulating the total byte offset for constant offsets. For each pair,
|
|
116
|
+
* it retrieves the corresponding SVFValue and determines the type of offset
|
|
117
|
+
* (whether it's an array, pointer, or structure). If the offset corresponds
|
|
118
|
+
* to a structure, it further resolves the actual element type based on the
|
|
119
|
+
* offset value. It then multiplies the offset value by the size of the type
|
|
120
|
+
* to compute the byte offset. This is used to handle composite types where
|
|
121
|
+
* offsets are derived from the type's internal structure, such as arrays
|
|
122
|
+
* or structures with fields of various types and sizes. The function asserts
|
|
123
|
+
* that the access path must have a constant offset, and it is intended to be
|
|
124
|
+
* used when the offset is known to be constant at compile time.
|
|
125
|
+
*
|
|
126
|
+
* @return APOffset representing the computed total constant byte offset.
|
|
127
|
+
*/
|
|
128
|
+
/// e.g. GepStmt* gep = [i32*4], 2
|
|
129
|
+
/// APOffset byteOffset = gep->accumulateConstantByteOffset();
|
|
130
|
+
/// byteOffset should be 8 since i32 is 4 bytes and index is 2.
|
|
131
|
+
APOffset computeConstantByteOffset() const;
|
|
118
132
|
/// Return accumulated constant offset given OffsetVarVec
|
|
133
|
+
/// compard to computeConstantByteOffset, it is field offset rather than byte offset
|
|
134
|
+
/// e.g. GepStmt* gep = [i32*4], 2
|
|
135
|
+
/// APOffset byteOffset = gep->computeConstantOffset();
|
|
136
|
+
/// byteOffset should be 2 since it is field offset.
|
|
119
137
|
APOffset computeConstantOffset() const;
|
|
120
138
|
|
|
121
139
|
/// Return element number of a type.
|
|
@@ -505,9 +505,9 @@ public:
|
|
|
505
505
|
/// e.g. GepStmt* gep = **,
|
|
506
506
|
/// s32_t elemBytesize = LLVMUtil::SVFType2ByteSize(gep->getRHSVar()->getValue()->getType());
|
|
507
507
|
/// APOffset byteOffset = gep->accumulateConstantByteOffset(elemBytesize);
|
|
508
|
-
inline APOffset accumulateConstantByteOffset(
|
|
508
|
+
inline APOffset accumulateConstantByteOffset() const
|
|
509
509
|
{
|
|
510
|
-
return getAccessPath().computeConstantByteOffset(
|
|
510
|
+
return getAccessPath().computeConstantByteOffset();
|
|
511
511
|
}
|
|
512
512
|
|
|
513
513
|
/// Return accumulated constant offset (when accessing array or struct) if this offset is a constant.
|
|
@@ -299,6 +299,8 @@ public:
|
|
|
299
299
|
return getPointerToTy;
|
|
300
300
|
}
|
|
301
301
|
|
|
302
|
+
u32_t getLLVMByteSize() const;
|
|
303
|
+
|
|
302
304
|
inline void setTypeInfo(StInfo* ti)
|
|
303
305
|
{
|
|
304
306
|
typeinfo = ti;
|
|
@@ -321,6 +323,16 @@ public:
|
|
|
321
323
|
return kind == SVFPointerTy;
|
|
322
324
|
}
|
|
323
325
|
|
|
326
|
+
inline bool isArrayTy() const
|
|
327
|
+
{
|
|
328
|
+
return kind == SVFArrayTy;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
inline bool isStructTy() const
|
|
332
|
+
{
|
|
333
|
+
return kind == SVFStructTy;
|
|
334
|
+
}
|
|
335
|
+
|
|
324
336
|
inline bool isSingleValueType() const
|
|
325
337
|
{
|
|
326
338
|
return isSingleValTy;
|
|
@@ -462,6 +474,11 @@ public:
|
|
|
462
474
|
|
|
463
475
|
void print(std::ostream& os) const override;
|
|
464
476
|
|
|
477
|
+
const SVFType* getTypeOfElement() const
|
|
478
|
+
{
|
|
479
|
+
return typeOfElement;
|
|
480
|
+
}
|
|
481
|
+
|
|
465
482
|
void setTypeOfElement(const SVFType* elemType)
|
|
466
483
|
{
|
|
467
484
|
typeOfElement = elemType;
|
|
@@ -471,6 +488,8 @@ public:
|
|
|
471
488
|
{
|
|
472
489
|
numOfElement = elemNum;
|
|
473
490
|
}
|
|
491
|
+
|
|
492
|
+
|
|
474
493
|
};
|
|
475
494
|
|
|
476
495
|
class SVFOtherType : public SVFType
|
|
@@ -176,10 +176,18 @@ SVFIR2ItvExeState::VAddrs SVFIR2ItvExeState::getGepObjAddress(u32_t pointer, APO
|
|
|
176
176
|
return ret;
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
-
std::pair<APOffset, APOffset> SVFIR2ItvExeState::getBytefromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep
|
|
179
|
+
std::pair<APOffset, APOffset> SVFIR2ItvExeState::getBytefromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep)
|
|
180
180
|
{
|
|
181
181
|
const SVFValue *value = gep_pair.first->getValue();
|
|
182
182
|
const SVFType *type = gep_pair.second;
|
|
183
|
+
if (const SVFArrayType* arrType = SVFUtil::dyn_cast<SVFArrayType>(type))
|
|
184
|
+
{
|
|
185
|
+
type = arrType->getTypeOfElement();
|
|
186
|
+
}
|
|
187
|
+
else if (const SVFPointerType* ptrType = SVFUtil::dyn_cast<SVFPointerType>(type))
|
|
188
|
+
{
|
|
189
|
+
type = ptrType->getPtrElementType();
|
|
190
|
+
}
|
|
183
191
|
const SVFConstantInt *op = SVFUtil::dyn_cast<SVFConstantInt>(value);
|
|
184
192
|
APOffset offsetLb = 0;
|
|
185
193
|
APOffset offsetUb = 0;
|
|
@@ -204,14 +212,15 @@ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getBytefromGepTypePair(const Ac
|
|
|
204
212
|
/// offset is constant but stored in variable
|
|
205
213
|
if (op)
|
|
206
214
|
{
|
|
207
|
-
offsetLb = offsetUb =
|
|
208
|
-
|
|
209
|
-
|
|
215
|
+
offsetLb = offsetUb =
|
|
216
|
+
op->getSExtValue() * type->getLLVMByteSize() > maxByteLimit
|
|
217
|
+
? maxByteLimit
|
|
218
|
+
: op->getSExtValue() * type->getLLVMByteSize();
|
|
210
219
|
}
|
|
211
220
|
else
|
|
212
221
|
{
|
|
213
222
|
u32_t idx = _svfir->getValueNode(value);
|
|
214
|
-
IntervalValue
|
|
223
|
+
IntervalValue idxVal = _es[idx] * IntervalValue(type->getLLVMByteSize());
|
|
215
224
|
if (idxVal.isBottom() || idxVal.isTop())
|
|
216
225
|
return std::make_pair(0, maxByteLimit);
|
|
217
226
|
// if idxVal is a concrete value
|
|
@@ -225,20 +234,6 @@ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getBytefromGepTypePair(const Ac
|
|
|
225
234
|
offsetUb = valueReshape(idxVal.ub().getNumeral());
|
|
226
235
|
}
|
|
227
236
|
}
|
|
228
|
-
|
|
229
|
-
if (type)
|
|
230
|
-
{
|
|
231
|
-
if (const SVFPointerType *pty = SVFUtil::dyn_cast<SVFPointerType>(type))
|
|
232
|
-
{
|
|
233
|
-
offsetLb = offsetLb * gep->getAccessPath().getElementNum(pty->getPtrElementType())* elemBytesize;
|
|
234
|
-
offsetUb = offsetUb * gep->getAccessPath().getElementNum(pty->getPtrElementType())* elemBytesize;
|
|
235
|
-
}
|
|
236
|
-
else
|
|
237
|
-
{
|
|
238
|
-
offsetLb = offsetLb * elemBytesize;
|
|
239
|
-
offsetUb = offsetUb * elemBytesize;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
237
|
return {offsetLb, offsetUb};
|
|
243
238
|
}
|
|
244
239
|
|
|
@@ -324,7 +319,7 @@ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getIndexfromGepTypePair(const A
|
|
|
324
319
|
}
|
|
325
320
|
|
|
326
321
|
|
|
327
|
-
std::pair<APOffset, APOffset> SVFIR2ItvExeState::getGepByteOffset(const GepStmt *gep
|
|
322
|
+
std::pair<APOffset, APOffset> SVFIR2ItvExeState::getGepByteOffset(const GepStmt *gep)
|
|
328
323
|
{
|
|
329
324
|
/// for instant constant index, e.g. gep arr, 1
|
|
330
325
|
if (gep->getOffsetVarAndGepTypePairVec().empty())
|
|
@@ -336,7 +331,7 @@ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getGepByteOffset(const GepStmt
|
|
|
336
331
|
for (int i = gep->getOffsetVarAndGepTypePairVec().size() - 1; i >= 0; i--)
|
|
337
332
|
{
|
|
338
333
|
std::pair<APOffset, APOffset> offsetIdx = getBytefromGepTypePair(
|
|
339
|
-
gep->getOffsetVarAndGepTypePairVec()[i], gep
|
|
334
|
+
gep->getOffsetVarAndGepTypePairVec()[i], gep);
|
|
340
335
|
APOffset offsetLb = offsetIdx.first;
|
|
341
336
|
APOffset offsetUb = offsetIdx.second;
|
|
342
337
|
if (totalOffsetLb + offsetLb > maxFieldLimit)
|
|
@@ -94,33 +94,34 @@ u32_t AccessPath::getElementNum(const SVFType* type) const
|
|
|
94
94
|
/// Given a vector and elem byte size: [(value1,type1), (value2,type2), (value3,type3)], bytesize
|
|
95
95
|
/// totalConstByteOffset = ByteOffset(value1,type1) * ByteOffset(value2,type2) + ByteOffset(value3,type3)
|
|
96
96
|
/// For a pointer type (e.g., t1 is PointerType), we will retrieve the pointee type and times the offset, i.e., getElementNum(t1) X off1
|
|
97
|
-
APOffset AccessPath::computeConstantByteOffset(
|
|
97
|
+
APOffset AccessPath::computeConstantByteOffset() const
|
|
98
98
|
{
|
|
99
99
|
assert(isConstantOffset() && "not a constant offset");
|
|
100
100
|
|
|
101
|
-
if(offsetVarAndGepTypePairs.empty())
|
|
102
|
-
return getConstantFieldIdx() * elemBytesize;
|
|
103
|
-
|
|
104
101
|
APOffset totalConstOffset = 0;
|
|
105
102
|
for(int i = offsetVarAndGepTypePairs.size() - 1; i >= 0; i--)
|
|
106
103
|
{
|
|
107
104
|
const SVFValue* value = offsetVarAndGepTypePairs[i].first->getValue();
|
|
108
105
|
const SVFType* type = offsetVarAndGepTypePairs[i].second;
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
if(type==nullptr)
|
|
106
|
+
const SVFType* type2 = type;
|
|
107
|
+
if (const SVFArrayType* arrType = SVFUtil::dyn_cast<SVFArrayType>(type))
|
|
112
108
|
{
|
|
113
|
-
|
|
114
|
-
|
|
109
|
+
type2 = arrType->getTypeOfElement();
|
|
110
|
+
}
|
|
111
|
+
else if (const SVFPointerType* ptrType = SVFUtil::dyn_cast<SVFPointerType>(type))
|
|
112
|
+
{
|
|
113
|
+
type2 = ptrType->getPtrElementType();
|
|
115
114
|
}
|
|
116
115
|
|
|
117
|
-
|
|
118
|
-
|
|
116
|
+
const SVFConstantInt* op = SVFUtil::dyn_cast<SVFConstantInt>(value);
|
|
117
|
+
if (const SVFStructType* structType = SVFUtil::dyn_cast<SVFStructType>(type))
|
|
118
|
+
{
|
|
119
|
+
type2 = structType->getTypeInfo()->getOriginalElemType(op->getSExtValue());
|
|
120
|
+
totalConstOffset += type2->getLLVMByteSize();
|
|
121
|
+
}
|
|
119
122
|
else
|
|
120
123
|
{
|
|
121
|
-
|
|
122
|
-
// if getByteOffset is false, it will retrieve flatten idx
|
|
123
|
-
totalConstOffset += offset * elemBytesize;
|
|
124
|
+
totalConstOffset += op->getSExtValue() * type2->getLLVMByteSize();
|
|
124
125
|
}
|
|
125
126
|
}
|
|
126
127
|
return totalConstOffset;
|
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
namespace SVF
|
|
5
5
|
{
|
|
6
6
|
|
|
7
|
+
__attribute__((weak))
|
|
8
|
+
u32_t SVFType::getLLVMByteSize() const
|
|
9
|
+
{
|
|
10
|
+
assert("SVFType::getLLVMByteSize should be implemented or supported by fronted" && false);
|
|
11
|
+
abort();
|
|
12
|
+
}
|
|
13
|
+
|
|
7
14
|
__attribute__((weak))
|
|
8
15
|
std::string SVFType::toString() const
|
|
9
16
|
{
|
|
@@ -1268,6 +1268,16 @@ s64_t LLVMUtil::getCaseValue(const SwitchInst &switchInst, SuccBBAndCondValPair
|
|
|
1268
1268
|
|
|
1269
1269
|
namespace SVF
|
|
1270
1270
|
{
|
|
1271
|
+
// getLLVMByteSize
|
|
1272
|
+
u32_t SVFType::getLLVMByteSize() const
|
|
1273
|
+
{
|
|
1274
|
+
const llvm::DataLayout &DL = LLVMModuleSet::getLLVMModuleSet()->
|
|
1275
|
+
getMainLLVMModule()->getDataLayout();
|
|
1276
|
+
const Type* T = LLVMModuleSet::getLLVMModuleSet()->getLLVMType(this);
|
|
1277
|
+
Type* mut_T = const_cast<Type*>(T);
|
|
1278
|
+
return DL.getTypeAllocSize(mut_T);
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1271
1281
|
std::string SVFValue::toString() const
|
|
1272
1282
|
{
|
|
1273
1283
|
std::string str;
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
29
|
#include "SVF-LLVM/LLVMUtil.h"
|
|
30
|
+
#include "AbstractExecution/SVFIR2ItvExeState.h"
|
|
30
31
|
#include "Graphs/SVFG.h"
|
|
31
32
|
#include "WPA/Andersen.h"
|
|
32
33
|
#include "SVF-LLVM/SVFIRBuilder.h"
|
|
@@ -70,6 +71,69 @@ std::string printPts(PointerAnalysis* pta, SVFValue* val)
|
|
|
70
71
|
|
|
71
72
|
}
|
|
72
73
|
|
|
74
|
+
/*!
|
|
75
|
+
* An example to query/collect all SVFStmt from a ICFGNode (iNode)
|
|
76
|
+
*/
|
|
77
|
+
void traverseOnSVFStmt(const ICFGNode* node)
|
|
78
|
+
{
|
|
79
|
+
SVFIR2ItvExeState* svfir2ExeState = new SVFIR2ItvExeState(SVFIR::getPAG());
|
|
80
|
+
for (const SVFStmt* stmt: node->getSVFStmts())
|
|
81
|
+
{
|
|
82
|
+
if (const AddrStmt *addr = SVFUtil::dyn_cast<AddrStmt>(stmt))
|
|
83
|
+
{
|
|
84
|
+
svfir2ExeState->translateAddr(addr);
|
|
85
|
+
}
|
|
86
|
+
else if (const BinaryOPStmt *binary = SVFUtil::dyn_cast<BinaryOPStmt>(stmt))
|
|
87
|
+
{
|
|
88
|
+
svfir2ExeState->translateBinary(binary);
|
|
89
|
+
}
|
|
90
|
+
else if (const CmpStmt *cmp = SVFUtil::dyn_cast<CmpStmt>(stmt))
|
|
91
|
+
{
|
|
92
|
+
svfir2ExeState->translateCmp(cmp);
|
|
93
|
+
}
|
|
94
|
+
else if (const LoadStmt *load = SVFUtil::dyn_cast<LoadStmt>(stmt))
|
|
95
|
+
{
|
|
96
|
+
svfir2ExeState->translateLoad(load);
|
|
97
|
+
}
|
|
98
|
+
else if (const StoreStmt *store = SVFUtil::dyn_cast<StoreStmt>(stmt))
|
|
99
|
+
{
|
|
100
|
+
svfir2ExeState->translateStore(store);
|
|
101
|
+
}
|
|
102
|
+
else if (const CopyStmt *copy = SVFUtil::dyn_cast<CopyStmt>(stmt))
|
|
103
|
+
{
|
|
104
|
+
svfir2ExeState->translateCopy(copy);
|
|
105
|
+
}
|
|
106
|
+
else if (const GepStmt *gep = SVFUtil::dyn_cast<GepStmt>(stmt))
|
|
107
|
+
{
|
|
108
|
+
if (gep->isConstantOffset())
|
|
109
|
+
{
|
|
110
|
+
gep->accumulateConstantByteOffset();
|
|
111
|
+
gep->accumulateConstantOffset();
|
|
112
|
+
}
|
|
113
|
+
svfir2ExeState->translateGep(gep);
|
|
114
|
+
}
|
|
115
|
+
else if (const SelectStmt *select = SVFUtil::dyn_cast<SelectStmt>(stmt))
|
|
116
|
+
{
|
|
117
|
+
svfir2ExeState->translateSelect(select);
|
|
118
|
+
}
|
|
119
|
+
else if (const PhiStmt *phi = SVFUtil::dyn_cast<PhiStmt>(stmt))
|
|
120
|
+
{
|
|
121
|
+
svfir2ExeState->translatePhi(phi);
|
|
122
|
+
}
|
|
123
|
+
else if (const CallPE *callPE = SVFUtil::dyn_cast<CallPE>(stmt))
|
|
124
|
+
{
|
|
125
|
+
// To handle Call Edge
|
|
126
|
+
svfir2ExeState->translateCall(callPE);
|
|
127
|
+
}
|
|
128
|
+
else if (const RetPE *retPE = SVFUtil::dyn_cast<RetPE>(stmt))
|
|
129
|
+
{
|
|
130
|
+
svfir2ExeState->translateRet(retPE);
|
|
131
|
+
}
|
|
132
|
+
else
|
|
133
|
+
assert(false && "implement this part");
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
73
137
|
|
|
74
138
|
/*!
|
|
75
139
|
* An example to query/collect all successor nodes from a ICFGNode (iNode) along control-flow graph (ICFG)
|
|
@@ -90,6 +154,7 @@ void traverseOnICFG(ICFG* icfg, const SVFInstruction* svfInst)
|
|
|
90
154
|
{
|
|
91
155
|
ICFGEdge* edge = *it;
|
|
92
156
|
ICFGNode* succNode = edge->getDstNode();
|
|
157
|
+
traverseOnSVFStmt(succNode);
|
|
93
158
|
if (visited.find(succNode) == visited.end())
|
|
94
159
|
{
|
|
95
160
|
visited.insert(succNode);
|