svf-lib 1.0.2177 → 1.0.2179

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.
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -82,7 +82,7 @@ public:
82
82
  }
83
83
 
84
84
  /// Return the corresponding LLVM value, if possible, nullptr otherwise.
85
- virtual const SVFValue* getValue() const
85
+ virtual const SVFVar* getValue() const
86
86
  {
87
87
  return nullptr;
88
88
  }
@@ -190,7 +190,7 @@ public:
190
190
  }
191
191
  //@}
192
192
 
193
- const SVFValue* getValue() const override;
193
+ const SVFVar* getValue() const override;
194
194
  const std::string toString() const override;
195
195
  };
196
196
 
@@ -401,7 +401,9 @@ public:
401
401
 
402
402
  const NodeBS getDefSVFVars() const override;
403
403
 
404
- const SVFValue* getValue() const override;
404
+ const SVFVar* getValue() const override;
405
+
406
+
405
407
  const std::string toString() const override;
406
408
  };
407
409
 
@@ -476,7 +478,7 @@ public:
476
478
 
477
479
  const NodeBS getDefSVFVars() const override;
478
480
 
479
- const SVFValue* getValue() const override;
481
+ const SVFVar* getValue() const override;
480
482
  const std::string toString() const override;
481
483
  };
482
484
 
@@ -736,7 +738,7 @@ public:
736
738
 
737
739
  const NodeBS getDefSVFVars() const override;
738
740
 
739
- const SVFValue* getValue() const override;
741
+ const SVFVar* getValue() const override;
740
742
  const std::string toString() const override;
741
743
  };
742
744
 
@@ -879,7 +881,7 @@ public:
879
881
  }
880
882
  //@}
881
883
 
882
- const SVFValue* getValue() const override;
884
+ const SVFVar* getValue() const override;
883
885
  const std::string toString() const override;
884
886
  };
885
887
 
@@ -307,8 +307,7 @@ protected:
307
307
  AddrStmt* edge = addAddrEdge(src, dst);
308
308
  if (inst.getArraySize())
309
309
  {
310
- SVFValue* arrSz = llvmModuleSet()->getSVFValue(inst.getArraySize());
311
- edge->addArrSize(arrSz);
310
+ edge->addArrSize(pag->getGNode(getValueNode(inst.getArraySize())));
312
311
  }
313
312
  return edge;
314
313
  }
@@ -334,8 +333,7 @@ protected:
334
333
  if (cs->arg_size() > 0)
335
334
  {
336
335
  const llvm::Value* val = cs->getArgOperand(0);
337
- SVFValue* svfval = llvmModuleSet()->getSVFValue(val);
338
- edge->addArrSize(svfval);
336
+ edge->addArrSize(pag->getGNode(getValueNode(val)));
339
337
  }
340
338
  }
341
339
  // Check if the function called is 'calloc' and process its arguments.
@@ -344,8 +342,10 @@ protected:
344
342
  {
345
343
  if (cs->arg_size() > 1)
346
344
  {
347
- edge->addArrSize(llvmModuleSet()->getSVFValue(cs->getArgOperand(0)));
348
- edge->addArrSize(llvmModuleSet()->getSVFValue(cs->getArgOperand(1)));
345
+ edge->addArrSize(
346
+ pag->getGNode(getValueNode(cs->getArgOperand(0))));
347
+ edge->addArrSize(
348
+ pag->getGNode(getValueNode(cs->getArgOperand(1))));
349
349
  }
350
350
  }
351
351
  else
@@ -353,8 +353,7 @@ protected:
353
353
  if (cs->arg_size() > 0)
354
354
  {
355
355
  const llvm::Value* val = cs->getArgOperand(0);
356
- SVFValue* svfval = llvmModuleSet()->getSVFValue(val);
357
- edge->addArrSize(svfval);
356
+ edge->addArrSize(pag->getGNode(getValueNode(val)));
358
357
  }
359
358
  }
360
359
  return edge;
@@ -78,7 +78,7 @@ public:
78
78
  };
79
79
 
80
80
  private:
81
- const SVFValue* value; ///< LLVM value
81
+ const SVFVar* value; ///< LLVM value
82
82
  const SVFBasicBlock* basicBlock; ///< LLVM BasicBlock
83
83
  ICFGNode* icfgNode; ///< ICFGNode
84
84
  EdgeID edgeId; ///< Edge ID
@@ -134,20 +134,16 @@ public:
134
134
 
135
135
  /// Get/set methods for llvm instruction
136
136
  //@{
137
- inline const SVFInstruction* getInst() const
138
- {
139
- if (const SVFInstruction* i = SVFUtil::dyn_cast<SVFInstruction>(value))
140
- return i;
141
- return nullptr;
142
- }
143
- inline void setValue(const SVFValue* val)
137
+
138
+ inline void setValue(const SVFVar* val)
144
139
  {
145
140
  value = val;
146
141
  }
147
- inline const SVFValue* getValue() const
142
+ inline const SVFVar* getValue() const
148
143
  {
149
144
  return value;
150
145
  }
146
+
151
147
  inline void setBB(const SVFBasicBlock* bb)
152
148
  {
153
149
  basicBlock = bb;
@@ -321,7 +317,7 @@ private:
321
317
  AddrStmt(const AddrStmt&); ///< place holder
322
318
  void operator=(const AddrStmt&); ///< place holder
323
319
 
324
- std::vector<SVFValue*> arrSize; ///< Array size of the allocated memory
320
+ std::vector<SVFVar*> arrSize; ///< Array size of the allocated memory
325
321
 
326
322
  public:
327
323
  /// Methods for support type inquiry through isa, cast, and dyn_cast:
@@ -345,13 +341,13 @@ public:
345
341
 
346
342
  virtual const std::string toString() const override;
347
343
 
348
- inline void addArrSize(SVFValue* size) //TODO:addSizeVar
344
+ inline void addArrSize(SVFVar* size) //TODO:addSizeVar
349
345
  {
350
346
  arrSize.push_back(size);
351
347
  }
352
348
 
353
349
  ///< get array size of the allocated memory
354
- inline const std::vector<SVFValue*>& getArrSize() const //TODO:getSizeVars
350
+ inline const std::vector<SVFVar*>& getArrSize() const //TODO:getSizeVars
355
351
  {
356
352
  return arrSize;
357
353
  }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -154,6 +154,7 @@ public:
154
154
  // ┌── SVFVar: Classes of top-level variables (ValVar) and address-taken variables (ObjVar)
155
155
  // │ └── ValVar: Classes of top-level variable nodes
156
156
  ValNode, // ├──Represents a standard value variable
157
+ ArgNode, // ├──Represents an argument value variable
157
158
  FunValNode, // ├──Represents a Function value variable
158
159
  GepValNode, // ├──Represents a GEP value variable
159
160
  RetNode, // ├──Represents a return value node
@@ -289,7 +290,7 @@ protected:
289
290
 
290
291
  static inline bool isSVFVarKind(GNodeK n)
291
292
  {
292
- static_assert(DummyObjNode - ValNode == 23,
293
+ static_assert(DummyObjNode - ValNode == 24,
293
294
  "The number of SVFVarKinds has changed, make sure the "
294
295
  "range is correct");
295
296
 
@@ -298,7 +299,7 @@ protected:
298
299
 
299
300
  static inline bool isValVarKinds(GNodeK n)
300
301
  {
301
- static_assert(DummyValNode - ValNode == 11,
302
+ static_assert(DummyValNode - ValNode == 12,
302
303
  "The number of ValVarKinds has changed, make sure the "
303
304
  "range is correct");
304
305
  return n <= DummyValNode && n >= ValNode;
@@ -578,6 +578,13 @@ private:
578
578
  return addValNode(nullptr, node, i);
579
579
  }
580
580
 
581
+ NodeID addArgValNode(NodeID i, u32_t argNo, const ICFGNode* icfgNode, const CallGraphNode* callGraphNode, bool isUncalled = false)
582
+ {
583
+ ArgValVar* node =
584
+ new ArgValVar(i, argNo, icfgNode, callGraphNode, isUncalled);
585
+ return addValNode(nullptr, node, i);
586
+ }
587
+
581
588
  inline NodeID addConstantFPValNode(const SVFValue* curInst, double dval, const NodeID i,
582
589
  const ICFGNode* icfgNode)
583
590
  {
@@ -133,11 +133,6 @@ public:
133
133
  {
134
134
  return inst->getParent()->getParent();
135
135
  }
136
- // For function arguments, return their parent function
137
- else if (auto arg = SVFUtil::dyn_cast<SVFArgument>(value))
138
- {
139
- return arg->getParent();
140
- }
141
136
  }
142
137
 
143
138
  // Return nullptr for globals/constants with no parent function
@@ -388,6 +383,83 @@ public:
388
383
  };
389
384
 
390
385
 
386
+ /**
387
+ * @brief Class representing a function argument variable in the SVFIR
388
+ *
389
+ * This class models function argument in the program analysis. It extends ValVar
390
+ * to specifically handle function argument.
391
+ */
392
+ class ArgValVar: public ValVar
393
+ {
394
+ friend class SVFIRWriter;
395
+ friend class SVFIRReader;
396
+
397
+ private:
398
+ const CallGraphNode* cgNode;
399
+ u32_t argNo;
400
+ bool uncalled;
401
+
402
+ protected:
403
+ /// Constructor to create function argument (for SVFIRReader/deserialization)
404
+ ArgValVar(NodeID i, PNODEK ty = ArgNode) : ValVar(i, ty) {}
405
+
406
+ public:
407
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
408
+ //@{
409
+ static inline bool classof(const ArgValVar*)
410
+ {
411
+ return true;
412
+ }
413
+ static inline bool classof(const ValVar* node)
414
+ {
415
+ return node->getNodeKind() == ArgNode;
416
+ }
417
+ static inline bool classof(const SVFVar* node)
418
+ {
419
+ return node->getNodeKind() == ArgNode;
420
+ }
421
+ static inline bool classof(const GenericPAGNodeTy* node)
422
+ {
423
+ return node->getNodeKind() == ArgNode;
424
+ }
425
+ static inline bool classof(const SVFBaseNode* node)
426
+ {
427
+ return node->getNodeKind() == ArgNode;
428
+ }
429
+ //@}
430
+
431
+ /// Constructor
432
+ ArgValVar(NodeID i, u32_t argNo, const ICFGNode* icn, const CallGraphNode* callGraphNode,
433
+ bool isUncalled = false, PNODEK ty = ArgNode);
434
+
435
+ /// Return name of a LLVM value
436
+ inline const std::string getValueName() const
437
+ {
438
+ if (value)
439
+ return value->getName() + " (argument valvar)";
440
+ return " (argument valvar)";
441
+ }
442
+
443
+ virtual const SVFFunction* getFunction() const;
444
+
445
+ const SVFFunction* getParent() const;
446
+
447
+ /// Return the index of this formal argument in its containing function.
448
+ /// For example in "void foo(int a, float b)" a is 0 and b is 1.
449
+ inline u32_t getArgNo() const
450
+ {
451
+ return argNo;
452
+ }
453
+
454
+ inline bool isArgOfUncalledFunction() const
455
+ {
456
+ return uncalled;
457
+ }
458
+
459
+ virtual const std::string toString() const;
460
+ };
461
+
462
+
391
463
  /*
392
464
  * Gep Value (Pointer) variable, this variable can be dynamic generated for field sensitive analysis
393
465
  * e.g. memcpy, temp gep value variable needs to be created
@@ -351,6 +351,8 @@ inline bool isArgOfUncalledFunction(const SVFValue* svfval)
351
351
  return false;
352
352
  }
353
353
 
354
+ bool isArgOfUncalledFunction(const SVFVar* svfvar);
355
+
354
356
  const ObjVar* getObjVarOfValVar(const ValVar* valVar);
355
357
 
356
358
  /// Return thread fork function
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-lib",
3
- "version": "1.0.2177",
3
+ "version": "1.0.2179",
4
4
  "description": "SVF's npm support",
5
5
  "main": "index.js",
6
6
  "scripts": {