Classes | Public Types | Public Member Functions | List of all members
Rose::BinaryAnalysis::Reachability Class Reference


Analysis that computes reachability of CFG vertices.

Certain CFG vertices are marked as intrinsically reachable, such as program entry points, exported functions, signal handlers, etc., and then reachability is propagated through the graph.

Definition at line 16 of file BinaryReachability.h.

#include <BinaryReachability.h>


struct  Propagate
 Controls immediate propagation. More...

Public Types

enum  Reason {
  ENTRY_POINT = 0x00000001,
  EXPORTED_FUNCTION = 0x00000002,
  SIGNAL_HANDLER = 0x00000004,
  ASSUMED = 0x00000080,
  PREDEFINED = 0x000000ff,
  USER_DEFINED = 0xffffff00,
  USER_DEFINED_0 = 0x00000100,
  ALL_REASONS = 0xffffffff
 Predefined bit flags for why something is reachable. More...

Public Member Functions

void replaceCfg (const Partitioner2::ControlFlowGraph &)
 Replace CFG without adjusting other data. More...
void clear ()
 Clear previous results. More...
void clearReachability ()
 Clear all reachability. More...
unsigned isIntrinsicallyReachable (size_t vertexId) const
 Query intrinsic reachability. More...
void intrinsicallyReachable (size_t vertexId, unsigned how, Propagate::Boolean propagate=Propagate::YES)
 Change intrinsic reachability. More...
unsigned isReachable (size_t vertexId) const
 Query computed reachability. More...
const std::vector< unsigned > & reachability () const
 Computed reachability for all vertices. More...
void markSpecialFunctions (const Partitioner2::Partitioner &)
 Mark special vertices for containers. More...
void propagate ()
 Propagate intrinsic reachability through the graph. More...
const Partitioner2::ControlFlowGraphcfg () const
 Property: Control flow graph. More...
void cfg (const Partitioner2::ControlFlowGraph &)
 Property: Control flow graph. More...
bool savingCfg () const
 Property: Whether to save the CFG when serializing.
void savingCfg (bool b)
 Property: Whether to save the CFG when serializing.

Member Enumeration Documentation

Predefined bit flags for why something is reachable.


Vertex is not reachable.


Vertex is a program entry point.


Vertex is an exported function.


Vertex is a signal handler.


Assumed reachable for cases when the analysis wasn't run.


ROSE-defined reachability reasons.


User-defined reachability reasons.


First user-defined reason bit.


All reason bits.

Definition at line 19 of file BinaryReachability.h.

Member Function Documentation

const Partitioner2::ControlFlowGraph& Rose::BinaryAnalysis::Reachability::cfg ( ) const

Property: Control flow graph.

Assigning a new control flow graph to this analysis will erase all previous information. Assigning an empty control flow graph has the same effect as calling clear.

Definition at line 61 of file BinaryReachability.h.

void Rose::BinaryAnalysis::Reachability::cfg ( const Partitioner2::ControlFlowGraph )

Property: Control flow graph.

Assigning a new control flow graph to this analysis will erase all previous information. Assigning an empty control flow graph has the same effect as calling clear.

void Rose::BinaryAnalysis::Reachability::replaceCfg ( const Partitioner2::ControlFlowGraph )

Replace CFG without adjusting other data.

Unlike setting the cfg property directly, this version doesn't update any other result data. It's intended to be used when restoring previous data from a Boost archive when the savingCfg property was clear. The caller must ensure that the new CFG has the same size and vertex numbering as the original CFG.

void Rose::BinaryAnalysis::Reachability::clear ( )

Clear previous results.

This is the same as setting the control flow graph to an empty graph.

void Rose::BinaryAnalysis::Reachability::clearReachability ( )

Clear all reachability.

This clears all reachability (marking all vertices as not reachable) without throwing away the control flow graph.

unsigned Rose::BinaryAnalysis::Reachability::isIntrinsicallyReachable ( size_t  vertexId) const

Query intrinsic reachability.

Returns the intrinsic reachability for a vertex. The vertex ID numst be valid for the graph being analyzed. The return value is a bit vector of Reason bits, some of which might be user-defined.

void Rose::BinaryAnalysis::Reachability::intrinsicallyReachable ( size_t  vertexId,
unsigned  how,
Propagate::Boolean  propagate = Propagate::YES 

Change intrinsic reachability.

The intrinsic reachability of the specified vertex is changed to how, which is a bit vector of Reason bits. Changing the intrinsic reachability of a vertex to NOT_REACHABLE does not necessarily mark the vertex as unreachable since it might be reachable from other reachable vertices. The new reachability will be immediately propagated through the graph if doPropagate is set.

unsigned Rose::BinaryAnalysis::Reachability::isReachable ( size_t  vertexId) const

Query computed reachability.

Returns the computed reachability for a vertex. The return value is always a superset of the vertex's intrinsic reachability and is a bit vector of Reason bits. The vertex ID must be valid.

const std::vector<unsigned>& Rose::BinaryAnalysis::Reachability::reachability ( ) const

Computed reachability for all vertices.

The return value is a vector of Reason bit flags for each vertex, indexed by vertex ID.

void Rose::BinaryAnalysis::Reachability::markSpecialFunctions ( const Partitioner2::Partitioner )

Mark special vertices for containers.

Scan the list of functions in the partitioner and mark as reachable the entry points of functions whose reason for existing is because they are program entry points or exports. The specified partitioner's control flow graph must have vertices numbered consistently with the control flow graph that's been set by the cfg property.

void Rose::BinaryAnalysis::Reachability::propagate ( )

Propagate intrinsic reachability through the graph.

This runs a data-flow analysis to propagate the intrinsic reachability bits through the graph. The propagation happens automatically whenever intrinsicallyReachable is called unless its doPropagate parameter is false.

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