svf-tools 1.0.562 → 1.0.565
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/AndersenStat_8cpp_source.html +7 -38
- package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +1 -2
- package/SVF-doxygen/html/html/CFGNormalizer_8cpp_source.html +11 -10
- package/SVF-doxygen/html/html/CFGNormalizer_8h_source.html +10 -9
- package/SVF-doxygen/html/html/CFLGrammar_8txt.html +37 -37
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +2 -3
- package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +1 -2
- package/SVF-doxygen/html/html/CPPUtil_8h.html +4 -4
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/DDAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ICFGStat_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +10 -10
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -2
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PEGGrammar_8txt.html +37 -138
- package/SVF-doxygen/html/html/PTAStat_8cpp.html +0 -1
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +9 -111
- package/SVF-doxygen/html/html/PTAStat_8h_source.html +7 -69
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SVFGStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +2 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +37 -37
- package/SVF-doxygen/html/html/SVFModule_8cpp.html +1 -0
- package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +6 -2
- package/SVF-doxygen/html/html/SVFModule_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +65 -3
- package/SVF-doxygen/html/html/SVFStat_8h_source.html +16 -11
- package/SVF-doxygen/html/html/SVFUtil_8h.html +1 -1
- package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +1 -2
- package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/cfl_8cpp.html +1 -1
- package/SVF-doxygen/html/html/cfl_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat-members.html +18 -68
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +23 -208
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer-members.html +12 -11
- package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer.html +63 -28
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +8 -11
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat-members.html +17 -67
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +22 -176
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat-members.html +20 -70
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +20 -188
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat-members.html +17 -67
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +18 -172
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +36 -34
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat-members.html +23 -73
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +26 -180
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat-members.html +22 -72
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +18 -172
- package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +2 -3
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat-members.html +11 -64
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +33 -1830
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat-members.html +48 -98
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +32 -186
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +125 -122
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +5 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFStat-members.html +22 -17
- package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +237 -34
- package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat-members.html +17 -67
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +20 -187
- package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
- package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/functions_a.html +5 -9
- package/SVF-doxygen/html/html/functions_b.html +8 -8
- package/SVF-doxygen/html/html/functions_c.html +2 -2
- package/SVF-doxygen/html/html/functions_e.html +2 -3
- package/SVF-doxygen/html/html/functions_f.html +6 -6
- package/SVF-doxygen/html/html/functions_func_b.html +6 -6
- package/SVF-doxygen/html/html/functions_func_p.html +4 -5
- package/SVF-doxygen/html/html/functions_func_s.html +1 -1
- package/SVF-doxygen/html/html/functions_m.html +1 -9
- package/SVF-doxygen/html/html/functions_n.html +0 -114
- package/SVF-doxygen/html/html/functions_o.html +6 -6
- package/SVF-doxygen/html/html/functions_p.html +15 -24
- package/SVF-doxygen/html/html/functions_s.html +12 -21
- package/SVF-doxygen/html/html/functions_t.html +14 -22
- package/SVF-doxygen/html/html/functions_u.html +0 -3
- package/SVF-doxygen/html/html/functions_v.html +6 -6
- package/SVF-doxygen/html/html/functions_vars_a.html +0 -4
- package/SVF-doxygen/html/html/functions_vars_e.html +1 -2
- package/SVF-doxygen/html/html/functions_vars_m.html +1 -9
- package/SVF-doxygen/html/html/functions_vars_n.html +0 -114
- package/SVF-doxygen/html/html/functions_vars_p.html +1 -7
- package/SVF-doxygen/html/html/functions_vars_s.html +1 -8
- package/SVF-doxygen/html/html/functions_vars_t.html +9 -15
- package/SVF-doxygen/html/html/functions_vars_u.html +0 -3
- package/SVF-doxygen/html/html/functions_w.html +11 -11
- package/SVF-doxygen/html/html/globals_a.html +0 -1
- package/SVF-doxygen/html/html/globals_c.html +5 -6
- package/SVF-doxygen/html/html/globals_e.html +0 -1
- package/SVF-doxygen/html/html/globals_f.html +2 -3
- package/SVF-doxygen/html/html/globals_func.html +3 -0
- package/SVF-doxygen/html/html/globals_g.html +5 -7
- package/SVF-doxygen/html/html/globals_m.html +3 -6
- package/SVF-doxygen/html/html/globals_vars.html +10 -19
- package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
- package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF.html +2 -2
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +4 -4
- package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
- package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/search/all_1.js +2 -3
- package/SVF-doxygen/html/html/search/all_10.js +10 -12
- package/SVF-doxygen/html/html/search/all_12.js +7 -9
- package/SVF-doxygen/html/html/search/all_13.js +7 -9
- package/SVF-doxygen/html/html/search/all_14.js +1 -1
- package/SVF-doxygen/html/html/search/all_15.js +4 -4
- package/SVF-doxygen/html/html/search/all_16.js +2 -2
- package/SVF-doxygen/html/html/search/all_2.js +2 -2
- package/SVF-doxygen/html/html/search/all_3.js +2 -2
- package/SVF-doxygen/html/html/search/all_5.js +3 -3
- package/SVF-doxygen/html/html/search/all_6.js +4 -4
- package/SVF-doxygen/html/html/search/all_7.js +4 -4
- package/SVF-doxygen/html/html/search/all_c.js +1 -1
- package/SVF-doxygen/html/html/search/all_d.js +3 -5
- package/SVF-doxygen/html/html/search/all_e.js +5 -41
- package/SVF-doxygen/html/html/search/all_f.js +3 -3
- package/SVF-doxygen/html/html/search/functions_1.js +2 -2
- package/SVF-doxygen/html/html/search/functions_11.js +1 -1
- package/SVF-doxygen/html/html/search/functions_5.js +1 -0
- package/SVF-doxygen/html/html/search/functions_f.js +3 -3
- package/SVF-doxygen/html/html/search/variables_1.js +2 -3
- package/SVF-doxygen/html/html/search/variables_10.js +1 -3
- package/SVF-doxygen/html/html/search/variables_12.js +1 -3
- package/SVF-doxygen/html/html/search/variables_13.js +4 -6
- package/SVF-doxygen/html/html/search/variables_14.js +1 -1
- package/SVF-doxygen/html/html/search/variables_3.js +1 -1
- package/SVF-doxygen/html/html/search/variables_5.js +2 -2
- package/SVF-doxygen/html/html/search/variables_6.js +2 -2
- package/SVF-doxygen/html/html/search/variables_7.js +4 -4
- package/SVF-doxygen/html/html/search/variables_c.js +1 -1
- package/SVF-doxygen/html/html/search/variables_d.js +3 -5
- package/SVF-doxygen/html/html/search/variables_e.js +4 -40
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
- package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
- package/include/CFL/CFGNormalizer.h +3 -1
- package/include/CFL/PEGGrammar.txt +5 -18
- package/include/DDA/DDAVFSolver.h +4 -4
- package/include/Util/PTAStat.h +0 -79
- package/include/Util/SVFStat.h +7 -2
- package/lib/CFL/CFGNormalizer.cpp +57 -6
- package/lib/MTA/LockAnalysis.cpp +4 -4
- package/lib/MTA/MHP.cpp +2 -2
- package/lib/SVF-FE/LLVMModule.cpp +5 -0
- package/lib/SVF-FE/SVFIRBuilder.cpp +5 -0
- package/lib/Util/PTAStat.cpp +7 -254
- package/lib/Util/SVFModule.cpp +4 -0
- package/lib/Util/SVFStat.cpp +202 -2
- package/lib/WPA/AndersenStat.cpp +31 -31
- package/lib/WPA/FlowSensitiveStat.cpp +14 -14
- package/lib/WPA/VersionedFlowSensitiveStat.cpp +13 -13
- package/package.json +1 -1
package/lib/Util/SVFStat.cpp
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
//
|
|
3
3
|
// SVF: Static Value-Flow Analysis
|
|
4
4
|
//
|
|
5
|
-
// Copyright (C) <2013
|
|
5
|
+
// Copyright (C) <2013-> <Yulei Sui>
|
|
6
6
|
//
|
|
7
7
|
|
|
8
8
|
// This program is free software: you can redistribute it and/or modify
|
|
@@ -31,6 +31,12 @@
|
|
|
31
31
|
#include "Util/SVFStat.h"
|
|
32
32
|
|
|
33
33
|
using namespace SVF;
|
|
34
|
+
using namespace std;
|
|
35
|
+
|
|
36
|
+
double SVFStat::timeOfBuildingLLVMModule = 0;
|
|
37
|
+
double SVFStat::timeOfBuildingSVFIR = 0;
|
|
38
|
+
double SVFStat::timeOfBuildingSymbolTable = 0;
|
|
39
|
+
|
|
34
40
|
|
|
35
41
|
SVFStat::SVFStat() : startTime(0), endTime(0)
|
|
36
42
|
{
|
|
@@ -55,4 +61,198 @@ double SVFStat::getClk(bool mark)
|
|
|
55
61
|
|
|
56
62
|
assert(false && "PTAStat::getClk: unknown clock type");
|
|
57
63
|
abort();
|
|
58
|
-
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
void SVFStat::printStat(string statname)
|
|
67
|
+
{
|
|
68
|
+
|
|
69
|
+
std::string moduleName(SymbolTableInfo::SymbolInfo()->getModule()->getModuleIdentifier());
|
|
70
|
+
std::vector<std::string> names = SVFUtil::split(moduleName,'/');
|
|
71
|
+
if (names.size() > 1)
|
|
72
|
+
{
|
|
73
|
+
moduleName = names[names.size() - 1];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
SVFUtil::outs() << "\n*********" << statname << "***************\n";
|
|
77
|
+
SVFUtil::outs() << "################ (program : " << moduleName << ")###############\n";
|
|
78
|
+
SVFUtil::outs().flags(std::ios::left);
|
|
79
|
+
unsigned field_width = 20;
|
|
80
|
+
for(NUMStatMap::iterator it = generalNumMap.begin(), eit = generalNumMap.end(); it!=eit; ++it)
|
|
81
|
+
{
|
|
82
|
+
// format out put with width 20 space
|
|
83
|
+
std::cout << std::setw(field_width) << it->first << it->second << "\n";
|
|
84
|
+
}
|
|
85
|
+
SVFUtil::outs() << "-------------------------------------------------------\n";
|
|
86
|
+
for(TIMEStatMap::iterator it = timeStatMap.begin(), eit = timeStatMap.end(); it!=eit; ++it)
|
|
87
|
+
{
|
|
88
|
+
// format out put with width 20 space
|
|
89
|
+
SVFUtil::outs() << std::setw(field_width) << it->first << it->second << "\n";
|
|
90
|
+
}
|
|
91
|
+
for(NUMStatMap::iterator it = PTNumStatMap.begin(), eit = PTNumStatMap.end(); it!=eit; ++it)
|
|
92
|
+
{
|
|
93
|
+
// format out put with width 20 space
|
|
94
|
+
SVFUtil::outs() << std::setw(field_width) << it->first << it->second << "\n";
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
SVFUtil::outs() << "#######################################################" << std::endl;
|
|
98
|
+
SVFUtil::outs().flush();
|
|
99
|
+
generalNumMap.clear();
|
|
100
|
+
PTNumStatMap.clear();
|
|
101
|
+
timeStatMap.clear();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
void SVFStat::performStat()
|
|
105
|
+
{
|
|
106
|
+
|
|
107
|
+
SVFIR* pag = SVFIR::getPAG();
|
|
108
|
+
u32_t numOfFunction = 0;
|
|
109
|
+
u32_t numOfGlobal = 0;
|
|
110
|
+
u32_t numOfStack = 0;
|
|
111
|
+
u32_t numOfHeap = 0;
|
|
112
|
+
u32_t numOfHasVarArray = 0;
|
|
113
|
+
u32_t numOfHasVarStruct = 0;
|
|
114
|
+
u32_t numOfHasConstArray = 0;
|
|
115
|
+
u32_t numOfHasConstStruct = 0;
|
|
116
|
+
u32_t numOfScalar = 0;
|
|
117
|
+
u32_t numOfConstant = 0;
|
|
118
|
+
u32_t fiObjNumber = 0;
|
|
119
|
+
u32_t fsObjNumber = 0;
|
|
120
|
+
Set<SymID> memObjSet;
|
|
121
|
+
for(SVFIR::iterator it = pag->begin(), eit = pag->end(); it!=eit; ++it)
|
|
122
|
+
{
|
|
123
|
+
PAGNode* node = it->second;
|
|
124
|
+
if(ObjVar* obj = SVFUtil::dyn_cast<ObjVar>(node))
|
|
125
|
+
{
|
|
126
|
+
const MemObj* mem = obj->getMemObj();
|
|
127
|
+
if (memObjSet.insert(mem->getId()).second == false)
|
|
128
|
+
continue;
|
|
129
|
+
if(mem->isBlackHoleObj())
|
|
130
|
+
continue;
|
|
131
|
+
if(mem->isFunction())
|
|
132
|
+
numOfFunction++;
|
|
133
|
+
if(mem->isGlobalObj())
|
|
134
|
+
numOfGlobal++;
|
|
135
|
+
if(mem->isStack())
|
|
136
|
+
numOfStack++;
|
|
137
|
+
if(mem->isHeap())
|
|
138
|
+
numOfHeap++;
|
|
139
|
+
if(mem->isVarArray())
|
|
140
|
+
numOfHasVarArray++;
|
|
141
|
+
if(mem->isVarStruct())
|
|
142
|
+
numOfHasVarStruct++;
|
|
143
|
+
if(mem->isConstantArray())
|
|
144
|
+
numOfHasConstArray++;
|
|
145
|
+
if(mem->isConstantStruct())
|
|
146
|
+
numOfHasConstStruct++;
|
|
147
|
+
if(mem->hasPtrObj() == false)
|
|
148
|
+
numOfScalar++;
|
|
149
|
+
if(mem->isConstDataOrConstGlobal())
|
|
150
|
+
numOfConstant++;
|
|
151
|
+
|
|
152
|
+
if (mem->isFieldInsensitive())
|
|
153
|
+
fiObjNumber++;
|
|
154
|
+
else
|
|
155
|
+
fsObjNumber++;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
generalNumMap["TotalPointers"] = pag->getValueNodeNum() + pag->getFieldValNodeNum();
|
|
162
|
+
generalNumMap["TotalObjects"] = pag->getObjectNodeNum();
|
|
163
|
+
generalNumMap["TotalFieldObjects"] = pag->getFieldObjNodeNum();
|
|
164
|
+
generalNumMap["MaxStructSize"] = SymbolTableInfo::SymbolInfo()->getMaxStructSize();
|
|
165
|
+
generalNumMap["TotalSVFStmts"] = pag->getPAGEdgeNum();
|
|
166
|
+
generalNumMap["TotalPTASVFStmts"] = pag->getPTAPAGEdgeNum();
|
|
167
|
+
generalNumMap["FIObjNum"] = fiObjNumber;
|
|
168
|
+
generalNumMap["FSObjNum"] = fsObjNumber;
|
|
169
|
+
|
|
170
|
+
generalNumMap["AddrsNum"] = pag->getSVFStmtSet(SVFStmt::Addr).size();
|
|
171
|
+
generalNumMap["LoadsNum"] = pag->getSVFStmtSet(SVFStmt::Load).size();
|
|
172
|
+
generalNumMap["StoresNum"] = pag->getSVFStmtSet(SVFStmt::Store).size();
|
|
173
|
+
generalNumMap["CopysNum"] = pag->getSVFStmtSet(SVFStmt::Copy).size();
|
|
174
|
+
generalNumMap["GepsNum"] = pag->getSVFStmtSet(SVFStmt::Gep).size();
|
|
175
|
+
generalNumMap["CallsNum"] = pag->getSVFStmtSet(SVFStmt::Call).size();
|
|
176
|
+
generalNumMap["ReturnsNum"] = pag->getSVFStmtSet(SVFStmt::Ret).size();
|
|
177
|
+
|
|
178
|
+
generalNumMap["FunctionObjs"] = numOfFunction;
|
|
179
|
+
generalNumMap["GlobalObjs"] = numOfGlobal;
|
|
180
|
+
generalNumMap["HeapObjs"] = numOfHeap;
|
|
181
|
+
generalNumMap["StackObjs"] = numOfStack;
|
|
182
|
+
|
|
183
|
+
generalNumMap["VarStructObj"] = numOfHasVarStruct;
|
|
184
|
+
generalNumMap["VarArrayObj"] = numOfHasVarArray;
|
|
185
|
+
generalNumMap["ConstStructObj"] = numOfHasConstStruct;
|
|
186
|
+
generalNumMap["ConstArrayObj"] = numOfHasConstArray;
|
|
187
|
+
generalNumMap["NonPtrObj"] = numOfScalar;
|
|
188
|
+
generalNumMap["ConstantObj"] = numOfConstant;
|
|
189
|
+
|
|
190
|
+
generalNumMap["IndCallSites"] = pag->getIndirectCallsites().size();
|
|
191
|
+
generalNumMap["TotalCallSite"] = pag->getCallSiteSet().size();
|
|
192
|
+
|
|
193
|
+
timeStatMap["LLVMIRTime"] = SVFStat::timeOfBuildingLLVMModule;
|
|
194
|
+
timeStatMap["SymbolTableTime"] = SVFStat::timeOfBuildingSymbolTable;
|
|
195
|
+
timeStatMap["SVFIRTime"] = SVFStat::timeOfBuildingSVFIR;
|
|
196
|
+
|
|
197
|
+
// REFACTOR-TODO bitcastInstStat();
|
|
198
|
+
branchStat();
|
|
199
|
+
|
|
200
|
+
printStat("General Stats");
|
|
201
|
+
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
void SVFStat::branchStat()
|
|
206
|
+
{
|
|
207
|
+
SVFModule* module = SVFIR::getPAG()->getModule();
|
|
208
|
+
u32_t numOfBB_2Succ = 0;
|
|
209
|
+
u32_t numOfBB_3Succ = 0;
|
|
210
|
+
for (SVFModule::llvm_const_iterator funIter = module->llvmFunBegin(), funEiter = module->llvmFunEnd();
|
|
211
|
+
funIter != funEiter; ++funIter)
|
|
212
|
+
{
|
|
213
|
+
const Function* func = *funIter;
|
|
214
|
+
for (Function::const_iterator bbIt = func->begin(), bbEit = func->end();
|
|
215
|
+
bbIt != bbEit; ++bbIt)
|
|
216
|
+
{
|
|
217
|
+
const BasicBlock& bb = *bbIt;
|
|
218
|
+
u32_t numOfSucc = bb.getTerminator()->getNumSuccessors();
|
|
219
|
+
if (numOfSucc == 2)
|
|
220
|
+
numOfBB_2Succ++;
|
|
221
|
+
else if (numOfSucc > 2)
|
|
222
|
+
numOfBB_3Succ++;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
generalNumMap["BBWith2Succ"] = numOfBB_2Succ;
|
|
227
|
+
generalNumMap["BBWith3Succ"] = numOfBB_3Succ;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* REFACTOR-TODO
|
|
231
|
+
void PTAStat::bitcastInstStat()
|
|
232
|
+
{
|
|
233
|
+
SVFModule* module = pta->getModule();
|
|
234
|
+
u32_t numberOfBitCast = 0;
|
|
235
|
+
for (SVFModule::llvm_const_iterator funIter = module->llvmFunBegin(), funEiter = module->llvmFunEnd();
|
|
236
|
+
funIter != funEiter; ++funIter)
|
|
237
|
+
{
|
|
238
|
+
const Function* func = *funIter;
|
|
239
|
+
for (Function::const_iterator bbIt = func->begin(), bbEit = func->end();
|
|
240
|
+
bbIt != bbEit; ++bbIt)
|
|
241
|
+
{
|
|
242
|
+
const BasicBlock& bb = *bbIt;
|
|
243
|
+
for (BasicBlock::const_iterator instIt = bb.begin(), instEit = bb.end();
|
|
244
|
+
instIt != instEit; ++instIt)
|
|
245
|
+
{
|
|
246
|
+
const Instruction& inst = *instIt;
|
|
247
|
+
if (const BitCastInst* bitcast = SVFUtil::dyn_cast<BitCastInst>(&inst))
|
|
248
|
+
{
|
|
249
|
+
if (SVFUtil::isa<PointerType>(bitcast->getSrcTy()))
|
|
250
|
+
numberOfBitCast++;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
generalNumMap["BitCastNumber"] = numberOfBitCast;
|
|
257
|
+
}
|
|
258
|
+
*/
|
package/lib/WPA/AndersenStat.cpp
CHANGED
|
@@ -306,49 +306,49 @@ void AndersenStat::performStat()
|
|
|
306
306
|
|
|
307
307
|
constraintGraphStat();
|
|
308
308
|
|
|
309
|
-
timeStatMap[
|
|
310
|
-
timeStatMap[
|
|
311
|
-
timeStatMap[SCCMergeTime] = Andersen::timeOfSCCMerges;
|
|
309
|
+
timeStatMap["TotalTime"] = (endTime - startTime)/TIMEINTERVAL;
|
|
310
|
+
timeStatMap["SCCDetectTime"] = Andersen::timeOfSCCDetection;
|
|
311
|
+
timeStatMap["SCCMergeTime"] = Andersen::timeOfSCCMerges;
|
|
312
312
|
timeStatMap[CollapseTime] = Andersen::timeOfCollapse;
|
|
313
313
|
|
|
314
|
-
timeStatMap[
|
|
315
|
-
timeStatMap[
|
|
316
|
-
timeStatMap[
|
|
314
|
+
timeStatMap["LoadStoreTime"] = Andersen::timeOfProcessLoadStore;
|
|
315
|
+
timeStatMap["CopyGepTime"] = Andersen::timeOfProcessCopyGep;
|
|
316
|
+
timeStatMap["UpdateCGTime"] = Andersen::timeOfUpdateCallGraph;
|
|
317
317
|
|
|
318
|
-
PTNumStatMap[
|
|
319
|
-
PTNumStatMap[
|
|
318
|
+
PTNumStatMap["TotalPointers"] = pag->getValueNodeNum() + pag->getFieldValNodeNum();
|
|
319
|
+
PTNumStatMap["TotalObjects"] = pag->getObjectNodeNum() + pag->getFieldObjNodeNum();
|
|
320
320
|
|
|
321
321
|
|
|
322
|
-
PTNumStatMap[
|
|
323
|
-
PTNumStatMap[
|
|
324
|
-
PTNumStatMap[
|
|
325
|
-
PTNumStatMap[
|
|
326
|
-
PTNumStatMap[
|
|
322
|
+
PTNumStatMap["AddrProcessed"] = Andersen::numOfProcessedAddr;
|
|
323
|
+
PTNumStatMap["CopyProcessed"] = Andersen::numOfProcessedCopy;
|
|
324
|
+
PTNumStatMap["GepProcessed"] = Andersen::numOfProcessedGep;
|
|
325
|
+
PTNumStatMap["LoadProcessed"] = Andersen::numOfProcessedLoad;
|
|
326
|
+
PTNumStatMap["StoreProcessed"] = Andersen::numOfProcessedStore;
|
|
327
327
|
|
|
328
|
-
PTNumStatMap[
|
|
329
|
-
PTNumStatMap[NumOfFieldExpand] = Andersen::numOfFieldExpand;
|
|
328
|
+
PTNumStatMap["NumOfSFRs"] = Andersen::numOfSfrs;
|
|
329
|
+
PTNumStatMap["NumOfFieldExpand"] = Andersen::numOfFieldExpand;
|
|
330
330
|
|
|
331
|
-
PTNumStatMap[
|
|
332
|
-
PTNumStatMap[
|
|
333
|
-
PTNumStatMap[
|
|
334
|
-
PTNumStatMap[
|
|
331
|
+
PTNumStatMap["Pointers"] = pag->getValueNodeNum();
|
|
332
|
+
PTNumStatMap["MemObjects"] = pag->getObjectNodeNum();
|
|
333
|
+
PTNumStatMap["DummyFieldPtrs"] = pag->getFieldValNodeNum();
|
|
334
|
+
PTNumStatMap["FieldObjs"] = pag->getFieldObjNodeNum();
|
|
335
335
|
|
|
336
|
-
timeStatMap[
|
|
337
|
-
timeStatMap[
|
|
336
|
+
timeStatMap["AvgPtsSetSize"] = (double)totalPtsSize/totalPointers;;
|
|
337
|
+
timeStatMap["AvgTopLvlPtsSize"] = (double)totalTopLevPtsSize/totalTopLevPointers;;
|
|
338
338
|
|
|
339
|
-
PTNumStatMap[
|
|
339
|
+
PTNumStatMap["MaxPtsSetSize"] = _MaxPtsSize;
|
|
340
340
|
|
|
341
|
-
PTNumStatMap[
|
|
341
|
+
PTNumStatMap["SolveIterations"] = pta->numOfIteration;
|
|
342
342
|
|
|
343
|
-
PTNumStatMap[
|
|
344
|
-
PTNumStatMap[
|
|
343
|
+
PTNumStatMap["IndCallSites"] = consCG->getIndirectCallsites().size();
|
|
344
|
+
PTNumStatMap["IndEdgeSolved"] = pta->getNumOfResolvedIndCallEdge();
|
|
345
345
|
|
|
346
|
-
PTNumStatMap[
|
|
347
|
-
PTNumStatMap[
|
|
348
|
-
PTNumStatMap[
|
|
349
|
-
PTNumStatMap[
|
|
350
|
-
PTNumStatMap[
|
|
351
|
-
PTNumStatMap[
|
|
346
|
+
PTNumStatMap["NumOfSCCDetect"] = Andersen::numOfSCCDetection;
|
|
347
|
+
PTNumStatMap["TotalCycleNum"] = _NumOfCycles;
|
|
348
|
+
PTNumStatMap["TotalPWCCycleNum"] = _NumOfPWCCycles;
|
|
349
|
+
PTNumStatMap["NodesInCycles"] = _NumOfNodesInCycles;
|
|
350
|
+
PTNumStatMap["MaxNodesInSCC"] = _MaxNumOfNodesInSCC;
|
|
351
|
+
PTNumStatMap["NullPointer"] = _NumOfNullPtr;
|
|
352
352
|
PTNumStatMap["PointsToConstPtr"] = _NumOfConstantPtr;
|
|
353
353
|
PTNumStatMap["PointsToBlkPtr"] = _NumOfBlackholePtr;
|
|
354
354
|
|
|
@@ -120,8 +120,8 @@ void FlowSensitiveStat::performStat()
|
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
PTNumStatMap[
|
|
124
|
-
PTNumStatMap[
|
|
123
|
+
PTNumStatMap["FIObjNum"] = fiObjNumber;
|
|
124
|
+
PTNumStatMap["FSObjNum"] = fsObjNumber;
|
|
125
125
|
|
|
126
126
|
unsigned numOfCopy = 0;
|
|
127
127
|
unsigned numOfStore = 0;
|
|
@@ -138,7 +138,7 @@ void FlowSensitiveStat::performStat()
|
|
|
138
138
|
|
|
139
139
|
PTAStat::performStat();
|
|
140
140
|
|
|
141
|
-
timeStatMap[
|
|
141
|
+
timeStatMap["TotalTime"] = (endTime - startTime)/TIMEINTERVAL;
|
|
142
142
|
timeStatMap["SolveTime"] = fspta->solveTime;
|
|
143
143
|
timeStatMap["SCCTime"] = fspta->sccTime;
|
|
144
144
|
timeStatMap["ProcessTime"] = fspta->processTime;
|
|
@@ -154,22 +154,22 @@ void FlowSensitiveStat::performStat()
|
|
|
154
154
|
timeStatMap["UpdateCGTime"] = fspta->updateCallGraphTime;
|
|
155
155
|
timeStatMap["PhiTime"] = fspta->phiTime;
|
|
156
156
|
|
|
157
|
-
PTNumStatMap[
|
|
158
|
-
PTNumStatMap[
|
|
157
|
+
PTNumStatMap["TotalPointers"] = pag->getValueNodeNum() + pag->getFieldValNodeNum();
|
|
158
|
+
PTNumStatMap["TotalObjects"] = pag->getObjectNodeNum() + pag->getFieldObjNodeNum();
|
|
159
159
|
|
|
160
|
-
PTNumStatMap[
|
|
161
|
-
PTNumStatMap[
|
|
162
|
-
PTNumStatMap[
|
|
163
|
-
PTNumStatMap[
|
|
160
|
+
PTNumStatMap["Pointers"] = pag->getValueNodeNum();
|
|
161
|
+
PTNumStatMap["MemObjects"] = pag->getObjectNodeNum();
|
|
162
|
+
PTNumStatMap["DummyFieldPtrs"] = pag->getFieldValNodeNum();
|
|
163
|
+
PTNumStatMap["FieldObjs"] = pag->getFieldObjNodeNum();
|
|
164
164
|
|
|
165
|
-
PTNumStatMap[
|
|
166
|
-
PTNumStatMap[
|
|
165
|
+
PTNumStatMap["CopysNum"] = numOfCopy;
|
|
166
|
+
PTNumStatMap["StoresNum"] = numOfStore;
|
|
167
167
|
|
|
168
|
-
PTNumStatMap[
|
|
168
|
+
PTNumStatMap["SolveIterations"] = fspta->numOfIteration;
|
|
169
169
|
|
|
170
|
-
PTNumStatMap[
|
|
170
|
+
PTNumStatMap["IndEdgeSolved"] = fspta->getNumOfResolvedIndCallEdge();
|
|
171
171
|
|
|
172
|
-
PTNumStatMap[
|
|
172
|
+
PTNumStatMap["NullPointer"] = _NumOfNullPtr;
|
|
173
173
|
PTNumStatMap["PointsToConstPtr"] = _NumOfConstantPtr;
|
|
174
174
|
PTNumStatMap["PointsToBlkPtr"] = _NumOfBlackholePtr;
|
|
175
175
|
|
|
@@ -65,8 +65,8 @@ void VersionedFlowSensitiveStat::performStat()
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
PTNumStatMap[
|
|
69
|
-
PTNumStatMap[
|
|
68
|
+
PTNumStatMap["FIObjNum"] = fiObjNumber;
|
|
69
|
+
PTNumStatMap["FSObjNum"] = fsObjNumber;
|
|
70
70
|
|
|
71
71
|
unsigned numOfCopy = 0;
|
|
72
72
|
unsigned numOfStore = 0;
|
|
@@ -79,7 +79,7 @@ void VersionedFlowSensitiveStat::performStat()
|
|
|
79
79
|
|
|
80
80
|
PTAStat::performStat();
|
|
81
81
|
|
|
82
|
-
timeStatMap[
|
|
82
|
+
timeStatMap["TotalTime"] = (endTime - startTime)/TIMEINTERVAL;
|
|
83
83
|
timeStatMap["SolveTime"] = vfspta->solveTime;
|
|
84
84
|
timeStatMap["SCCTime"] = vfspta->sccTime;
|
|
85
85
|
timeStatMap["ProcessTime"] = vfspta->processTime;
|
|
@@ -98,13 +98,13 @@ void VersionedFlowSensitiveStat::performStat()
|
|
|
98
98
|
timeStatMap["PrelabelingTime"] = vfspta->prelabelingTime;
|
|
99
99
|
timeStatMap["VersionPropTime"] = vfspta->versionPropTime;
|
|
100
100
|
|
|
101
|
-
PTNumStatMap[
|
|
102
|
-
PTNumStatMap[
|
|
101
|
+
PTNumStatMap["TotalPointers"] = pag->getValueNodeNum() + pag->getFieldValNodeNum();
|
|
102
|
+
PTNumStatMap["TotalObjects"] = pag->getObjectNodeNum() + pag->getFieldObjNodeNum();
|
|
103
103
|
|
|
104
|
-
PTNumStatMap[
|
|
105
|
-
PTNumStatMap[
|
|
106
|
-
PTNumStatMap[
|
|
107
|
-
PTNumStatMap[
|
|
104
|
+
PTNumStatMap["Pointers"] = pag->getValueNodeNum();
|
|
105
|
+
PTNumStatMap["MemObjects"] = pag->getObjectNodeNum();
|
|
106
|
+
PTNumStatMap["DummyFieldPtrs"] = pag->getFieldValNodeNum();
|
|
107
|
+
PTNumStatMap["FieldObjs"] = pag->getFieldObjNodeNum();
|
|
108
108
|
|
|
109
109
|
PTNumStatMap["TotalVersions"] = _NumVersions;
|
|
110
110
|
PTNumStatMap["MaxVersionsForObj"] = _MaxVersions;
|
|
@@ -113,12 +113,12 @@ void VersionedFlowSensitiveStat::performStat()
|
|
|
113
113
|
PTNumStatMap["TotalExistingVPts"] = _NumUsedVersions;
|
|
114
114
|
PTNumStatMap["TotalSingleVObjs"] = _NumSingleVersion;
|
|
115
115
|
|
|
116
|
-
PTNumStatMap[
|
|
117
|
-
PTNumStatMap[
|
|
116
|
+
PTNumStatMap["CopysNum"] = numOfCopy;
|
|
117
|
+
PTNumStatMap["StoresNum"] = numOfStore;
|
|
118
118
|
|
|
119
|
-
PTNumStatMap[
|
|
119
|
+
PTNumStatMap["SolveIterations"] = vfspta->numOfIteration;
|
|
120
120
|
|
|
121
|
-
PTNumStatMap[
|
|
121
|
+
PTNumStatMap["IndEdgeSolved"] = vfspta->getNumOfResolvedIndCallEdge();
|
|
122
122
|
|
|
123
123
|
PTNumStatMap["StrongUpdates"] = vfspta->svfgHasSU.count();
|
|
124
124
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.565",
|
|
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": {
|