ROSE  0.9.6a
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Partitioner::BlockAnalysisCache Class Reference

Analysis that can be cached in a block. More...

#include <Partitioner.h>

Public Member Functions

 BlockAnalysisCache ()
 
void clear ()
 

Public Attributes

size_t age
 Non zero implies locally computed successors are cached. More...
 
Disassembler::AddressSet sucs
 Locally computed cached successors. More...
 
bool sucs_complete
 True if locally computed successors are fully known. More...
 
bool is_function_call
 True if this block ends with a CALL-like instruction. More...
 
rose_addr_t call_target
 Target of a CALL instruction if this block ends with what appears to be a function call (whether, in fact, it truly is a function call is immaterial since the final determination requires non-local analysis. More...
 
bool function_return
 Does this block serve as the return of a function? For example, does it end with an x86 RET instruction that returns to the CALL fall-through address? More...
 
rose_addr_t alias_for
 If non-zero, then this block is an alias for the specified block. More...
 

Detailed Description

Analysis that can be cached in a block.

Some analyses are expensive enough that they should be cached in a block. Analyses are either locally computed (by examining only the block where they're cached) or non-locally computed (by examining other related basic blocks. Non-local analyses are not cached locally, but they might be cached in other blocks.

Definition at line 174 of file Partitioner.h.

Constructor & Destructor Documentation

Partitioner::BlockAnalysisCache::BlockAnalysisCache ( )
inline

Definition at line 176 of file Partitioner.h.

Member Function Documentation

void Partitioner::BlockAnalysisCache::clear ( )
inline

Member Data Documentation

size_t Partitioner::BlockAnalysisCache::age

Non zero implies locally computed successors are cached.

The actual value of this data member is the number of instructions in the basic block when the successor information was computed, so if this value matches the current number of instructions, the cached info is up to date. Analyses that are computed over other blocks (i.e., non-local analyses) are never cached.

Definition at line 188 of file Partitioner.h.

Referenced by clear(), Partitioner::BasicBlock::invalidate_cache(), Partitioner::BasicBlock::valid_cache(), and Partitioner::BasicBlock::validate_cache().

Disassembler::AddressSet Partitioner::BlockAnalysisCache::sucs

Locally computed cached successors.

Definition at line 193 of file Partitioner.h.

Referenced by clear(), Partitioner::mark_ipd_configuration(), Partitioner::successors(), and Partitioner::update_analyses().

bool Partitioner::BlockAnalysisCache::sucs_complete

True if locally computed successors are fully known.

Definition at line 194 of file Partitioner.h.

Referenced by clear(), Partitioner::mark_ipd_configuration(), Partitioner::successors(), and Partitioner::update_analyses().

bool Partitioner::BlockAnalysisCache::is_function_call

True if this block ends with a CALL-like instruction.

Definition at line 195 of file Partitioner.h.

Referenced by clear(), Partitioner::is_function_call(), Partitioner::successors(), and Partitioner::update_analyses().

rose_addr_t Partitioner::BlockAnalysisCache::call_target

Target of a CALL instruction if this block ends with what appears to be a function call (whether, in fact, it truly is a function call is immaterial since the final determination requires non-local analysis.

If this block does not end with a call or if the target of the call cannot be statically determined, then the value is set to Partitioner::NO_TARGET.

Definition at line 196 of file Partitioner.h.

Referenced by Partitioner::call_target(), clear(), Partitioner::is_function_call(), and Partitioner::update_analyses().

bool Partitioner::BlockAnalysisCache::function_return

Does this block serve as the return of a function? For example, does it end with an x86 RET instruction that returns to the CALL fall-through address?

Definition at line 201 of file Partitioner.h.

Referenced by Partitioner::append(), clear(), and Partitioner::update_analyses().

rose_addr_t Partitioner::BlockAnalysisCache::alias_for

If non-zero, then this block is an alias for the specified block.

CFG edges that pointed to this block should instead point to the specified block.

Definition at line 204 of file Partitioner.h.

Referenced by Partitioner::canonic_block(), clear(), and Partitioner::mark_ipd_configuration().


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