diff options
Diffstat (limited to 'tools/perf/util/annotate.c')
| -rw-r--r-- | tools/perf/util/annotate.c | 26 | 
1 files changed, 21 insertions, 5 deletions
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index fbad8dfbb186..536ee148bff8 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c @@ -46,6 +46,7 @@  struct annotation_options annotation__default_options = {  	.use_offset     = true,  	.jump_arrows    = true, +	.offset_level	= ANNOTATION__OFFSET_JUMP_TARGETS,  };  const char 	*disassembler_style; @@ -2512,7 +2513,8 @@ static void __annotation_line__write(struct annotation_line *al, struct annotati  		if (!notes->options->use_offset) {  			printed = scnprintf(bf, sizeof(bf), "%" PRIx64 ": ", addr);  		} else { -			if (al->jump_sources) { +			if (al->jump_sources && +			    notes->options->offset_level >= ANNOTATION__OFFSET_JUMP_TARGETS) {  				if (notes->options->show_nr_jumps) {  					int prev;  					printed = scnprintf(bf, sizeof(bf), "%*d ", @@ -2523,9 +2525,14 @@ static void __annotation_line__write(struct annotation_line *al, struct annotati  					obj__printf(obj, bf);  					obj__set_color(obj, prev);  				} - +print_addr:  				printed = scnprintf(bf, sizeof(bf), "%*" PRIx64 ": ",  						    notes->widths.target, addr); +			} else if (ins__is_call(&disasm_line(al)->ins) && +				   notes->options->offset_level >= ANNOTATION__OFFSET_CALL) { +				goto print_addr; +			} else if (notes->options->offset_level == ANNOTATION__MAX_OFFSET_LEVEL) { +				goto print_addr;  			} else {  				printed = scnprintf(bf, sizeof(bf), "%-*s  ",  						    notes->widths.addr, " "); @@ -2642,10 +2649,11 @@ int __annotation__scnprintf_samples_period(struct annotation *notes,   */  static struct annotation_config {  	const char *name; -	bool *value; +	void *value;  } annotation__configs[] = {  	ANNOTATION__CFG(hide_src_code),  	ANNOTATION__CFG(jump_arrows), +	ANNOTATION__CFG(offset_level),  	ANNOTATION__CFG(show_linenr),  	ANNOTATION__CFG(show_nr_jumps),  	ANNOTATION__CFG(show_nr_samples), @@ -2677,8 +2685,16 @@ static int annotation__config(const char *var, const char *value,  	if (cfg == NULL)  		pr_debug("%s variable unknown, ignoring...", var); -	else -		*cfg->value = perf_config_bool(name, value); +	else if (strcmp(var, "annotate.offset_level") == 0) { +		perf_config_int(cfg->value, name, value); + +		if (*(int *)cfg->value > ANNOTATION__MAX_OFFSET_LEVEL) +			*(int *)cfg->value = ANNOTATION__MAX_OFFSET_LEVEL; +		else if (*(int *)cfg->value < ANNOTATION__MIN_OFFSET_LEVEL) +			*(int *)cfg->value = ANNOTATION__MIN_OFFSET_LEVEL; +	} else { +		*(bool *)cfg->value = perf_config_bool(name, value); +	}  	return 0;  }  | 
