Static Value-Flow Analysis
Loading...
Searching...
No Matches
Static Public Member Functions | List of all members
SVF::GenericGraphTraits< SVF::ThreadCallGraph * > Struct Reference

#include <ThreadCallGraph.h>

Inheritance diagram for SVF::GenericGraphTraits< SVF::ThreadCallGraph * >:
SVF::GenericGraphTraits< SVF::CallGraph * > SVF::GenericGraphTraits< SVF::GenericGraph< SVF::CallGraphNode, SVF::CallGraphEdge > * >

Static Public Member Functions

static void getForkEdges (const SVF::ThreadCallGraph *graph, const SVF::CallICFGNode *callSite, std::vector< const SVF::CallGraphEdge * > &out)
 
static void getJoinEdges (const SVF::ThreadCallGraph *graph, const SVF::CallICFGNode *callSite, std::vector< const SVF::CallGraphEdge * > &out)
 
- Static Public Member Functions inherited from SVF::GenericGraphTraits< SVF::CallGraph * >
static const SVF::CallGraphNodegetRawNode (const SVF::CallGraphNode *n)
 
static void getInEdges (const SVF::CallGraph *, const SVF::CallGraphNode *n, std::vector< const SVF::CallGraphEdge * > &out)
 In-edges of n under this graph (whole CallGraph: all of them).
 
static void getOutEdges (const SVF::CallGraph *, const SVF::CallGraphNode *n, std::vector< const SVF::CallGraphEdge * > &out)
 
static void getDirectCalls (const SVF::CallGraph *, const SVF::CallGraphEdge *e, std::vector< const SVF::CallICFGNode * > &out)
 
static void getIndirectCalls (const SVF::CallGraph *, const SVF::CallGraphEdge *e, std::vector< const SVF::CallICFGNode * > &out)
 
static bool containsCallSite (const SVF::CallGraph *, const SVF::CallGraphEdge *e, const SVF::CallICFGNode *callSite)
 
static void getCallees (SVF::CallGraph *g, const SVF::CallICFGNode *callSite, SVF::CallGraph::FunctionSet &callees)
 

Additional Inherited Members

- Public Types inherited from SVF::GenericGraphTraits< SVF::CallGraph * >
typedef SVF::CallGraphNodeNodeRef
 
- Public Types inherited from SVF::GenericGraphTraits< SVF::GenericGraph< SVF::CallGraphNode, SVF::CallGraphEdge > * >
using NodeRef = typename GraphType::UnknownGraphTypeError
 

Detailed Description

Thread-specific relations are indexed by callsite rather than represented uniformly in CallGraph node adjacency. In particular, ThreadJoinEdge is not added to adjacency because it would introduce artificial SCC cycles.

Definition at line 415 of file ThreadCallGraph.h.

Member Function Documentation

◆ getForkEdges()

static void SVF::GenericGraphTraits< SVF::ThreadCallGraph * >::getForkEdges ( const SVF::ThreadCallGraph graph,
const SVF::CallICFGNode callSite,
std::vector< const SVF::CallGraphEdge * > &  out 
)
inlinestatic

Definition at line 418 of file ThreadCallGraph.h.

421 {
422 out.clear();
423 if (!graph->hasThreadForkEdge(callSite))
424 return;
425 for (auto it = graph->getForkEdgeBegin(callSite),
426 end = graph->getForkEdgeEnd(callSite); it != end; ++it)
427 out.push_back(*it);
428 }
ForkEdgeSet::const_iterator getForkEdgeEnd(const CallICFGNode *cs) const
ForkEdgeSet::const_iterator getForkEdgeBegin(const CallICFGNode *cs) const
bool hasThreadForkEdge(const CallICFGNode *cs) const
Get call graph edge via call instruction.
llvm::IRBuilder IRBuilder
Definition BasicTypes.h:76

◆ getJoinEdges()

static void SVF::GenericGraphTraits< SVF::ThreadCallGraph * >::getJoinEdges ( const SVF::ThreadCallGraph graph,
const SVF::CallICFGNode callSite,
std::vector< const SVF::CallGraphEdge * > &  out 
)
inlinestatic

Definition at line 430 of file ThreadCallGraph.h.

433 {
434 out.clear();
435 if (!graph->hasThreadJoinEdge(callSite))
436 return;
437 for (auto it = graph->getJoinEdgeBegin(callSite),
438 end = graph->getJoinEdgeEnd(callSite); it != end; ++it)
439 out.push_back(*it);
440 }
bool hasThreadJoinEdge(const CallICFGNode *cs) const
Get call graph edge via call instruction.
JoinEdgeSet::const_iterator getJoinEdgeEnd(const CallICFGNode *cs) const
JoinEdgeSet::const_iterator getJoinEdgeBegin(const CallICFGNode *cs) const

The documentation for this struct was generated from the following file: