decompiler
1.0.0
|
A trace of a single path out of a BranchPoint. More...
Public Types | |
enum | { f_active = 1, f_terminal = 2 } |
Public Member Functions | |
BlockTrace (BranchPoint *t, int4 po, int4 eo) | |
Construct given a parent BranchPoint and path index. More... | |
BlockTrace (BranchPoint *root, int4 po, FlowBlock *bl) | |
Construct a root BlockTrace. More... | |
bool | isActive (void) const |
Return true if this is active. | |
bool | isTerminal (void) const |
Return true is this terminates. | |
Public Attributes | |
uint4 | flags |
Properties of the BlockTrace. | |
BranchPoint * | top |
Parent BranchPoint for which this is a path. | |
int4 | pathout |
Index of the out-edge for this path (relative to the parent BranchPoint) | |
FlowBlock * | bottom |
Current node being traversed along 1 path from decision point. | |
FlowBlock * | destnode |
Next FlowBlock node this BlockTrace will try to push into. | |
int4 | edgelump |
If >1, edge to destnode is "virtual" representing multiple edges coming together. | |
list< BlockTrace * >::iterator | activeiter |
Position of this in the active trace list. | |
BranchPoint * | derivedbp |
BranchPoint blocker this traces into. | |
A trace of a single path out of a BranchPoint.
Once a BranchPoint is retired with 1 outgoing edge, the multiple paths coming out of the BranchPoint are considered a single path for the parent BlockTrace.
anonymous enum |
Enumerator | |
---|---|
f_active | This BlockTrace is active. |
f_terminal | All paths from this point exit (without merging back to parent) |
ghidra::TraceDAG::BlockTrace::BlockTrace | ( | BranchPoint * | t, |
int4 | po, | ||
int4 | eo | ||
) |
Construct given a parent BranchPoint and path index.
t | is the parent BranchPoint |
po | is the index of the formal path out of the BranchPoint to this |
eo | is the edge index out of the BranchPoints root FlowBlock |
References ghidra::FloatingEdge::bottom, ghidra::FlowBlock::getOut(), and ghidra::FloatingEdge::top.
ghidra::TraceDAG::BlockTrace::BlockTrace | ( | BranchPoint * | root, |
int4 | po, | ||
FlowBlock * | bl | ||
) |
Construct a root BlockTrace.
Attach BlockTrace to a virtual root BranchPoint, where there isn't an explicit FlowBlock acting as branch point.
root | is the virtual BranchPoint |
po | is the path out the BranchPoint to this |
bl | is the first FlowBlock along the path |
References ghidra::FloatingEdge::bottom, and ghidra::FloatingEdge::top.