svf-lib 1.0.733 → 1.0.737
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/lib/libSvf.a +0 -0
- package/SVF-linux/include/DDA/ContextDDA.h +1 -1
- package/SVF-linux/include/DDA/DDAClient.h +8 -8
- package/SVF-linux/include/DDA/DDAVFSolver.h +5 -5
- package/SVF-linux/include/DDA/FlowDDA.h +1 -1
- package/SVF-linux/include/Graphs/CHG.h +351 -0
- package/SVF-linux/include/Graphs/ConsG.h +6 -6
- package/SVF-linux/include/Graphs/ConsGEdge.h +2 -2
- package/SVF-linux/include/Graphs/ConsGNode.h +1 -1
- package/SVF-linux/include/Graphs/ExternalPAG.h +14 -14
- package/SVF-linux/include/Graphs/GenericGraph.h +1 -1
- package/SVF-linux/include/Graphs/ICFGNode.h +14 -14
- package/SVF-linux/include/Graphs/IRGraph.h +236 -0
- package/SVF-linux/include/Graphs/OfflineConsG.h +1 -1
- package/SVF-linux/include/Graphs/SVFG.h +1 -1
- package/SVF-linux/include/Graphs/SVFGOPT.h +3 -3
- package/SVF-linux/include/Graphs/VFG.h +53 -52
- package/SVF-linux/include/Graphs/VFGNode.h +60 -8
- package/SVF-linux/include/MSSA/MemRegion.h +11 -11
- package/SVF-linux/include/MSSA/MemSSA.h +4 -4
- package/SVF-linux/include/MTA/FSMPTA.h +1 -1
- package/SVF-linux/include/MemoryModel/PAGBuilderFromFile.h +8 -8
- package/SVF-linux/include/MemoryModel/PTAStat.h +31 -31
- package/SVF-linux/include/MemoryModel/PointerAnalysis.h +9 -9
- package/SVF-linux/include/MemoryModel/PointerAnalysisImpl.h +3 -3
- package/SVF-linux/include/MemoryModel/SVFIR.h +525 -233
- package/SVF-linux/include/MemoryModel/SVFStatements.h +970 -0
- package/SVF-linux/include/MemoryModel/SVFVariables.h +842 -0
- package/SVF-linux/include/MemoryModel/SymbolTableInfo.h +346 -55
- package/SVF-linux/include/SABER/SaberSVFGBuilder.h +0 -2
- package/SVF-linux/include/SABER/SrcSnkDDA.h +3 -3
- package/SVF-linux/include/SVF-FE/CHGBuilder.h +69 -0
- package/SVF-linux/include/SVF-FE/DCHG.h +1 -1
- package/SVF-linux/include/SVF-FE/Graph2Json.h +1 -3
- package/SVF-linux/include/SVF-FE/SVFIRBuilder.h +405 -0
- package/SVF-linux/include/SVF-FE/SymbolTableBuilder.h +0 -1
- package/SVF-linux/include/Util/CFLSolver.h +1 -1
- package/SVF-linux/include/Util/ExtAPI.h +1 -1
- package/SVF-linux/include/Util/IRAnnotator.h +6 -6
- package/SVF-linux/include/Util/Options.h +1 -1
- package/SVF-linux/include/Util/TypeBasedHeapCloning.h +11 -11
- package/SVF-linux/include/WPA/Andersen.h +11 -11
- package/SVF-linux/include/WPA/AndersenSFR.h +4 -4
- package/SVF-linux/include/WPA/FlowSensitive.h +2 -2
- package/SVF-linux/include/WPA/FlowSensitiveTBHC.h +1 -1
- package/SVF-linux/include/WPA/Steensgaard.h +2 -2
- package/SVF-linux/include/WPA/TypeAnalysis.h +1 -1
- package/SVF-linux/include/WPA/VersionedFlowSensitive.h +2 -2
- package/SVF-linux/include/WPA/WPAStat.h +1 -2
- package/SVF-osx/Release-build/lib/CUDD/libCudd.a +0 -0
- package/SVF-osx/Release-build/lib/libSvf.a +0 -0
- package/SVF-osx/include/Graphs/GenericGraph.h +1 -1
- package/SVF-osx/include/Graphs/IRGraph.h +6 -15
- package/SVF-osx/include/Graphs/VFG.h +26 -41
- package/SVF-osx/include/Graphs/VFGNode.h +2 -2
- package/SVF-osx/include/MemoryModel/SVFIR.h +29 -96
- package/SVF-osx/include/MemoryModel/SVFStatements.h +156 -22
- package/SVF-osx/include/SVF-FE/SVFIRBuilder.h +12 -6
- package/package.json +1 -1
|
@@ -33,8 +33,7 @@
|
|
|
33
33
|
#include "Graphs/GenericGraph.h"
|
|
34
34
|
#include "Graphs/VFGEdge.h"
|
|
35
35
|
#include "Graphs/ICFGNode.h"
|
|
36
|
-
#include "
|
|
37
|
-
#include "Graphs/PAGEdge.h"
|
|
36
|
+
#include "MemoryModel/SVFIR.h"
|
|
38
37
|
|
|
39
38
|
namespace SVF
|
|
40
39
|
{
|
|
@@ -52,7 +51,7 @@ public:
|
|
|
52
51
|
/// Gep represents offset edge for field sensitivity
|
|
53
52
|
enum VFGNodeK
|
|
54
53
|
{
|
|
55
|
-
Addr, Copy, Gep, Store, Load, Cmp, BinaryOp, UnaryOp, TPhi, TIntraPhi, TInterPhi,
|
|
54
|
+
Addr, Copy, Gep, Store, Load, Cmp, BinaryOp, UnaryOp, Branch, TPhi, TIntraPhi, TInterPhi,
|
|
56
55
|
MPhi, MIntraPhi, MInterPhi, FRet, ARet, AParm, FParm,
|
|
57
56
|
FunRet, APIN, APOUT, FPIN, FPOUT, NPtr, DummyVProp
|
|
58
57
|
};
|
|
@@ -331,7 +330,7 @@ public:
|
|
|
331
330
|
CmpVFGNode(NodeID id,const PAGNode* r): VFGNode(id,Cmp), res(r)
|
|
332
331
|
{
|
|
333
332
|
const CmpInst* cmp = SVFUtil::dyn_cast<CmpInst>(r->getValue());
|
|
334
|
-
assert(cmp && "not a
|
|
333
|
+
assert(cmp && "not a compare operator?");
|
|
335
334
|
}
|
|
336
335
|
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
337
336
|
//@{
|
|
@@ -474,10 +473,7 @@ public:
|
|
|
474
473
|
/// Constructor
|
|
475
474
|
UnaryOPVFGNode(NodeID id, const PAGNode *r) : VFGNode(id, UnaryOp), res(r) {
|
|
476
475
|
const Value *val = r->getValue();
|
|
477
|
-
|
|
478
|
-
|| SVFUtil::isa<BranchInst>(val)
|
|
479
|
-
|| SVFUtil::isa<SwitchInst>(val));
|
|
480
|
-
assert(unop && "not a unary operator or a BranchInst or a SwitchInst?");
|
|
476
|
+
assert(SVFUtil::isa<UnaryOperator>(val) && "not a unary instruction ?");
|
|
481
477
|
}
|
|
482
478
|
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
483
479
|
//@{
|
|
@@ -510,6 +506,11 @@ public:
|
|
|
510
506
|
{
|
|
511
507
|
return res;
|
|
512
508
|
}
|
|
509
|
+
inline const PAGNode* getOpVar() const
|
|
510
|
+
{
|
|
511
|
+
assert(getOpVerNum()==1 && "UnaryNode can only have one operand!");
|
|
512
|
+
return getOpVer(0);
|
|
513
|
+
}
|
|
513
514
|
inline u32_t getOpVerNum() const
|
|
514
515
|
{
|
|
515
516
|
return opVers.size();
|
|
@@ -527,6 +528,57 @@ public:
|
|
|
527
528
|
virtual const std::string toString() const;
|
|
528
529
|
};
|
|
529
530
|
|
|
531
|
+
/*
|
|
532
|
+
* Branch VFGNode including if/else and switch statements
|
|
533
|
+
*/
|
|
534
|
+
class BranchVFGNode: public VFGNode
|
|
535
|
+
{
|
|
536
|
+
private:
|
|
537
|
+
BranchVFGNode(); ///< place holder
|
|
538
|
+
BranchVFGNode(const BranchVFGNode &); ///< place holder
|
|
539
|
+
void operator=(const BranchVFGNode &); ///< place holder
|
|
540
|
+
const BranchStmt* brstmt;
|
|
541
|
+
public:
|
|
542
|
+
/// Constructor
|
|
543
|
+
BranchVFGNode(NodeID id, const BranchStmt* r) : VFGNode(id, Branch), brstmt(r) {
|
|
544
|
+
const Value *val = r->getValue();
|
|
545
|
+
assert((SVFUtil::isa<BranchInst>(val) || SVFUtil::isa<SwitchInst>(val)) && "not a BranchInst or a SwitchInst?");
|
|
546
|
+
}
|
|
547
|
+
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
548
|
+
//@{
|
|
549
|
+
static inline bool classof(const BranchVFGNode *)
|
|
550
|
+
{
|
|
551
|
+
return true;
|
|
552
|
+
}
|
|
553
|
+
static inline bool classof(const VFGNode *node)
|
|
554
|
+
{
|
|
555
|
+
return node->getNodeKind() == Branch;
|
|
556
|
+
}
|
|
557
|
+
static inline bool classof(const GenericVFGNodeTy *node)
|
|
558
|
+
{
|
|
559
|
+
return node->getNodeKind() == Branch;
|
|
560
|
+
}
|
|
561
|
+
//@}
|
|
562
|
+
|
|
563
|
+
/// Return the branch statement
|
|
564
|
+
const BranchStmt* getBranchStmt() const{
|
|
565
|
+
return brstmt;
|
|
566
|
+
}
|
|
567
|
+
/// Successors of this branch statement
|
|
568
|
+
///@{
|
|
569
|
+
u32_t getNumSuccessors() const{
|
|
570
|
+
return brstmt->getNumSuccessors();
|
|
571
|
+
}
|
|
572
|
+
const std::vector<const ICFGNode*>& getSuccessors() const{
|
|
573
|
+
return brstmt->getSuccessors();
|
|
574
|
+
}
|
|
575
|
+
const ICFGNode* getSuccessor (u32_t i) const{
|
|
576
|
+
return brstmt->getSuccessor(i);
|
|
577
|
+
}
|
|
578
|
+
///@}
|
|
579
|
+
virtual const std::string toString() const override;
|
|
580
|
+
};
|
|
581
|
+
|
|
530
582
|
/*!
|
|
531
583
|
* VFGNode for Gep
|
|
532
584
|
*/
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
#ifndef MEMORYREGION_H_
|
|
31
31
|
#define MEMORYREGION_H_
|
|
32
32
|
|
|
33
|
-
#include "
|
|
33
|
+
#include "MemoryModel/SVFIR.h"
|
|
34
34
|
#include "Graphs/PTACallGraph.h"
|
|
35
35
|
#include "Util/SCC.h"
|
|
36
36
|
#include "Util/WorkList.h"
|
|
@@ -168,8 +168,8 @@ public:
|
|
|
168
168
|
|
|
169
169
|
typedef Map<NodeID, NodeBS> NodeToPTSSMap;
|
|
170
170
|
|
|
171
|
-
///
|
|
172
|
-
typedef
|
|
171
|
+
/// SVFIR edge list
|
|
172
|
+
typedef SVFIR::PAGEdgeList PAGEdgeList;
|
|
173
173
|
/// Call Graph SCC
|
|
174
174
|
typedef SCCDetection<PTACallGraph*> SCC;
|
|
175
175
|
|
|
@@ -197,17 +197,17 @@ private:
|
|
|
197
197
|
|
|
198
198
|
/// Map a function to all its memory regions
|
|
199
199
|
FunToMRsMap funToMRsMap;
|
|
200
|
-
/// Map a load
|
|
200
|
+
/// Map a load SVFIR Edge to its memory regions sets in order for inserting mus in Memory SSA
|
|
201
201
|
LoadsToMRsMap loadsToMRsMap;
|
|
202
|
-
/// Map a store
|
|
202
|
+
/// Map a store SVFIR Edge to its memory regions sets in order for inserting chis in Memory SSA
|
|
203
203
|
StoresToMRsMap storesToMRsMap;
|
|
204
204
|
/// Map a callsite to its refs regions
|
|
205
205
|
CallSiteToMRsMap callsiteToRefMRsMap;
|
|
206
206
|
/// Map a callsite to its mods regions
|
|
207
207
|
CallSiteToMRsMap callsiteToModMRsMap;
|
|
208
|
-
/// Map a load
|
|
208
|
+
/// Map a load SVFIR Edge to its CPts set map
|
|
209
209
|
LoadsToPointsToMap loadsToPointsToMap;
|
|
210
|
-
/// Map a store
|
|
210
|
+
/// Map a store SVFIR Edge to its CPts set map
|
|
211
211
|
StoresToPointsToMap storesToPointsToMap;
|
|
212
212
|
/// Map a callsite to it refs cpts set
|
|
213
213
|
CallSiteToPointsToMap callsiteToRefPointsToMap;
|
|
@@ -235,7 +235,7 @@ private:
|
|
|
235
235
|
/// Map a pointer to its cached points-to chain;
|
|
236
236
|
NodeToPTSSMap cachedPtsChainMap;
|
|
237
237
|
|
|
238
|
-
/// All global variable
|
|
238
|
+
/// All global variable SVFIR node ids
|
|
239
239
|
NodeBS allGlobals;
|
|
240
240
|
|
|
241
241
|
/// Clean up memory
|
|
@@ -427,11 +427,11 @@ public:
|
|
|
427
427
|
/// Start generating memory regions
|
|
428
428
|
virtual void generateMRs();
|
|
429
429
|
|
|
430
|
-
/// Get the function which
|
|
430
|
+
/// Get the function which SVFIR Edge located
|
|
431
431
|
const SVFFunction* getFunction(const PAGEdge* pagEdge) const
|
|
432
432
|
{
|
|
433
433
|
PAGEdgeToFunMap::const_iterator it = pagEdgeToFunMap.find(pagEdge);
|
|
434
|
-
assert(it!=pagEdgeToFunMap.end() && "can not find its function, it is a global
|
|
434
|
+
assert(it!=pagEdgeToFunMap.end() && "can not find its function, it is a global SVFIR edge");
|
|
435
435
|
return it->second;
|
|
436
436
|
}
|
|
437
437
|
/// Get Memory Region set
|
|
@@ -465,7 +465,7 @@ public:
|
|
|
465
465
|
return callsiteToModMRsMap[cs];
|
|
466
466
|
}
|
|
467
467
|
//@}
|
|
468
|
-
/// Whether this instruction has
|
|
468
|
+
/// Whether this instruction has SVFIR Edge
|
|
469
469
|
bool hasPAGEdgeList(const Instruction* inst);
|
|
470
470
|
/// Given an instruction, get all its the PAGEdge (statement) in sequence
|
|
471
471
|
PAGEdgeList& getPAGEdgesFromInst(const Instruction* inst);
|
|
@@ -93,8 +93,8 @@ public:
|
|
|
93
93
|
typedef Map<const MemRegion*, std::vector<MRVer*> > MemRegToVerStackMap;
|
|
94
94
|
typedef Map<const MemRegion*, MRVERSION> MemRegToCounterMap;
|
|
95
95
|
|
|
96
|
-
///
|
|
97
|
-
typedef
|
|
96
|
+
/// SVFIR edge list
|
|
97
|
+
typedef SVFIR::PAGEdgeList PAGEdgeList;
|
|
98
98
|
|
|
99
99
|
/// Statistics
|
|
100
100
|
//@{
|
|
@@ -309,8 +309,8 @@ public:
|
|
|
309
309
|
{
|
|
310
310
|
destroy();
|
|
311
311
|
}
|
|
312
|
-
/// Return
|
|
313
|
-
inline
|
|
312
|
+
/// Return SVFIR
|
|
313
|
+
inline SVFIR* getPAG();
|
|
314
314
|
/// Return PTA
|
|
315
315
|
inline BVDataPTAImpl* getPTA() const
|
|
316
316
|
{
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//===- PAGBuilderFromFile.h -- Building
|
|
1
|
+
//===- PAGBuilderFromFile.h -- Building SVFIR from File--------------------------------//
|
|
2
2
|
//
|
|
3
3
|
// SVF: Static Value-Flow Analysis
|
|
4
4
|
//
|
|
@@ -30,24 +30,24 @@
|
|
|
30
30
|
#ifndef INCLUDE_MEMORYMODEL_PAGBUILDERFROMFILE_H_
|
|
31
31
|
#define INCLUDE_MEMORYMODEL_PAGBUILDERFROMFILE_H_
|
|
32
32
|
|
|
33
|
-
#include "
|
|
33
|
+
#include "MemoryModel/SVFIR.h"
|
|
34
34
|
|
|
35
35
|
namespace SVF
|
|
36
36
|
{
|
|
37
37
|
|
|
38
38
|
/*!
|
|
39
|
-
* Build
|
|
39
|
+
* Build SVFIR from a user specified file (for debugging purpose)
|
|
40
40
|
*/
|
|
41
41
|
class PAGBuilderFromFile
|
|
42
42
|
{
|
|
43
43
|
|
|
44
44
|
private:
|
|
45
|
-
|
|
45
|
+
SVFIR* pag;
|
|
46
46
|
std::string file;
|
|
47
47
|
public:
|
|
48
48
|
/// Constructor
|
|
49
49
|
PAGBuilderFromFile(std::string f) :
|
|
50
|
-
pag(
|
|
50
|
+
pag(SVFIR::getPAG(true)), file(f)
|
|
51
51
|
{
|
|
52
52
|
}
|
|
53
53
|
/// Destructor
|
|
@@ -55,8 +55,8 @@ public:
|
|
|
55
55
|
{
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
/// Return
|
|
59
|
-
|
|
58
|
+
/// Return SVFIR
|
|
59
|
+
SVFIR* getPAG() const
|
|
60
60
|
{
|
|
61
61
|
return pag;
|
|
62
62
|
}
|
|
@@ -68,7 +68,7 @@ public:
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
/// Start building
|
|
71
|
-
|
|
71
|
+
SVFIR* build();
|
|
72
72
|
|
|
73
73
|
// Add edges
|
|
74
74
|
void addEdge(NodeID nodeSrc, NodeID nodeDst, Size_t offset,
|
|
@@ -57,49 +57,49 @@ public:
|
|
|
57
57
|
static const char* ProcessCopyGepTime; ///< time of processing copys and geps
|
|
58
58
|
static const char* UpdateCallGraphTime; ///< time of updating call graph
|
|
59
59
|
|
|
60
|
-
static const char* TotalNumOfPointers; ///< Total
|
|
61
|
-
static const char* TotalNumOfObjects; ///< Total
|
|
62
|
-
static const char* TotalNumOfFieldObjects; ///< Total
|
|
60
|
+
static const char* TotalNumOfPointers; ///< Total SVFIR value node
|
|
61
|
+
static const char* TotalNumOfObjects; ///< Total SVFIR object node
|
|
62
|
+
static const char* TotalNumOfFieldObjects; ///< Total SVFIR field object node
|
|
63
63
|
static const char* MaxStructSize; ///< Max struct size
|
|
64
|
-
static const char* TotalNumOfEdges; ///< Total
|
|
65
|
-
|
|
66
|
-
static const char* NumOfAddrs; ///<
|
|
67
|
-
static const char* NumOfLoads; ///<
|
|
68
|
-
static const char* NumOfStores; ///<
|
|
69
|
-
static const char* NumOfCopys; ///<
|
|
70
|
-
static const char* NumOfGeps; ///<
|
|
71
|
-
static const char* NumOfCalls; ///<
|
|
72
|
-
static const char* NumOfReturns; ///<
|
|
73
|
-
|
|
74
|
-
static const char* NumOfProcessedAddrs; ///<
|
|
75
|
-
static const char* NumOfProcessedLoads; ///<
|
|
76
|
-
static const char* NumOfProcessedStores; ///<
|
|
77
|
-
static const char* NumOfProcessedCopys; ///<
|
|
78
|
-
static const char* NumOfProcessedGeps; ///<
|
|
64
|
+
static const char* TotalNumOfEdges; ///< Total SVFIR edge number
|
|
65
|
+
|
|
66
|
+
static const char* NumOfAddrs; ///< SVFIR addr edge
|
|
67
|
+
static const char* NumOfLoads; ///< SVFIR load edge
|
|
68
|
+
static const char* NumOfStores; ///< SVFIR store edge
|
|
69
|
+
static const char* NumOfCopys; ///< SVFIR copy edge
|
|
70
|
+
static const char* NumOfGeps; ///< SVFIR gep edge
|
|
71
|
+
static const char* NumOfCalls; ///< SVFIR call edge
|
|
72
|
+
static const char* NumOfReturns; ///< SVFIR return edge
|
|
73
|
+
|
|
74
|
+
static const char* NumOfProcessedAddrs; ///< SVFIR processed addr edge
|
|
75
|
+
static const char* NumOfProcessedLoads; ///< SVFIR processed load edge
|
|
76
|
+
static const char* NumOfProcessedStores; ///< SVFIR processed store edge
|
|
77
|
+
static const char* NumOfProcessedCopys; ///< SVFIR processed copy edge
|
|
78
|
+
static const char* NumOfProcessedGeps; ///< SVFIR processed gep edge
|
|
79
79
|
|
|
80
80
|
static const char* NumOfSfr; ///< num of field representatives
|
|
81
81
|
static const char* NumOfFieldExpand;
|
|
82
82
|
|
|
83
83
|
static const char* NumOfFunctionObjs; ///< Function numbers
|
|
84
|
-
static const char* NumOfGlobalObjs; ///<
|
|
85
|
-
static const char* NumOfHeapObjs; ///<
|
|
86
|
-
static const char* NumOfStackObjs; ///<
|
|
84
|
+
static const char* NumOfGlobalObjs; ///< SVFIR global object node
|
|
85
|
+
static const char* NumOfHeapObjs; ///< SVFIR heap object node
|
|
86
|
+
static const char* NumOfStackObjs; ///< SVFIR stack object node
|
|
87
87
|
|
|
88
|
-
static const char* NumOfObjsHasVarStruct; ///<
|
|
89
|
-
static const char* NumOfObjsHasVarArray; ///<
|
|
90
|
-
static const char* NumOfObjsHasConstStruct; ///<
|
|
91
|
-
static const char* NumOfObjsHasConstArray; ///<
|
|
92
|
-
static const char* NumOfNonPtrObjs; ///<
|
|
93
|
-
static const char* NumOfConstantObjs; ///<
|
|
88
|
+
static const char* NumOfObjsHasVarStruct; ///< SVFIR object node has var struct (maybe nested with array)
|
|
89
|
+
static const char* NumOfObjsHasVarArray; ///< SVFIR object node has var array (maybe nested with struct)
|
|
90
|
+
static const char* NumOfObjsHasConstStruct; ///< SVFIR object node has const struct (maybe nested with array)
|
|
91
|
+
static const char* NumOfObjsHasConstArray; ///< SVFIR object node has const array (maybe nested with struct)
|
|
92
|
+
static const char* NumOfNonPtrObjs; ///< SVFIR object node which is non pointer type object (do not have pts)
|
|
93
|
+
static const char* NumOfConstantObjs; ///< SVFIR object node which is purely constant
|
|
94
94
|
|
|
95
95
|
static const char* NumberOfFieldInsensitiveObj;
|
|
96
96
|
static const char* NumberOfFieldSensitiveObj;
|
|
97
97
|
|
|
98
|
-
static const char* NumOfPointers; ///<
|
|
99
|
-
static const char* NumOfGepFieldPointers; ///<
|
|
98
|
+
static const char* NumOfPointers; ///< SVFIR value node, each of them maps to a llvm value
|
|
99
|
+
static const char* NumOfGepFieldPointers; ///< SVFIR gep value node (field value, dynamically created dummy node)
|
|
100
100
|
|
|
101
|
-
static const char* NumOfMemObjects; ///<
|
|
102
|
-
static const char* NumOfGepFieldObjects; ///<
|
|
101
|
+
static const char* NumOfMemObjects; ///< SVFIR object node, each of them maps to a llvm value
|
|
102
|
+
static const char* NumOfGepFieldObjects; ///< SVFIR gep object node (field obj, dynamically created dummy node)
|
|
103
103
|
|
|
104
104
|
static const char* AveragePointsToSetSize; ///< Average points-to size of all variables
|
|
105
105
|
static const char* AverageTopLevPointsToSetSize; ///< Average points-to size of top-level variables
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
#include <unistd.h>
|
|
34
34
|
#include <signal.h>
|
|
35
35
|
|
|
36
|
-
#include "
|
|
36
|
+
#include "MemoryModel/SVFIR.h"
|
|
37
37
|
#include "MemoryModel/ConditionalPT.h"
|
|
38
38
|
#include "MemoryModel/AbstractPointsToDS.h"
|
|
39
39
|
#include "MemoryModel/MutablePointsToDS.h"
|
|
@@ -106,7 +106,7 @@ public:
|
|
|
106
106
|
//@{
|
|
107
107
|
typedef llvm::AliasAnalysis AliasAnalysis;
|
|
108
108
|
typedef Set<const CallBlockNode*> CallSiteSet;
|
|
109
|
-
typedef
|
|
109
|
+
typedef SVFIR::CallSiteToFunPtrMap CallSiteToFunPtrMap;
|
|
110
110
|
typedef Set<const SVFFunction*> FunctionSet;
|
|
111
111
|
typedef OrderedMap<const CallBlockNode*, FunctionSet> CallEdgeMap;
|
|
112
112
|
typedef SCCDetection<PTACallGraph*> CallGraphSCC;
|
|
@@ -143,8 +143,8 @@ protected:
|
|
|
143
143
|
u32_t OnTheFlyIterBudgetForStat;
|
|
144
144
|
//@}
|
|
145
145
|
|
|
146
|
-
///
|
|
147
|
-
static
|
|
146
|
+
/// SVFIR
|
|
147
|
+
static SVFIR* pag;
|
|
148
148
|
/// Module
|
|
149
149
|
SVFModule* svfMod;
|
|
150
150
|
/// Pointer analysis Type
|
|
@@ -186,7 +186,7 @@ public:
|
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
/// Constructor
|
|
189
|
-
PointerAnalysis(
|
|
189
|
+
PointerAnalysis(SVFIR* pag, PTATY ty = Default_PTA, bool alias_check = true);
|
|
190
190
|
|
|
191
191
|
/// Type of pointer analysis
|
|
192
192
|
inline PTATY getAnalysisTy() const
|
|
@@ -200,9 +200,9 @@ public:
|
|
|
200
200
|
return ptaImplTy;
|
|
201
201
|
}
|
|
202
202
|
|
|
203
|
-
/// Get/set
|
|
203
|
+
/// Get/set SVFIR
|
|
204
204
|
///@{
|
|
205
|
-
inline
|
|
205
|
+
inline SVFIR* getPAG() const
|
|
206
206
|
{
|
|
207
207
|
return pag;
|
|
208
208
|
}
|
|
@@ -227,7 +227,7 @@ public:
|
|
|
227
227
|
/// Destructor
|
|
228
228
|
virtual ~PointerAnalysis();
|
|
229
229
|
|
|
230
|
-
/// Initialization of a pointer analysis, including building symbol table and
|
|
230
|
+
/// Initialization of a pointer analysis, including building symbol table and SVFIR etc.
|
|
231
231
|
virtual void initialize();
|
|
232
232
|
|
|
233
233
|
/// Finalization of a pointer analysis, including checking alias correctness
|
|
@@ -344,7 +344,7 @@ public:
|
|
|
344
344
|
///@{
|
|
345
345
|
inline bool isFIObjNode(NodeID id) const
|
|
346
346
|
{
|
|
347
|
-
return (SVFUtil::isa<FIObjPN>(pag->
|
|
347
|
+
return (SVFUtil::isa<FIObjPN>(pag->getGNode(id)));
|
|
348
348
|
}
|
|
349
349
|
inline NodeID getBaseObjNode(NodeID id)
|
|
350
350
|
{
|
|
@@ -68,7 +68,7 @@ public:
|
|
|
68
68
|
};
|
|
69
69
|
|
|
70
70
|
/// Constructor
|
|
71
|
-
BVDataPTAImpl(
|
|
71
|
+
BVDataPTAImpl(SVFIR* pag, PointerAnalysis::PTATY type, bool alias_check = true);
|
|
72
72
|
|
|
73
73
|
/// Destructor
|
|
74
74
|
virtual ~BVDataPTAImpl()
|
|
@@ -261,7 +261,7 @@ public:
|
|
|
261
261
|
typedef Map<NodeID,CPtSet> PtrToCPtsMap; /// map a pointer to its conditional points-to set
|
|
262
262
|
|
|
263
263
|
/// Constructor
|
|
264
|
-
CondPTAImpl(
|
|
264
|
+
CondPTAImpl(SVFIR* pag, PointerAnalysis::PTATY type) : PointerAnalysis(pag, type), normalized(false)
|
|
265
265
|
{
|
|
266
266
|
if (type == PathS_DDA || type == Cxt_DDA)
|
|
267
267
|
ptD = new MutPTDataTy();
|
|
@@ -574,7 +574,7 @@ public:
|
|
|
574
574
|
{
|
|
575
575
|
for (OrderedNodeSet::iterator nIter = this->getAllValidPtrs().begin(); nIter != this->getAllValidPtrs().end(); ++nIter)
|
|
576
576
|
{
|
|
577
|
-
const PAGNode* node = this->getPAG()->
|
|
577
|
+
const PAGNode* node = this->getPAG()->getGNode(*nIter);
|
|
578
578
|
if (this->getPAG()->isValidTopLevelPtr(node))
|
|
579
579
|
{
|
|
580
580
|
if (SVFUtil::isa<DummyObjPN>(node))
|