diff options
Diffstat (limited to 'tools/perf/ui/browsers/annotate.c')
| -rw-r--r-- | tools/perf/ui/browsers/annotate.c | 24 | 
1 files changed, 17 insertions, 7 deletions
diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/annotate.c index ef4da4295bf7..e81c2493efdf 100644 --- a/tools/perf/ui/browsers/annotate.c +++ b/tools/perf/ui/browsers/annotate.c @@ -125,13 +125,20 @@ static void annotate_browser__write(struct ui_browser *browser, void *entry, int  		ab->selection = al;  } -static bool is_fused(struct annotate_browser *ab, struct disasm_line *cursor) +static int is_fused(struct annotate_browser *ab, struct disasm_line *cursor)  {  	struct disasm_line *pos = list_prev_entry(cursor, al.node);  	const char *name; +	int diff = 1; + +	while (pos && pos->al.offset == -1) { +		pos = list_prev_entry(pos, al.node); +		if (!ab->opts->hide_src_code) +			diff++; +	}  	if (!pos) -		return false; +		return 0;  	if (ins__is_lock(&pos->ins))  		name = pos->ops.locked.ins.name; @@ -139,9 +146,11 @@ static bool is_fused(struct annotate_browser *ab, struct disasm_line *cursor)  		name = pos->ins.name;  	if (!name || !cursor->ins.name) -		return false; +		return 0; -	return ins__is_fused(ab->arch, name, cursor->ins.name); +	if (ins__is_fused(ab->arch, name, cursor->ins.name)) +		return diff; +	return 0;  }  static void annotate_browser__draw_current_jump(struct ui_browser *browser) @@ -155,6 +164,7 @@ static void annotate_browser__draw_current_jump(struct ui_browser *browser)  	struct annotation *notes = symbol__annotation(sym);  	u8 pcnt_width = annotation__pcnt_width(notes);  	int width; +	int diff = 0;  	/* PLT symbols contain external offsets */  	if (strstr(sym->name, "@plt")) @@ -205,11 +215,11 @@ static void annotate_browser__draw_current_jump(struct ui_browser *browser)  				 pcnt_width + 2 + notes->widths.addr + width,  				 from, to); -	if (is_fused(ab, cursor)) { +	diff = is_fused(ab, cursor); +	if (diff > 0) {  		ui_browser__mark_fused(browser,  				       pcnt_width + 3 + notes->widths.addr + width, -				       from - 1, -				       to > from); +				       from - diff, diff, to > from);  	}  }  | 
