Functions to create and manipulate lists of instructions. More...
Functions to create and manipulate lists of instructions.
DR_API void instrlist_append | ( | instrlist_t * | ilist, |
instr_t * | instr ) |
Adds instr
to the end of ilist
.
DR_API void instrlist_clear | ( | void * | drcontext, |
instrlist_t * | ilist ) |
Frees the instructions in ilist
.
DR_API void instrlist_clear_and_destroy | ( | void * | drcontext, |
instrlist_t * | ilist ) |
Destroys the instructions in ilist
and destroys the instrlist_t object itself.
DR_API instrlist_t * instrlist_clone | ( | void * | drcontext, |
instrlist_t * | old ) |
Allocates a new instrlist_t and for each instr_t in old
allocates a new instr_t using instr_clone to produce a complete copy of old
. Each operand that is opnd_is_instr() has its target updated to point to the corresponding instr_t in the new instrlist_t (this routine assumes that all such targets are contained within old
, and may fault otherwise).
DR_API instrlist_t * instrlist_create | ( | void * | drcontext | ) |
Returns an initialized instrlist_t allocated on the thread-local heap.
DR_API void instrlist_cut | ( | instrlist_t * | ilist, |
instr_t * | instr ) |
Cuts off subsequent instructions starting from instr
from ilist
.
DR_API void instrlist_destroy | ( | void * | drcontext, |
instrlist_t * | ilist ) |
Deallocates the thread-local heap storage for ilist
.
DR_API instr_t * instrlist_first | ( | instrlist_t * | ilist | ) |
Returns the first instr_t in ilist
.
DR_API instr_t * instrlist_first_app | ( | instrlist_t * | ilist | ) |
Returns the first application (non-meta) instruction in the instruction list ilist
.
DR_API instr_t * instrlist_first_nonlabel | ( | instrlist_t * | ilist | ) |
Returns the first instruction in the instruction list ilist
for which instr_is_label() returns false.
DR_API dr_pred_type_t instrlist_get_auto_predicate | ( | instrlist_t * | ilist | ) |
Returns the predicate for ilist
.
DR_API app_pc instrlist_get_translation_target | ( | instrlist_t * | ilist | ) |
Returns the translation target, or NULL if none is set.
DR_API void instrlist_init | ( | instrlist_t * | ilist | ) |
Initializes ilist
.
DR_API instr_t * instrlist_last | ( | instrlist_t * | ilist | ) |
Returns the last instr_t in ilist
.
DR_API instr_t * instrlist_last_app | ( | instrlist_t * | ilist | ) |
Returns the last application (non-meta) instruction in the instruction list ilist
.
DR_API void instrlist_postinsert | ( | instrlist_t * | ilist, |
instr_t * | where, | ||
instr_t * | instr ) |
Inserts instr
into ilist
after where
.
DR_API void instrlist_preinsert | ( | instrlist_t * | ilist, |
instr_t * | where, | ||
instr_t * | instr ) |
Inserts instr
into ilist
prior to where
.
DR_API void instrlist_prepend | ( | instrlist_t * | ilist, |
instr_t * | instr ) |
Adds instr
to the front of ilist
.
DR_API void instrlist_remove | ( | instrlist_t * | ilist, |
instr_t * | instr ) |
Removes (does not destroy) instr
from ilist
.
DR_API instr_t * instrlist_replace | ( | instrlist_t * | ilist, |
instr_t * | oldinst, | ||
instr_t * | newinst ) |
Replaces oldinst
with newinst
in ilist
(does not destroy oldinst
).
DR_API void instrlist_set_auto_predicate | ( | instrlist_t * | ilist, |
dr_pred_type_t | pred ) |
All future instructions inserted into ilist
will be predicated with pred
. This is a convenience routine to make it easy to have emitted code from internal DR components predicated.
dr_insert_clean_call()
handle auto predication gracefully and are thus safe for use with auto predication. DR_API bool instrlist_set_fall_through_target | ( | instrlist_t * | bb, |
app_pc | tgt ) |
Specifies the fall-through target of a basic block if its last instruction is a conditional branch instruction. It can only be called in basic block building event callbacks when the for_trace
parameter is false, and has NO EFFECT in other cases.
DR_API bool instrlist_set_return_target | ( | instrlist_t * | bb, |
app_pc | tgt ) |
Specifies the return target of a basic block if its last instruction is a call instruction. It can only be called in basic block building event callbacks when the for_trace
parameter is false, and has NO EFFECT in other cases.
DR_API void instrlist_set_translation_target | ( | instrlist_t * | ilist, |
app_pc | pc ) |
All future instructions inserted into ilist
that do not have raw bits will have instr_set_translation() called with pc
as the target. This is a convenience routine to make it easy to have the same code generate non-translation and translation instructions, and it does not try to enforce that all instructions have translations (e.g., some could be inserted via instr_set_next()).