ROSE
0.9.6a
|
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... | |
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.
|
inline |
Definition at line 176 of file Partitioner.h.
|
inline |
Definition at line 178 of file Partitioner.h.
References age, alias_for, call_target, function_return, is_function_call, Partitioner::NO_TARGET, sucs, and sucs_complete.
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().