|
| AndersenWaveDiff (SVFIR *_pag, PTATY type=AndersenWaveDiff_WPA, bool alias_check=true) |
|
virtual void | initialize () |
|
virtual void | solveWorklist () |
|
virtual void | processNode (NodeID nodeId) |
|
virtual void | postProcessNode (NodeID nodeId) |
|
virtual bool | handleLoad (NodeID id, const ConstraintEdge *load) |
|
virtual bool | handleStore (NodeID id, const ConstraintEdge *store) |
|
Public Member Functions inherited from SVF::Andersen |
| Andersen (SVFIR *_pag, PTATY type=Andersen_WPA, bool alias_check=true) |
| Constructor.
|
|
virtual | ~Andersen () |
| Destructor.
|
|
virtual void | finalize () |
| Finalize analysis.
|
|
void | resetData () |
| Reset data.
|
|
virtual const PointsTo & | getPts (NodeID id) |
| Operation of points-to set.
|
|
virtual bool | unionPts (NodeID id, const PointsTo &target) |
|
virtual bool | unionPts (NodeID id, NodeID ptd) |
|
void | dumpTopLevelPtsTo () |
|
void | setDetectPWC (bool flag) |
|
Public Member Functions inherited from SVF::AndersenBase |
| AndersenBase (SVFIR *_pag, PTATY type=Andersen_BASE, bool alias_check=true) |
| Constructor.
|
|
| ~AndersenBase () override |
| Destructor.
|
|
virtual void | analyze () override |
| Andersen analysis.
|
|
virtual void | solveAndwritePtsToFile (const std::string &filename) |
|
virtual void | readPtsFromFile (const std::string &filename) |
|
virtual void | solveConstraints () |
|
virtual bool | updateCallGraph (const CallSiteToFunPtrMap &) override |
| Update call graph.
|
|
virtual bool | updateThreadCallGraph (const CallSiteToFunPtrMap &, NodePairSet &) |
| Update thread call graph.
|
|
virtual void | connectCaller2ForkedFunParams (const CallICFGNode *cs, const SVFFunction *F, NodePairSet &cpySrcNodes) |
| Connect formal and actual parameters for indirect forksites.
|
|
virtual void | connectCaller2CalleeParams (const CallICFGNode *cs, const SVFFunction *F, NodePairSet &cpySrcNodes) |
| Connect formal and actual parameters for indirect callsites.
|
|
ConstraintGraph * | getConstraintGraph () |
| Get constraint graph.
|
|
NodeID | sccRepNode (NodeID id) const override |
| SCC methods.
|
|
NodeBS & | sccSubNodes (NodeID repId) |
|
void | printStat () |
| dump statistics
|
|
virtual void | normalizePointsTo () override |
|
void | cleanConsCG (NodeID id) |
| remove redundant gepnodes in constraint graph
|
|
| BVDataPTAImpl (SVFIR *pag, PointerAnalysis::PTATY type, bool alias_check=true) |
| Constructor.
|
|
| ~BVDataPTAImpl () override=default |
| Destructor.
|
|
PersistentPointsToCache< PointsTo > & | getPtCache () |
|
const PointsTo & | getPts (NodeID id) override |
|
const NodeSet & | getRevPts (NodeID nodeId) override |
|
virtual void | clearPts (NodeID id, NodeID element) |
| Remove element from the points-to set of id.
|
|
virtual void | clearFullPts (NodeID id) |
| Clear points-to set of id.
|
|
virtual bool | addPts (NodeID id, NodeID ptd) |
|
virtual void | clearAllPts () |
| Clear all data.
|
|
virtual void | expandFIObjs (const PointsTo &pts, PointsTo &expandedPts) |
| Expand FI objects.
|
|
virtual void | expandFIObjs (const NodeBS &pts, NodeBS &expandedPts) |
| TODO: remove repetition.
|
|
void | remapPointsToSets (void) |
| Remap all points-to sets to use the current mapping.
|
|
virtual void | writeToFile (const std::string &filename) |
| Interface for analysis result storage on filesystem.
|
|
virtual void | writeObjVarToFile (const std::string &filename) |
|
virtual void | writePtsResultToFile (std::fstream &f) |
|
virtual void | writeGepObjVarMapToFile (std::fstream &f) |
|
virtual bool | readFromFile (const std::string &filename) |
|
virtual void | readPtsResultFromFile (std::ifstream &f) |
|
virtual void | readGepObjVarMapFromFile (std::ifstream &f) |
|
virtual void | readAndSetObjFieldSensitivity (std::ifstream &f, const std::string &delimiterStr) |
|
AliasResult | alias (const SVFValue *V1, const SVFValue *V2) override |
| Interface expose to users of our pointer analysis, given Value infos.
|
|
AliasResult | alias (NodeID node1, NodeID node2) override |
| Interface expose to users of our pointer analysis, given PAGNodeID.
|
|
virtual AliasResult | alias (const PointsTo &pts1, const PointsTo &pts2) |
| Interface expose to users of our pointer analysis, given two pts.
|
|
void | dumpCPts () override |
| dump and debug, print out conditional pts
|
|
void | dumpTopLevelPtsTo () override |
|
void | dumpAllPts () override |
|
ICFG * | getICFG () const |
| Get ICFG.
|
|
u32_t | getNumOfResolvedIndCallEdge () const |
| Return number of resolved indirect call edges.
|
|
PTACallGraph * | getCallGraph () const |
| Return call graph.
|
|
CallGraphSCC * | getCallGraphSCC () const |
| Return call graph SCC.
|
|
| PointerAnalysis (SVFIR *pag, PTATY ty=Default_PTA, bool alias_check=true) |
| Constructor.
|
|
PTATY | getAnalysisTy () const |
| Type of pointer analysis.
|
|
PTAImplTy | getImplTy () const |
| Return implementation type of the pointer analysis.
|
|
bool | printStat () |
| Whether print statistics.
|
|
void | disablePrintStat () |
| Whether print statistics.
|
|
CallEdgeMap & | getIndCallMap () |
| Get callees from an indirect callsite.
|
|
bool | hasIndCSCallees (const CallICFGNode *cs) const |
|
const FunctionSet & | getIndCSCallees (const CallICFGNode *cs) const |
|
virtual void | resolveIndCalls (const CallICFGNode *cs, const PointsTo &target, CallEdgeMap &newEdges) |
| Resolve indirect call edges.
|
|
void | callGraphSCCDetection () |
| PTACallGraph SCC related methods.
|
|
NodeID | getCallGraphSCCRepNode (NodeID id) const |
| Get SCC rep node of a SVFG node.
|
|
bool | inSameCallGraphSCC (const SVFFunction *fun1, const SVFFunction *fun2) |
| Return TRUE if this edge is inside a PTACallGraph SCC, i.e., src node and dst node are in the same SCC on the SVFG.
|
|
bool | isInRecursion (const SVFFunction *fun) const |
|
bool | isLocalVarInRecursiveFun (NodeID id) const |
| Whether a local variable is in function recursions.
|
|
CommonCHGraph * | getCHGraph () const |
| get CHGraph
|
|
void | getVFnsFromCHA (const CallICFGNode *cs, VFunSet &vfns) |
|
void | getVFnsFromPts (const CallICFGNode *cs, const PointsTo &target, VFunSet &vfns) |
|
void | connectVCallToVFns (const CallICFGNode *cs, const VFunSet &vfns, CallEdgeMap &newEdges) |
|
virtual void | resolveCPPIndCalls (const CallICFGNode *cs, const PointsTo &target, CallEdgeMap &newEdges) |
| Resolve cpp indirect call edges.
|
|
SVFIR * | getPAG () const |
|
PTAStat * | getStat () const |
| Get PTA stat.
|
|
SVFModule * | getModule () const |
| Module.
|
|
OrderedNodeSet & | getAllValidPtrs () |
| Get all Valid Pointers for resolution.
|
|
virtual void | computeDDAPts (NodeID) |
| Compute points-to results on-demand, overridden by derived classes.
|
|
void | printIndCSTargets (const CallICFGNode *cs, const FunctionSet &targets) |
| Print targets of a function pointer.
|
|
virtual void | dumpPts (NodeID ptr, const PointsTo &pts) |
|
void | printIndCSTargets () |
|
void | dumpAllTypes () |
|
void | dumpStat () |
| Dump the statistics.
|
|
bool | containBlackHoleNode (const PointsTo &pts) |
| Determine whether a points-to contains a black hole or constant node.
|
|
bool | containConstantNode (const PointsTo &pts) |
|
virtual bool | isBlkObjOrConstantObj (NodeID ptd) const |
|
bool | isHeapMemObj (NodeID id) const |
| Whether this object is heap or array.
|
|
bool | isArrayMemObj (NodeID id) const |
|
bool | isFIObjNode (NodeID id) const |
|
NodeID | getBaseObjVar (NodeID id) |
|
NodeID | getFIObjVar (NodeID id) |
|
NodeID | getGepObjVar (NodeID id, const APOffset &ap) |
|
virtual const NodeBS & | getAllFieldsObjVars (NodeID id) |
|
void | setObjFieldInsensitive (NodeID id) |
|
bool | isFieldInsensitive (NodeID id) const |
|
|
Public Types inherited from SVF::Andersen |
typedef SCCDetection< ConstraintGraph * > | CGSCC |
|
Public Types inherited from SVF::AndersenBase |
typedef OrderedMap< const CallICFGNode *, NodeID > | CallSite2DummyValPN |
|
typedef SVF::GenericGraphTraits< GraphType > | GTraits |
| Define the GTraits and node iterator for printing.
|
|
typedef GTraits::NodeRef | GNODE |
|
typedef GTraits::EdgeType | GEDGE |
|
typedef GTraits::ChildIteratorType | child_iterator |
|
typedef SCCDetection< GraphType > | SCC |
|
typedef FIFOWorkList< NodeID > | WorkList |
|
enum | PTBackingType { Mutable
, Persistent
} |
| How the PTData used is implemented. More...
|
|
typedef PTData< NodeID, NodeSet, NodeID, PointsTo > | PTDataTy |
|
typedef DiffPTData< NodeID, NodeSet, NodeID, PointsTo > | DiffPTDataTy |
|
typedef DFPTData< NodeID, NodeSet, NodeID, PointsTo > | DFPTDataTy |
|
typedef VersionedPTData< NodeID, NodeSet, NodeID, PointsTo, VersionedVar, Set< VersionedVar > > | VersionedPTDataTy |
|
typedef MutablePTData< NodeID, NodeSet, NodeID, PointsTo > | MutPTDataTy |
|
typedef MutableDiffPTData< NodeID, NodeSet, NodeID, PointsTo > | MutDiffPTDataTy |
|
typedef MutableDFPTData< NodeID, NodeSet, NodeID, PointsTo > | MutDFPTDataTy |
|
typedef MutableIncDFPTData< NodeID, NodeSet, NodeID, PointsTo > | MutIncDFPTDataTy |
|
typedef MutableVersionedPTData< NodeID, NodeSet, NodeID, PointsTo, VersionedVar, Set< VersionedVar > > | MutVersionedPTDataTy |
|
typedef PersistentPTData< NodeID, NodeSet, NodeID, PointsTo > | PersPTDataTy |
|
typedef PersistentDiffPTData< NodeID, NodeSet, NodeID, PointsTo > | PersDiffPTDataTy |
|
typedef PersistentDFPTData< NodeID, NodeSet, NodeID, PointsTo > | PersDFPTDataTy |
|
typedef PersistentIncDFPTData< NodeID, NodeSet, NodeID, PointsTo > | PersIncDFPTDataTy |
|
typedef PersistentVersionedPTData< NodeID, NodeSet, NodeID, PointsTo, VersionedVar, Set< VersionedVar > > | PersVersionedPTDataTy |
|
enum | PTATY {
Andersen_BASE
, Andersen_WPA
, AndersenSCD_WPA
, AndersenSFR_WPA
,
AndersenWaveDiff_WPA
, Steensgaard_WPA
, CSCallString_WPA
, CSSummary_WPA
,
FSDATAFLOW_WPA
, FSSPARSE_WPA
, VFS_WPA
, FSCS_WPA
,
CFLFICI_WPA
, CFLFSCI_WPA
, CFLFSCS_WPA
, TypeCPP_WPA
,
FieldS_DDA
, FlowS_DDA
, PathS_DDA
, Cxt_DDA
,
Default_PTA
} |
| Pointer analysis type list. More...
|
|
enum | PTAImplTy { BaseImpl
, BVDataImpl
, CondImpl
} |
| Implementation type: BVDataPTAImpl or CondPTAImpl. More...
|
|
typedef Set< const CallICFGNode * > | CallSiteSet |
| Indirect call edges type, map a callsite to a set of callees.
|
|
typedef SVFIR::CallSiteToFunPtrMap | CallSiteToFunPtrMap |
|
typedef Set< const SVFFunction * > | FunctionSet |
|
typedef OrderedMap< const CallICFGNode *, FunctionSet > | CallEdgeMap |
|
typedef SCCDetection< PTACallGraph * > | CallGraphSCC |
|
typedef Set< const SVFGlobalValue * > | VTableSet |
|
typedef Set< const SVFFunction * > | VFunSet |
|
Public Attributes inherited from SVF::AndersenBase |
NodeBS | redundantGepNodes |
|
u32_t | numOfIteration |
| num of iterations during constraint solving
|
|
Static Public Attributes inherited from SVF::AndersenBase |
static u32_t | numOfProcessedAddr = 0 |
| Statistics.
|
|
static u32_t | numOfProcessedCopy = 0 |
| Number of processed Addr edge.
|
|
static u32_t | numOfProcessedGep = 0 |
| Number of processed Copy edge.
|
|
static u32_t | numOfProcessedLoad = 0 |
| Number of processed Gep edge.
|
|
static u32_t | numOfProcessedStore = 0 |
| Number of processed Load edge.
|
|
static u32_t | numOfSfrs = 0 |
| Number of processed Store edge.
|
|
static u32_t | numOfFieldExpand = 0 |
|
static u32_t | numOfSCCDetection = 0 |
|
static double | timeOfSCCDetection = 0 |
|
static double | timeOfSCCMerges = 0 |
|
static double | timeOfCollapse = 0 |
|
static u32_t | AveragePointsToSetSize = 0 |
|
static u32_t | MaxPointsToSetSize = 0 |
|
static double | timeOfProcessCopyGep = 0 |
|
static double | timeOfProcessLoadStore = 0 |
|
static double | timeOfUpdateCallGraph = 0 |
|
static const std::string | aliasTestMayAlias = "MAYALIAS" |
|
static const std::string | aliasTestMayAliasMangled = "_Z8MAYALIASPvS_" |
|
static const std::string | aliasTestNoAlias = "NOALIAS" |
|
static const std::string | aliasTestNoAliasMangled = "_Z7NOALIASPvS_" |
|
static const std::string | aliasTestPartialAlias = "PARTIALALIAS" |
|
static const std::string | aliasTestPartialAliasMangled = "_Z12PARTIALALIASPvS_" |
|
static const std::string | aliasTestMustAlias = "MUSTALIAS" |
|
static const std::string | aliasTestMustAliasMangled = "_Z9MUSTALIASPvS_" |
|
static const std::string | aliasTestFailMayAlias = "EXPECTEDFAIL_MAYALIAS" |
|
static const std::string | aliasTestFailMayAliasMangled = "_Z21EXPECTEDFAIL_MAYALIASPvS_" |
|
static const std::string | aliasTestFailNoAlias = "EXPECTEDFAIL_NOALIAS" |
|
static const std::string | aliasTestFailNoAliasMangled = "_Z20EXPECTEDFAIL_NOALIASPvS_" |
|
Protected Member Functions inherited from SVF::Andersen |
virtual void | computeDiffPts (NodeID id) |
| Handle diff points-to set.
|
|
virtual const PointsTo & | getDiffPts (NodeID id) |
|
void | updatePropaPts (NodeID dstId, NodeID srcId) |
| Handle propagated points-to set.
|
|
void | clearPropaPts (NodeID src) |
|
virtual void | initWorklist () |
|
void | processAllAddr () |
| handling various constraints
|
|
virtual bool | processLoad (NodeID node, const ConstraintEdge *load) |
|
virtual bool | processStore (NodeID node, const ConstraintEdge *load) |
|
virtual bool | processCopy (NodeID node, const ConstraintEdge *edge) |
|
virtual bool | processGep (NodeID node, const GepCGEdge *edge) |
|
virtual void | handleCopyGep (ConstraintNode *node) |
|
virtual void | handleLoadStore (ConstraintNode *node) |
|
virtual void | processAddr (const AddrCGEdge *addr) |
|
virtual bool | processGepPts (const PointsTo &pts, const GepCGEdge *edge) |
|
virtual bool | addCopyEdge (NodeID src, NodeID dst) |
| Add copy edge on constraint graph.
|
|
virtual void | mergeNodeToRep (NodeID nodeId, NodeID newRepId) |
| Merge sub node to its rep.
|
|
virtual bool | mergeSrcToTgt (NodeID srcId, NodeID tgtId) |
|
void | mergeSccNodes (NodeID repNodeId, const NodeBS &subNodes) |
| Merge sub node in a SCC cycle to their rep node.
|
|
void | mergeSccCycle () |
|
virtual void | collapsePWCNode (NodeID nodeId) |
| Collapse a field object into its base for field insensitive analysis.
|
|
void | collapseFields () |
| collapse positive weight cycles of a graph
|
|
bool | collapseNodePts (NodeID nodeId) |
|
bool | collapseField (NodeID nodeId) |
|
void | updateNodeRepAndSubs (NodeID nodeId, NodeID newRepId) |
| Updates subnodes of its rep, and rep node of its subs.
|
|
virtual NodeStack & | SCCDetect () |
| SCC detection.
|
|
void | sanitizePts () |
| Sanitize pts for field insensitive objects.
|
|
virtual const std::string | PTAName () const |
| Get PTA name.
|
|
virtual void | cluster (void) const |
|
Protected Member Functions inherited from SVF::AndersenBase |
void | heapAllocatorViaIndCall (const CallICFGNode *cs, NodePairSet &cpySrcNodes) |
|
| WPASolver () |
| Constructor.
|
|
virtual | ~WPASolver ()=default |
| Destructor.
|
|
SCC * | getSCCDetector () const |
| Get SCC detector.
|
|
const GraphType | graph () |
| Get/Set graph methods.
|
|
void | setGraph (GraphType g) |
|
virtual NodeStack & | SCCDetect (NodeSet &candidates) |
|
virtual void | propagate (GNODE *v) |
|
virtual bool | propFromSrcToDst (GEDGE *) |
| Propagate information from source to destination node, to be implemented in the child class.
|
|
NodeID | popFromWorklist () |
| Worklist operations.
|
|
virtual void | pushIntoWorklist (NodeID id) |
|
bool | isWorklistEmpty () |
|
bool | isInWorklist (NodeID id) |
|
GNODE * | Node (NodeID id) |
| Get node on the graph.
|
|
NodeID | Node_Index (GNODE node) |
| Get node ID.
|
|
PTDataTy * | getPTDataTy () const |
| Get points-to data structure.
|
|
void | finalize () override |
| Finalization of pointer analysis, and normalize points-to information to Bit Vector representation.
|
|
DiffPTDataTy * | getDiffPTDataTy () const |
|
DFPTDataTy * | getDFPTDataTy () const |
|
MutDFPTDataTy * | getMutDFPTDataTy () const |
|
VersionedPTDataTy * | getVersionedPTDataTy () const |
|
virtual void | onTheFlyCallGraphSolve (const CallSiteToFunPtrMap &callsites, CallEdgeMap &newEdges) |
| On the fly call graph construction.
|
|
virtual void | onTheFlyThreadCallGraphSolve (const CallSiteToFunPtrMap &callsites, CallEdgeMap &newForkEdges) |
| On the fly thread call graph construction respecting forksite.
|
|
const CallSiteToFunPtrMap & | getIndirectCallsites () const |
| Return all indirect callsites.
|
|
NodeID | getFunPtr (const CallICFGNode *cs) const |
| Return function pointer PAGNode at a callsite cs.
|
|
virtual void | validateTests () |
| Alias check functions to verify correctness of pointer analysis.
|
|
virtual void | validateSuccessTests (std::string fun) |
|
virtual void | validateExpectedFailureTests (std::string fun) |
|
void | resetObjFieldSensitive () |
| Reset all object node as field-sensitive.
|
|
Protected Attributes inherited from SVF::Andersen |
CallSite2DummyValPN | callsite2DummyValPN |
| Map an instruction to a dummy obj which created at an indirect callsite, which invokes a heap allocator.
|
|
Protected Attributes inherited from SVF::AndersenBase |
ConstraintGraph * | consCG |
| Constraint Graph.
|
|
CallSite2DummyValPN | callsite2DummyValPN |
|
bool | reanalyze |
| Reanalyze if any constraint value changed.
|
|
u32_t | iterationForPrintStat |
| print out statistics for i-th iteration
|
|
GraphType | _graph |
| Graph.
|
|
std::unique_ptr< SCC > | scc |
| SCC.
|
|
WorkList | worklist |
| Worklist for resolution.
|
|
bool | print_stat |
| User input flags.
|
|
bool | alias_validation |
| Flag for validating points-to/alias results.
|
|
u32_t | OnTheFlyIterBudgetForStat |
| Flag for iteration budget for on-the-fly statistics.
|
|
SVFModule * | svfMod |
| Module.
|
|
PTATY | ptaTy |
| Pointer analysis Type.
|
|
PTAImplTy | ptaImplTy |
| PTA implementation type.
|
|
PTAStat * | stat |
| Statistics.
|
|
PTACallGraph * | callgraph |
| Call graph used for pointer analysis.
|
|
CallGraphSCC * | callGraphSCC |
| SCC for PTACallGraph.
|
|
ICFG * | icfg |
| Interprocedural control-flow graph.
|
|
CommonCHGraph * | chgraph |
| CHGraph.
|
|
static SVFIR * | pag = nullptr |
| SVFIR.
|
|
Wave propagation with diff points-to set.
Definition at line 397 of file Andersen.h.