svf-lib 1.0.1732 → 1.0.1733

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.
@@ -54,10 +54,6 @@ public:
54
54
 
55
55
  static ConsExeState globalConsES;
56
56
 
57
- protected:
58
- VarToValMap _varToVal;
59
- LocToValMap _locToVal;
60
-
61
57
  public:
62
58
  ConsExeState(): ExeState(ExeState::SingleValueK) {}
63
59
 
@@ -100,8 +96,7 @@ public:
100
96
 
101
97
  using ExeState::operator==;
102
98
  using ExeState::operator!=;
103
- /// Exposed APIs
104
- //{%
99
+
105
100
  bool operator==(const ConsExeState &rhs) const;
106
101
 
107
102
  bool operator!=(const ConsExeState &other) const
@@ -113,113 +108,141 @@ public:
113
108
 
114
109
  u32_t hash() const override;
115
110
 
116
- /// Merge rhs into this
117
- bool joinWith(const ConsExeState &rhs);
111
+ protected:
118
112
 
119
- /// Build global execution state
120
- void buildGlobES(ConsExeState &globES, Set<u32_t> &vars);
113
+ VarToValMap _varToVal; ///< Map a variable (symbol) to its constant value
114
+ LocToValMap _locToVal; ///< Map a memory address to its stored constant value
121
115
 
122
- /// Update symbolic states based on the summary/side-effect of callee
123
- void applySummary(const ConsExeState &summary);
116
+ public:
124
117
 
125
- /// Whether state is null state (uninitialized state)
126
- inline bool isNullState() const
118
+ /// get memory addresses of variable
119
+ virtual Addrs &getAddrs(u32_t id) override
127
120
  {
128
- return _varToVal.size() == 1 && eq((*_varToVal.begin()).second, -1) && _locToVal.empty();
121
+ auto it = globalConsES._varToAddrs.find(id);
122
+ if (it != globalConsES._varToAddrs.end()) return it->second;
123
+ return _varToAddrs[id];
129
124
  }
130
125
 
131
- /// Print values of all expressions
132
- void printExprValues() const;
133
-
134
- /// Print values of all expressions
135
- void printExprValues(std::ostream &oss) const override;
136
-
137
- std::string toString() const override;
138
-
139
- std::string pcToString() const;
140
-
141
- std::string varToString(u32_t varId) const;
142
-
143
- std::string locToString(u32_t objId) const;
144
-
145
- bool applySelect(u32_t res, u32_t cond, u32_t top, u32_t fop);
126
+ /// get constant value of variable
127
+ inline SingleAbsValue &operator[](u32_t varId)
128
+ {
129
+ auto it = globalConsES._varToVal.find(varId);
130
+ if (it != globalConsES._varToVal.end())
131
+ return it->second;
132
+ else
133
+ return _varToVal[varId];
134
+ }
146
135
 
147
- bool applyPhi(u32_t res, std::vector<u32_t> &ops);
136
+ /// whether the variable is in varToAddrs table
137
+ virtual inline bool inVarToAddrsTable(u32_t id) const override
138
+ {
139
+ return _varToAddrs.find(id) != _varToAddrs.end() ||
140
+ globalConsES._varToAddrs.find(id) != globalConsES._varToAddrs.end();
141
+ }
148
142
 
149
- inline bool inVarToVal(u32_t varId) const
143
+ /// whether the variable is in varToVal table
144
+ inline bool inVarToValTable(u32_t varId) const
150
145
  {
151
146
  return _varToVal.count(varId) || globalConsES._varToVal.count(varId);
152
147
  }
153
148
 
154
- inline bool inLocalLocToVal(const SingleAbsValue &loc) const
149
+ /// whether the memory address stores memory addresses
150
+ virtual inline bool inLocToAddrsTable(u32_t id) const override
155
151
  {
156
- assert(loc.is_numeral() && "location must be numeral");
157
- s32_t virAddr = z3Expr2NumValue(loc);
158
- assert(isVirtualMemAddress(virAddr) && "Pointer operand is not a physical address?");
159
- u32_t objId = getInternalID(virAddr);
160
- assert(getInternalID(objId) == objId && "SVFVar idx overflow > 0x7f000000?");
161
- return inLocalLocToVal(objId);
152
+ return globalConsES._locToAddrs.find(id) != globalConsES._locToAddrs.end() || inLocalLocToAddrsTable(id);
162
153
  }
163
154
 
164
- inline bool inLocalLocToVal(u32_t varId) const
155
+ /// whether the memory address stores constant value
156
+ inline bool inLocToValTable(u32_t varId) const
165
157
  {
166
- return _locToVal.count(varId);
158
+ return inLocalLocToValTable(varId) || globalConsES._locToVal.count(varId);
167
159
  }
168
160
 
169
- inline bool inLocToVal(u32_t varId) const
161
+ inline const VarToValMap &getVarToVal() const
170
162
  {
171
- return inLocalLocToVal(varId) || globalConsES._locToVal.count(varId);
163
+ return _varToVal;
172
164
  }
173
165
 
174
- inline bool equalVar(u32_t lhs, u32_t rhs)
166
+ inline const LocToValMap &getLocToVal() const
175
167
  {
176
- if (!inVarToVal(lhs) || !inVarToVal(rhs)) return false;
177
- return eq((*this)[lhs], (*this)[rhs]);
168
+ return _locToVal;
178
169
  }
179
- //%}
180
170
 
181
- virtual inline bool inVarToAddrsTable(u32_t id) const override
171
+ virtual inline bool inLocalLocToAddrsTable(u32_t id) const
182
172
  {
183
- return _varToVAddrs.find(id) != _varToVAddrs.end() ||
184
- globalConsES._varToVAddrs.find(id) != globalConsES._varToVAddrs.end();
173
+ return _locToAddrs.find(id) != _locToAddrs.end();
185
174
  }
186
175
 
187
- virtual inline bool inLocToAddrsTable(u32_t id) const override
176
+ inline bool inLocalLocToValTable(u32_t varId) const
188
177
  {
189
- return globalConsES._locToVAddrs.find(id) != globalConsES._locToVAddrs.end() || inLocalLocToAddrsTable(id);
178
+ return _locToVal.count(varId);
190
179
  }
191
180
 
192
- virtual inline bool inLocalLocToAddrsTable(u32_t id) const
181
+ inline bool inLocalLocToValTable(const SingleAbsValue& addr) const
193
182
  {
194
- return _locToVAddrs.find(id) != _locToVAddrs.end();
183
+ return _locToVal.count(getInternalID(addr.getNumeral()));
195
184
  }
196
185
 
197
- virtual VAddrs &getVAddrs(u32_t id) override
186
+ public:
187
+
188
+ /// Merge rhs into this
189
+ bool joinWith(const ConsExeState &rhs);
190
+
191
+ /// Build global execution state
192
+ void buildGlobES(ConsExeState &globES, Set<u32_t> &vars);
193
+
194
+ /// Update symbolic states based on the summary/side-effect of callee
195
+ void applySummary(const ConsExeState &summary);
196
+
197
+ inline bool equalVar(u32_t lhs, u32_t rhs)
198
198
  {
199
- auto it = globalConsES._varToVAddrs.find(id);
200
- if (it != globalConsES._varToVAddrs.end()) return it->second;
201
- return _varToVAddrs[id];
199
+ if (!inVarToValTable(lhs) || !inVarToValTable(rhs)) return false;
200
+ return eq((*this)[lhs], (*this)[rhs]);
202
201
  }
203
202
 
204
- virtual VAddrs &loadVAddrs(u32_t addr) override
203
+ /// Whether state is null state (uninitialized state)
204
+ inline bool isNullState() const
205
+ {
206
+ return _varToVal.size() == 1 && eq((*_varToVal.begin()).second, -1) && _locToVal.empty();
207
+ }
208
+
209
+ /// Print values of all expressions
210
+ void printExprValues() const;
211
+
212
+ /// Print values of all expressions
213
+ void printExprValues(std::ostream &oss) const override;
214
+
215
+ std::string toString() const override;
216
+
217
+ std::string pcToString() const;
218
+
219
+ std::string varToString(u32_t varId) const;
220
+
221
+ std::string locToString(u32_t objId) const;
222
+
223
+ bool applySelect(u32_t res, u32_t cond, u32_t top, u32_t fop);
224
+
225
+ bool applyPhi(u32_t res, std::vector<u32_t> &ops);
226
+
227
+ virtual Addrs &loadAddrs(u32_t addr) override
205
228
  {
206
229
  assert(isVirtualMemAddress(addr) && "not virtual address?");
207
230
  u32_t objId = getInternalID(addr);
208
- auto it = _locToVAddrs.find(objId);
209
- if (it != _locToVAddrs.end())
231
+ auto it = _locToAddrs.find(objId);
232
+ if (it != _locToAddrs.end())
210
233
  {
211
234
  return it->second;
212
235
  }
213
236
  else
214
237
  {
215
- auto globIt = globalConsES._locToVAddrs.find(objId);
216
- if (globIt != globalConsES._locToVAddrs.end())
238
+ auto globIt = globalConsES._locToAddrs.find(objId);
239
+ if (globIt != globalConsES._locToAddrs.end())
217
240
  {
218
241
  return globIt->second;
219
242
  }
220
243
  else
221
244
  {
222
- return getVAddrs(0);
245
+ return getAddrs(0);
223
246
  }
224
247
  }
225
248
  }
@@ -227,15 +250,15 @@ public:
227
250
  virtual std::string varToAddrs(u32_t varId) const override
228
251
  {
229
252
  std::stringstream exprName;
230
- auto it = _varToVAddrs.find(varId);
231
- if (it == _varToVAddrs.end())
253
+ auto it = _varToAddrs.find(varId);
254
+ if (it == _varToAddrs.end())
232
255
  {
233
- auto git = globalConsES._varToVAddrs.find(varId);
234
- if (git == globalConsES._varToVAddrs.end())
256
+ auto git = globalConsES._varToAddrs.find(varId);
257
+ if (git == globalConsES._varToAddrs.end())
235
258
  exprName << "Var not in varToAddrs!\n";
236
259
  else
237
260
  {
238
- const VAddrs &vaddrs = git->second;
261
+ const Addrs &vaddrs = git->second;
239
262
  if (vaddrs.size() == 1)
240
263
  {
241
264
  exprName << "addr: {" << std::dec << getInternalID(*vaddrs.begin()) << "}\n";
@@ -253,7 +276,7 @@ public:
253
276
  }
254
277
  else
255
278
  {
256
- const VAddrs &vaddrs = it->second;
279
+ const Addrs &vaddrs = it->second;
257
280
  if (vaddrs.size() == 1)
258
281
  {
259
282
  exprName << "addr: {" << std::dec << getInternalID(*vaddrs.begin()) << "}\n";
@@ -274,15 +297,15 @@ public:
274
297
  virtual std::string locToAddrs(u32_t objId) const override
275
298
  {
276
299
  std::stringstream exprName;
277
- auto it = _locToVAddrs.find(objId);
278
- if (it == _locToVAddrs.end())
300
+ auto it = _locToAddrs.find(objId);
301
+ if (it == _locToAddrs.end())
279
302
  {
280
- auto git = globalConsES._locToVAddrs.find(objId);
281
- if (git == globalConsES._locToVAddrs.end())
303
+ auto git = globalConsES._locToAddrs.find(objId);
304
+ if (git == globalConsES._locToAddrs.end())
282
305
  exprName << "Obj not in locToVal!\n";
283
306
  else
284
307
  {
285
- const VAddrs &vaddrs = git->second;
308
+ const Addrs &vaddrs = git->second;
286
309
  if (vaddrs.size() == 1)
287
310
  {
288
311
  exprName << "addr: {" << std::dec << getInternalID(*vaddrs.begin()) << "}\n";
@@ -300,7 +323,7 @@ public:
300
323
  }
301
324
  else
302
325
  {
303
- const VAddrs &vaddrs = it->second;
326
+ const Addrs &vaddrs = it->second;
304
327
  if (vaddrs.size() == 1)
305
328
  {
306
329
  exprName << "addr: {" << std::dec << getInternalID(*vaddrs.begin()) << "}\n";
@@ -337,20 +360,8 @@ public:
337
360
 
338
361
  public:
339
362
 
340
- inline const VarToValMap &getVarToVal() const
341
- {
342
- return _varToVal;
343
- }
344
-
345
- inline const LocToValMap &getLocToVal() const
346
- {
347
- return _locToVal;
348
- }
349
-
350
363
  s64_t getNumber(u32_t lhs);
351
364
 
352
- public:
353
-
354
365
  static inline SingleAbsValue getIntOneZ3Expr()
355
366
  {
356
367
  return getContext().int_val(1);
@@ -372,14 +383,6 @@ public:
372
383
  }
373
384
 
374
385
  public:
375
- inline SingleAbsValue &operator[](u32_t varId)
376
- {
377
- auto it = globalConsES._varToVal.find(varId);
378
- if (it != globalConsES._varToVal.end())
379
- return it->second;
380
- else
381
- return _varToVal[varId];
382
- }
383
386
 
384
387
  /// Store value to location
385
388
  bool store(const SingleAbsValue &loc, const SingleAbsValue &value);
@@ -48,9 +48,9 @@ class ExeState
48
48
 
49
49
  public:
50
50
 
51
- typedef AddressValue VAddrs;
52
- typedef Map<u32_t, VAddrs> VarToVAddrs;
53
- /// Execution state kind
51
+ typedef AddressValue Addrs;
52
+ typedef Map<u32_t, Addrs> VarToAddrs;
53
+ /// Execution state type
54
54
  enum ExeState_TYPE
55
55
  {
56
56
  IntervalK, SingleValueK
@@ -63,18 +63,18 @@ public:
63
63
 
64
64
  virtual ~ExeState() = default;
65
65
 
66
- ExeState(const ExeState &rhs) : _varToVAddrs(rhs._varToVAddrs),
67
- _locToVAddrs(rhs._locToVAddrs) {}
66
+ ExeState(const ExeState &rhs) : _varToAddrs(rhs._varToAddrs),
67
+ _locToAddrs(rhs._locToAddrs) {}
68
68
 
69
- ExeState(ExeState &&rhs) noexcept: _varToVAddrs(std::move(rhs._varToVAddrs)),
70
- _locToVAddrs(std::move(rhs._locToVAddrs)) {}
69
+ ExeState(ExeState &&rhs) noexcept: _varToAddrs(std::move(rhs._varToAddrs)),
70
+ _locToAddrs(std::move(rhs._locToAddrs)) {}
71
71
 
72
72
  ExeState &operator=(const ExeState &rhs)
73
73
  {
74
74
  if(*this != rhs)
75
75
  {
76
- _varToVAddrs = rhs._varToVAddrs;
77
- _locToVAddrs = rhs._locToVAddrs;
76
+ _varToAddrs = rhs._varToAddrs;
77
+ _locToAddrs = rhs._locToAddrs;
78
78
  }
79
79
  return *this;
80
80
  }
@@ -83,24 +83,47 @@ public:
83
83
  {
84
84
  if (this != &rhs)
85
85
  {
86
- _varToVAddrs = std::move(rhs._varToVAddrs);
87
- _locToVAddrs = std::move(rhs._locToVAddrs);
86
+ _varToAddrs = std::move(rhs._varToAddrs);
87
+ _locToAddrs = std::move(rhs._locToAddrs);
88
88
  }
89
89
  return *this;
90
90
  }
91
91
 
92
- virtual bool operator==(const ExeState &rhs) const;
92
+ protected:
93
+ VarToAddrs _varToAddrs{{0, getVirtualMemAddress(0)}}; ///< Map a variable (symbol) to its memory addresses
94
+ VarToAddrs _locToAddrs; ///< Map a memory address to its stored memory addresses
93
95
 
94
- inline virtual bool operator!=(const ExeState &rhs) const
96
+ public:
97
+
98
+ /// get memory addresses of variable
99
+ virtual Addrs &getAddrs(u32_t id)
95
100
  {
96
- return !(*this == rhs);
101
+ return _varToAddrs[id];
97
102
  }
98
103
 
99
- bool equals(const ExeState *other) const
104
+ /// whether the variable is in varToAddrs table
105
+ inline virtual bool inVarToAddrsTable(u32_t id) const
100
106
  {
101
- return false;
107
+ return _varToAddrs.find(id) != _varToAddrs.end();
108
+ }
109
+
110
+ /// whether the memory address stores memory addresses
111
+ inline virtual bool inLocToAddrsTable(u32_t id) const
112
+ {
113
+ return _locToAddrs.find(id) != _locToAddrs.end();
102
114
  }
103
115
 
116
+ inline virtual const VarToAddrs &getVarToAddrs() const
117
+ {
118
+ return _varToAddrs;
119
+ }
120
+
121
+ inline virtual const VarToAddrs &getLocToAddrs() const
122
+ {
123
+ return _locToAddrs;
124
+ }
125
+
126
+ public:
104
127
  /// Make all value join with the other
105
128
  bool joinWith(const ExeState &other);
106
129
 
@@ -122,44 +145,20 @@ public:
122
145
  return _kind;
123
146
  }
124
147
 
125
- inline virtual const VarToVAddrs &getVarToVAddrs() const
126
- {
127
- return _varToVAddrs;
128
- }
129
-
130
- inline virtual const VarToVAddrs &getLocToVAddrs() const
131
- {
132
- return _locToVAddrs;
133
- }
134
-
135
- inline virtual bool inVarToAddrsTable(u32_t id) const
136
- {
137
- return _varToVAddrs.find(id) != _varToVAddrs.end();
138
- }
139
-
140
- inline virtual bool inLocToAddrsTable(u32_t id) const
141
- {
142
- return _locToVAddrs.find(id) != _locToVAddrs.end();
143
- }
144
-
145
- virtual VAddrs &getVAddrs(u32_t id)
146
- {
147
- return _varToVAddrs[id];
148
- }
149
-
150
- inline virtual void storeVAddrs(u32_t addr, const VAddrs &vaddrs)
148
+ public:
149
+ inline virtual void storeAddrs(u32_t addr, const Addrs &vaddrs)
151
150
  {
152
151
  assert(isVirtualMemAddress(addr) && "not virtual address?");
153
152
  if(isNullPtr(addr)) return;
154
153
  u32_t objId = getInternalID(addr);
155
- _locToVAddrs[objId] = vaddrs;
154
+ _locToAddrs[objId] = vaddrs;
156
155
  }
157
156
 
158
- inline virtual VAddrs &loadVAddrs(u32_t addr)
157
+ inline virtual Addrs &loadAddrs(u32_t addr)
159
158
  {
160
159
  assert(isVirtualMemAddress(addr) && "not virtual address?");
161
160
  u32_t objId = getInternalID(addr);
162
- return _locToVAddrs[objId];
161
+ return _locToAddrs[objId];
163
162
  }
164
163
 
165
164
  inline bool isNullPtr(u32_t addr)
@@ -167,13 +166,23 @@ public:
167
166
  return getInternalID(addr) == 0;
168
167
  }
169
168
 
170
- protected:
171
- VarToVAddrs _varToVAddrs{{0, getVirtualMemAddress(0)}};
172
- VarToVAddrs _locToVAddrs;
169
+ public:
170
+
171
+ virtual bool operator==(const ExeState &rhs) const;
172
+
173
+ inline virtual bool operator!=(const ExeState &rhs) const
174
+ {
175
+ return !(*this == rhs);
176
+ }
177
+
178
+ bool equals(const ExeState *other) const
179
+ {
180
+ return false;
181
+ }
173
182
 
174
183
  protected:
175
184
 
176
- static bool eqVarToVAddrs(const VarToVAddrs &lhs, const VarToVAddrs &rhs)
185
+ static bool eqVarToAddrs(const VarToAddrs &lhs, const VarToAddrs &rhs)
177
186
  {
178
187
  if (lhs.size() != rhs.size()) return false;
179
188
  for (const auto &item: lhs)
@@ -194,14 +203,14 @@ public:
194
203
  virtual std::string varToAddrs(u32_t varId) const
195
204
  {
196
205
  std::stringstream exprName;
197
- auto it = _varToVAddrs.find(varId);
198
- if (it == _varToVAddrs.end())
206
+ auto it = _varToAddrs.find(varId);
207
+ if (it == _varToAddrs.end())
199
208
  {
200
209
  exprName << "Var not in varToAddrs!\n";
201
210
  }
202
211
  else
203
212
  {
204
- const VAddrs &vaddrs = it->second;
213
+ const Addrs &vaddrs = it->second;
205
214
  if (vaddrs.size() == 1)
206
215
  {
207
216
  exprName << "addr: {" << std::dec << getInternalID(*vaddrs.begin()) << "}\n";
@@ -222,14 +231,14 @@ public:
222
231
  virtual std::string locToAddrs(u32_t objId) const
223
232
  {
224
233
  std::stringstream exprName;
225
- auto it = _locToVAddrs.find(objId);
226
- if (it == _locToVAddrs.end())
234
+ auto it = _locToAddrs.find(objId);
235
+ if (it == _locToAddrs.end())
227
236
  {
228
237
  exprName << "Var not in varToAddrs!\n";
229
238
  }
230
239
  else
231
240
  {
232
- const VAddrs &vaddrs = it->second;
241
+ const Addrs &vaddrs = it->second;
233
242
  if (vaddrs.size() == 1)
234
243
  {
235
244
  exprName << "addr: {" << std::dec << getInternalID(*vaddrs.begin()) << "}\n";
@@ -63,17 +63,10 @@ public:
63
63
 
64
64
  static IntervalExeState globalES;
65
65
 
66
- protected:
67
- /// key: nodeID value: Domain Value
68
- VarToValMap _varToItvVal;
69
- /// key: nodeID value: Domain Value
70
- LocToValMap _locToItvVal;
71
-
72
66
  public:
73
- /// default constructor, default pc is true
67
+ /// default constructor
74
68
  IntervalExeState() : ExeState(ExeState::IntervalK) {}
75
69
 
76
- /// set path constraints, val2val and loc2val map
77
70
  IntervalExeState(VarToValMap &_varToValMap, LocToValMap &_locToValMap) : ExeState(ExeState::IntervalK),
78
71
  _varToItvVal(_varToValMap),
79
72
  _locToItvVal(_locToValMap) {}
@@ -85,7 +78,8 @@ public:
85
78
 
86
79
  }
87
80
 
88
- /// check two interval exe state are equal or not. _varToItvVal and _locToItvVal map should be equivalent
81
+ virtual ~IntervalExeState() = default;
82
+
89
83
  IntervalExeState &operator=(const IntervalExeState &rhs)
90
84
  {
91
85
  if (rhs != *this)
@@ -150,53 +144,63 @@ public:
150
144
  return inv;
151
145
  }
152
146
 
153
- VAddrs &getVAddrs(u32_t id) override
147
+ protected:
148
+
149
+ VarToValMap _varToItvVal; ///< Map a variable (symbol) to its interval value
150
+ LocToValMap _locToItvVal; ///< Map a memory address to its stored interval value
151
+
152
+ public:
153
+
154
+ /// get memory addresses of variable
155
+ Addrs &getAddrs(u32_t id) override
154
156
  {
155
- auto it = _varToVAddrs.find(id);
156
- if (it != _varToVAddrs.end())
157
+ auto it = _varToAddrs.find(id);
158
+ if (it != _varToAddrs.end())
157
159
  return it->second;
158
160
  else
159
- return globalES._varToVAddrs[id];
161
+ return globalES._varToAddrs[id];
160
162
  }
161
163
 
162
- inline bool inVarToIValTable(u32_t id) const
164
+ /// get interval value of variable
165
+ inline IntervalValue &operator[](u32_t varId)
163
166
  {
164
- return _varToItvVal.find(id) != _varToItvVal.end() ||
165
- globalES._varToItvVal.find(id) != globalES._varToItvVal.end();
167
+ auto localIt = _varToItvVal.find(varId);
168
+ if(localIt != _varToItvVal.end())
169
+ return localIt->second;
170
+ else
171
+ {
172
+ return globalES._varToItvVal[varId];
173
+ }
166
174
  }
167
175
 
176
+ /// whether the variable is in varToAddrs table
168
177
  inline bool inVarToAddrsTable(u32_t id) const override
169
178
  {
170
- return _varToVAddrs.find(id) != _varToVAddrs.end() ||
171
- globalES._varToVAddrs.find(id) != globalES._varToVAddrs.end();
179
+ return _varToAddrs.find(id) != _varToAddrs.end() ||
180
+ globalES._varToAddrs.find(id) != globalES._varToAddrs.end();
172
181
  }
173
182
 
174
- inline bool inLocToIValTable(u32_t id) const
183
+ /// whether the variable is in varToVal table
184
+ inline bool inVarToValTable(u32_t id) const
175
185
  {
176
- return _locToItvVal.find(id) != _locToItvVal.end() ||
177
- globalES._locToItvVal.find(id) != globalES._locToItvVal.end();
178
- }
179
-
180
- inline bool inLocalLocToIValTable(u32_t id) const
181
- {
182
- return _locToItvVal.find(id) != _locToItvVal.end();
186
+ return _varToItvVal.find(id) != _varToItvVal.end() ||
187
+ globalES._varToItvVal.find(id) != globalES._varToItvVal.end();
183
188
  }
184
189
 
190
+ /// whether the memory address stores memory addresses
185
191
  inline bool inLocToAddrsTable(u32_t id) const override
186
192
  {
187
- return _locToVAddrs.find(id) != _locToVAddrs.end() ||
188
- globalES._locToVAddrs.find(id) != globalES._locToVAddrs.end();
193
+ return _locToAddrs.find(id) != _locToAddrs.end() ||
194
+ globalES._locToAddrs.find(id) != globalES._locToAddrs.end();
189
195
  }
190
196
 
191
- inline bool inLocalLocToAddrsTable(u32_t id) const
197
+ /// whether the memory address stores interval value
198
+ inline bool inLocToValTable(u32_t id) const
192
199
  {
193
- return _locToVAddrs.find(id) != _locToVAddrs.end();
200
+ return _locToItvVal.find(id) != _locToItvVal.end() ||
201
+ globalES._locToItvVal.find(id) != globalES._locToItvVal.end();
194
202
  }
195
203
 
196
- bool equals(const IntervalExeState &other) const;
197
-
198
- virtual ~IntervalExeState() = default;
199
-
200
204
  /// get var2val map
201
205
  const VarToValMap &getVarToVal() const
202
206
  {
@@ -209,18 +213,18 @@ public:
209
213
  return _locToItvVal;
210
214
  }
211
215
 
212
- /// [], call getValueExpr()
213
- inline IntervalValue &operator[](u32_t varId)
216
+ inline bool inLocalLocToValTable(u32_t id) const
214
217
  {
215
- auto localIt = _varToItvVal.find(varId);
216
- if(localIt != _varToItvVal.end())
217
- return localIt->second;
218
- else
219
- {
220
- return globalES._varToItvVal[varId];
221
- }
218
+ return _locToItvVal.find(id) != _locToItvVal.end();
219
+ }
220
+
221
+ inline bool inLocalLocToAddrsTable(u32_t id) const
222
+ {
223
+ return _locToAddrs.find(id) != _locToAddrs.end();
222
224
  }
223
225
 
226
+ public:
227
+
224
228
  inline void cpyItvToLocal(u32_t varId)
225
229
  {
226
230
  auto localIt = _varToItvVal.find(varId);
@@ -316,24 +320,24 @@ public:
316
320
  }
317
321
  }
318
322
 
319
- inline VAddrs &loadVAddrs(u32_t addr) override
323
+ inline Addrs &loadAddrs(u32_t addr) override
320
324
  {
321
325
  assert(isVirtualMemAddress(addr) && "not virtual address?");
322
326
  u32_t objId = getInternalID(addr);
323
- auto it = _locToVAddrs.find(objId);
324
- if(it != _locToVAddrs.end())
327
+ auto it = _locToAddrs.find(objId);
328
+ if(it != _locToAddrs.end())
325
329
  return it->second;
326
330
  else
327
331
  {
328
- auto globIt = globalES._locToVAddrs.find(objId);
329
- if(globIt != globalES._locToVAddrs.end())
332
+ auto globIt = globalES._locToAddrs.find(objId);
333
+ if(globIt != globalES._locToAddrs.end())
330
334
  return globIt->second;
331
335
  else
332
- return _locToVAddrs[objId];
336
+ return _locToAddrs[objId];
333
337
  }
334
338
  }
335
339
 
336
- inline IntervalValue& getLocToItv(u32_t id)
340
+ inline IntervalValue& getLocToVal(u32_t id)
337
341
  {
338
342
  auto it = _locToItvVal.find(id);
339
343
  if(it != _locToItvVal.end())
@@ -348,18 +352,18 @@ public:
348
352
  }
349
353
  }
350
354
 
351
- inline VAddrs& getLocVAddrs(u32_t id)
355
+ inline Addrs& getLocAddrs(u32_t id)
352
356
  {
353
- auto it = _locToVAddrs.find(id);
354
- if(it != _locToVAddrs.end())
357
+ auto it = _locToAddrs.find(id);
358
+ if(it != _locToAddrs.end())
355
359
  return it->second;
356
360
  else
357
361
  {
358
- auto globIt = globalES._locToVAddrs.find(id);
359
- if(globIt != globalES._locToVAddrs.end())
362
+ auto globIt = globalES._locToAddrs.find(id);
363
+ if(globIt != globalES._locToAddrs.end())
360
364
  return globIt->second;
361
365
  else
362
- return _locToVAddrs[id];
366
+ return _locToAddrs[id];
363
367
  }
364
368
  }
365
369
 
@@ -371,6 +375,8 @@ public:
371
375
  return "";
372
376
  }
373
377
 
378
+ bool equals(const IntervalExeState &other) const;
379
+
374
380
  static bool eqVarToValMap(const VarToValMap &lhs, const VarToValMap &rhs)
375
381
  {
376
382
  if (lhs.size() != rhs.size()) return false;
@@ -441,14 +447,14 @@ public:
441
447
  {
442
448
  _locToItvVal.clear();
443
449
  _varToItvVal.clear();
444
- _locToVAddrs.clear();
445
- _varToVAddrs.clear();
450
+ _locToAddrs.clear();
451
+ _varToAddrs.clear();
446
452
  }
447
453
 
448
454
  private:
449
455
  void printTable(const VarToValMap &table, std::ostream &oss) const;
450
456
 
451
- void printTable(const VarToVAddrs &table, std::ostream &oss) const;
457
+ void printTable(const VarToAddrs &table, std::ostream &oss) const;
452
458
  };
453
459
  }
454
460
 
@@ -35,7 +35,7 @@ namespace SVF
35
35
  class SVFIR2ConsExeState
36
36
  {
37
37
  public:
38
- typedef ExeState::VAddrs VAddrs;
38
+ typedef ExeState::Addrs Addrs;
39
39
 
40
40
  SVFIR2ConsExeState() = default;
41
41
 
@@ -89,7 +89,7 @@ public:
89
89
  //%}
90
90
 
91
91
  /// Return the expr of gep object given a base and offset
92
- VAddrs getGepObjAddress(u32_t base, s32_t offset);
92
+ Addrs getGepObjAddress(u32_t base, s32_t offset);
93
93
 
94
94
  /// Return the offset expression of a GepStmt
95
95
  std::pair<s32_t, s32_t> getGepOffset(const GepStmt *gep);
@@ -123,17 +123,17 @@ public:
123
123
 
124
124
  inline bool inVarToValTable(u32_t id) const
125
125
  {
126
- return _es->inVarToVal(id);
126
+ return _es->inVarToValTable(id);
127
127
  }
128
128
 
129
- inline bool inLocToValTable(u32_t id) const
129
+ inline bool inVarToAddrsTable(u32_t id) const
130
130
  {
131
- return _es->inLocToVal(id);
131
+ return _es->inVarToAddrsTable(id);
132
132
  }
133
133
 
134
- inline bool inVarToAddrsTable(u32_t id) const
134
+ inline bool inLocToValTable(u32_t id) const
135
135
  {
136
- return _es->inVarToAddrsTable(id);
136
+ return _es->inLocToValTable(id);
137
137
  }
138
138
 
139
139
  inline bool inLocToAddrsTable(u32_t id) const
@@ -41,8 +41,8 @@ namespace SVF
41
41
  class SVFIR2ItvExeState
42
42
  {
43
43
  public:
44
- typedef ExeState::VAddrs VAddrs;
45
- static VAddrs globalNullVaddrs;
44
+ typedef ExeState::Addrs Addrs;
45
+ static Addrs globalNulladdrs;
46
46
  public:
47
47
  SVFIR2ItvExeState(SVFIR *ir) : _svfir(ir) {}
48
48
 
@@ -66,12 +66,12 @@ public:
66
66
  return _relEs;
67
67
  }
68
68
 
69
- void widenVAddrs(IntervalExeState &lhs, const IntervalExeState &rhs);
69
+ void widenAddrs(IntervalExeState &lhs, const IntervalExeState &rhs);
70
70
 
71
- void narrowVAddrs(IntervalExeState &lhs, const IntervalExeState &rhs);
71
+ void narrowAddrs(IntervalExeState &lhs, const IntervalExeState &rhs);
72
72
 
73
73
  /// Return the field address given a pointer points to a struct object and an offset
74
- VAddrs getGepObjAddress(u32_t pointer, APOffset offset);
74
+ Addrs getGepObjAddress(u32_t pointer, APOffset offset);
75
75
 
76
76
  /// Return the value range of Integer SVF Type, e.g. unsigned i8 Type->[0, 255], signed i8 Type->[-128, 127]
77
77
  IntervalValue getRangeLimitFromType(const SVFType* type);
@@ -102,29 +102,33 @@ public:
102
102
  /// Init SVFVar
103
103
  void initSVFVar(u32_t varId);
104
104
 
105
- inline VAddrs &getVAddrs(u32_t id)
105
+ inline Addrs &getAddrs(u32_t id)
106
106
  {
107
107
  if (inVarToAddrsTable(id))
108
- return _es.getVAddrs(id);
108
+ return _es.getAddrs(id);
109
109
  else
110
- return globalNullVaddrs;
110
+ return globalNulladdrs;
111
111
  }
112
112
 
113
- inline bool inVarToIValTable(u32_t id) const
113
+ /// whether the variable is in varToVal table
114
+ inline bool inVarToValTable(u32_t id) const
114
115
  {
115
- return _es.inVarToIValTable(id);
116
+ return _es.inVarToValTable(id);
116
117
  }
117
118
 
118
- inline bool inLocToIValTable(u32_t id) const
119
+ /// whether the variable is in varToAddrs table
120
+ inline bool inVarToAddrsTable(u32_t id) const
119
121
  {
120
- return _es.inLocToIValTable(id);
122
+ return _es.inVarToAddrsTable(id);
121
123
  }
122
124
 
123
- inline bool inVarToAddrsTable(u32_t id) const
125
+ /// whether the memory address stores a interval value
126
+ inline bool inLocToValTable(u32_t id) const
124
127
  {
125
- return _es.inVarToAddrsTable(id);
128
+ return _es.inLocToValTable(id);
126
129
  }
127
130
 
131
+ /// whether the memory address stores memory addresses
128
132
  inline bool inLocToAddrsTable(u32_t id) const
129
133
  {
130
134
  return _es.inLocToAddrsTable(id);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-lib",
3
- "version": "1.0.1732",
3
+ "version": "1.0.1733",
4
4
  "description": "SVF's npm support",
5
5
  "main": "index.js",
6
6
  "scripts": {