Static Value-Flow Analysis
|
#include <FSMPTA.h>
Public Types | |
typedef PointerAnalysis::CallSiteSet | CallSiteSet |
typedef PointerAnalysis::CallEdgeMap | CallEdgeMap |
typedef PointerAnalysis::FunctionSet | FunctionSet |
typedef Set< const SVFGNode * > | SVFGNodeSet |
typedef std::vector< const SVFGNode * > | SVFGNodeVec |
typedef NodeBS | SVFGNodeIDSet |
typedef Set< const SVFInstruction * > | InstSet |
typedef std::pair< NodeID, NodeID > | NodeIDPair |
typedef Map< SVFGNodeLockSpan, bool > | PairToBoolMap |
![]() | |
typedef PointerAnalysis::CallSiteSet | CallSiteSet |
typedef PointerAnalysis::CallEdgeMap | CallEdgeMap |
typedef PointerAnalysis::FunctionSet | FunctionSet |
typedef SVFG::SVFGEdgeSetTy | SVFGEdgeSet |
Public Member Functions | |
MTASVFGBuilder (MHP *m, LockAnalysis *la) | |
Constructor. More... | |
virtual | ~MTASVFGBuilder () |
Destructor. More... | |
![]() | |
SVFGBuilder (bool _SVFGWithIndCall=false) | |
Constructor. More... | |
virtual | ~SVFGBuilder ()=default |
Destructor. More... | |
SVFG * | buildPTROnlySVFG (BVDataPTAImpl *pta) |
SVFG * | buildFullSVFG (BVDataPTAImpl *pta) |
SVFG * | getSVFG () const |
Get SVFG instance. More... | |
void | markValidVFEdge (SVFGEdgeSet &edges) |
Mark feasible VF edge by removing it from set vfEdgesAtIndCallSite. More... | |
bool | isSpuriousVFEdgeAtIndCallSite (const SVFGEdge *edge) |
Return true if this is an VF Edge pre-connected by Andersen's analysis. More... | |
virtual std::unique_ptr< MemSSA > | buildMSSA (BVDataPTAImpl *pta, bool ptrOnlyMSSA) |
Build Memory SSA. More... | |
Static Public Attributes | |
static u32_t | numOfNewSVFGEdges = 0 |
Number of newly added SVFG edges. More... | |
static u32_t | numOfRemovedSVFGEdges = 0 |
static u32_t | numOfRemovedPTS = 0 |
Protected Member Functions | |
virtual void | buildSVFG () |
Re-write create SVFG method. More... | |
![]() | |
SVFG * | build (BVDataPTAImpl *pta, VFG::VFGK kind) |
Create a DDA SVFG. By default actualOut and FormalIN are removed, unless withAOFI is set true. More... | |
virtual void | releaseMemory () |
Release global SVFG. More... | |
Private Attributes | |
SVFGNodeSet | stnodeSet |
all stores/loads SVFGNodes More... | |
SVFGNodeSet | ldnodeSet |
MHP * | mhp |
MHP class. More... | |
LockAnalysis * | lockana |
Set< NodeIDPair > | recordedges |
Map< NodeIDPair, PointsTo > | edge2pts |
Map< const StmtSVFGNode *, SVFGNodeIDSet > | prevset |
Map< const StmtSVFGNode *, SVFGNodeIDSet > | succset |
Map< const StmtSVFGNode *, bool > | headmap |
Map< const StmtSVFGNode *, bool > | tailmap |
PairToBoolMap | pairheadmap |
PairToBoolMap | pairtailmap |
Static Private Attributes | |
static const u32_t | ADDEDGE_NOEDGE = 0 |
static const u32_t | ADDEDGE_NONSPARSE = 1 |
static const u32_t | ADDEDGE_ALLOPT = 2 |
static const u32_t | ADDEDGE_NOMHP = 3 |
static const u32_t | ADDEDGE_NOALIAS = 4 |
static const u32_t | ADDEDGE_NOLOCK = 5 |
static const u32_t | ADDEDGE_NORP = 6 |
Additional Inherited Members | |
![]() | |
SVFGEdgeSet | vfEdgesAtIndCallSite |
SVFG Edges connected at indirect call/ret sites. More... | |
std::unique_ptr< SVFG > | svfg |
bool | SVFGWithIndCall |
SVFG with precomputed indirect call edges. More... | |
typedef Set<const SVFInstruction*> SVF::MTASVFGBuilder::InstSet |
typedef std::pair<NodeID,NodeID> SVF::MTASVFGBuilder::NodeIDPair |
typedef Map<SVFGNodeLockSpan, bool> SVF::MTASVFGBuilder::PairToBoolMap |
typedef Set<const SVFGNode*> SVF::MTASVFGBuilder::SVFGNodeSet |
typedef std::vector<const SVFGNode*> SVF::MTASVFGBuilder::SVFGNodeVec |
|
inline |
Constructor.
Definition at line 112 of file FSMPTA.h.
|
inlinevirtual |
Definition at line 125 of file FSMPTA.cpp.
|
protectedvirtual |
Re-write create SVFG method.
Reimplemented from SVF::SVFGBuilder.
Definition at line 47 of file FSMPTA.cpp.
|
private |
Collect all loads/stores SVFGNodes.
Definition at line 64 of file FSMPTA.cpp.
|
private |
Connect MHP indirect value-flow edges for two nodes that may-happen-in-parallel.
todo: we ignore rule 2 and 3. but so far I haven't added intra-thread value flow affected by fork and inter-thread value flow affected by join
Definition at line 706 of file FSMPTA.cpp.
|
private |
Definition at line 344 of file FSMPTA.cpp.
|
private |
Definition at line 382 of file FSMPTA.cpp.
|
private |
Definition at line 420 of file FSMPTA.cpp.
|
private |
Alias
Lock todo: we only consider all cxtstmt of one instruction in one lock span, otherwise we think this instruction is not locked This constraint is too strong. All cxt lock under different cxt cannot be identified.
Definition at line 484 of file FSMPTA.cpp.
|
private |
Definition at line 465 of file FSMPTA.cpp.
|
private |
Definition at line 547 of file FSMPTA.cpp.
|
private |
Alias
Lock
Definition at line 518 of file FSMPTA.cpp.
|
private |
Definition at line 475 of file FSMPTA.cpp.
|
private |
Definition at line 588 of file FSMPTA.cpp.
|
private |
whether for all lockspans that n belongs to, n is the first write. strong constraints but scalable
Definition at line 243 of file FSMPTA.cpp.
|
private |
Definition at line 225 of file FSMPTA.cpp.
|
private |
whether is a first write in the lock span.
Definition at line 201 of file FSMPTA.cpp.
|
private |
whether for all lockspans that n belongs to, n is the last write. strong constraints but scalable
Definition at line 316 of file FSMPTA.cpp.
|
private |
Definition at line 266 of file FSMPTA.cpp.
|
private |
Definition at line 647 of file FSMPTA.cpp.
|
private |
|
private |
Definition at line 145 of file FSMPTA.cpp.
|
private |
For o, n2-o->n1, n1 and n2 are write. Foreach n3:n1->n3, n2->n3; then remove n2->n1.
Definition at line 658 of file FSMPTA.cpp.
Definition at line 103 of file FSMPTA.cpp.
Definition at line 108 of file FSMPTA.cpp.
|
staticprivate |
|
staticprivate |
|
staticprivate |
|
staticprivate |
|
staticprivate |
|
staticprivate |
|
staticprivate |
|
private |
|
private |
|
private |
|
private |
|
static |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |