svf-lib 1.0.2374 → 1.0.2376
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-aarch64/include/AE/Svfexe/AbstractInterpretation.h +3 -5
- package/SVF-linux-aarch64/include/Graphs/ICFG.h +0 -39
- package/SVF-linux-aarch64/lib/libSvfCore.so.3.2 +0 -0
- package/SVF-linux-aarch64/lib/libSvfLLVM.so.3.2 +0 -0
- package/SVF-linux-x86_64/include/AE/Svfexe/AbstractInterpretation.h +3 -5
- package/SVF-linux-x86_64/include/Graphs/ICFG.h +0 -39
- 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/package.json +1 -1
|
@@ -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
|
|
@@ -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
|