svf-lib 1.0.2005 → 1.0.2006
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-osx/Release-build/bin/ae +0 -0
- package/SVF-osx/Release-build/bin/svf-ex +0 -0
- package/SVF-osx/Release-build/include/AE/Core/AbstractState.h +2 -2
- package/SVF-osx/Release-build/include/AE/Core/AbstractValue.h +13 -42
- package/SVF-osx/Release-build/include/AE/Core/AddressValue.h +3 -1
- package/SVF-osx/Release-build/include/AE/Core/RelExeState.h +2 -0
- package/SVF-osx/Release-build/include/AE/Svfexe/SVFIR2AbsState.h +11 -2
- package/SVF-osx/Release-build/lib/libSvfCore.a +0 -0
- package/SVF-osx/Release-build/lib/libSvfLLVM.a +0 -0
- package/package.json +1 -1
|
Binary file
|
|
Binary file
|
|
@@ -224,7 +224,7 @@ public:
|
|
|
224
224
|
}
|
|
225
225
|
|
|
226
226
|
/// whether the memory address stores memory addresses
|
|
227
|
-
inline bool
|
|
227
|
+
inline bool inAddrToAddrsTable(u32_t id) const
|
|
228
228
|
{
|
|
229
229
|
if (_addrToAbsVal.find(id)!= _addrToAbsVal.end())
|
|
230
230
|
{
|
|
@@ -237,7 +237,7 @@ public:
|
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
/// whether the memory address stores abstract value
|
|
240
|
-
inline virtual bool
|
|
240
|
+
inline virtual bool inAddrToValTable(u32_t id) const
|
|
241
241
|
{
|
|
242
242
|
if (_addrToAbsVal.find(id) != _addrToAbsVal.end())
|
|
243
243
|
{
|
|
@@ -39,7 +39,7 @@ public:
|
|
|
39
39
|
};
|
|
40
40
|
DataType type;
|
|
41
41
|
IntervalValue interval;
|
|
42
|
-
AddressValue
|
|
42
|
+
AddressValue addrs;
|
|
43
43
|
|
|
44
44
|
AbstractValue() : type(IntervalType)
|
|
45
45
|
{
|
|
@@ -53,7 +53,7 @@ public:
|
|
|
53
53
|
interval = IntervalValue::top();
|
|
54
54
|
break;
|
|
55
55
|
case AddressType:
|
|
56
|
-
|
|
56
|
+
addrs = AddressValue();
|
|
57
57
|
break;
|
|
58
58
|
case UnknownType:
|
|
59
59
|
break;
|
|
@@ -68,7 +68,7 @@ public:
|
|
|
68
68
|
interval = other.interval;
|
|
69
69
|
break;
|
|
70
70
|
case AddressType:
|
|
71
|
-
|
|
71
|
+
addrs = other.addrs;
|
|
72
72
|
break;
|
|
73
73
|
case UnknownType:
|
|
74
74
|
break;
|
|
@@ -101,7 +101,7 @@ public:
|
|
|
101
101
|
interval = other.interval;
|
|
102
102
|
break;
|
|
103
103
|
case AddressType:
|
|
104
|
-
|
|
104
|
+
addrs = other.addrs;
|
|
105
105
|
break;
|
|
106
106
|
case UnknownType:
|
|
107
107
|
break;
|
|
@@ -118,7 +118,7 @@ public:
|
|
|
118
118
|
interval = other.interval;
|
|
119
119
|
break;
|
|
120
120
|
case AddressType:
|
|
121
|
-
|
|
121
|
+
addrs = other.addrs;
|
|
122
122
|
break;
|
|
123
123
|
case UnknownType:
|
|
124
124
|
break;
|
|
@@ -136,38 +136,13 @@ public:
|
|
|
136
136
|
AbstractValue& operator=(const AddressValue& other)
|
|
137
137
|
{
|
|
138
138
|
type = AddressType;
|
|
139
|
-
|
|
139
|
+
addrs = other;
|
|
140
140
|
return *this;
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
AbstractValue operator==(const AbstractValue& other) const
|
|
144
|
-
{
|
|
145
|
-
assert(isInterval() && other.isInterval());
|
|
146
|
-
return interval == other.interval;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
AbstractValue operator==(const IntervalValue& other) const
|
|
150
|
-
{
|
|
151
|
-
assert(isInterval());
|
|
152
|
-
return interval == other;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
AbstractValue operator!=(const AbstractValue& other) const
|
|
156
|
-
{
|
|
157
|
-
assert(isInterval());
|
|
158
|
-
return interval != other.interval;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
AbstractValue operator!=(const IntervalValue& other) const
|
|
162
|
-
{
|
|
163
|
-
assert(isInterval());
|
|
164
|
-
return interval != other;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
|
|
168
143
|
AbstractValue(const IntervalValue& ival) : type(IntervalType), interval(ival) {}
|
|
169
144
|
|
|
170
|
-
AbstractValue(const AddressValue& addr) : type(AddressType),
|
|
145
|
+
AbstractValue(const AddressValue& addr) : type(AddressType), addrs(addr) {}
|
|
171
146
|
|
|
172
147
|
IntervalValue& getInterval()
|
|
173
148
|
{
|
|
@@ -175,26 +150,22 @@ public:
|
|
|
175
150
|
{
|
|
176
151
|
interval = IntervalValue::top();
|
|
177
152
|
}
|
|
178
|
-
assert(isInterval() && "Attempting to retrieve an AbstractValue that is not an Interval!");
|
|
179
153
|
return interval;
|
|
180
154
|
}
|
|
181
155
|
|
|
182
156
|
const IntervalValue getInterval() const
|
|
183
157
|
{
|
|
184
|
-
assert(isInterval() && "Attempting to retrieve an AbstractValue that is not an Interval!");
|
|
185
158
|
return interval;
|
|
186
159
|
}
|
|
187
160
|
|
|
188
161
|
AddressValue& getAddrs()
|
|
189
162
|
{
|
|
190
|
-
|
|
191
|
-
return addr;
|
|
163
|
+
return addrs;
|
|
192
164
|
}
|
|
193
165
|
|
|
194
166
|
const AddressValue getAddrs() const
|
|
195
167
|
{
|
|
196
|
-
|
|
197
|
-
return addr;
|
|
168
|
+
return addrs;
|
|
198
169
|
}
|
|
199
170
|
|
|
200
171
|
~AbstractValue() {};
|
|
@@ -211,7 +182,7 @@ public:
|
|
|
211
182
|
}
|
|
212
183
|
if (isAddr())
|
|
213
184
|
{
|
|
214
|
-
return
|
|
185
|
+
return addrs.equals(rhs.addrs);
|
|
215
186
|
}
|
|
216
187
|
return false;
|
|
217
188
|
}
|
|
@@ -233,7 +204,7 @@ public:
|
|
|
233
204
|
}
|
|
234
205
|
if (isAddr() && other.isAddr())
|
|
235
206
|
{
|
|
236
|
-
|
|
207
|
+
addrs.join_with(other.addrs);
|
|
237
208
|
}
|
|
238
209
|
return;
|
|
239
210
|
}
|
|
@@ -250,7 +221,7 @@ public:
|
|
|
250
221
|
}
|
|
251
222
|
if (isAddr() && other.isAddr())
|
|
252
223
|
{
|
|
253
|
-
|
|
224
|
+
addrs.meet_with(other.addrs);
|
|
254
225
|
}
|
|
255
226
|
return;
|
|
256
227
|
}
|
|
@@ -281,7 +252,7 @@ public:
|
|
|
281
252
|
}
|
|
282
253
|
else if (isAddr())
|
|
283
254
|
{
|
|
284
|
-
return
|
|
255
|
+
return addrs.toString();
|
|
285
256
|
}
|
|
286
257
|
return "";
|
|
287
258
|
}
|
|
@@ -211,13 +211,15 @@ public:
|
|
|
211
211
|
/// The physical address starts with 0x7f...... + idx
|
|
212
212
|
static inline u32_t getVirtualMemAddress(u32_t idx)
|
|
213
213
|
{
|
|
214
|
+
// 0 is the null address, should not be used as a virtual address
|
|
215
|
+
assert(idx != 0 && "idx can’t be 0 because it represents a nullptr");
|
|
214
216
|
return AddressMask + idx;
|
|
215
217
|
}
|
|
216
218
|
|
|
217
219
|
/// Check bit value of val start with 0x7F000000, filter by 0xFF000000
|
|
218
220
|
static inline bool isVirtualMemAddress(u32_t val)
|
|
219
221
|
{
|
|
220
|
-
return (val & 0xff000000) == AddressMask;
|
|
222
|
+
return (val & 0xff000000) == AddressMask && val != AddressMask + 0;
|
|
221
223
|
}
|
|
222
224
|
|
|
223
225
|
/// Return the internal index if idx is an address otherwise return the value of idx
|
|
@@ -175,6 +175,8 @@ public:
|
|
|
175
175
|
/// Check bit value of val start with 0x7F000000, filter by 0xFF000000
|
|
176
176
|
static inline bool isVirtualMemAddress(u32_t val)
|
|
177
177
|
{
|
|
178
|
+
if (val == 0)
|
|
179
|
+
assert(false && "val cannot be 0");
|
|
178
180
|
return AddressValue::isVirtualMemAddress(val);
|
|
179
181
|
}
|
|
180
182
|
|
|
@@ -109,6 +109,15 @@ public:
|
|
|
109
109
|
return globalNulladdrs;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
+
inline bool inVarTable(const AbstractState& es, u32_t id) const
|
|
113
|
+
{
|
|
114
|
+
return es.inVarToValTable(id) || es.inVarToAddrsTable(id);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
inline bool inAddrTable(const AbstractState& es, u32_t id) const
|
|
118
|
+
{
|
|
119
|
+
return es.inAddrToValTable(id) || es.inAddrToAddrsTable(id);
|
|
120
|
+
}
|
|
112
121
|
|
|
113
122
|
/// whether the variable is in varToVal table
|
|
114
123
|
inline bool inVarToValTable(const AbstractState& es, u32_t id) const
|
|
@@ -126,13 +135,13 @@ public:
|
|
|
126
135
|
/// whether the memory address stores a interval value
|
|
127
136
|
inline bool inLocToValTable(const AbstractState& es, u32_t id) const
|
|
128
137
|
{
|
|
129
|
-
return es.
|
|
138
|
+
return es.inAddrToValTable(id);
|
|
130
139
|
}
|
|
131
140
|
|
|
132
141
|
/// whether the memory address stores memory addresses
|
|
133
142
|
inline bool inLocToAddrsTable(const AbstractState& es, u32_t id) const
|
|
134
143
|
{
|
|
135
|
-
return es.
|
|
144
|
+
return es.inAddrToAddrsTable(id);
|
|
136
145
|
}
|
|
137
146
|
|
|
138
147
|
void handleAddr(AbstractState& es, const AddrStmt *addr);
|
|
Binary file
|
|
Binary file
|