// Reserve and initialise an InstrInfo for the first mention of a new insn. static InstrInfo* setup_InstrInfo ( CgState* cgs, Addr instr_addr, UInt instr_len ) { InstrInfo* i_node; tl_assert(cgs->bbInfo_i >= 0); tl_assert(cgs->bbInfo_i < cgs->bbInfo->n_instrs); i_node = &cgs->bbInfo->instrs[ cgs->bbInfo_i ]; i_node->instr_addr = instr_addr; i_node->instr_len = instr_len; i_node->parent = get_lineCC(instr_addr); cgs->bbInfo_i++; return i_node; }
static void do_details( instr_info* n, Bool bbSeenBefore, Addr instr_addr, Int instr_len, Int data_size ) { if (bbSeenBefore) { tl_assert( n->instr_addr == instr_addr ); tl_assert( n->instr_len == instr_len ); tl_assert( n->data_size == data_size ); // Don't check that (n->parent == parent)... it's conceivable that // the debug info might change; the other asserts should be enough to // detect anything strange. } else { lineCC* parent = get_lineCC(instr_addr); n->instr_addr = instr_addr; n->instr_len = instr_len; n->data_size = data_size; n->parent = parent; } }