|
| | FSMPTA (MHP *m, LockAnalysis *la, SVFGGraph graph) |
| |
| | ~FSMPTA () override=default |
| |
| void | initialize () override |
| | Initialise: build the thread-aware SVFG, then solve sparsely on it.
|
| |
| void | processNode (NodeID nodeId) override |
| | Restrict the solve to the graph's nodes (whole: no restriction).
|
| |
| MHP * | getMHP () const |
| |
| | 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 | finalize () override |
| | Finalize analysis.
|
| |
| const std::string | PTAName () const override |
| | Get PTA name.
|
| |
| SVFG * | getSVFG () const |
| | Return SVFG.
|
| |
| | WPAFSSolver () |
| | Constructor.
|
| |
| virtual | ~WPAFSSolver () |
| | Destructor.
|
| |
| virtual NodeID | sccRepNode (NodeID id) const |
| | SCC methods.
|
| |
| | 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 |
| |
| 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 void | computeDDAPts (NodeID) |
| | Compute points-to results on-demand, overridden by derived classes.
|
| |
| 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 |
| |
|
| typedef BVDataPTAImpl::MutDFPTDataTy | MutDFPTDataTy |
| |
| typedef BVDataPTAImpl::MutDFPTDataTy::DFPtsMap | DFInOutMap |
| |
| typedef BVDataPTAImpl::MutDFPTDataTy::PtsMap | PtsMap |
| |
| 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 |
| |
| 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 |
| |
| typedef Set< const CallICFGNode * > | CallSiteSet |
| | Indirect call edges type, map a callsite to a set of callees.
|
| |
| typedef SVFIR::CallSiteToFunPtrMap | CallSiteToFunPtrMap |
| |
| typedef Set< const FunObjVar * > | FunctionSet |
| |
| typedef OrderedMap< const CallICFGNode *, FunctionSet > | CallEdgeMap |
| |
| typedef SCCDetection< CallGraph * > | CallGraphSCC |
| |
| typedef Set< const GlobalObjVar * > | VTableSet |
| |
| typedef Set< const FunObjVar * > | VFunSet |
| |
| 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 bool | classof (const PointerAnalysis *pta) |
| |
| u32_t | numOfIteration |
| | num of iterations during constraint solving
|
| |
| 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_" |
| |
| typedef SVFG::SVFGEdgeSetTy | SVFGEdgeSetTy |
| |
| 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) |
| |
| 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 |
| |
| | 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.
|
| |
| 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 |
| |
| NodeStack | nodeStack |
| | stack used for processing nodes.
|
| |
| 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.
|
| |
| 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 std::unique_ptr< FlowSensitive > | fspta |
| |
| static SVFIR * | pag = nullptr |
| | SVFIR.
|
| |
One solver for the whole and the sliced SVFG: SVFGGraph is SVFG* (whole; every node processed) or const SlicedSVFGView* (sliced; nodes outside the view are propagation barriers). Restriction is answered by GenericGraphTraits<SVFGGraph>::containsNode, resolved at compile time; the stock FlowSensitive transfer semantics are untouched.
Definition at line 54 of file FSMPTA.h.