svf-lib 1.0.2372 → 1.0.2374
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-linux-x86_64/include/Graphs/CallGraph.h +1 -1
- package/SVF-linux-x86_64/include/SVFIR/SVFIR.h +3 -7
- package/SVF-linux-x86_64/lib/libSvfCore.so.3.2 +0 -0
- package/SVF-linux-x86_64/lib/libSvfLLVM.so.3.2 +0 -0
- package/SVF-osx/include/AE/Svfexe/AbstractInterpretation.h +3 -5
- package/SVF-osx/include/Graphs/ICFG.h +0 -39
- package/SVF-osx/lib/libSvfCore.3.2.dylib +0 -0
- package/SVF-osx/lib/libSvfLLVM.3.2.dylib +0 -0
- package/package.json +1 -1
|
@@ -357,7 +357,7 @@ public:
|
|
|
357
357
|
/// Get call graph node
|
|
358
358
|
//@{
|
|
359
359
|
|
|
360
|
-
const CallGraphNode* getCallGraphNode(const std::string& name);
|
|
360
|
+
const CallGraphNode* getCallGraphNode(const std::string& name) const;
|
|
361
361
|
|
|
362
362
|
inline CallGraphNode* getCallGraphNode(NodeID id) const
|
|
363
363
|
{
|
|
@@ -96,7 +96,7 @@ private:
|
|
|
96
96
|
ICFG* icfg; // ICFG
|
|
97
97
|
CommonCHGraph* chgraph; // class hierarchy graph
|
|
98
98
|
CallSiteSet callSiteSet; /// all the callsites of a program
|
|
99
|
-
CallGraph* callGraph; ///
|
|
99
|
+
CallGraph* callGraph; /// Callgraph with direct calls only; no change allowed after init and use callgraph in PointerAnalysis for indirect calls)
|
|
100
100
|
|
|
101
101
|
static std::unique_ptr<SVFIR> pag; ///< Singleton pattern here to enable instance of SVFIR can only be created once.
|
|
102
102
|
static std::string pagReadFromTxt;
|
|
@@ -176,12 +176,8 @@ public:
|
|
|
176
176
|
return chgraph;
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
-
///
|
|
180
|
-
inline
|
|
181
|
-
{
|
|
182
|
-
callGraph = c;
|
|
183
|
-
}
|
|
184
|
-
inline CallGraph* getCallGraph()
|
|
179
|
+
/// Get CG
|
|
180
|
+
inline const CallGraph* getCallGraph()
|
|
185
181
|
{
|
|
186
182
|
assert(callGraph && "empty CallGraph! Build SVF IR first!");
|
|
187
183
|
return callGraph;
|
|
Binary file
|
|
Binary file
|
|
@@ -164,15 +164,14 @@ public:
|
|
|
164
164
|
*/
|
|
165
165
|
AbstractState& getAbsStateFromTrace(const ICFGNode* node)
|
|
166
166
|
{
|
|
167
|
-
|
|
168
|
-
if (abstractTrace.count(repNode) == 0)
|
|
167
|
+
if (abstractTrace.count(node) == 0)
|
|
169
168
|
{
|
|
170
169
|
assert(false && "No preAbsTrace for this node");
|
|
171
170
|
abort();
|
|
172
171
|
}
|
|
173
172
|
else
|
|
174
173
|
{
|
|
175
|
-
return abstractTrace[
|
|
174
|
+
return abstractTrace[node];
|
|
176
175
|
}
|
|
177
176
|
}
|
|
178
177
|
|
|
@@ -303,8 +302,7 @@ private:
|
|
|
303
302
|
|
|
304
303
|
bool hasAbsStateFromTrace(const ICFGNode* node)
|
|
305
304
|
{
|
|
306
|
-
|
|
307
|
-
return abstractTrace.count(repNode) != 0;
|
|
305
|
+
return abstractTrace.count(node) != 0;
|
|
308
306
|
}
|
|
309
307
|
|
|
310
308
|
AbsExtAPI* getUtils()
|
|
@@ -71,10 +71,6 @@ private:
|
|
|
71
71
|
GlobalICFGNode* globalBlockNode; ///< unique basic block for all globals
|
|
72
72
|
ICFGNodeToSVFLoopVec icfgNodeToSVFLoopVec; ///< map ICFG node to the SVF loops where it resides
|
|
73
73
|
|
|
74
|
-
Map<const ICFGNode*, std::vector<const ICFGNode*>> _subNodes; ///<map a node(1st node of basicblock) to its subnodes
|
|
75
|
-
Map<const ICFGNode*, const ICFGNode*> _repNode; ///<map a subnode to its representative node(1st node of basicblock)
|
|
76
|
-
|
|
77
|
-
|
|
78
74
|
public:
|
|
79
75
|
/// Constructor
|
|
80
76
|
ICFG();
|
|
@@ -219,8 +215,6 @@ protected:
|
|
|
219
215
|
virtual inline void addICFGNode(ICFGNode* node)
|
|
220
216
|
{
|
|
221
217
|
addGNode(node->getId(),node);
|
|
222
|
-
_repNode[node] = node;
|
|
223
|
-
_subNodes[node].push_back(node);
|
|
224
218
|
}
|
|
225
219
|
|
|
226
220
|
public:
|
|
@@ -237,42 +231,9 @@ public:
|
|
|
237
231
|
{
|
|
238
232
|
return globalBlockNode;
|
|
239
233
|
}
|
|
240
|
-
|
|
241
|
-
const std::vector<const ICFGNode*>& getSubNodes(const ICFGNode* node) const
|
|
242
|
-
{
|
|
243
|
-
return _subNodes.at(node);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
const ICFGNode* getRepNode(const ICFGNode* node) const
|
|
247
|
-
{
|
|
248
|
-
return _repNode.at(node);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
void updateSubAndRep(const ICFGNode* rep, const ICFGNode* sub)
|
|
253
|
-
{
|
|
254
|
-
addSubNode(rep, sub);
|
|
255
|
-
updateRepNode(rep, sub);
|
|
256
|
-
}
|
|
257
234
|
//@}
|
|
258
235
|
|
|
259
236
|
private:
|
|
260
|
-
/// when ICFG is simplified, SubNode would merge repNode, then update the map
|
|
261
|
-
void addSubNode(const ICFGNode* rep, const ICFGNode* sub)
|
|
262
|
-
{
|
|
263
|
-
std::vector<const ICFGNode*>& subNodes = _subNodes[sub];
|
|
264
|
-
if(std::find(subNodes.begin(), subNodes.end(), rep) == subNodes.end())
|
|
265
|
-
{
|
|
266
|
-
subNodes.push_back(rep);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
/// when ICFG is simplified, some node would be removed, this map records the removed node to its rep node
|
|
271
|
-
void updateRepNode(const ICFGNode* rep, const ICFGNode* sub)
|
|
272
|
-
{
|
|
273
|
-
_repNode[rep] = sub;
|
|
274
|
-
}
|
|
275
|
-
|
|
276
237
|
/// Add ICFG edge, only used by addIntraEdge, addCallEdge, addRetEdge etc.
|
|
277
238
|
inline bool addICFGEdge(ICFGEdge* edge)
|
|
278
239
|
{
|
|
Binary file
|
|
Binary file
|