Lines Matching refs:dl
750 static int disasm_line__print(struct disasm_line *dl, u64 start, int addr_fmt_width) in disasm_line__print() argument
752 s64 offset = dl->al.offset; in disasm_line__print()
758 color_fprintf(stdout, annotate__asm_color(br), "%s", dl->al.line); in disasm_line__print()
765 struct debuginfo *dbg, struct disasm_line *dl,
783 struct disasm_line *dl = container_of(al, struct disasm_line, al); in annotation_line__print() local
848 disasm_line__print(dl, apd->start, apd->addr_fmt_width); in annotation_line__print()
855 apd->dbg, dl, &offset); in annotation_line__print()
1457 static size_t disasm_line__fprintf(struct disasm_line *dl, FILE *fp) in disasm_line__fprintf() argument
1461 if (dl->al.offset == -1) in disasm_line__fprintf()
1462 return fprintf(fp, "%s\n", dl->al.line); in disasm_line__fprintf()
1464 printed = fprintf(fp, "%#" PRIx64 " %s", dl->al.offset, dl->ins.name); in disasm_line__fprintf()
1466 if (dl->ops.raw[0] != '\0') { in disasm_line__fprintf()
1468 dl->ops.raw); in disasm_line__fprintf()
1485 bool disasm_line__is_valid_local_jump(struct disasm_line *dl, struct symbol *sym) in disasm_line__is_valid_local_jump() argument
1487 if (!dl || !dl->ins.ops || !ins__is_jump(&dl->ins) || in disasm_line__is_valid_local_jump()
1488 !disasm_line__has_local_offset(dl) || dl->ops.target.offset < 0 || in disasm_line__is_valid_local_jump()
1489 dl->ops.target.offset >= (s64)symbol__size(sym)) in disasm_line__is_valid_local_jump()
1505 struct disasm_line *dl; in annotation__mark_jump_targets() local
1508 dl = disasm_line(al); in annotation__mark_jump_targets()
1510 if (!disasm_line__is_valid_local_jump(dl, sym)) in annotation__mark_jump_targets()
1514 dl->ops.target.offset); in annotation__mark_jump_targets()
1746 static void disasm_line__write(struct disasm_line *dl, struct annotation *notes, in disasm_line__write() argument
1751 if (dl->ins.ops && dl->ins.ops->scnprintf) { in disasm_line__write()
1752 if (ins__is_jump(&dl->ins)) { in disasm_line__write()
1755 if (dl->ops.target.outside) in disasm_line__write()
1757 fwd = dl->ops.target.offset > dl->al.offset; in disasm_line__write()
1760 } else if (ins__is_call(&dl->ins)) { in disasm_line__write()
1764 } else if (ins__is_ret(&dl->ins)) { in disasm_line__write()
1774 disasm_line__scnprintf(dl, bf, size, !annotate_opts.use_offset, in disasm_line__write()
2464 int annotate_get_insn_location(struct arch *arch, struct disasm_line *dl, in annotate_get_insn_location() argument
2471 if (ins__is_lock(&dl->ins)) in annotate_get_insn_location()
2472 ops = dl->ops.locked.ops; in annotate_get_insn_location()
2474 ops = &dl->ops; in annotate_get_insn_location()
2509 get_powerpc_regs(dl->raw.raw_insn, !i, op_loc); in annotate_get_insn_location()
2550 struct disasm_line *dl; in find_disasm_line() local
2555 list_for_each_entry(dl, ¬es->src->source, al.node) { in find_disasm_line()
2556 if (dl->al.offset == -1) in find_disasm_line()
2559 if (sym->start + dl->al.offset == ip) { in find_disasm_line()
2564 if (ins__is_lock(&dl->ins) && in find_disasm_line()
2565 *dl->ops.raw == '\0' && allow_update) { in find_disasm_line()
2569 return dl; in find_disasm_line()
2599 static bool is_stack_operation(struct arch *arch, struct disasm_line *dl) in is_stack_operation() argument
2602 if (!strncmp(dl->ins.name, "push", 4) || in is_stack_operation()
2603 !strncmp(dl->ins.name, "pop", 3) || in is_stack_operation()
2604 !strncmp(dl->ins.name, "call", 4) || in is_stack_operation()
2605 !strncmp(dl->ins.name, "ret", 3)) in is_stack_operation()
2665 struct disasm_line *dl) in annotate_calc_pcrel() argument
2679 next = annotation__next_asm_line(notes, dl); in annotate_calc_pcrel()
2683 addr = ip + (next->al.offset - dl->al.offset) + offset; in annotate_calc_pcrel()
2704 struct debuginfo *dbg, struct disasm_line *dl, in __hist_entry__get_data_type() argument
2714 istat = annotate_data_stat(&ann_insn_stat, dl->ins.name); in __hist_entry__get_data_type()
2720 if (annotate_get_insn_location(arch, dl, &loc) < 0) { in __hist_entry__get_data_type()
2726 if (is_stack_operation(arch, dl)) { in __hist_entry__get_data_type()
2737 .ip = ms->sym->start + dl->al.offset, in __hist_entry__get_data_type()
2749 op_loc->offset, dl); in __hist_entry__get_data_type()
2802 struct disasm_line *dl; in hist_entry__get_data_type() local
2850 dl = find_disasm_line(ms->sym, ip, /*allow_update=*/true); in hist_entry__get_data_type()
2851 if (dl == NULL) { in hist_entry__get_data_type()
2857 mem_type = __hist_entry__get_data_type(he, arch, di_cache.dbg, dl, in hist_entry__get_data_type()
2866 if (dl->al.offset > 0) { in hist_entry__get_data_type()
2871 prev_dl = annotation__prev_asm_line(notes, dl); in hist_entry__get_data_type()
2873 if (prev_dl && ins__is_fused(arch, prev_dl->ins.name, dl->ins.name)) { in hist_entry__get_data_type()
2874 dl = prev_dl; in hist_entry__get_data_type()
2880 istat = annotate_data_stat(&ann_insn_stat, dl->ins.name); in hist_entry__get_data_type()
2919 struct disasm_line *dl) in is_new_basic_block() argument
2921 s64 offset = dl->al.offset; in is_new_basic_block()
2933 struct disasm_line *dl) in add_basic_block() argument
2938 if (dl == NULL) in add_basic_block()
2941 if (!is_new_basic_block(bb_data, dl)) in add_basic_block()
2948 bb->begin = dl; in add_basic_block()
2949 bb->end = dl; in add_basic_block()
2969 struct disasm_line *dl, *next_dl, *last_dl; in process_basic_block() local
2973 dl = link->bb->begin; in process_basic_block()
2975 if (basic_block_has_offset(&bb_data->visited, dl->al.offset)) in process_basic_block()
2986 list_for_each_entry_from(dl, ¬es->src->source, al.node) { in process_basic_block()
2988 if (dl->al.offset == -1) in process_basic_block()
2991 if (sym->start + dl->al.offset == target) { in process_basic_block()
2996 if (dl == last_dl) in process_basic_block()
2999 if (ins__is_ret(&dl->ins)) in process_basic_block()
3002 if (!ins__is_jump(&dl->ins)) in process_basic_block()
3005 if (dl->ops.target.outside) in process_basic_block()
3008 next_dl = find_disasm_line(sym, sym->start + dl->ops.target.offset, in process_basic_block()
3018 if (!strstr(dl->ins.name, "jmp")) { in process_basic_block()
3019 next_dl = annotation__next_asm_line(notes, dl); in process_basic_block()
3026 link->bb->end = dl; in process_basic_block()
3085 struct disasm_line *dl; in annotate_get_basic_blocks() local
3088 dl = find_disasm_line(sym, src, /*allow_update=*/false); in annotate_get_basic_blocks()
3089 if (dl == NULL) in annotate_get_basic_blocks()
3092 if (add_basic_block(&bb_data, /*parent=*/NULL, dl) < 0) in annotate_get_basic_blocks()