svf-tools 1.0.1004 → 1.0.1005

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.
Files changed (48) hide show
  1. package/package.json +1 -1
  2. package/svf/include/AE/Svfexe/AbstractInterpretation.h +1 -1
  3. package/svf/include/DDA/DDAVFSolver.h +5 -5
  4. package/svf/include/Graphs/ICFG.h +2 -2
  5. package/svf/include/Graphs/{CallGraph.h → PTACallGraph.h} +44 -42
  6. package/svf/include/Graphs/ThreadCallGraph.h +28 -28
  7. package/svf/include/Graphs/VFG.h +5 -5
  8. package/svf/include/MSSA/MemRegion.h +4 -4
  9. package/svf/include/MTA/LockAnalysis.h +1 -1
  10. package/svf/include/MTA/MHP.h +2 -2
  11. package/svf/include/MTA/TCT.h +6 -6
  12. package/svf/include/MemoryModel/PointerAnalysis.h +9 -9
  13. package/svf/include/SABER/SaberSVFGBuilder.h +1 -1
  14. package/svf/include/SABER/SrcSnkDDA.h +2 -2
  15. package/svf/include/SVFIR/SVFIR.h +4 -4
  16. package/svf/include/Util/CallGraphBuilder.h +2 -2
  17. package/svf/lib/DDA/DDAClient.cpp +2 -2
  18. package/svf/lib/Graphs/ICFG.cpp +8 -8
  19. package/svf/lib/Graphs/{CallGraph.cpp → PTACallGraph.cpp} +82 -77
  20. package/svf/lib/Graphs/SVFG.cpp +4 -4
  21. package/svf/lib/Graphs/SVFGReadWrite.cpp +4 -4
  22. package/svf/lib/Graphs/SVFGStat.cpp +1 -1
  23. package/svf/lib/Graphs/ThreadCallGraph.cpp +12 -12
  24. package/svf/lib/Graphs/VFG.cpp +1 -1
  25. package/svf/lib/MSSA/MemRegion.cpp +7 -7
  26. package/svf/lib/MSSA/MemSSA.cpp +1 -1
  27. package/svf/lib/MSSA/SVFGBuilder.cpp +1 -1
  28. package/svf/lib/MTA/LockAnalysis.cpp +18 -18
  29. package/svf/lib/MTA/MHP.cpp +19 -19
  30. package/svf/lib/MTA/TCT.cpp +25 -25
  31. package/svf/lib/MemoryModel/PointerAnalysis.cpp +3 -3
  32. package/svf/lib/SABER/LeakChecker.cpp +4 -4
  33. package/svf/lib/SABER/SaberCondAllocator.cpp +1 -1
  34. package/svf/lib/SABER/SaberSVFGBuilder.cpp +3 -3
  35. package/svf/lib/Util/CDGBuilder.cpp +2 -2
  36. package/svf/lib/Util/CallGraphBuilder.cpp +3 -3
  37. package/svf/lib/Util/PTAStat.cpp +12 -12
  38. package/svf/lib/Util/SVFStat.cpp +1 -1
  39. package/svf/lib/Util/SVFUtil.cpp +4 -4
  40. package/svf/lib/Util/ThreadAPI.cpp +2 -2
  41. package/svf/lib/WPA/VersionedFlowSensitive.cpp +1 -1
  42. package/svf-llvm/include/SVF-LLVM/LLVMModule.h +1 -1
  43. package/svf-llvm/include/SVF-LLVM/SVFIRBuilder.h +1 -1
  44. package/svf-llvm/lib/LLVMModule.cpp +1 -1
  45. package/svf-llvm/lib/LLVMUtil.cpp +1 -1
  46. package/svf-llvm/lib/SVFIRBuilder.cpp +5 -5
  47. package/svf-llvm/tools/AE/ae.cpp +1 -1
  48. package/svf-llvm/tools/Example/svf-ex.cpp +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-tools",
3
- "version": "1.0.1004",
3
+ "version": "1.0.1005",
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": {
@@ -106,7 +106,7 @@ class AbstractInterpretation
106
106
  friend class BufOverflowDetector;
107
107
 
108
108
  public:
109
- typedef SCCDetection<CallGraph*> CallGraphSCC;
109
+ typedef SCCDetection<PTACallGraph*> CallGraphSCC;
110
110
  /// Constructor
111
111
  AbstractInterpretation();
112
112
 
@@ -49,8 +49,8 @@ class DDAVFSolver
49
49
  friend class DDAStat;
50
50
  public:
51
51
  typedef SCCDetection<SVFG*> SVFGSCC;
52
- typedef SCCDetection<CallGraph*> CallGraphSCC;
53
- typedef CallGraphEdge::CallInstSet CallInstSet;
52
+ typedef SCCDetection<PTACallGraph*> CallGraphSCC;
53
+ typedef PTACallGraphEdge::CallInstSet CallInstSet;
54
54
  typedef SVFIR::CallSiteSet CallSiteSet;
55
55
  typedef OrderedSet<DPIm> DPTItemSet;
56
56
  typedef OrderedMap<DPIm, CPtSet> DPImToCPtSetMap;
@@ -624,7 +624,7 @@ protected:
624
624
  return (getSVFGSCCRepNode(edge->getSrcID()) == getSVFGSCCRepNode(edge->getDstID()));
625
625
  }
626
626
  /// Set callgraph
627
- inline void setCallGraph (CallGraph* cg)
627
+ inline void setCallGraph (PTACallGraph* cg)
628
628
  {
629
629
  _callGraph = cg;
630
630
  }
@@ -775,8 +775,8 @@ protected:
775
775
  SVFG* _svfg; ///< SVFG
776
776
  AndersenWaveDiff* _ander; ///< Andersen's analysis
777
777
  NodeBS candidateQueries; ///< candidate pointers;
778
- CallGraph* _callGraph; ///< CallGraph
779
- CallGraphSCC* _callGraphSCC; ///< SCC for CallGraph
778
+ PTACallGraph* _callGraph; ///< PTACallGraph
779
+ CallGraphSCC* _callGraphSCC; ///< SCC for PTACallGraph
780
780
  SVFGSCC* _svfgSCC; ///< SCC for SVFG
781
781
  DPTItemSet backwardVisited; ///< visited map during backward traversing
782
782
  DPImToCPtSetMap dpmToTLCPtSetMap; ///< points-to caching map for top-level vars
@@ -38,7 +38,7 @@
38
38
  namespace SVF
39
39
  {
40
40
 
41
- class CallGraph;
41
+ class PTACallGraph;
42
42
 
43
43
  /*!
44
44
  * Interprocedural Control-Flow Graph (ICFG)
@@ -111,7 +111,7 @@ public:
111
111
  void view();
112
112
 
113
113
  /// update ICFG for indirect calls
114
- void updateCallGraph(CallGraph* callgraph);
114
+ void updateCallGraph(PTACallGraph* callgraph);
115
115
 
116
116
  /// Whether node is in a loop
117
117
  inline bool isInLoop(const ICFGNode *node)
@@ -1,4 +1,4 @@
1
- //===- CallGraph.h -- Call graph representation----------------------------//
1
+ //===- PTACallGraph.h -- Call graph representation----------------------------//
2
2
  //
3
3
  // SVF: Static Value-Flow Analysis
4
4
  //
@@ -21,14 +21,14 @@
21
21
  //===----------------------------------------------------------------------===//
22
22
 
23
23
  /*
24
- * CallGraph.h
24
+ * PTACallGraph.h
25
25
  *
26
26
  * Created on: Nov 7, 2013
27
27
  * Author: Yulei Sui
28
28
  */
29
29
 
30
- #ifndef CALLGRAPH_H_
31
- #define CALLGRAPH_H_
30
+ #ifndef PTACALLGRAPH_H_
31
+ #define PTACALLGRAPH_H_
32
32
 
33
33
  #include "Graphs/GenericGraph.h"
34
34
  #include "SVFIR/SVFValue.h"
@@ -38,7 +38,7 @@
38
38
  namespace SVF
39
39
  {
40
40
 
41
- class CallGraphNode;
41
+ class PTACallGraphNode;
42
42
  class SVFModule;
43
43
 
44
44
 
@@ -47,8 +47,8 @@ class SVFModule;
47
47
  * Multiple calls from function A to B are merged into one call edge
48
48
  * Each call edge has a set of direct callsites and a set of indirect callsites
49
49
  */
50
- typedef GenericEdge<CallGraphNode> GenericCallGraphEdgeTy;
51
- class CallGraphEdge : public GenericCallGraphEdgeTy
50
+ typedef GenericEdge<PTACallGraphNode> GenericCallGraphEdgeTy;
51
+ class PTACallGraphEdge : public GenericCallGraphEdgeTy
52
52
  {
53
53
 
54
54
  public:
@@ -65,12 +65,12 @@ private:
65
65
  CallSiteID csId;
66
66
  public:
67
67
  /// Constructor
68
- CallGraphEdge(CallGraphNode* s, CallGraphNode* d, CEDGEK kind, CallSiteID cs) :
68
+ PTACallGraphEdge(PTACallGraphNode* s, PTACallGraphNode* d, CEDGEK kind, CallSiteID cs) :
69
69
  GenericCallGraphEdgeTy(s, d, makeEdgeFlagWithInvokeID(kind, cs)), csId(cs)
70
70
  {
71
71
  }
72
72
  /// Destructor
73
- virtual ~CallGraphEdge()
73
+ virtual ~PTACallGraphEdge()
74
74
  {
75
75
  }
76
76
  /// Compute the unique edgeFlag value from edge kind and CallSiteID.
@@ -140,21 +140,21 @@ public:
140
140
 
141
141
  /// ClassOf
142
142
  //@{
143
- static inline bool classof(const CallGraphEdge*)
143
+ static inline bool classof(const PTACallGraphEdge*)
144
144
  {
145
145
  return true;
146
146
  }
147
147
  static inline bool classof(const GenericCallGraphEdgeTy *edge)
148
148
  {
149
- return edge->getEdgeKind() == CallGraphEdge::CallRetEdge ||
150
- edge->getEdgeKind() == CallGraphEdge::TDForkEdge ||
151
- edge->getEdgeKind() == CallGraphEdge::TDJoinEdge;
149
+ return edge->getEdgeKind() == PTACallGraphEdge::CallRetEdge ||
150
+ edge->getEdgeKind() == PTACallGraphEdge::TDForkEdge ||
151
+ edge->getEdgeKind() == PTACallGraphEdge::TDJoinEdge;
152
152
  }
153
153
  //@}
154
154
 
155
155
  /// Overloading operator << for dumping ICFG node ID
156
156
  //@{
157
- friend OutStream& operator<< (OutStream &o, const CallGraphEdge &edge)
157
+ friend OutStream& operator<< (OutStream &o, const PTACallGraphEdge&edge)
158
158
  {
159
159
  o << edge.toString();
160
160
  return o;
@@ -163,28 +163,28 @@ public:
163
163
 
164
164
  virtual const std::string toString() const;
165
165
 
166
- typedef GenericNode<CallGraphNode,CallGraphEdge>::GEdgeSetTy CallGraphEdgeSet;
166
+ typedef GenericNode<PTACallGraphNode, PTACallGraphEdge>::GEdgeSetTy CallGraphEdgeSet;
167
167
 
168
168
  };
169
169
 
170
170
  /*
171
171
  * Call Graph node representing a function
172
172
  */
173
- typedef GenericNode<CallGraphNode,CallGraphEdge> GenericCallGraphNodeTy;
174
- class CallGraphNode : public GenericCallGraphNodeTy
173
+ typedef GenericNode<PTACallGraphNode, PTACallGraphEdge> GenericCallGraphNodeTy;
174
+ class PTACallGraphNode : public GenericCallGraphNodeTy
175
175
  {
176
176
 
177
177
  public:
178
- typedef CallGraphEdge::CallGraphEdgeSet CallGraphEdgeSet;
179
- typedef CallGraphEdge::CallGraphEdgeSet::iterator iterator;
180
- typedef CallGraphEdge::CallGraphEdgeSet::const_iterator const_iterator;
178
+ typedef PTACallGraphEdge::CallGraphEdgeSet CallGraphEdgeSet;
179
+ typedef PTACallGraphEdge::CallGraphEdgeSet::iterator iterator;
180
+ typedef PTACallGraphEdge::CallGraphEdgeSet::const_iterator const_iterator;
181
181
 
182
182
  private:
183
183
  const SVFFunction* fun;
184
184
 
185
185
  public:
186
186
  /// Constructor
187
- CallGraphNode(NodeID i, const SVFFunction* f) : GenericCallGraphNodeTy(i,CallNodeKd), fun(f)
187
+ PTACallGraphNode(NodeID i, const SVFFunction* f) : GenericCallGraphNodeTy(i,CallNodeKd), fun(f)
188
188
  {
189
189
 
190
190
  }
@@ -206,7 +206,7 @@ public:
206
206
 
207
207
  /// Overloading operator << for dumping ICFG node ID
208
208
  //@{
209
- friend OutStream& operator<< (OutStream &o, const CallGraphNode &node)
209
+ friend OutStream& operator<< (OutStream &o, const PTACallGraphNode&node)
210
210
  {
211
211
  o << node.toString();
212
212
  return o;
@@ -217,7 +217,7 @@ public:
217
217
 
218
218
  /// Methods for support type inquiry through isa, cast, and dyn_cast:
219
219
  //@{
220
- static inline bool classof(const CallGraphNode *)
220
+ static inline bool classof(const PTACallGraphNode*)
221
221
  {
222
222
  return true;
223
223
  }
@@ -237,13 +237,13 @@ public:
237
237
  /*!
238
238
  * Pointer Analysis Call Graph used internally for various pointer analysis
239
239
  */
240
- typedef GenericGraph<CallGraphNode,CallGraphEdge> GenericCallGraphTy;
241
- class CallGraph : public GenericCallGraphTy
240
+ typedef GenericGraph<PTACallGraphNode, PTACallGraphEdge> GenericCallGraphTy;
241
+ class PTACallGraph : public GenericCallGraphTy
242
242
  {
243
243
 
244
244
  public:
245
- typedef CallGraphEdge::CallGraphEdgeSet CallGraphEdgeSet;
246
- typedef Map<const SVFFunction*, CallGraphNode *> FunToCallGraphNodeMap;
245
+ typedef PTACallGraphEdge::CallGraphEdgeSet CallGraphEdgeSet;
246
+ typedef Map<const SVFFunction*, PTACallGraphNode*> FunToCallGraphNodeMap;
247
247
  typedef Map<const CallICFGNode*, CallGraphEdgeSet> CallInstToCallGraphEdgesMap;
248
248
  typedef std::pair<const CallICFGNode*, const SVFFunction*> CallSitePair;
249
249
  typedef Map<CallSitePair, CallSiteID> CallSiteToIdMap;
@@ -280,15 +280,15 @@ protected:
280
280
 
281
281
  public:
282
282
  /// Constructor
283
- CallGraph(CGEK k = NormCallGraph);
283
+ PTACallGraph(CGEK k = NormCallGraph);
284
284
 
285
285
  /// Copy constructor
286
- CallGraph(const CallGraph& other);
286
+ PTACallGraph(const PTACallGraph& other);
287
287
 
288
288
  void addCallGraphNode(const SVFFunction* fun);
289
289
 
290
290
  /// Destructor
291
- virtual ~CallGraph()
291
+ virtual ~PTACallGraph()
292
292
  {
293
293
  destroy();
294
294
  }
@@ -336,11 +336,11 @@ public:
336
336
 
337
337
  /// Get call graph node
338
338
  //@{
339
- inline CallGraphNode* getCallGraphNode(NodeID id) const
339
+ inline PTACallGraphNode* getCallGraphNode(NodeID id) const
340
340
  {
341
341
  return getGNode(id);
342
342
  }
343
- inline CallGraphNode* getCallGraphNode(const SVFFunction* fun) const
343
+ inline PTACallGraphNode* getCallGraphNode(const SVFFunction* fun) const
344
344
  {
345
345
  FunToCallGraphNodeMap::const_iterator it = funToCallGraphNodeMap.find(fun);
346
346
  assert(it!=funToCallGraphNodeMap.end() && "call graph node not found!!");
@@ -398,9 +398,11 @@ public:
398
398
  }
399
399
  //@}
400
400
  /// Whether we have already created this call graph edge
401
- CallGraphEdge* hasGraphEdge(CallGraphNode* src, CallGraphNode* dst,CallGraphEdge::CEDGEK kind, CallSiteID csId) const;
401
+ PTACallGraphEdge* hasGraphEdge(PTACallGraphNode* src, PTACallGraphNode* dst,
402
+ PTACallGraphEdge::CEDGEK kind, CallSiteID csId) const;
402
403
  /// Get call graph edge via nodes
403
- CallGraphEdge* getGraphEdge(CallGraphNode* src, CallGraphNode* dst,CallGraphEdge::CEDGEK kind, CallSiteID csId);
404
+ PTACallGraphEdge* getGraphEdge(PTACallGraphNode* src, PTACallGraphNode* dst,
405
+ PTACallGraphEdge::CEDGEK kind, CallSiteID csId);
404
406
 
405
407
  /// Get all callees for a callsite
406
408
  inline void getCallees(const CallICFGNode* cs, FunctionSet& callees)
@@ -438,7 +440,7 @@ public:
438
440
  }
439
441
  //@}
440
442
  /// Add call graph edge
441
- inline void addEdge(CallGraphEdge* edge)
443
+ inline void addEdge(PTACallGraphEdge* edge)
442
444
  {
443
445
  edge->getDstNode()->addIncomingEdge(edge);
444
446
  edge->getSrcNode()->addOutgoingEdge(edge);
@@ -452,9 +454,9 @@ public:
452
454
 
453
455
  /// Get callsites invoking the callee
454
456
  //@{
455
- void getAllCallSitesInvokingCallee(const SVFFunction* callee, CallGraphEdge::CallInstSet& csSet);
456
- void getDirCallSitesInvokingCallee(const SVFFunction* callee, CallGraphEdge::CallInstSet& csSet);
457
- void getIndCallSitesInvokingCallee(const SVFFunction* callee, CallGraphEdge::CallInstSet& csSet);
457
+ void getAllCallSitesInvokingCallee(const SVFFunction* callee, PTACallGraphEdge::CallInstSet& csSet);
458
+ void getDirCallSitesInvokingCallee(const SVFFunction* callee, PTACallGraphEdge::CallInstSet& csSet);
459
+ void getIndCallSitesInvokingCallee(const SVFFunction* callee, PTACallGraphEdge::CallInstSet& csSet);
458
460
  //@}
459
461
 
460
462
  /// Whether its reachable between two functions
@@ -475,19 +477,19 @@ namespace SVF
475
477
  * GenericGraphTraits specializations for generic graph algorithms.
476
478
  * Provide graph traits for traversing from a constraint node using standard graph traversals.
477
479
  */
478
- template<> struct GenericGraphTraits<SVF::CallGraphNode*> : public GenericGraphTraits<SVF::GenericNode<SVF::CallGraphNode,SVF::CallGraphEdge>* >
480
+ template<> struct GenericGraphTraits<SVF::PTACallGraphNode*> : public GenericGraphTraits<SVF::GenericNode<SVF::PTACallGraphNode,SVF::PTACallGraphEdge>* >
479
481
  {
480
482
  };
481
483
 
482
484
  /// Inverse GenericGraphTraits specializations for call graph node, it is used for inverse traversal.
483
485
  template<>
484
- struct GenericGraphTraits<Inverse<SVF::CallGraphNode *> > : public GenericGraphTraits<Inverse<SVF::GenericNode<SVF::CallGraphNode,SVF::CallGraphEdge>* > >
486
+ struct GenericGraphTraits<Inverse<SVF::PTACallGraphNode*> > : public GenericGraphTraits<Inverse<SVF::GenericNode<SVF::PTACallGraphNode,SVF::PTACallGraphEdge>* > >
485
487
  {
486
488
  };
487
489
 
488
- template<> struct GenericGraphTraits<SVF::CallGraph*> : public GenericGraphTraits<SVF::GenericGraph<SVF::CallGraphNode,SVF::CallGraphEdge>* >
490
+ template<> struct GenericGraphTraits<SVF::PTACallGraph*> : public GenericGraphTraits<SVF::GenericGraph<SVF::PTACallGraphNode,SVF::PTACallGraphEdge>* >
489
491
  {
490
- typedef SVF::CallGraphNode *NodeRef;
492
+ typedef SVF::PTACallGraphNode*NodeRef;
491
493
  };
492
494
 
493
495
  } // End namespace llvm
@@ -30,7 +30,7 @@
30
30
  #ifndef RCG_H_
31
31
  #define RCG_H_
32
32
 
33
- #include "Graphs/CallGraph.h"
33
+ #include "Graphs/PTACallGraph.h"
34
34
 
35
35
  namespace SVF
36
36
  {
@@ -41,13 +41,13 @@ class PointerAnalysis;
41
41
  /*!
42
42
  * PTA thread fork edge from fork site to the entry of a start routine function
43
43
  */
44
- class ThreadForkEdge: public CallGraphEdge
44
+ class ThreadForkEdge: public PTACallGraphEdge
45
45
  {
46
46
 
47
47
  public:
48
48
  /// Constructor
49
- ThreadForkEdge(CallGraphNode* s, CallGraphNode* d, CallSiteID csId) :
50
- CallGraphEdge(s, d, CallGraphEdge::TDForkEdge, csId)
49
+ ThreadForkEdge(PTACallGraphNode* s, PTACallGraphNode* d, CallSiteID csId) :
50
+ PTACallGraphEdge(s, d, PTACallGraphEdge::TDForkEdge, csId)
51
51
  {
52
52
  }
53
53
  /// Destructor
@@ -61,9 +61,9 @@ public:
61
61
  {
62
62
  return true;
63
63
  }
64
- static inline bool classof(const CallGraphEdge *edge)
64
+ static inline bool classof(const PTACallGraphEdge*edge)
65
65
  {
66
- return edge->getEdgeKind() == CallGraphEdge::TDForkEdge;
66
+ return edge->getEdgeKind() == PTACallGraphEdge::TDForkEdge;
67
67
  }
68
68
  //@}
69
69
 
@@ -78,19 +78,19 @@ public:
78
78
  return rawstr.str();
79
79
  }
80
80
 
81
- typedef GenericNode<CallGraphNode, ThreadForkEdge>::GEdgeSetTy ForkEdgeSet;
81
+ typedef GenericNode<PTACallGraphNode, ThreadForkEdge>::GEdgeSetTy ForkEdgeSet;
82
82
  };
83
83
 
84
84
  /*!
85
85
  * PTA thread join edge from the exit of a start routine function to a join point of the thread
86
86
  */
87
- class ThreadJoinEdge: public CallGraphEdge
87
+ class ThreadJoinEdge: public PTACallGraphEdge
88
88
  {
89
89
 
90
90
  public:
91
91
  /// Constructor
92
- ThreadJoinEdge(CallGraphNode* s, CallGraphNode* d, CallSiteID csId) :
93
- CallGraphEdge(s, d, CallGraphEdge::TDJoinEdge, csId)
92
+ ThreadJoinEdge(PTACallGraphNode* s, PTACallGraphNode* d, CallSiteID csId) :
93
+ PTACallGraphEdge(s, d, PTACallGraphEdge::TDJoinEdge, csId)
94
94
  {
95
95
  }
96
96
  /// Destructor
@@ -102,9 +102,9 @@ public:
102
102
  {
103
103
  return true;
104
104
  }
105
- static inline bool classof(const CallGraphEdge *edge)
105
+ static inline bool classof(const PTACallGraphEdge*edge)
106
106
  {
107
- return edge->getEdgeKind() == CallGraphEdge::TDJoinEdge;
107
+ return edge->getEdgeKind() == PTACallGraphEdge::TDJoinEdge;
108
108
  }
109
109
 
110
110
  virtual const std::string toString() const
@@ -118,19 +118,19 @@ public:
118
118
  return rawstr.str();
119
119
  }
120
120
 
121
- typedef GenericNode<CallGraphNode, ThreadJoinEdge>::GEdgeSetTy JoinEdgeSet;
121
+ typedef GenericNode<PTACallGraphNode, ThreadJoinEdge>::GEdgeSetTy JoinEdgeSet;
122
122
  };
123
123
 
124
124
  /*!
125
125
  * hare_parallel_for edge from fork site to the entry of a start routine function
126
126
  */
127
- class HareParForEdge: public CallGraphEdge
127
+ class HareParForEdge: public PTACallGraphEdge
128
128
  {
129
129
 
130
130
  public:
131
131
  /// Constructor
132
- HareParForEdge(CallGraphNode* s, CallGraphNode* d, CallSiteID csId) :
133
- CallGraphEdge(s, d, CallGraphEdge::HareParForEdge, csId)
132
+ HareParForEdge(PTACallGraphNode* s, PTACallGraphNode* d, CallSiteID csId) :
133
+ PTACallGraphEdge(s, d, PTACallGraphEdge::HareParForEdge, csId)
134
134
  {
135
135
  }
136
136
  /// Destructor
@@ -144,20 +144,20 @@ public:
144
144
  {
145
145
  return true;
146
146
  }
147
- static inline bool classof(const CallGraphEdge *edge)
147
+ static inline bool classof(const PTACallGraphEdge*edge)
148
148
  {
149
- return edge->getEdgeKind() == CallGraphEdge::HareParForEdge;
149
+ return edge->getEdgeKind() == PTACallGraphEdge::HareParForEdge;
150
150
  }
151
151
  //@}
152
152
 
153
- typedef GenericNode<CallGraphNode, HareParForEdge>::GEdgeSetTy ParForEdgeSet;
153
+ typedef GenericNode<PTACallGraphNode, HareParForEdge>::GEdgeSetTy ParForEdgeSet;
154
154
  };
155
155
 
156
156
 
157
157
  /*!
158
158
  * Thread sensitive call graph
159
159
  */
160
- class ThreadCallGraph: public CallGraph
160
+ class ThreadCallGraph: public PTACallGraph
161
161
  {
162
162
 
163
163
  public:
@@ -172,7 +172,7 @@ public:
172
172
  typedef Map<const CallICFGNode*, ParForEdgeSet> CallInstToParForEdgesMap;
173
173
 
174
174
  /// Constructor
175
- ThreadCallGraph(const CallGraph& cg);
175
+ ThreadCallGraph(const PTACallGraph& cg);
176
176
 
177
177
  ThreadCallGraph(ThreadCallGraph& cg) = delete;
178
178
 
@@ -187,9 +187,9 @@ public:
187
187
  {
188
188
  return true;
189
189
  }
190
- static inline bool classof(const CallGraph *g)
190
+ static inline bool classof(const PTACallGraph*g)
191
191
  {
192
- return g->getKind() == CallGraph::ThdCallGraph;
192
+ return g->getKind() == PTACallGraph::ThdCallGraph;
193
193
  }
194
194
  //@}
195
195
 
@@ -239,7 +239,7 @@ public:
239
239
  assert(it != callinstToThreadJoinEdgesMap.end() && "call instruction does not have a valid callee");
240
240
  return it->second.end();
241
241
  }
242
- inline void getJoinSites(const CallGraphNode* routine, InstSet& csSet)
242
+ inline void getJoinSites(const PTACallGraphNode* routine, InstSet& csSet)
243
243
  {
244
244
  for(CallInstToJoinEdgesMap::const_iterator it = callinstToThreadJoinEdgesMap.begin(), eit = callinstToThreadJoinEdgesMap.end(); it!=eit; ++it)
245
245
  {
@@ -359,7 +359,7 @@ public:
359
359
  //@}
360
360
 
361
361
 
362
- /// map call instruction to its CallGraphEdge map
362
+ /// map call instruction to its PTACallGraphEdge map
363
363
  inline void addThreadForkEdgeSetMap(const CallICFGNode* cs, ThreadForkEdge* edge)
364
364
  {
365
365
  if(edge!=nullptr)
@@ -369,7 +369,7 @@ public:
369
369
  }
370
370
  }
371
371
 
372
- /// map call instruction to its CallGraphEdge map
372
+ /// map call instruction to its PTACallGraphEdge map
373
373
  inline void addThreadJoinEdgeSetMap(const CallICFGNode* cs, ThreadJoinEdge* edge)
374
374
  {
375
375
  if(edge!=nullptr)
@@ -379,7 +379,7 @@ public:
379
379
  }
380
380
  }
381
381
 
382
- /// map call instruction to its CallGraphEdge map
382
+ /// map call instruction to its PTACallGraphEdge map
383
383
  inline void addHareParForEdgeSetMap(const CallICFGNode* cs, HareParForEdge* edge)
384
384
  {
385
385
  if(edge!=nullptr)
@@ -390,7 +390,7 @@ public:
390
390
  }
391
391
 
392
392
  /// has thread join edge
393
- inline ThreadJoinEdge* hasThreadJoinEdge(const CallICFGNode* call, CallGraphNode* joinFunNode, CallGraphNode* threadRoutineFunNode, CallSiteID csId) const
393
+ inline ThreadJoinEdge* hasThreadJoinEdge(const CallICFGNode* call, PTACallGraphNode* joinFunNode, PTACallGraphNode* threadRoutineFunNode, CallSiteID csId) const
394
394
  {
395
395
  ThreadJoinEdge joinEdge(joinFunNode,threadRoutineFunNode, csId);
396
396
  CallInstToJoinEdgesMap::const_iterator it = callinstToThreadJoinEdgesMap.find(call);
@@ -32,7 +32,7 @@
32
32
 
33
33
 
34
34
  #include "SVFIR/SVFIR.h"
35
- #include "Graphs/CallGraph.h"
35
+ #include "Graphs/PTACallGraph.h"
36
36
  #include "Graphs/VFGNode.h"
37
37
  #include "Graphs/VFGEdge.h"
38
38
 
@@ -100,7 +100,7 @@ protected:
100
100
  FunToVFGNodesMapTy funToVFGNodesMap; ///< map a function to its VFGNodes;
101
101
 
102
102
  GlobalVFGNodeSet globalVFGNodes; ///< set of global store VFG nodes
103
- CallGraph* callgraph;
103
+ PTACallGraph* callgraph;
104
104
  SVFIR* pag;
105
105
  VFGK kind;
106
106
 
@@ -109,7 +109,7 @@ protected:
109
109
 
110
110
  public:
111
111
  /// Constructor
112
- VFG(CallGraph* callgraph, VFGK k = FULLSVFG);
112
+ VFG(PTACallGraph* callgraph, VFGK k = FULLSVFG);
113
113
 
114
114
  /// Destructor
115
115
  virtual ~VFG()
@@ -135,8 +135,8 @@ public:
135
135
  return pag;
136
136
  }
137
137
 
138
- /// Return CallGraph
139
- inline CallGraph* getCallGraph() const
138
+ /// Return PTACallGraph
139
+ inline PTACallGraph* getCallGraph() const
140
140
  {
141
141
  return callgraph;
142
142
  }
@@ -35,7 +35,7 @@
35
35
  #define MEMORYREGION_H_
36
36
 
37
37
  #include "Graphs/ICFG.h"
38
- #include "Graphs/CallGraph.h"
38
+ #include "Graphs/PTACallGraph.h"
39
39
  #include "Graphs/SCC.h"
40
40
  #include "SVFIR/SVFIR.h"
41
41
  #include "Util/WorkList.h"
@@ -175,7 +175,7 @@ public:
175
175
  /// SVFIR edge list
176
176
  typedef SVFIR::SVFStmtList SVFStmtList;
177
177
  /// Call Graph SCC
178
- typedef SCCDetection<CallGraph*> SCC;
178
+ typedef SCCDetection<PTACallGraph*> SCC;
179
179
 
180
180
  MRSet& getMRSet()
181
181
  {
@@ -196,7 +196,7 @@ private:
196
196
 
197
197
  BVDataPTAImpl* pta;
198
198
  SCC* callGraphSCC;
199
- CallGraph* callGraph;
199
+ PTACallGraph* callGraph;
200
200
  bool ptrOnlyMSSA;
201
201
 
202
202
  /// Map a function to all its memory regions
@@ -330,7 +330,7 @@ protected:
330
330
  }
331
331
 
332
332
  /// Mod-Ref analysis for callsite invoking this callGraphNode
333
- virtual void modRefAnalysis(CallGraphNode* callGraphNode, WorkList& worklist);
333
+ virtual void modRefAnalysis(PTACallGraphNode* callGraphNode, WorkList& worklist);
334
334
 
335
335
  /// Get Mod-Ref of a callee function
336
336
  virtual bool handleCallsiteModRef(NodeBS& mod, NodeBS& ref, const CallICFGNode* cs, const SVFFunction* fun);
@@ -339,7 +339,7 @@ private:
339
339
  void handleIntra(const CxtStmt& cts);
340
340
 
341
341
  /// Handle call relations
342
- void handleCallRelation(CxtLockProc& clp, const CallGraphEdge* cgEdge, const CallICFGNode* call);
342
+ void handleCallRelation(CxtLockProc& clp, const PTACallGraphEdge* cgEdge, const CallICFGNode* call);
343
343
 
344
344
  /// Return true it a lock matches an unlock
345
345
  bool isAliasedLocks(const CxtLock& cl1, const CxtLock& cl2)
@@ -123,7 +123,7 @@ public:
123
123
 
124
124
  private:
125
125
 
126
- inline const CallGraph::FunctionSet& getCallee(const CallICFGNode* inst, CallGraph::FunctionSet& callees)
126
+ inline const PTACallGraph::FunctionSet& getCallee(const CallICFGNode* inst, PTACallGraph::FunctionSet& callees)
127
127
  {
128
128
  tcg->getCallees(inst, callees);
129
129
  return callees;
@@ -482,7 +482,7 @@ private:
482
482
  {
483
483
  return getTCG()->getThreadAPI()->getJoinedThread(call);
484
484
  }
485
- inline const CallGraph::FunctionSet& getCallee(const ICFGNode* inst, CallGraph::FunctionSet& callees)
485
+ inline const PTACallGraph::FunctionSet& getCallee(const ICFGNode* inst, PTACallGraph::FunctionSet& callees)
486
486
  {
487
487
  getTCG()->getCallees(SVFUtil::cast<CallICFGNode>(inst), callees);
488
488
  return callees;
@@ -160,14 +160,14 @@ public:
160
160
  typedef Set<const SVFFunction*> FunSet;
161
161
  typedef std::vector<const ICFGNode*> InstVec;
162
162
  typedef Set<const ICFGNode*> InstSet;
163
- typedef Set<const CallGraphNode*> PTACGNodeSet;
163
+ typedef Set<const PTACallGraphNode*> PTACGNodeSet;
164
164
  typedef Map<CxtThread,TCTNode*> CxtThreadToNodeMap;
165
165
  typedef Map<CxtThread,CallStrCxt> CxtThreadToForkCxt;
166
166
  typedef Map<CxtThread,const SVFFunction*> CxtThreadToFun;
167
167
  typedef Map<const ICFGNode*, LoopBBs> InstToLoopMap;
168
168
  typedef FIFOWorkList<CxtThreadProc> CxtThreadProcVec;
169
169
  typedef Set<CxtThreadProc> CxtThreadProcSet;
170
- typedef SCCDetection<CallGraph*> ThreadCallGraphSCC;
170
+ typedef SCCDetection<PTACallGraph*> ThreadCallGraphSCC;
171
171
 
172
172
  /// Constructor
173
173
  TCT(PointerAnalysis* p) :pta(p),TCTNodeNum(0),TCTEdgeNum(0),MaxCxtSize(0)
@@ -288,9 +288,9 @@ public:
288
288
  //@}
289
289
 
290
290
  /// Whether it is a candidate function for indirect call
291
- inline bool isCandidateFun(const CallGraph::FunctionSet& callees) const
291
+ inline bool isCandidateFun(const PTACallGraph::FunctionSet& callees) const
292
292
  {
293
- for(CallGraph::FunctionSet::const_iterator cit = callees.begin(),
293
+ for(PTACallGraph::FunctionSet::const_iterator cit = callees.begin(),
294
294
  ecit = callees.end(); cit!=ecit; cit++)
295
295
  {
296
296
  if(candidateFuncSet.find((*cit))!=candidateFuncSet.end())
@@ -303,7 +303,7 @@ public:
303
303
  return candidateFuncSet.find(fun)!=candidateFuncSet.end();
304
304
  }
305
305
  /// Whether two functions in the same callgraph scc
306
- inline bool inSameCallGraphSCC(const CallGraphNode* src,const CallGraphNode* dst)
306
+ inline bool inSameCallGraphSCC(const PTACallGraphNode* src,const PTACallGraphNode* dst)
307
307
  {
308
308
  return (tcgSCC->repNode(src->getId()) == tcgSCC->repNode(dst->getId()));
309
309
  }
@@ -506,7 +506,7 @@ private:
506
506
  //@}
507
507
 
508
508
  /// Handle call relations
509
- void handleCallRelation(CxtThreadProc& ctp, const CallGraphEdge* cgEdge, const CallICFGNode* call);
509
+ void handleCallRelation(CxtThreadProc& ctp, const PTACallGraphEdge* cgEdge, const CallICFGNode* call);
510
510
 
511
511
  /// Get or create a tct node based on CxtThread
512
512
  //@{