svf-lib 1.0.1933 → 1.0.1935
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/Release-build/bin/ae +0 -0
- package/SVF-linux/Release-build/include/AE/Svfexe/AbstractInterpretation.h +1 -1
- package/SVF-linux/Release-build/include/AE/Svfexe/SVFIR2AbsState.h +1 -1
- package/SVF-linux/Release-build/lib/libSvfCore.a +0 -0
- package/SVF-osx/Release-build/bin/ae +0 -0
- package/SVF-osx/Release-build/include/AE/Core/AbstractState.h +23 -24
- package/SVF-osx/Release-build/include/AE/Core/RelExeState.h +10 -11
- package/SVF-osx/Release-build/include/AE/Svfexe/AbstractInterpretation.h +2 -2
- package/SVF-osx/Release-build/lib/cmake/SVF/SVFConfig.cmake +10 -10
- 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
|
|
@@ -342,7 +342,7 @@ protected:
|
|
|
342
342
|
SVFIR* _svfir;
|
|
343
343
|
PTACallGraph* _callgraph;
|
|
344
344
|
/// Execution State, used to store the Interval Value of every SVF variable
|
|
345
|
-
SVFIR2AbsState*
|
|
345
|
+
SVFIR2AbsState* _svfir2AbsState;
|
|
346
346
|
AEAPI* _api{nullptr};
|
|
347
347
|
|
|
348
348
|
ICFG* _icfg;
|
|
Binary file
|
|
Binary file
|
|
@@ -58,7 +58,7 @@ class AbstractState
|
|
|
58
58
|
public:
|
|
59
59
|
typedef Map<u32_t, AbstractValue> VarToAbsValMap;
|
|
60
60
|
|
|
61
|
-
typedef VarToAbsValMap
|
|
61
|
+
typedef VarToAbsValMap AddrToAbsValMap;
|
|
62
62
|
|
|
63
63
|
public:
|
|
64
64
|
/// default constructor
|
|
@@ -66,12 +66,10 @@ public:
|
|
|
66
66
|
{
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
AbstractState(VarToAbsValMap&_varToValMap,
|
|
70
|
-
_locToAbsVal(_locToValMap) {}
|
|
69
|
+
AbstractState(VarToAbsValMap&_varToValMap, AddrToAbsValMap&_locToValMap) : _varToAbsVal(_varToValMap), _addrToAbsVal(_locToValMap) {}
|
|
71
70
|
|
|
72
71
|
/// copy constructor
|
|
73
|
-
AbstractState(const AbstractState&rhs) : _varToAbsVal(rhs.getVarToVal()),
|
|
74
|
-
_locToAbsVal(rhs.getLocToVal())
|
|
72
|
+
AbstractState(const AbstractState&rhs) : _varToAbsVal(rhs.getVarToVal()), _addrToAbsVal(rhs.getLocToVal())
|
|
75
73
|
{
|
|
76
74
|
|
|
77
75
|
}
|
|
@@ -107,14 +105,14 @@ public:
|
|
|
107
105
|
if (rhs != *this)
|
|
108
106
|
{
|
|
109
107
|
_varToAbsVal = rhs._varToAbsVal;
|
|
110
|
-
|
|
108
|
+
_addrToAbsVal = rhs._addrToAbsVal;
|
|
111
109
|
}
|
|
112
110
|
return *this;
|
|
113
111
|
}
|
|
114
112
|
|
|
115
113
|
/// move constructor
|
|
116
114
|
AbstractState(AbstractState&&rhs) : _varToAbsVal(std::move(rhs._varToAbsVal)),
|
|
117
|
-
|
|
115
|
+
_addrToAbsVal(std::move(rhs._addrToAbsVal))
|
|
118
116
|
{
|
|
119
117
|
|
|
120
118
|
}
|
|
@@ -125,7 +123,7 @@ public:
|
|
|
125
123
|
if (&rhs != this)
|
|
126
124
|
{
|
|
127
125
|
_varToAbsVal = std::move(rhs._varToAbsVal);
|
|
128
|
-
|
|
126
|
+
_addrToAbsVal = std::move(rhs._addrToAbsVal);
|
|
129
127
|
}
|
|
130
128
|
return *this;
|
|
131
129
|
}
|
|
@@ -167,7 +165,8 @@ public:
|
|
|
167
165
|
|
|
168
166
|
protected:
|
|
169
167
|
VarToAbsValMap _varToAbsVal; ///< Map a variable (symbol) to its abstract value
|
|
170
|
-
|
|
168
|
+
AddrToAbsValMap
|
|
169
|
+
_addrToAbsVal; ///< Map a memory address to its stored abstract value
|
|
171
170
|
|
|
172
171
|
public:
|
|
173
172
|
|
|
@@ -227,9 +226,9 @@ public:
|
|
|
227
226
|
/// whether the memory address stores memory addresses
|
|
228
227
|
inline bool inLocToAddrsTable(u32_t id) const
|
|
229
228
|
{
|
|
230
|
-
if (
|
|
229
|
+
if (_addrToAbsVal.find(id)!= _addrToAbsVal.end())
|
|
231
230
|
{
|
|
232
|
-
if (
|
|
231
|
+
if (_addrToAbsVal.at(id).isAddr())
|
|
233
232
|
{
|
|
234
233
|
return true;
|
|
235
234
|
}
|
|
@@ -240,9 +239,9 @@ public:
|
|
|
240
239
|
/// whether the memory address stores abstract value
|
|
241
240
|
inline virtual bool inLocToValTable(u32_t id) const
|
|
242
241
|
{
|
|
243
|
-
if (
|
|
242
|
+
if (_addrToAbsVal.find(id) != _addrToAbsVal.end())
|
|
244
243
|
{
|
|
245
|
-
if (
|
|
244
|
+
if (_addrToAbsVal.at(id).isInterval())
|
|
246
245
|
{
|
|
247
246
|
return true;
|
|
248
247
|
}
|
|
@@ -257,9 +256,9 @@ public:
|
|
|
257
256
|
}
|
|
258
257
|
|
|
259
258
|
/// get loc2val map
|
|
260
|
-
const
|
|
259
|
+
const AddrToAbsValMap&getLocToVal() const
|
|
261
260
|
{
|
|
262
|
-
return
|
|
261
|
+
return _addrToAbsVal;
|
|
263
262
|
}
|
|
264
263
|
|
|
265
264
|
public:
|
|
@@ -303,7 +302,7 @@ public:
|
|
|
303
302
|
}
|
|
304
303
|
}
|
|
305
304
|
}
|
|
306
|
-
for (auto it =
|
|
305
|
+
for (auto it = _addrToAbsVal.begin(); it != _addrToAbsVal.end(); ++it)
|
|
307
306
|
{
|
|
308
307
|
if (it->second.isInterval())
|
|
309
308
|
{
|
|
@@ -324,20 +323,20 @@ public:
|
|
|
324
323
|
assert(isVirtualMemAddress(addr) && "not virtual address?");
|
|
325
324
|
if (isNullPtr(addr)) return;
|
|
326
325
|
u32_t objId = getInternalID(addr);
|
|
327
|
-
|
|
326
|
+
_addrToAbsVal[objId] = val;
|
|
328
327
|
}
|
|
329
328
|
|
|
330
329
|
inline virtual AbstractValue &load(u32_t addr)
|
|
331
330
|
{
|
|
332
331
|
assert(isVirtualMemAddress(addr) && "not virtual address?");
|
|
333
332
|
u32_t objId = getInternalID(addr);
|
|
334
|
-
auto it =
|
|
335
|
-
if(it !=
|
|
333
|
+
auto it = _addrToAbsVal.find(objId);
|
|
334
|
+
if(it != _addrToAbsVal.end())
|
|
336
335
|
return it->second;
|
|
337
336
|
else
|
|
338
337
|
{
|
|
339
|
-
|
|
340
|
-
return
|
|
338
|
+
_addrToAbsVal[objId] = IntervalValue::top();
|
|
339
|
+
return _addrToAbsVal[objId];
|
|
341
340
|
}
|
|
342
341
|
}
|
|
343
342
|
|
|
@@ -421,7 +420,7 @@ public:
|
|
|
421
420
|
bool operator==(const AbstractState&rhs) const
|
|
422
421
|
{
|
|
423
422
|
return eqVarToValMap(_varToAbsVal, rhs.getVarToVal()) &&
|
|
424
|
-
eqVarToValMap(
|
|
423
|
+
eqVarToValMap(_addrToAbsVal, rhs.getLocToVal());
|
|
425
424
|
}
|
|
426
425
|
|
|
427
426
|
bool operator!=(const AbstractState&rhs) const
|
|
@@ -437,12 +436,12 @@ public:
|
|
|
437
436
|
|
|
438
437
|
bool operator>=(const AbstractState&rhs) const
|
|
439
438
|
{
|
|
440
|
-
return geqVarToValMap(_varToAbsVal, rhs.getVarToVal()) && geqVarToValMap(
|
|
439
|
+
return geqVarToValMap(_varToAbsVal, rhs.getVarToVal()) && geqVarToValMap(_addrToAbsVal, rhs.getLocToVal());
|
|
441
440
|
}
|
|
442
441
|
|
|
443
442
|
void clear()
|
|
444
443
|
{
|
|
445
|
-
|
|
444
|
+
_addrToAbsVal.clear();
|
|
446
445
|
_varToAbsVal.clear();
|
|
447
446
|
}
|
|
448
447
|
|
|
@@ -42,19 +42,18 @@ class RelExeState
|
|
|
42
42
|
|
|
43
43
|
public:
|
|
44
44
|
typedef Map<u32_t, Z3Expr> VarToValMap;
|
|
45
|
-
typedef VarToValMap
|
|
45
|
+
typedef VarToValMap AddrToValMap;
|
|
46
46
|
|
|
47
47
|
protected:
|
|
48
48
|
VarToValMap _varToVal;
|
|
49
|
-
|
|
49
|
+
AddrToValMap _addrToVal;
|
|
50
50
|
|
|
51
51
|
public:
|
|
52
52
|
RelExeState() = default;
|
|
53
53
|
|
|
54
|
-
RelExeState(VarToValMap &varToVal,
|
|
55
|
-
_locToVal(locToVal) {}
|
|
54
|
+
RelExeState(VarToValMap &varToVal, AddrToValMap&locToVal) : _varToVal(varToVal), _addrToVal(locToVal) {}
|
|
56
55
|
|
|
57
|
-
RelExeState(const RelExeState &rhs) : _varToVal(rhs.getVarToVal()),
|
|
56
|
+
RelExeState(const RelExeState &rhs) : _varToVal(rhs.getVarToVal()), _addrToVal(rhs.getLocToVal())
|
|
58
57
|
{
|
|
59
58
|
|
|
60
59
|
}
|
|
@@ -64,7 +63,7 @@ public:
|
|
|
64
63
|
RelExeState &operator=(const RelExeState &rhs);
|
|
65
64
|
|
|
66
65
|
RelExeState(RelExeState &&rhs) noexcept: _varToVal(std::move(rhs._varToVal)),
|
|
67
|
-
|
|
66
|
+
_addrToVal(std::move(rhs._addrToVal))
|
|
68
67
|
{
|
|
69
68
|
|
|
70
69
|
}
|
|
@@ -74,7 +73,7 @@ public:
|
|
|
74
73
|
if (&rhs != this)
|
|
75
74
|
{
|
|
76
75
|
_varToVal = std::move(rhs._varToVal);
|
|
77
|
-
|
|
76
|
+
_addrToVal = std::move(rhs._addrToVal);
|
|
78
77
|
}
|
|
79
78
|
return *this;
|
|
80
79
|
}
|
|
@@ -102,9 +101,9 @@ public:
|
|
|
102
101
|
return _varToVal;
|
|
103
102
|
}
|
|
104
103
|
|
|
105
|
-
const
|
|
104
|
+
const AddrToValMap&getLocToVal() const
|
|
106
105
|
{
|
|
107
|
-
return
|
|
106
|
+
return _addrToVal;
|
|
108
107
|
}
|
|
109
108
|
|
|
110
109
|
inline Z3Expr &operator[](u32_t varId)
|
|
@@ -203,12 +202,12 @@ private:
|
|
|
203
202
|
protected:
|
|
204
203
|
inline void store(u32_t objId, const Z3Expr &z3Expr)
|
|
205
204
|
{
|
|
206
|
-
|
|
205
|
+
_addrToVal[objId] = z3Expr.simplify();
|
|
207
206
|
}
|
|
208
207
|
|
|
209
208
|
inline Z3Expr &load(u32_t objId)
|
|
210
209
|
{
|
|
211
|
-
return
|
|
210
|
+
return _addrToVal[objId];
|
|
212
211
|
}
|
|
213
212
|
}; // end class RelExeState
|
|
214
213
|
} // end namespace SVF
|
|
@@ -143,10 +143,10 @@ protected:
|
|
|
143
143
|
/**
|
|
144
144
|
* Check if execution state exist by merging states of predecessor nodes
|
|
145
145
|
*
|
|
146
|
-
* @param
|
|
146
|
+
* @param curNode The ICFGNode to analyse
|
|
147
147
|
* @return if this node has preceding execution state
|
|
148
148
|
*/
|
|
149
|
-
bool
|
|
149
|
+
bool propagateStateIfFeasible(const ICFGNode* curNode);
|
|
150
150
|
|
|
151
151
|
/**
|
|
152
152
|
* Check if execution state exist at the branch edge
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
####### Any changes to this file will be overwritten by the next CMake run ####
|
|
4
4
|
####### The input file was .config.cmake.in ########
|
|
5
5
|
|
|
6
|
-
get_filename_component(
|
|
6
|
+
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
|
|
7
7
|
|
|
8
8
|
macro(set_and_check _var _file)
|
|
9
9
|
set(${_var} "${_file}")
|
|
@@ -24,23 +24,23 @@ endmacro()
|
|
|
24
24
|
|
|
25
25
|
####################################################################################
|
|
26
26
|
|
|
27
|
-
set_and_check(SVF_INSTALL_ROOT "${
|
|
28
|
-
set_and_check(SVF_INSTALL_BIN_DIR "${
|
|
29
|
-
set_and_check(SVF_INSTALL_LIB_DIR "${
|
|
27
|
+
set_and_check(SVF_INSTALL_ROOT "${PACKAGE_PREFIX_DIR}")
|
|
28
|
+
set_and_check(SVF_INSTALL_BIN_DIR "${PACKAGE_PREFIX_DIR}/bin")
|
|
29
|
+
set_and_check(SVF_INSTALL_LIB_DIR "${PACKAGE_PREFIX_DIR}/lib")
|
|
30
30
|
|
|
31
|
-
set(SVF_INCLUDE_PATH "${
|
|
32
|
-
set(SVF_LLVM_INCLUDE_PATH "${
|
|
31
|
+
set(SVF_INCLUDE_PATH "${PACKAGE_PREFIX_DIR}/../svf/include")
|
|
32
|
+
set(SVF_LLVM_INCLUDE_PATH "${PACKAGE_PREFIX_DIR}/../svf-llvm/include")
|
|
33
33
|
|
|
34
34
|
if(EXISTS ${SVF_INCLUDE_PATH} AND EXISTS ${SVF_LLVM_INCLUDE_PATH})
|
|
35
|
-
set(SVF_INSTALL_INCLUDE_DIR "${SVF_INCLUDE_PATH};${SVF_LLVM_INCLUDE_PATH};${
|
|
35
|
+
set(SVF_INSTALL_INCLUDE_DIR "${SVF_INCLUDE_PATH};${SVF_LLVM_INCLUDE_PATH};${PACKAGE_PREFIX_DIR}/include")
|
|
36
36
|
else()
|
|
37
|
-
set_and_check(SVF_INSTALL_INCLUDE_DIR "${
|
|
37
|
+
set_and_check(SVF_INSTALL_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/include")
|
|
38
38
|
endif()
|
|
39
39
|
|
|
40
40
|
message(STATUS "SVF_INSTALL_INCLUDE_DIR is set to: ${SVF_INSTALL_INCLUDE_DIR}")
|
|
41
41
|
|
|
42
|
-
set_and_check(SVF_INSTALL_EXTAPI_DIR "${
|
|
43
|
-
set_and_check(SVF_INSTALL_EXTAPI_FILE "${
|
|
42
|
+
set_and_check(SVF_INSTALL_EXTAPI_DIR "${PACKAGE_PREFIX_DIR}/lib")
|
|
43
|
+
set_and_check(SVF_INSTALL_EXTAPI_FILE "${PACKAGE_PREFIX_DIR}/lib/extapi.bc")
|
|
44
44
|
|
|
45
45
|
set(SVF_SANITIZE "")
|
|
46
46
|
|
|
Binary file
|
|
Binary file
|