|
@@ -273,6 +273,25 @@ static bool disasm_line__is_valid_jump(struct disasm_line *dl, struct symbol *sy
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+static bool is_fused(struct annotate_browser *ab, struct disasm_line *cursor)
|
|
|
+{
|
|
|
+ struct disasm_line *pos = list_prev_entry(cursor, node);
|
|
|
+ const char *name;
|
|
|
+
|
|
|
+ if (!pos)
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (ins__is_lock(&pos->ins))
|
|
|
+ name = pos->ops.locked.ins.name;
|
|
|
+ else
|
|
|
+ name = pos->ins.name;
|
|
|
+
|
|
|
+ if (!name || !cursor->ins.name)
|
|
|
+ return false;
|
|
|
+
|
|
|
+ return ins__is_fused(ab->arch, name, cursor->ins.name);
|
|
|
+}
|
|
|
+
|
|
|
static void annotate_browser__draw_current_jump(struct ui_browser *browser)
|
|
|
{
|
|
|
struct annotate_browser *ab = container_of(browser, struct annotate_browser, b);
|
|
@@ -308,6 +327,13 @@ static void annotate_browser__draw_current_jump(struct ui_browser *browser)
|
|
|
ui_browser__set_color(browser, HE_COLORSET_JUMP_ARROWS);
|
|
|
__ui_browser__line_arrow(browser, pcnt_width + 2 + ab->addr_width,
|
|
|
from, to);
|
|
|
+
|
|
|
+ if (is_fused(ab, cursor)) {
|
|
|
+ ui_browser__mark_fused(browser,
|
|
|
+ pcnt_width + 3 + ab->addr_width,
|
|
|
+ from - 1,
|
|
|
+ to > from ? true : false);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static unsigned int annotate_browser__refresh(struct ui_browser *browser)
|