svf-tools 1.0.664 → 1.0.665
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.665",
|
|
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": {
|
|
@@ -578,13 +578,13 @@ private:
|
|
|
578
578
|
/// Add a value (pointer) node
|
|
579
579
|
inline NodeID addValNode(const SVFValue*, SVFVar *node, NodeID i)
|
|
580
580
|
{
|
|
581
|
-
assert(hasGNode(i) == false && "This NodeID clashes here. Please check NodeIDAllocator. Switch Strategy::
|
|
581
|
+
assert(hasGNode(i) == false && "This NodeID clashes here. Please check NodeIDAllocator. Switch Strategy::DBUG to SEQ or DENSE");
|
|
582
582
|
return addNode(node,i);
|
|
583
583
|
}
|
|
584
584
|
/// Add a memory obj node
|
|
585
585
|
inline NodeID addObjNode(const SVFValue*, SVFVar *node, NodeID i)
|
|
586
586
|
{
|
|
587
|
-
assert(hasGNode(i) == false && "This NodeID clashes here. Please check NodeIDAllocator. Switch Strategy::
|
|
587
|
+
assert(hasGNode(i) == false && "This NodeID clashes here. Please check NodeIDAllocator. Switch Strategy::DBUG to SEQ or DENSE");
|
|
588
588
|
return addNode(node,i);
|
|
589
589
|
}
|
|
590
590
|
/// Add a unique return node for a procedure
|
|
@@ -429,7 +429,7 @@ template <> struct Hash<NodePair>
|
|
|
429
429
|
} while (false)
|
|
430
430
|
#endif
|
|
431
431
|
|
|
432
|
-
/// LLVM debug macros, define type of your
|
|
432
|
+
/// LLVM debug macros, define type of your DBUG model of each pass
|
|
433
433
|
#define DBOUT(TYPE, X) SVF_DEBUG_WITH_TYPE(TYPE, X)
|
|
434
434
|
#define DOSTAT(X) X
|
|
435
435
|
#define DOTIMESTAT(X) X
|
|
@@ -36,7 +36,7 @@ public:
|
|
|
36
36
|
/// GEP objects are allocated as an offset from their base (see implementation
|
|
37
37
|
/// of allocateGepObjectId). The purpose of this allocation strategy
|
|
38
38
|
/// is human readability.
|
|
39
|
-
|
|
39
|
+
DBUG,
|
|
40
40
|
};
|
|
41
41
|
|
|
42
42
|
/// These nodes, and any nodes before them are assumed allocated
|
|
@@ -61,8 +61,8 @@ public:
|
|
|
61
61
|
|
|
62
62
|
/// Allocate a GEP object ID as determined by the strategy.
|
|
63
63
|
/// allocateObjectId is still fine for GEP objects, but
|
|
64
|
-
/// for some strategies (
|
|
65
|
-
/// be allocated differently (more readable, for
|
|
64
|
+
/// for some strategies (DBUG, namely), GEP objects can
|
|
65
|
+
/// be allocated differently (more readable, for DBUG).
|
|
66
66
|
/// Regardless, numObjects is shared; there is no special
|
|
67
67
|
/// numGepObjects.
|
|
68
68
|
NodeID allocateGepObjectId(NodeID base, u32_t offset, u32_t maxFieldLimit);
|
|
@@ -64,7 +64,7 @@ NodeID NodeIDAllocator::allocateObjectId(void)
|
|
|
64
64
|
// Everything is sequential and intermixed.
|
|
65
65
|
id = numNodes;
|
|
66
66
|
}
|
|
67
|
-
else if (strategy == Strategy::
|
|
67
|
+
else if (strategy == Strategy::DBUG)
|
|
68
68
|
{
|
|
69
69
|
// Non-GEPs just grab the next available ID.
|
|
70
70
|
// We may have "holes" because GEPs increment the total
|
|
@@ -101,7 +101,7 @@ NodeID NodeIDAllocator::allocateGepObjectId(NodeID base, u32_t offset, u32_t max
|
|
|
101
101
|
// Everything is sequential and intermixed.
|
|
102
102
|
id = numNodes;
|
|
103
103
|
}
|
|
104
|
-
else if (strategy == Strategy::
|
|
104
|
+
else if (strategy == Strategy::DBUG)
|
|
105
105
|
{
|
|
106
106
|
// For a gep id, base id is set at lower bits, and offset is set at higher bits
|
|
107
107
|
// e.g., 1100050 denotes base=50 and offset=10
|
|
@@ -146,7 +146,7 @@ NodeID NodeIDAllocator::allocateValueId(void)
|
|
|
146
146
|
// Everything is sequential and intermixed.
|
|
147
147
|
id = numNodes;
|
|
148
148
|
}
|
|
149
|
-
else if (strategy == Strategy::
|
|
149
|
+
else if (strategy == Strategy::DBUG)
|
|
150
150
|
{
|
|
151
151
|
id = numNodes;
|
|
152
152
|
}
|
package/svf/lib/Util/Options.cpp
CHANGED
|
@@ -29,7 +29,7 @@ const OptionMap<NodeIDAllocator::Strategy> Options::NodeAllocStrat(
|
|
|
29
29
|
{NodeIDAllocator::Strategy::DENSE, "dense", "allocate objects together [0-n] and values together [m-MAX], separately"},
|
|
30
30
|
{NodeIDAllocator::Strategy::REVERSE_DENSE, "reverse-dense", "like dense but flipped, objects are [m-MAX], values are [0-n]"},
|
|
31
31
|
{NodeIDAllocator::Strategy::SEQ, "seq", "allocate values and objects sequentially, intermixed (default)"},
|
|
32
|
-
{NodeIDAllocator::Strategy::
|
|
32
|
+
{NodeIDAllocator::Strategy::DBUG, "debug", "allocate value and objects sequentially, intermixed, except GEP objects as offsets"},
|
|
33
33
|
}
|
|
34
34
|
);
|
|
35
35
|
|