svf-tools 1.0.1279 → 1.0.1281
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.1281",
|
|
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": {
|
package/setup.sh
CHANGED
|
@@ -74,3 +74,5 @@ export PATH=$SVF_DIR/$Build/bin:$PATH
|
|
|
74
74
|
|
|
75
75
|
# Add compiled library directories to $LD_LIBRARY_PATH
|
|
76
76
|
export LD_LIBRARY_PATH=$SVF_DIR/$Build/svf:$SVF_DIR/$Build/svf-llvm:$LD_LIBRARY_PATH
|
|
77
|
+
|
|
78
|
+
echo "Added SVF, LLVM, and Z3 to each of \$PATH, \$LD_LIBRARY_PATH, and \$DYLD_LIBRARY_PATH."
|
|
@@ -212,12 +212,12 @@ public:
|
|
|
212
212
|
|
|
213
213
|
// From all the candidates, returns the best mapping for pointsToSets (points-to set -> # occurrences).
|
|
214
214
|
static inline std::pair<hclust_fast_methods, std::vector<NodeID>> determineBestMapping(
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
215
|
+
const std::vector<std::pair<hclust_fast_methods, std::vector<NodeID>>> &candidates,
|
|
216
|
+
Map<PointsTo, unsigned> pointsToSets,
|
|
217
|
+
const std::string &evalSubtitle,
|
|
218
|
+
double &evalTime,
|
|
219
|
+
bool printStat
|
|
220
|
+
);
|
|
221
221
|
};
|
|
222
222
|
};
|
|
223
223
|
|
|
@@ -392,7 +392,7 @@ std::vector<NodeID> NodeIDAllocator::Clusterer::cluster(
|
|
|
392
392
|
|
|
393
393
|
// Work out which of the mappings we generated looks best.
|
|
394
394
|
std::pair<hclust_fast_methods, std::vector<NodeID>> bestMapping =
|
|
395
|
-
|
|
395
|
+
determineBestMapping(candidates, pointsToSets, evalSubtitle, evalTime, printStat);
|
|
396
396
|
|
|
397
397
|
overallStats[DistanceMatrixTime] = std::to_string(distanceMatrixTime);
|
|
398
398
|
overallStats[DendrogramTraversalTime] = std::to_string(dendrogramTraversalTime);
|
|
@@ -401,7 +401,10 @@ std::vector<NodeID> NodeIDAllocator::Clusterer::cluster(
|
|
|
401
401
|
overallStats[TotalTime] = std::to_string(distanceMatrixTime + dendrogramTraversalTime + fastClusterTime + regioningTime + evalTime);
|
|
402
402
|
|
|
403
403
|
overallStats[BestCandidate] = SVFUtil::hclustMethodToString(bestMapping.first);
|
|
404
|
-
if (printStat)
|
|
404
|
+
if (printStat)
|
|
405
|
+
{
|
|
406
|
+
printStats(evalSubtitle + ": overall", overallStats);
|
|
407
|
+
}
|
|
405
408
|
|
|
406
409
|
return bestMapping.second;
|
|
407
410
|
}
|
|
@@ -660,12 +663,12 @@ void NodeIDAllocator::Clusterer::evaluate(const std::vector<NodeID> &nodeMap, co
|
|
|
660
663
|
|
|
661
664
|
// Work out which of the mappings we generated looks best.
|
|
662
665
|
std::pair<hclust_fast_methods, std::vector<NodeID>> NodeIDAllocator::Clusterer::determineBestMapping(
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
)
|
|
666
|
+
const std::vector<std::pair<hclust_fast_methods, std::vector<NodeID>>> &candidates,
|
|
667
|
+
Map<PointsTo, unsigned> pointsToSets,
|
|
668
|
+
const std::string &evalSubtitle,
|
|
669
|
+
double &evalTime,
|
|
670
|
+
bool printStat
|
|
671
|
+
)
|
|
669
672
|
{
|
|
670
673
|
// In case we're not comparing anything, set to first "candidate".
|
|
671
674
|
std::pair<hclust_fast_methods, std::vector<NodeID>> bestMapping = candidates[0];
|
|
@@ -685,7 +688,10 @@ std::pair<hclust_fast_methods, std::vector<NodeID>> NodeIDAllocator::Clusterer::
|
|
|
685
688
|
evaluate(candidateMapping, pointsToSets, candidateStats, true);
|
|
686
689
|
const double clkEnd = PTAStat::getClk(true);
|
|
687
690
|
evalTime += (clkEnd - clkStart) / TIMEINTERVAL;
|
|
688
|
-
if (printStat)
|
|
691
|
+
if (printStat)
|
|
692
|
+
{
|
|
693
|
+
printStats(evalSubtitle + ": candidate " + candidateMethodName, candidateStats);
|
|
694
|
+
}
|
|
689
695
|
|
|
690
696
|
size_t candidateWords = 0;
|
|
691
697
|
if (Options::PtType() == PointsTo::SBV) candidateWords = std::stoull(candidateStats[NewSbvNumWords]);
|
package/svf/lib/WPA/Andersen.cpp
CHANGED
|
@@ -439,7 +439,10 @@ void Andersen::finalize()
|
|
|
439
439
|
// TODO: should we use liveOnly?
|
|
440
440
|
// TODO: parameterise final arg.
|
|
441
441
|
NodeIDAllocator::Clusterer::evaluate(*PointsTo::getCurrentBestNodeMapping(), ptd->getAllPts(true), stats, true);
|
|
442
|
-
if (print_stat)
|
|
442
|
+
if (print_stat)
|
|
443
|
+
{
|
|
444
|
+
NodeIDAllocator::Clusterer::printStats("post-main", stats);
|
|
445
|
+
}
|
|
443
446
|
}
|
|
444
447
|
|
|
445
448
|
/// sanitize field insensitive obj
|
|
@@ -188,7 +188,10 @@ void FlowSensitive::finalize()
|
|
|
188
188
|
Map<PointsTo, unsigned> allPts = ptd->getAllPts(true);
|
|
189
189
|
// TODO: parameterise final arg.
|
|
190
190
|
NodeIDAllocator::Clusterer::evaluate(*PointsTo::getCurrentBestNodeMapping(), allPts, stats, true);
|
|
191
|
-
if (print_stat)
|
|
191
|
+
if (print_stat)
|
|
192
|
+
{
|
|
193
|
+
NodeIDAllocator::Clusterer::printStats("post-main: best", stats);
|
|
194
|
+
}
|
|
192
195
|
}
|
|
193
196
|
|
|
194
197
|
BVDataPTAImpl::finalize();
|