svf-tools 1.0.770 → 1.0.772
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/Andersen_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/BasicTypes_8h.html +4 -0
- package/SVF-doxygen/html/html/BasicTypes_8h_source.html +120 -114
- package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CxtStmt_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/DCHG_8h_source.html +5 -5
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +68 -29
- package/SVF-doxygen/html/html/LLVMUtil_8h.html +4 -0
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +16 -5
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIR2ConsExeState_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIR2ItvExeState_8cpp_source.html +793 -771
- package/SVF-doxygen/html/html/SVFIR2ItvExeState_8h_source.html +25 -25
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +361 -356
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +10 -10
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFValue_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtThreadStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState.html +797 -775
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +342 -338
- package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
- package/SVF-doxygen/html/html/functions_func_g.html +5 -5
- package/SVF-doxygen/html/html/functions_g.html +5 -5
- package/SVF-doxygen/html/html/namespaceSVF.html +59 -23
- package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +106 -2
- package/SVF-doxygen/html/html/namespacemembers_func_g.html +9 -3
- package/SVF-doxygen/html/html/namespacemembers_g.html +11 -5
- package/SVF-doxygen/html/html/namespacemembers_s.html +6 -0
- package/SVF-doxygen/html/html/namespacemembers_type_s.html +6 -0
- package/SVF-doxygen/html/html/search/all_10.js +324 -324
- package/SVF-doxygen/html/html/search/all_11.js +213 -213
- package/SVF-doxygen/html/html/search/all_12.js +541 -539
- package/SVF-doxygen/html/html/search/all_13.js +190 -190
- package/SVF-doxygen/html/html/search/all_14.js +66 -66
- package/SVF-doxygen/html/html/search/all_15.js +170 -170
- package/SVF-doxygen/html/html/search/all_16.js +60 -60
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_18.js +1 -1
- package/SVF-doxygen/html/html/search/all_19.js +11 -11
- package/SVF-doxygen/html/html/search/all_1a.js +169 -169
- package/SVF-doxygen/html/html/search/all_7.js +747 -745
- package/SVF-doxygen/html/html/search/all_8.js +191 -191
- package/SVF-doxygen/html/html/search/all_9.js +602 -602
- package/SVF-doxygen/html/html/search/all_a.js +46 -46
- package/SVF-doxygen/html/html/search/all_b.js +26 -26
- package/SVF-doxygen/html/html/search/all_c.js +116 -116
- package/SVF-doxygen/html/html/search/all_d.js +196 -196
- package/SVF-doxygen/html/html/search/all_e.js +206 -206
- package/SVF-doxygen/html/html/search/all_f.js +116 -116
- package/SVF-doxygen/html/html/search/classes_0.js +26 -26
- package/SVF-doxygen/html/html/search/classes_1.js +9 -9
- package/SVF-doxygen/html/html/search/classes_10.js +73 -73
- package/SVF-doxygen/html/html/search/classes_11.js +15 -15
- package/SVF-doxygen/html/html/search/classes_12.js +2 -2
- package/SVF-doxygen/html/html/search/classes_13.js +10 -10
- package/SVF-doxygen/html/html/search/classes_14.js +14 -14
- package/SVF-doxygen/html/html/search/classes_15.js +1 -1
- package/SVF-doxygen/html/html/search/classes_2.js +76 -76
- package/SVF-doxygen/html/html/search/classes_3.js +35 -35
- package/SVF-doxygen/html/html/search/classes_4.js +8 -8
- package/SVF-doxygen/html/html/search/classes_5.js +28 -28
- package/SVF-doxygen/html/html/search/classes_6.js +98 -98
- package/SVF-doxygen/html/html/search/classes_7.js +33 -33
- package/SVF-doxygen/html/html/search/classes_8.js +56 -56
- package/SVF-doxygen/html/html/search/classes_9.js +1 -1
- package/SVF-doxygen/html/html/search/classes_a.js +12 -12
- package/SVF-doxygen/html/html/search/classes_b.js +29 -29
- package/SVF-doxygen/html/html/search/classes_c.js +6 -6
- package/SVF-doxygen/html/html/search/classes_d.js +18 -18
- package/SVF-doxygen/html/html/search/classes_e.js +36 -36
- package/SVF-doxygen/html/html/search/classes_f.js +25 -25
- package/SVF-doxygen/html/html/search/defines_0.js +3 -3
- package/SVF-doxygen/html/html/search/defines_1.js +2 -2
- package/SVF-doxygen/html/html/search/defines_2.js +30 -30
- package/SVF-doxygen/html/html/search/defines_3.js +20 -20
- package/SVF-doxygen/html/html/search/defines_4.js +3 -3
- package/SVF-doxygen/html/html/search/defines_5.js +4 -4
- package/SVF-doxygen/html/html/search/defines_6.js +2 -2
- package/SVF-doxygen/html/html/search/defines_7.js +5 -5
- package/SVF-doxygen/html/html/search/defines_8.js +11 -11
- package/SVF-doxygen/html/html/search/defines_9.js +9 -9
- package/SVF-doxygen/html/html/search/defines_a.js +2 -2
- package/SVF-doxygen/html/html/search/defines_b.js +1 -1
- package/SVF-doxygen/html/html/search/defines_c.js +3 -3
- package/SVF-doxygen/html/html/search/defines_d.js +2 -2
- package/SVF-doxygen/html/html/search/defines_e.js +7 -7
- package/SVF-doxygen/html/html/search/defines_f.js +3 -3
- package/SVF-doxygen/html/html/search/enums_0.js +3 -3
- package/SVF-doxygen/html/html/search/enums_1.js +2 -2
- package/SVF-doxygen/html/html/search/enums_10.js +1 -1
- package/SVF-doxygen/html/html/search/enums_11.js +1 -1
- package/SVF-doxygen/html/html/search/enums_2.js +8 -8
- package/SVF-doxygen/html/html/search/enums_3.js +1 -1
- package/SVF-doxygen/html/html/search/enums_4.js +3 -3
- package/SVF-doxygen/html/html/search/enums_5.js +1 -1
- package/SVF-doxygen/html/html/search/enums_6.js +2 -2
- package/SVF-doxygen/html/html/search/enums_7.js +2 -2
- package/SVF-doxygen/html/html/search/enums_8.js +4 -4
- package/SVF-doxygen/html/html/search/enums_9.js +1 -1
- package/SVF-doxygen/html/html/search/enums_a.js +1 -1
- package/SVF-doxygen/html/html/search/enums_b.js +7 -7
- package/SVF-doxygen/html/html/search/enums_c.js +1 -1
- package/SVF-doxygen/html/html/search/enums_d.js +4 -4
- package/SVF-doxygen/html/html/search/enums_e.js +2 -2
- package/SVF-doxygen/html/html/search/enums_f.js +4 -4
- package/SVF-doxygen/html/html/search/enumvalues_0.js +14 -14
- package/SVF-doxygen/html/html/search/enumvalues_1.js +14 -14
- package/SVF-doxygen/html/html/search/enumvalues_10.js +35 -35
- package/SVF-doxygen/html/html/search/enumvalues_11.js +3 -3
- package/SVF-doxygen/html/html/search/enumvalues_12.js +10 -10
- package/SVF-doxygen/html/html/search/enumvalues_13.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_14.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_15.js +3 -3
- package/SVF-doxygen/html/html/search/enumvalues_2.js +36 -36
- package/SVF-doxygen/html/html/search/enumvalues_3.js +13 -13
- package/SVF-doxygen/html/html/search/enumvalues_4.js +2 -2
- package/SVF-doxygen/html/html/search/enumvalues_5.js +47 -47
- package/SVF-doxygen/html/html/search/enumvalues_6.js +6 -6
- package/SVF-doxygen/html/html/search/enumvalues_7.js +9 -9
- package/SVF-doxygen/html/html/search/enumvalues_8.js +23 -23
- package/SVF-doxygen/html/html/search/enumvalues_9.js +6 -6
- package/SVF-doxygen/html/html/search/enumvalues_a.js +15 -15
- package/SVF-doxygen/html/html/search/enumvalues_b.js +11 -11
- package/SVF-doxygen/html/html/search/enumvalues_c.js +5 -5
- package/SVF-doxygen/html/html/search/enumvalues_d.js +18 -18
- package/SVF-doxygen/html/html/search/enumvalues_e.js +9 -9
- package/SVF-doxygen/html/html/search/enumvalues_f.js +45 -45
- package/SVF-doxygen/html/html/search/files_0.js +13 -13
- package/SVF-doxygen/html/html/search/files_1.js +7 -7
- package/SVF-doxygen/html/html/search/files_10.js +8 -8
- package/SVF-doxygen/html/html/search/files_11.js +8 -8
- package/SVF-doxygen/html/html/search/files_12.js +2 -2
- package/SVF-doxygen/html/html/search/files_2.js +49 -49
- package/SVF-doxygen/html/html/search/files_3.js +14 -14
- package/SVF-doxygen/html/html/search/files_4.js +5 -5
- package/SVF-doxygen/html/html/search/files_5.js +13 -13
- package/SVF-doxygen/html/html/search/files_6.js +9 -9
- package/SVF-doxygen/html/html/search/files_7.js +14 -14
- package/SVF-doxygen/html/html/search/files_8.js +13 -13
- package/SVF-doxygen/html/html/search/files_9.js +18 -18
- package/SVF-doxygen/html/html/search/files_a.js +3 -3
- package/SVF-doxygen/html/html/search/files_b.js +2 -2
- package/SVF-doxygen/html/html/search/files_c.js +20 -20
- package/SVF-doxygen/html/html/search/files_d.js +4 -4
- package/SVF-doxygen/html/html/search/files_e.js +62 -62
- package/SVF-doxygen/html/html/search/files_f.js +8 -8
- package/SVF-doxygen/html/html/search/functions_0.js +12 -12
- package/SVF-doxygen/html/html/search/functions_1.js +350 -350
- package/SVF-doxygen/html/html/search/functions_10.js +140 -140
- package/SVF-doxygen/html/html/search/functions_11.js +127 -127
- package/SVF-doxygen/html/html/search/functions_12.js +275 -275
- package/SVF-doxygen/html/html/search/functions_13.js +58 -58
- package/SVF-doxygen/html/html/search/functions_14.js +38 -38
- package/SVF-doxygen/html/html/search/functions_15.js +71 -71
- package/SVF-doxygen/html/html/search/functions_16.js +29 -29
- package/SVF-doxygen/html/html/search/functions_17.js +3 -3
- package/SVF-doxygen/html/html/search/functions_18.js +169 -169
- package/SVF-doxygen/html/html/search/functions_2.js +84 -84
- package/SVF-doxygen/html/html/search/functions_3.js +253 -253
- package/SVF-doxygen/html/html/search/functions_4.js +74 -74
- package/SVF-doxygen/html/html/search/functions_5.js +51 -51
- package/SVF-doxygen/html/html/search/functions_6.js +58 -58
- package/SVF-doxygen/html/html/search/functions_7.js +842 -840
- package/SVF-doxygen/html/html/search/functions_8.js +143 -143
- package/SVF-doxygen/html/html/search/functions_9.js +422 -422
- package/SVF-doxygen/html/html/search/functions_a.js +30 -30
- package/SVF-doxygen/html/html/search/functions_b.js +2 -2
- package/SVF-doxygen/html/html/search/functions_c.js +26 -26
- package/SVF-doxygen/html/html/search/functions_d.js +77 -77
- package/SVF-doxygen/html/html/search/functions_e.js +35 -35
- package/SVF-doxygen/html/html/search/functions_f.js +56 -56
- package/SVF-doxygen/html/html/search/namespaces_0.js +1 -1
- package/SVF-doxygen/html/html/search/namespaces_1.js +7 -7
- package/SVF-doxygen/html/html/search/related_0.js +2 -2
- package/SVF-doxygen/html/html/search/related_1.js +1 -1
- package/SVF-doxygen/html/html/search/related_2.js +2 -2
- package/SVF-doxygen/html/html/search/related_3.js +2 -2
- package/SVF-doxygen/html/html/search/related_4.js +2 -2
- package/SVF-doxygen/html/html/search/related_5.js +1 -1
- package/SVF-doxygen/html/html/search/related_6.js +2 -2
- package/SVF-doxygen/html/html/search/related_7.js +4 -4
- package/SVF-doxygen/html/html/search/related_8.js +2 -2
- package/SVF-doxygen/html/html/search/related_9.js +4 -4
- package/SVF-doxygen/html/html/search/related_a.js +19 -19
- package/SVF-doxygen/html/html/search/related_b.js +4 -4
- package/SVF-doxygen/html/html/search/related_c.js +1 -1
- package/SVF-doxygen/html/html/search/related_d.js +11 -11
- package/SVF-doxygen/html/html/search/related_e.js +2 -2
- package/SVF-doxygen/html/html/search/related_f.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_0.js +18 -18
- package/SVF-doxygen/html/html/search/typedefs_1.js +25 -25
- package/SVF-doxygen/html/html/search/typedefs_10.js +62 -60
- package/SVF-doxygen/html/html/search/typedefs_11.js +13 -13
- package/SVF-doxygen/html/html/search/typedefs_12.js +11 -11
- package/SVF-doxygen/html/html/search/typedefs_13.js +35 -35
- package/SVF-doxygen/html/html/search/typedefs_14.js +8 -8
- package/SVF-doxygen/html/html/search/typedefs_2.js +126 -126
- package/SVF-doxygen/html/html/search/typedefs_3.js +39 -39
- package/SVF-doxygen/html/html/search/typedefs_4.js +16 -16
- package/SVF-doxygen/html/html/search/typedefs_5.js +41 -41
- package/SVF-doxygen/html/html/search/typedefs_6.js +52 -52
- package/SVF-doxygen/html/html/search/typedefs_7.js +40 -40
- package/SVF-doxygen/html/html/search/typedefs_8.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_9.js +6 -6
- package/SVF-doxygen/html/html/search/typedefs_a.js +29 -29
- package/SVF-doxygen/html/html/search/typedefs_b.js +29 -29
- package/SVF-doxygen/html/html/search/typedefs_c.js +40 -40
- package/SVF-doxygen/html/html/search/typedefs_d.js +15 -15
- package/SVF-doxygen/html/html/search/typedefs_e.js +52 -52
- package/SVF-doxygen/html/html/search/typedefs_f.js +14 -14
- package/SVF-doxygen/html/html/search/variables_0.js +147 -147
- package/SVF-doxygen/html/html/search/variables_1.js +75 -75
- package/SVF-doxygen/html/html/search/variables_10.js +97 -97
- package/SVF-doxygen/html/html/search/variables_11.js +46 -46
- package/SVF-doxygen/html/html/search/variables_12.js +92 -92
- package/SVF-doxygen/html/html/search/variables_13.js +75 -75
- package/SVF-doxygen/html/html/search/variables_14.js +14 -14
- package/SVF-doxygen/html/html/search/variables_15.js +48 -48
- package/SVF-doxygen/html/html/search/variables_16.js +9 -9
- package/SVF-doxygen/html/html/search/variables_17.js +1 -1
- package/SVF-doxygen/html/html/search/variables_18.js +2 -2
- package/SVF-doxygen/html/html/search/variables_2.js +34 -34
- package/SVF-doxygen/html/html/search/variables_3.js +141 -141
- package/SVF-doxygen/html/html/search/variables_4.js +55 -55
- package/SVF-doxygen/html/html/search/variables_5.js +38 -38
- package/SVF-doxygen/html/html/search/variables_6.js +66 -66
- package/SVF-doxygen/html/html/search/variables_7.js +33 -33
- package/SVF-doxygen/html/html/search/variables_8.js +7 -7
- package/SVF-doxygen/html/html/search/variables_9.js +77 -77
- package/SVF-doxygen/html/html/search/variables_a.js +4 -4
- package/SVF-doxygen/html/html/search/variables_b.js +10 -10
- package/SVF-doxygen/html/html/search/variables_c.js +45 -45
- package/SVF-doxygen/html/html/search/variables_d.js +56 -56
- package/SVF-doxygen/html/html/search/variables_e.js +123 -123
- package/SVF-doxygen/html/html/search/variables_f.js +30 -30
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
- package/package.json +1 -1
- package/svf/include/AbstractExecution/SVFIR2ItvExeState.h +5 -5
- package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +77 -57
- package/svf-llvm/include/SVF-LLVM/BasicTypes.h +4 -0
- package/svf-llvm/include/SVF-LLVM/LLVMUtil.h +49 -0
- package/svf-llvm/lib/LLVMUtil.cpp +37 -0
- package/svf-llvm/lib/SVFIRBuilder.cpp +10 -9
|
@@ -152,7 +152,7 @@ void SVFIR2ItvExeState::narrowVAddrs(IntervalExeState &lhs, const IntervalExeSta
|
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
-
SVFIR2ItvExeState::VAddrs SVFIR2ItvExeState::getGepObjAddress(u32_t pointer,
|
|
155
|
+
SVFIR2ItvExeState::VAddrs SVFIR2ItvExeState::getGepObjAddress(u32_t pointer, APOffset offset)
|
|
156
156
|
{
|
|
157
157
|
assert(!getVAddrs(pointer).empty());
|
|
158
158
|
VAddrs &addrs = getVAddrs(pointer);
|
|
@@ -173,37 +173,53 @@ SVFIR2ItvExeState::VAddrs SVFIR2ItvExeState::getGepObjAddress(u32_t pointer, s32
|
|
|
173
173
|
return ret;
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
std::pair<
|
|
176
|
+
std::pair<APOffset, APOffset> SVFIR2ItvExeState::getBytefromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep, APOffset elemBytesize)
|
|
177
177
|
{
|
|
178
178
|
const SVFValue *value = gep_pair.first->getValue();
|
|
179
179
|
const SVFType *type = gep_pair.second;
|
|
180
180
|
const SVFConstantInt *op = SVFUtil::dyn_cast<SVFConstantInt>(value);
|
|
181
|
-
|
|
182
|
-
|
|
181
|
+
APOffset offsetLb = 0;
|
|
182
|
+
APOffset offsetUb = 0;
|
|
183
183
|
/// set largest byte offset is 0xFFFFFF in case of int32 overflow
|
|
184
|
-
|
|
184
|
+
APOffset maxByteLimit = 99999;
|
|
185
|
+
APOffset minByteLimit = -99999;
|
|
186
|
+
auto valueReshape = [&](s64_t offset)
|
|
187
|
+
{
|
|
188
|
+
if (offset < (s64_t)minByteLimit)
|
|
189
|
+
{
|
|
190
|
+
return minByteLimit;
|
|
191
|
+
}
|
|
192
|
+
else if (offset > (s64_t)maxByteLimit)
|
|
193
|
+
{
|
|
194
|
+
return maxByteLimit;
|
|
195
|
+
}
|
|
196
|
+
else
|
|
197
|
+
{
|
|
198
|
+
return offset;
|
|
199
|
+
}
|
|
200
|
+
};
|
|
185
201
|
/// offset is constant but stored in variable
|
|
186
202
|
if (op)
|
|
187
203
|
{
|
|
188
|
-
offsetLb = offsetUb = op->getSExtValue() >
|
|
189
|
-
|
|
204
|
+
offsetLb = offsetUb = op->getSExtValue() > maxByteLimit
|
|
205
|
+
? maxByteLimit
|
|
206
|
+
: op->getSExtValue();
|
|
190
207
|
}
|
|
191
208
|
else
|
|
192
209
|
{
|
|
193
210
|
u32_t idx = _svfir->getValueNode(value);
|
|
194
211
|
IntervalValue &idxVal = _es[idx];
|
|
195
212
|
if (idxVal.isBottom() || idxVal.isTop())
|
|
196
|
-
return std::make_pair(0,
|
|
213
|
+
return std::make_pair(0, maxByteLimit);
|
|
197
214
|
// if idxVal is a concrete value
|
|
198
215
|
if (idxVal.is_numeral())
|
|
199
216
|
{
|
|
200
|
-
offsetLb = offsetUb = idxVal.lb().getNumeral()
|
|
201
|
-
maxFieldLimit? maxFieldLimit: idxVal.lb().getNumeral();
|
|
217
|
+
offsetLb = offsetUb = valueReshape(idxVal.lb().getNumeral());
|
|
202
218
|
}
|
|
203
219
|
else
|
|
204
220
|
{
|
|
205
|
-
offsetLb = idxVal.lb().getNumeral()
|
|
206
|
-
offsetUb = idxVal.ub().getNumeral()
|
|
221
|
+
offsetLb = valueReshape(idxVal.lb().getNumeral());
|
|
222
|
+
offsetUb = valueReshape(idxVal.ub().getNumeral());
|
|
207
223
|
}
|
|
208
224
|
}
|
|
209
225
|
|
|
@@ -224,19 +240,34 @@ std::pair<s32_t, s32_t> SVFIR2ItvExeState::getBytefromGepTypePair(const AccessPa
|
|
|
224
240
|
}
|
|
225
241
|
|
|
226
242
|
|
|
227
|
-
std::pair<
|
|
243
|
+
std::pair<APOffset, APOffset> SVFIR2ItvExeState::getIndexfromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep)
|
|
228
244
|
{
|
|
229
245
|
const SVFValue *value = gep_pair.first->getValue();
|
|
230
246
|
const SVFType *type = gep_pair.second;
|
|
231
247
|
const SVFConstantInt *op = SVFUtil::dyn_cast<SVFConstantInt>(value);
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
248
|
+
APOffset offsetLb = 0;
|
|
249
|
+
APOffset offsetUb = 0;
|
|
250
|
+
APOffset maxFieldLimit = (APOffset)Options::MaxFieldLimit();
|
|
251
|
+
APOffset minFieldLimit = 0;
|
|
252
|
+
auto valueReshape = [&](s64_t offset)
|
|
253
|
+
{
|
|
254
|
+
if (offset < minFieldLimit)
|
|
255
|
+
{
|
|
256
|
+
return minFieldLimit;
|
|
257
|
+
}
|
|
258
|
+
else if (offset > maxFieldLimit)
|
|
259
|
+
{
|
|
260
|
+
return maxFieldLimit;
|
|
261
|
+
}
|
|
262
|
+
else
|
|
263
|
+
{
|
|
264
|
+
return offset;
|
|
265
|
+
}
|
|
266
|
+
};
|
|
235
267
|
/// offset is constant but stored in variable
|
|
236
268
|
if (op)
|
|
237
269
|
{
|
|
238
|
-
offsetLb = offsetUb = op->getSExtValue()
|
|
239
|
-
maxFieldLimit? maxFieldLimit: op->getSExtValue();
|
|
270
|
+
offsetLb = offsetUb = valueReshape(op->getSExtValue());
|
|
240
271
|
}
|
|
241
272
|
else
|
|
242
273
|
{
|
|
@@ -244,27 +275,16 @@ std::pair<s32_t, s32_t> SVFIR2ItvExeState::getIndexfromGepTypePair(const AccessP
|
|
|
244
275
|
//if (!inVarToIValTable(idx)) return std::make_pair(-1, -1);
|
|
245
276
|
IntervalValue &idxVal = _es[idx];
|
|
246
277
|
if (idxVal.isBottom() || idxVal.isTop())
|
|
247
|
-
return std::make_pair(0,
|
|
278
|
+
return std::make_pair(0, Options::MaxFieldLimit());
|
|
248
279
|
// if idxVal is a concrete value
|
|
249
280
|
if (idxVal.is_numeral())
|
|
250
281
|
{
|
|
251
|
-
offsetLb = offsetUb = idxVal.lb().getNumeral()
|
|
252
|
-
maxFieldLimit? maxFieldLimit: idxVal.lb().getNumeral();
|
|
282
|
+
offsetLb = offsetUb = valueReshape(idxVal.lb().getNumeral());
|
|
253
283
|
}
|
|
254
284
|
else
|
|
255
285
|
{
|
|
256
|
-
offsetLb = idxVal.lb().getNumeral()
|
|
257
|
-
|
|
258
|
-
: idxVal.lb().getNumeral();
|
|
259
|
-
offsetLb = idxVal.lb().getNumeral() > maxFieldLimit
|
|
260
|
-
? maxFieldLimit
|
|
261
|
-
: offsetLb;
|
|
262
|
-
offsetUb = idxVal.ub().getNumeral() < 0
|
|
263
|
-
? 0
|
|
264
|
-
: idxVal.ub().getNumeral();
|
|
265
|
-
offsetUb = idxVal.ub().getNumeral() > maxFieldLimit
|
|
266
|
-
? maxFieldLimit
|
|
267
|
-
: offsetUb;
|
|
286
|
+
offsetLb = valueReshape(idxVal.lb().getNumeral());
|
|
287
|
+
offsetUb = valueReshape(idxVal.ub().getNumeral());
|
|
268
288
|
}
|
|
269
289
|
}
|
|
270
290
|
|
|
@@ -280,8 +300,8 @@ std::pair<s32_t, s32_t> SVFIR2ItvExeState::getIndexfromGepTypePair(const AccessP
|
|
|
280
300
|
const std::vector<u32_t>& so = SymbolTableInfo::SymbolInfo()
|
|
281
301
|
->getTypeInfo(type)
|
|
282
302
|
->getFlattenedElemIdxVec();
|
|
283
|
-
if (so.empty() ||
|
|
284
|
-
|
|
303
|
+
if (so.empty() || offsetUb >= (APOffset)so.size() ||
|
|
304
|
+
offsetLb >= (APOffset)so.size())
|
|
285
305
|
{
|
|
286
306
|
offsetLb = 0;
|
|
287
307
|
offsetUb = maxFieldLimit;
|
|
@@ -301,26 +321,26 @@ std::pair<s32_t, s32_t> SVFIR2ItvExeState::getIndexfromGepTypePair(const AccessP
|
|
|
301
321
|
}
|
|
302
322
|
|
|
303
323
|
|
|
304
|
-
std::pair<
|
|
324
|
+
std::pair<APOffset, APOffset> SVFIR2ItvExeState::getGepByteOffset(const GepStmt *gep, APOffset elemBytesize)
|
|
305
325
|
{
|
|
306
326
|
/// for instant constant index, e.g. gep arr, 1
|
|
307
327
|
if (gep->getOffsetVarAndGepTypePairVec().empty())
|
|
308
328
|
return std::make_pair(gep->getConstantFieldIdx(), gep->getConstantFieldIdx());
|
|
309
|
-
|
|
310
|
-
|
|
329
|
+
APOffset totalOffsetLb = 0;
|
|
330
|
+
APOffset totalOffsetUb = 0;
|
|
311
331
|
/// default value of MaxFieldLimit is 512
|
|
312
|
-
|
|
332
|
+
APOffset maxFieldLimit = 0xFFFFFF;
|
|
313
333
|
for (int i = gep->getOffsetVarAndGepTypePairVec().size() - 1; i >= 0; i--)
|
|
314
334
|
{
|
|
315
|
-
std::pair<
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
if (
|
|
335
|
+
std::pair<APOffset, APOffset> offsetIdx = getBytefromGepTypePair(
|
|
336
|
+
gep->getOffsetVarAndGepTypePairVec()[i], gep, elemBytesize);
|
|
337
|
+
APOffset offsetLb = offsetIdx.first;
|
|
338
|
+
APOffset offsetUb = offsetIdx.second;
|
|
339
|
+
if (totalOffsetLb + offsetLb > maxFieldLimit)
|
|
320
340
|
totalOffsetLb = maxFieldLimit;
|
|
321
341
|
else
|
|
322
342
|
totalOffsetLb += offsetLb;
|
|
323
|
-
if (
|
|
343
|
+
if (totalOffsetUb + offsetUb > maxFieldLimit)
|
|
324
344
|
totalOffsetUb = maxFieldLimit;
|
|
325
345
|
else
|
|
326
346
|
totalOffsetUb += offsetUb ;
|
|
@@ -329,21 +349,21 @@ std::pair<s32_t, s32_t> SVFIR2ItvExeState::getGepByteOffset(const GepStmt *gep,
|
|
|
329
349
|
}
|
|
330
350
|
|
|
331
351
|
|
|
332
|
-
std::pair<
|
|
352
|
+
std::pair<APOffset, APOffset> SVFIR2ItvExeState::getGepOffset(const GepStmt *gep)
|
|
333
353
|
{
|
|
334
354
|
/// for instant constant index, e.g. gep arr, 1
|
|
335
355
|
if (gep->getOffsetVarAndGepTypePairVec().empty())
|
|
336
356
|
return std::make_pair(gep->getConstantFieldIdx(), gep->getConstantFieldIdx());
|
|
337
|
-
|
|
338
|
-
|
|
357
|
+
APOffset totalOffsetLb = 0;
|
|
358
|
+
APOffset totalOffsetUb = 0;
|
|
339
359
|
/// default value of MaxFieldLimit is 512
|
|
340
|
-
|
|
360
|
+
APOffset maxFieldLimit = Options::MaxFieldLimit() - 1;
|
|
341
361
|
for (int i = gep->getOffsetVarAndGepTypePairVec().size() - 1; i >= 0; i--)
|
|
342
362
|
{
|
|
343
|
-
std::pair<
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
363
|
+
std::pair<APOffset, APOffset> offsetIdx = getIndexfromGepTypePair(
|
|
364
|
+
gep->getOffsetVarAndGepTypePairVec()[i], gep);
|
|
365
|
+
APOffset offsetLb = offsetIdx.first;
|
|
366
|
+
APOffset offsetUb = offsetIdx.second;
|
|
347
367
|
if ((long long) (totalOffsetLb + offsetLb) > maxFieldLimit)
|
|
348
368
|
totalOffsetLb = maxFieldLimit;
|
|
349
369
|
else
|
|
@@ -842,7 +862,7 @@ void SVFIR2ItvExeState::translateGep(const GepStmt *gep)
|
|
|
842
862
|
assert(!getVAddrs(rhs).empty());
|
|
843
863
|
VAddrs &rhsVal = getVAddrs(rhs);
|
|
844
864
|
if (rhsVal.empty()) return;
|
|
845
|
-
std::pair<
|
|
865
|
+
std::pair<APOffset, APOffset> offsetPair = getGepOffset(gep);
|
|
846
866
|
if (offsetPair.first == -1 && offsetPair.second == -1) return;
|
|
847
867
|
if (!isVirtualMemAddress(*rhsVal.begin()))
|
|
848
868
|
{
|
|
@@ -851,12 +871,12 @@ void SVFIR2ItvExeState::translateGep(const GepStmt *gep)
|
|
|
851
871
|
else
|
|
852
872
|
{
|
|
853
873
|
VAddrs gepAddrs;
|
|
854
|
-
|
|
855
|
-
if (offsetPair.second >
|
|
874
|
+
APOffset ub = offsetPair.second;
|
|
875
|
+
if (offsetPair.second > Options::MaxFieldLimit() - 1)
|
|
856
876
|
{
|
|
857
877
|
ub = Options::MaxFieldLimit() - 1;
|
|
858
878
|
}
|
|
859
|
-
for (
|
|
879
|
+
for (APOffset i = offsetPair.first; i <= ub; i++)
|
|
860
880
|
{
|
|
861
881
|
gepAddrs.join_with(getGepObjAddress(rhs, i));
|
|
862
882
|
}
|
|
@@ -178,6 +178,10 @@ typedef llvm::BinaryOperator BinaryOperator;
|
|
|
178
178
|
typedef llvm::UnaryOperator UnaryOperator;
|
|
179
179
|
typedef llvm::UndefValue UndefValue;
|
|
180
180
|
|
|
181
|
+
// Related to Switch Case
|
|
182
|
+
typedef std::pair<const BasicBlock*, const ConstantInt*> SuccBBAndCondValPair;
|
|
183
|
+
typedef std::vector<SuccBBAndCondValPair> SuccBBAndCondValPairVec;
|
|
184
|
+
|
|
181
185
|
// LLVM Intrinsic Instructions
|
|
182
186
|
#if LLVM_VERSION_MAJOR >= 13
|
|
183
187
|
typedef llvm::IntrinsicInst IntrinsicInst;
|
|
@@ -519,6 +519,55 @@ std::string llvmToString(const T& val)
|
|
|
519
519
|
llvm::raw_string_ostream(str) << val;
|
|
520
520
|
return str;
|
|
521
521
|
}
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* See more: https://github.com/SVF-tools/SVF/pull/1191
|
|
525
|
+
*
|
|
526
|
+
* Given the code:
|
|
527
|
+
*
|
|
528
|
+
* switch (a) {
|
|
529
|
+
* case 0: printf("0\n"); break;
|
|
530
|
+
* case 1:
|
|
531
|
+
* case 2:
|
|
532
|
+
* case 3: printf("a >=1 && a <= 3\n"); break;
|
|
533
|
+
* case 4:
|
|
534
|
+
* case 6:
|
|
535
|
+
* case 7: printf("a >= 4 && a <=7\n"); break;
|
|
536
|
+
* default: printf("a < 0 || a > 7"); break;
|
|
537
|
+
* }
|
|
538
|
+
*
|
|
539
|
+
* Generate the IR:
|
|
540
|
+
*
|
|
541
|
+
* switch i32 %0, label %sw.default [
|
|
542
|
+
* i32 0, label %sw.bb
|
|
543
|
+
* i32 1, label %sw.bb1
|
|
544
|
+
* i32 2, label %sw.bb1
|
|
545
|
+
* i32 3, label %sw.bb1
|
|
546
|
+
* i32 4, label %sw.bb3
|
|
547
|
+
* i32 6, label %sw.bb3
|
|
548
|
+
* i32 7, label %sw.bb3
|
|
549
|
+
* ]
|
|
550
|
+
*
|
|
551
|
+
* We can get every case basic block and related case value:
|
|
552
|
+
* [
|
|
553
|
+
* {%sw.default, -1},
|
|
554
|
+
* {%sw.bb, 0},
|
|
555
|
+
* {%sw.bb1, 1},
|
|
556
|
+
* {%sw.bb1, 2},
|
|
557
|
+
* {%sw.bb1, 3},
|
|
558
|
+
* {%sw.bb3, 4},
|
|
559
|
+
* {%sw.bb3, 6},
|
|
560
|
+
* {%sw.bb3, 7},
|
|
561
|
+
* ]
|
|
562
|
+
* Note: default case value is nullptr
|
|
563
|
+
*/
|
|
564
|
+
void getSuccBBandCondValPairVec(const SwitchInst &switchInst, SuccBBAndCondValPairVec &vec);
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* Note: default case value is nullptr
|
|
568
|
+
*/
|
|
569
|
+
s64_t getCaseValue(const SwitchInst &switchInst, SuccBBAndCondValPair &succBB2CondVal);
|
|
570
|
+
|
|
522
571
|
} // End namespace LLVMUtil
|
|
523
572
|
|
|
524
573
|
} // End namespace SVF
|
|
@@ -1152,6 +1152,43 @@ s32_t LLVMUtil::getVCallIdx(const CallBase* cs)
|
|
|
1152
1152
|
return idx_value;
|
|
1153
1153
|
}
|
|
1154
1154
|
|
|
1155
|
+
void LLVMUtil::getSuccBBandCondValPairVec(const SwitchInst &switchInst, SuccBBAndCondValPairVec &vec)
|
|
1156
|
+
{
|
|
1157
|
+
// get default successor basic block and default case value (nullptr)
|
|
1158
|
+
vec.push_back({switchInst.getDefaultDest(), nullptr});
|
|
1159
|
+
|
|
1160
|
+
// get normal case value and it's successor basic block
|
|
1161
|
+
for (const auto& cs : switchInst.cases())
|
|
1162
|
+
vec.push_back({cs.getCaseSuccessor(), cs.getCaseValue()});
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
s64_t LLVMUtil::getCaseValue(const SwitchInst &switchInst, SuccBBAndCondValPair &succBB2CondVal)
|
|
1166
|
+
{
|
|
1167
|
+
const BasicBlock* succBB = succBB2CondVal.first;
|
|
1168
|
+
const ConstantInt* caseValue = succBB2CondVal.second;
|
|
1169
|
+
s64_t val;
|
|
1170
|
+
if (caseValue == nullptr || succBB == switchInst.getDefaultDest())
|
|
1171
|
+
{
|
|
1172
|
+
/// default case value is set to -1
|
|
1173
|
+
val = -1;
|
|
1174
|
+
}
|
|
1175
|
+
else
|
|
1176
|
+
{
|
|
1177
|
+
/// get normal case value
|
|
1178
|
+
if (caseValue->getBitWidth() <= 64)
|
|
1179
|
+
{
|
|
1180
|
+
val = caseValue->getSExtValue();
|
|
1181
|
+
}
|
|
1182
|
+
else
|
|
1183
|
+
{
|
|
1184
|
+
/// For larger number, we preserve case value just -1 now
|
|
1185
|
+
/// see more: https://github.com/SVF-tools/SVF/pull/992
|
|
1186
|
+
val = -1;
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
return val;
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1155
1192
|
namespace SVF
|
|
1156
1193
|
{
|
|
1157
1194
|
std::string SVFValue::toString() const
|
|
@@ -946,19 +946,20 @@ void SVFIRBuilder::visitSwitchInst(SwitchInst &inst)
|
|
|
946
946
|
NodeID cond = getValueNode(inst.getCondition());
|
|
947
947
|
|
|
948
948
|
BranchStmt::SuccAndCondPairVec successors;
|
|
949
|
-
|
|
949
|
+
|
|
950
|
+
// get case successor basic block and related case value
|
|
951
|
+
SuccBBAndCondValPairVec succBB2CondValPairVec;
|
|
952
|
+
LLVMUtil::getSuccBBandCondValPairVec(inst, succBB2CondValPairVec);
|
|
953
|
+
for (auto &succBB2CaseValue : succBB2CondValPairVec)
|
|
950
954
|
{
|
|
951
|
-
|
|
952
|
-
const
|
|
953
|
-
|
|
954
|
-
s64_t val = -1;
|
|
955
|
-
if (condVal && condVal->getBitWidth() <= 64)
|
|
956
|
-
val = condVal->getSExtValue();
|
|
955
|
+
s64_t val = LLVMUtil::getCaseValue(inst, succBB2CaseValue);
|
|
956
|
+
const BasicBlock *succBB = succBB2CaseValue.first;
|
|
957
|
+
const Instruction* succInst = &succBB->front();
|
|
957
958
|
const SVFInstruction* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(succInst);
|
|
958
959
|
const ICFGNode* icfgNode = pag->getICFG()->getICFGNode(svfSuccInst);
|
|
959
|
-
successors.push_back(std::make_pair(icfgNode,val));
|
|
960
|
+
successors.push_back(std::make_pair(icfgNode, val));
|
|
960
961
|
}
|
|
961
|
-
addBranchStmt(brinst, cond,successors);
|
|
962
|
+
addBranchStmt(brinst, cond, successors);
|
|
962
963
|
}
|
|
963
964
|
|
|
964
965
|
/// %ap = alloca %struct.va_list
|