Lines Matching refs:insn
27 struct instruction *insn;
56 } insn[DISAS_ALT_INSN_MAX]; /* alternative instructions */
61 #define DALT_INSN(dalt) (DALT_DEFAULT(dalt) ? (dalt)->orig_insn : (dalt)->alt->insn)
122 WARN_FUNC(dctx->insn->sec, dctx->insn->offset,
130 WARN_FUNC(dctx->insn->sec, dctx->insn->offset,
203 alt_group = dctx->insn->alt_group;
224 struct instruction *insn = dctx->insn;
225 struct symbol *sym = insn_sym(insn);
233 disas_print_addr_sym(insn->sec, sym, addr, dinfo);
239 struct instruction *insn = dctx->insn;
245 reloc = find_reloc_by_dest_range(dctx->file->elf, insn->sec,
246 insn->offset, insn->len);
259 offset = arch_insn_adjusted_addend(insn, reloc);
281 struct instruction *insn = dctx->insn;
291 jump_dest = insn->jump_dest;
306 is_reloc = (addr == insn->offset + insn->len);
312 sym = insn_call_dest(insn);
423 #define DISAS_PRINSN(dctx, insn, depth) \
424 disas_print_insn(stdout, dctx, insn, depth, "\n")
479 * Print a message in the instruction flow. If insn is not NULL then
484 void disas_print_info(FILE *stream, struct instruction *insn, int depth,
491 if (insn) {
492 sec = insn->sec;
493 off = insn->offset;
509 struct instruction *insn, int depth,
522 fake_nop = (!insn->sec && insn->type == INSN_NOP);
524 snprintf(fake_nop_insn, 32, "<fake nop> (%d bytes)", insn->len);
527 disas_insn(dctx, insn);
533 disas_print_info(stream, insn, depth, "%-*s", len, insn_str);
553 * If alt_applied is true then insn should be an instruction from of an
554 * alternative (i.e. insn->alt_group != NULL), and it is disassembled
560 struct instruction *insn,
566 dctx->insn = insn;
570 if (insn->type == INSN_NOP) {
571 DINFO_FPRINTF(dinfo, "nop%d", insn->len);
572 return insn->len;
579 dinfo->buffer = insn->sec->data->d_buf;
581 dinfo->buffer_length = sec_size(insn->sec);
583 return disasm(insn->offset, &dctx->info);
586 size_t disas_insn(struct disas_context *dctx, struct instruction *insn)
588 return disas_insn_common(dctx, insn, false);
592 struct instruction *insn)
594 return disas_insn_common(dctx, insn, true);
599 struct instruction *insn)
601 if (alt_grp->last_insn == insn || alt_grp->nop == insn)
604 return next_insn_same_sec(file, insn);
607 #define alt_for_each_insn(file, alt_grp, insn) \
608 for (insn = alt_grp->first_insn; \
609 insn; \
610 insn = next_insn_same_alt(file, alt_grp, insn))
622 const char *disas_alt_type_name(struct instruction *insn)
628 for (alt = insn->alts; alt; alt = alt->next) {
687 if (!alt->insn->alt_group)
690 feature = alt->insn->alt_group->feature;
745 dalt->insn[index].str = insn_str;
746 dalt->insn[index].offset = offset;
747 dalt->insn[index].nops = nops;
763 dest_insn = dalt->alt->insn;
793 alt_insn = dalt->alt->insn;
812 struct instruction *insn;
824 alt_for_each_insn(file, DALT_GROUP(dalt), insn) {
826 disas_insn_alt(dctx, insn);
831 nops = insn->type == INSN_NOP ? insn->len : 0;
835 offset += insn->len;
898 if (dalt->insn[j].offset == offset) {
899 str = dalt->insn[j].str;
911 if (dalt->insn[j].offset > 0 &&
913 (dalt->insn[j].offset < offset_next)))
914 offset_next = dalt->insn[j].offset;
992 dalts[i].insn[0].str, dalts[i].name);
1001 if (!dalts[i].insn[j].str)
1004 orig_insn->offset + dalts[i].insn[j].offset, 0,
1005 "| %s\n", dalts[i].insn[j].str);
1036 if (!dalt->insn[j].str || !dalt->insn[j].nops)
1038 offset = dalt->insn[j].offset;
1039 free(dalt->insn[j].str);
1040 dalt->insn[j].offset = 0;
1041 dalt->insn[j].str = NULL;
1042 nops += dalt->insn[j].nops;
1054 dalt->insn[j + 1].str = strfmt("nop%s%d", s, nops);
1055 dalt->insn[j + 1].offset = offset;
1056 dalt->insn[j + 1].nops = nops;
1169 free(dalts[i].insn[j].str);
1183 struct instruction *insn;
1186 sym_for_each_insn(dctx->file, func, insn) {
1187 if (insn->alts) {
1188 insn_start = insn;
1189 insn = disas_alt(dctx, insn);
1190 if (insn)
1200 insn = insn_start;
1203 DISAS_PRINSN(dctx, insn, 0);