|
Static Value-Flow Analysis
|
#include <FlowSensitive.h>
Public Member Functions | |
| FlowSensitive (SVFIR *_pag, PTATY type=PTATY::FSSPARSE_WPA) | |
| Constructor. | |
| ~FlowSensitive () override=default | |
| Destructor. | |
| virtual bool | runOnModule () |
| We start from here. | |
| void | analyze () override |
| Flow sensitive analysis. | |
| virtual void | solveAndwritePtsToFile (const std::string &filename) |
| virtual void | readPtsFromFile (const std::string &filename) |
| virtual void | solveConstraints () |
| void | initialize () override |
| Initialize analysis. | |
| void | finalize () override |
| Finalize analysis. | |
| const std::string | PTAName () const override |
| Get PTA name. | |
| SVFG * | getSVFG () const |
| Return SVFG. | |
| Public Member Functions inherited from SVF::WPAFSSolver< SVFG * > | |
| WPAFSSolver () | |
| Constructor. | |
| virtual | ~WPAFSSolver () |
| Destructor. | |
| virtual NodeID | sccRepNode (NodeID id) const |
| SCC methods. | |
| Public Member Functions inherited from SVF::BVDataPTAImpl | |
| BVDataPTAImpl (SVFIR *pag, 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 | unionPts (NodeID id, const PointsTo &target) |
| virtual bool | unionPts (NodeID id, NodeID ptd) |
| 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 SVFVar *V1, const SVFVar *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. | |
| bool | mayAlias (const PointsTo &pts1, const PointsTo &pts2) |
| Convenience bool wrappers: return true if the two operands may/must/partial alias. | |
| void | dumpCPts () override |
| dump and debug, print out conditional pts | |
| void | dumpTopLevelPtsTo () override |
| void | dumpAllPts () override |
| bool | mayAlias (const SVFVar *V1, const SVFVar *V2) |
| bool | mayAlias (NodeID node1, NodeID node2) |
| Public Member Functions inherited from SVF::PointerAnalysis | |
| ICFG * | getICFG () const |
| Get ICFG. | |
| u32_t | getNumOfResolvedIndCallEdge () const |
| Return number of resolved indirect call edges. | |
| CallGraph * | getCallGraph () const |
| Return call graph. | |
| CallGraphSCC * | getCallGraphSCC () const |
| Return call graph SCC. | |
| PointerAnalysis (SVFIR *pag, PTATY ty=PTATY::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 FunObjVar *fun1, const FunObjVar *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 FunObjVar *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. | |
| OrderedNodeSet & | getAllValidPtrs () |
| Get all Valid Pointers for resolution. | |
| virtual | ~PointerAnalysis () |
| Destructor. | |
| virtual void | computeDDAPts (NodeID) |
| Compute points-to results on-demand, overridden by derived classes. | |
| virtual NodeBS | getMayAliases (NodeID node) |
| bool | mayAlias (const SVFVar *V1, const SVFVar *V2) |
| Convenience bool wrappers: return true if the two operands may/must/partial alias. | |
| bool | mayAlias (NodeID node1, NodeID node2) |
| 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 | getBaseObjVarID (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 |
Static Public Member Functions | |
| static FlowSensitive * | createFSWPA (SVFIR *_pag) |
| Create single instance of flow-sensitive pointer analysis. | |
| static void | releaseFSWPA () |
| Release flow-sensitive pointer analysis. | |
| static bool | classof (const FlowSensitive *) |
| Methods for support type inquiry through isa, cast, and dyn_cast. | |
| static bool | classof (const PointerAnalysis *pta) |
| Static Public Member Functions inherited from SVF::BVDataPTAImpl | |
| static bool | classof (const PointerAnalysis *pta) |
Protected Types | |
| typedef SVFG::SVFGEdgeSetTy | SVFGEdgeSetTy |
Protected Member Functions | |
| NodeStack & | SCCDetect () override |
| SCC detection. | |
| bool | propFromSrcToDst (SVFGEdge *edge) override |
| Propagation. | |
| virtual bool | propAlongDirectEdge (const DirectSVFGEdge *edge) |
| Propagate points-to information along a DIRECT SVFG edge. | |
| virtual bool | propAlongIndirectEdge (const IndirectSVFGEdge *edge) |
| Propagate points-to information along an INDIRECT SVFG edge. | |
| virtual bool | propVarPtsFromSrcToDst (NodeID var, const SVFGNode *src, const SVFGNode *dst) |
| Propagate points-to information of a certain variable from src to dst. | |
| virtual bool | propagateFromAPToFP (const ActualParmSVFGNode *ap, const SVFGNode *dst) |
| virtual bool | propagateFromFRToAR (const FormalRetSVFGNode *fr, const SVFGNode *dst) |
| virtual bool | weakUpdateOutFromIn (const SVFGNode *node) |
| Handle weak updates. | |
| virtual bool | strongUpdateOutFromIn (const SVFGNode *node, NodeID singleton) |
| Handle strong updates. | |
| bool | propVarPtsAfterCGUpdated (NodeID var, const SVFGNode *src, const SVFGNode *dst) |
| virtual bool | propDFOutToIn (const SVFGNode *srcStmt, NodeID srcVar, const SVFGNode *dstStmt, NodeID dstVar) |
| virtual bool | propDFInToIn (const SVFGNode *srcStmt, NodeID srcVar, const SVFGNode *dstStmt, NodeID dstVar) |
| bool | updateOutFromIn (const SVFGNode *srcStmt, NodeID srcVar, const SVFGNode *dstStmt, NodeID dstVar) |
| Update data-flow points-to data. | |
| virtual bool | updateInFromIn (const SVFGNode *srcStmt, NodeID srcVar, const SVFGNode *dstStmt, NodeID dstVar) |
| virtual bool | updateInFromOut (const SVFGNode *srcStmt, NodeID srcVar, const SVFGNode *dstStmt, NodeID dstVar) |
| virtual bool | unionPtsFromIn (const SVFGNode *stmt, NodeID srcVar, NodeID dstVar) |
| virtual bool | unionPtsFromTop (const SVFGNode *stmt, NodeID srcVar, NodeID dstVar) |
| void | clearAllDFOutVarFlag (const SVFGNode *stmt) |
| void | processNode (NodeID nodeId) override |
| Handle various constraints. | |
| bool | processSVFGNode (SVFGNode *node) |
| virtual bool | processAddr (const AddrSVFGNode *addr) |
| virtual bool | processCopy (const CopySVFGNode *copy) |
| virtual bool | processPhi (const PHISVFGNode *phi) |
| virtual bool | processGep (const GepSVFGNode *edge) |
| virtual bool | processLoad (const LoadSVFGNode *load) |
| virtual bool | processStore (const StoreSVFGNode *store) |
| bool | updateCallGraph (const CallSiteToFunPtrMap &callsites) override |
| Update call graph. | |
| void | connectCallerAndCallee (const CallEdgeMap &newEdges, SVFGEdgeSetTy &edges) |
| Connect nodes in SVFG. | |
| virtual void | updateConnectedNodes (const SVFGEdgeSetTy &edges) |
| Update nodes connected during updating call graph. | |
| bool | isStrongUpdate (const SVFGNode *node, NodeID &singleton) |
| Return TRUE if this is a strong update STORE statement. | |
| virtual void | countAliases (Set< std::pair< NodeID, NodeID > > cmp, unsigned *mayAliases, unsigned *noAliases) |
| Fills may/noAliases for the location/pointer pairs in cmp. | |
| const PointsTo & | getDFInPtsSet (const SVFGNode *stmt, const NodeID node) |
| Get points-to set for a node from data flow IN/OUT set at a statement. | |
| const PointsTo & | getDFOutPtsSet (const SVFGNode *stmt, const NodeID node) |
| virtual void | cluster (void) |
| virtual void | plainMap (void) const |
| Sets the global best mapping as a plain mapping, i.e. n -> n. | |
| void | svfgStat () |
| const DFInOutMap & | getDFInputMap () const |
| const DFInOutMap & | getDFOutputMap () const |
| Protected Member Functions inherited from SVF::WPASolver< GraphType > | |
| 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 | initWorklist () |
| virtual void | solveWorklist () |
| virtual void | collapseFields () |
| collapse positive weight cycles of a graph | |
| 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. | |
| 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. | |
| virtual void | normalizePointsTo () |
| 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 | |
| SVFG * | svfg |
| SVFGBuilder | memSSA |
| AndersenWaveDiff * | ander |
| std::vector< std::pair< hclust_fast_methods, std::vector< NodeID > > > | candidateMappings |
| Save candidate mappings for evaluation's sake. | |
| u32_t | numOfProcessedAddr |
| Statistics. | |
| u32_t | numOfProcessedCopy |
| Number of processed Addr node. | |
| u32_t | numOfProcessedGep |
| Number of processed Copy node. | |
| u32_t | numOfProcessedPhi |
| Number of processed Gep node. | |
| u32_t | numOfProcessedLoad |
| Number of processed Phi node. | |
| u32_t | numOfProcessedStore |
| Number of processed Load node. | |
| u32_t | numOfProcessedActualParam |
| Number of processed Store node. | |
| u32_t | numOfProcessedFormalRet |
| Number of processed actual param node. | |
| u32_t | numOfProcessedMSSANode |
| Number of processed formal ret node. | |
| u32_t | maxSCCSize |
| Number of processed mssa node. | |
| u32_t | numOfSCC |
| u32_t | numOfNodesInSCC |
| double | solveTime |
| time of solve. | |
| double | sccTime |
| time of SCC detection. | |
| double | processTime |
| time of processNode. | |
| double | propagationTime |
| time of points-to propagation. | |
| double | directPropaTime |
| time of points-to propagation of address-taken objects | |
| double | indirectPropaTime |
| time of points-to propagation of top-level pointers | |
| double | updateTime |
| time of strong/weak updates. | |
| double | addrTime |
| time of handling address edges | |
| double | copyTime |
| time of handling copy edges | |
| double | gepTime |
| time of handling gep edges | |
| double | loadTime |
| time of load edges | |
| double | storeTime |
| time of store edges | |
| double | phiTime |
| time of phi nodes. | |
| double | updateCallGraphTime |
| time of updating call graph | |
| NodeBS | svfgHasSU |
| Protected Attributes inherited from SVF::WPAFSSolver< SVFG * > | |
| NodeStack | nodeStack |
| stack used for processing nodes. | |
| Protected Attributes inherited from SVF::WPASolver< GraphType > | |
| 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. | |
| Protected Attributes inherited from SVF::PointerAnalysis | |
| 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. | |
| PTATY | ptaTy |
| Pointer analysis Type. | |
| PTAImplTy | ptaImplTy |
| PTA implementation type. | |
| PTAStat * | stat |
| Statistics. | |
| CallGraph * | callgraph |
| Call graph used for pointer analysis. | |
| CallGraphSCC * | callGraphSCC |
| SCC for PTACallGraph. | |
| ICFG * | icfg |
| Interprocedural control-flow graph. | |
| CommonCHGraph * | chgraph |
| CHGraph. | |
Static Protected Attributes | |
| static std::unique_ptr< FlowSensitive > | fspta |
| Static Protected Attributes inherited from SVF::PointerAnalysis | |
| static SVFIR * | pag = nullptr |
| SVFIR. | |
Friends | |
| class | FlowSensitiveStat |
Additional Inherited Members | |
| Public Attributes inherited from SVF::WPASolver< GraphType > | |
| u32_t | numOfIteration |
| num of iterations during constraint solving | |
| Static Public Attributes inherited from SVF::PointerAnalysis | |
| 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_" |
Definition at line 47 of file FlowSensitive.h.
Definition at line 55 of file FlowSensitive.h.
Definition at line 54 of file FlowSensitive.h.
Definition at line 56 of file FlowSensitive.h.
|
protected |
Definition at line 51 of file FlowSensitive.h.
|
inlineexplicit |
Constructor.
Definition at line 59 of file FlowSensitive.h.
|
overridedefault |
Destructor.
|
overridevirtual |
Flow sensitive analysis.
Start analysis
Implements SVF::PointerAnalysis.
Definition at line 134 of file FlowSensitive.cpp.
|
inlinestatic |
Methods for support type inquiry through isa, cast, and dyn_cast.
Definition at line 122 of file FlowSensitive.h.
|
inlinestatic |
Definition at line 126 of file FlowSensitive.h.
|
inlineprotected |
Definition at line 209 of file FlowSensitive.h.
|
protectedvirtual |
Performs clustering based on ander, setting the global best mapping accordingly.
Reimplemented in SVF::VersionedFlowSensitive.
Definition at line 829 of file FlowSensitive.cpp.
|
protected |
Connect nodes in SVFG.
Handle parameter passing in SVFG
Definition at line 744 of file FlowSensitive.cpp.
|
protectedvirtual |
Fills may/noAliases for the location/pointer pairs in cmp.
Definition at line 862 of file FlowSensitive.cpp.
|
inlinestatic |
Create single instance of flow-sensitive pointer analysis.
Definition at line 77 of file FlowSensitive.h.
|
overridevirtual |
Finalize analysis.
Finalize analysis
Reimplemented from SVF::BVDataPTAImpl.
Reimplemented in SVF::FSMPTA< SVFGGraph >, and SVF::VersionedFlowSensitive.
Definition at line 169 of file FlowSensitive.cpp.
|
inlineprotected |
Get points-to set for a node from data flow IN/OUT set at a statement.
Definition at line 246 of file FlowSensitive.h.
|
inlineprotected |
Get IN/OUT data flow map. May only be called when the backing is MUTABLE.
Definition at line 259 of file FlowSensitive.h.
|
inlineprotected |
Definition at line 250 of file FlowSensitive.h.
|
inlineprotected |
Definition at line 263 of file FlowSensitive.h.
|
inline |
|
overridevirtual |
Initialize analysis.
Initialize analysis
Reimplemented from SVF::PointerAnalysis.
Reimplemented in SVF::FSMPTA< SVFGGraph >, and SVF::VersionedFlowSensitive.
Definition at line 44 of file FlowSensitive.cpp.
Return TRUE if this is a strong update STORE statement.
Return TRUE if this is a strong update STORE statement.
Find the unique element in cpts
Definition at line 661 of file FlowSensitive.cpp.
|
protectedvirtual |
Sets the global best mapping as a plain mapping, i.e. n -> n.
Definition at line 845 of file FlowSensitive.cpp.
|
protectedvirtual |
Process address node
TODO: If this object has been set as field-insensitive, just add the insensitive object node into dst pointer's pts.
Definition at line 451 of file FlowSensitive.cpp.
|
protectedvirtual |
Process copy node
Definition at line 468 of file FlowSensitive.cpp.
|
protectedvirtual |
Process gep node
Definition at line 501 of file FlowSensitive.cpp.
|
protectedvirtual |
Process load node
Foreach node \in src pts(dst) = union pts(node)
If the ptd is a field-insensitive node, we should also get all field nodes' points-to sets and pass them to pagDst.
Reimplemented in SVF::VersionedFlowSensitive.
Definition at line 553 of file FlowSensitive.cpp.
|
overrideprotectedvirtual |
Handle various constraints.
Process each SVFG node
Reimplemented from SVF::WPASolver< GraphType >.
Reimplemented in SVF::FSMPTA< SVFGGraph >, and SVF::VersionedFlowSensitive.
Definition at line 222 of file FlowSensitive.cpp.
|
protectedvirtual |
Process mssa phi node
Definition at line 480 of file FlowSensitive.cpp.
|
protectedvirtual |
Process store node
foreach node \in dst pts(node) = union pts(src)
STORE statement can only be processed if the pointer on the LHS points to something. If we handle STORE with an empty points-to set, the OUT set will be updated from IN set. Then if LHS pointer points-to one target and it has been identified as a strong update, we can't remove those points-to information computed before this strong update from the OUT set.
check if this is a strong updates store
Reimplemented in SVF::VersionedFlowSensitive.
Definition at line 600 of file FlowSensitive.cpp.
|
protected |
Process each SVFG node
Definition at line 234 of file FlowSensitive.cpp.
|
protectedvirtual |
Propagate points-to information from an actual-param to a formal-param. Not necessary if SVFGOPT is used instead of original SVFG.
Propagate points-to information from actual-param to formal-param. Not necessary if SVFGOPT is used instead of original SVFG.
Definition at line 361 of file FlowSensitive.cpp.
|
protectedvirtual |
Propagate points-to information from a formal-ret to an actual-ret. Not necessary if SVFGOPT is used instead of original SVFG.
Propagate points-to information from formal-ret to actual-ret. Not necessary if SVFGOPT is used instead of original SVFG.
Definition at line 377 of file FlowSensitive.cpp.
|
protectedvirtual |
Propagate points-to information along a DIRECT SVFG edge.
Propagate points-to information along DIRECT SVFG edge.
Definition at line 330 of file FlowSensitive.cpp.
|
protectedvirtual |
Propagate points-to information along an INDIRECT SVFG edge.
Propagate points-to information along INDIRECT SVFG edge.
If this is a field-insensitive obj, propagate all field node's pts
Reimplemented in SVF::VersionedFlowSensitive.
Definition at line 392 of file FlowSensitive.cpp.
|
inlineprotectedvirtual |
Definition at line 179 of file FlowSensitive.h.
|
inlineprotectedvirtual |
Definition at line 175 of file FlowSensitive.h.
|
overrideprotected |
Propagation.
Propagate points-to information from an edge's src node to its dst node.
Propagate points-to information from source to destination node Union dfOutput of src to dfInput of dst. Only propagate points-to set of node which exists on the SVFG edge.
Definition at line 310 of file FlowSensitive.cpp.
|
protected |
Propagation between newly connected SVFG nodes during updateCallGraph. Can only be used during updateCallGraph.
Propagate points-to information of a certain variable from src to dst.
Definition at line 814 of file FlowSensitive.cpp.
|
protectedvirtual |
Propagate points-to information of a certain variable from src to dst.
Propagate points-to information of a certain variable from src to dst.
Definition at line 432 of file FlowSensitive.cpp.
|
inlineoverridevirtual |
Get PTA name.
Reimplemented from SVF::PointerAnalysis.
Reimplemented in SVF::VersionedFlowSensitive.
Definition at line 115 of file FlowSensitive.h.
|
virtual |
Initialization for the Solver
Load the pts from file
finalize the analysis
Reimplemented in SVF::VersionedFlowSensitive.
Definition at line 155 of file FlowSensitive.cpp.
|
inlinestatic |
Release flow-sensitive pointer analysis.
Definition at line 88 of file FlowSensitive.h.
|
inlinevirtual |
|
overrideprotectedvirtual |
SCC detection.
SCC detection
Reimplemented from SVF::WPAFSSolver< SVFG * >.
Reimplemented in SVF::FSMPTA< SVFGGraph >.
Definition at line 210 of file FlowSensitive.cpp.
|
virtual |
Start analysis
Initialization for the Solver
finalize the analysis
Reimplemented in SVF::VersionedFlowSensitive.
Definition at line 118 of file FlowSensitive.cpp.
|
virtual |
Start solving constraints
Definition at line 76 of file FlowSensitive.cpp.
|
inlineprotectedvirtual |
Handle strong updates.
Definition at line 164 of file FlowSensitive.h.
|
protected |
|
inlineprotectedvirtual |
Definition at line 200 of file FlowSensitive.h.
|
inlineprotectedvirtual |
Definition at line 204 of file FlowSensitive.h.
|
overrideprotectedvirtual |
Update call graph.
Update call graph.
Update call graph
Reimplemented from SVF::BVDataPTAImpl.
Definition at line 691 of file FlowSensitive.cpp.
|
protectedvirtual |
Update nodes connected during updating call graph.
Push nodes connected during update call graph into worklist so they will be solved during next iteration.
If this is a formal-param or actual-ret node, we need to solve this phi node in next iteration
If this is a formal-in or actual-out node, we need to propagate points-to information from its predecessor node.
If this is a field-insensitive obj, propagate all field node's pts
Reimplemented in SVF::FSMPTA< SVFGGraph >, and SVF::VersionedFlowSensitive.
Definition at line 764 of file FlowSensitive.cpp.
|
inlineprotectedvirtual |
Definition at line 191 of file FlowSensitive.h.
|
inlineprotectedvirtual |
Definition at line 195 of file FlowSensitive.h.
|
inlineprotected |
Update data-flow points-to data.
Definition at line 187 of file FlowSensitive.h.
|
inlineprotectedvirtual |
Handle weak updates.
Definition at line 159 of file FlowSensitive.h.
|
friend |
Definition at line 49 of file FlowSensitive.h.
|
protected |
time of handling address edges
Definition at line 305 of file FlowSensitive.h.
|
protected |
Definition at line 277 of file FlowSensitive.h.
|
protected |
Save candidate mappings for evaluation's sake.
Definition at line 280 of file FlowSensitive.h.
|
protected |
time of handling copy edges
Definition at line 306 of file FlowSensitive.h.
|
protected |
time of points-to propagation of address-taken objects
Definition at line 302 of file FlowSensitive.h.
|
staticprotected |
Definition at line 275 of file FlowSensitive.h.
|
protected |
time of handling gep edges
Definition at line 307 of file FlowSensitive.h.
|
protected |
time of points-to propagation of top-level pointers
Definition at line 303 of file FlowSensitive.h.
|
protected |
time of load edges
Definition at line 308 of file FlowSensitive.h.
|
protected |
Number of processed mssa node.
Definition at line 294 of file FlowSensitive.h.
|
protected |
Definition at line 276 of file FlowSensitive.h.
|
protected |
Definition at line 296 of file FlowSensitive.h.
|
protected |
Number of processed Store node.
Definition at line 290 of file FlowSensitive.h.
|
protected |
Statistics.
Definition at line 284 of file FlowSensitive.h.
|
protected |
Number of processed Addr node.
Definition at line 285 of file FlowSensitive.h.
|
protected |
Number of processed actual param node.
Definition at line 291 of file FlowSensitive.h.
|
protected |
Number of processed Copy node.
Definition at line 286 of file FlowSensitive.h.
|
protected |
Number of processed Phi node.
Definition at line 288 of file FlowSensitive.h.
|
protected |
Number of processed formal ret node.
Definition at line 292 of file FlowSensitive.h.
|
protected |
Number of processed Gep node.
Definition at line 287 of file FlowSensitive.h.
|
protected |
Number of processed Load node.
Definition at line 289 of file FlowSensitive.h.
|
protected |
Definition at line 295 of file FlowSensitive.h.
|
protected |
time of phi nodes.
Definition at line 310 of file FlowSensitive.h.
|
protected |
time of processNode.
Definition at line 300 of file FlowSensitive.h.
|
protected |
time of points-to propagation.
Definition at line 301 of file FlowSensitive.h.
|
protected |
time of SCC detection.
Definition at line 299 of file FlowSensitive.h.
|
protected |
time of solve.
Definition at line 298 of file FlowSensitive.h.
|
protected |
time of store edges
Definition at line 309 of file FlowSensitive.h.
|
protected |
Definition at line 243 of file FlowSensitive.h.
|
protected |
Definition at line 313 of file FlowSensitive.h.
|
protected |
time of updating call graph
Definition at line 311 of file FlowSensitive.h.
|
protected |
time of strong/weak updates.
Definition at line 304 of file FlowSensitive.h.