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 @@ | |||
| 46 | struct annotation_options annotation__default_options = { | 46 | struct annotation_options annotation__default_options = { |
| 47 | .use_offset = true, | 47 | .use_offset = true, |
| 48 | .jump_arrows = true, | 48 | .jump_arrows = true, |
| 49 | .offset_level = ANNOTATION__OFFSET_JUMP_TARGETS, | ||
| 49 | }; | 50 | }; |
| 50 | 51 | ||
| 51 | const char *disassembler_style; | 52 | const char *disassembler_style; |
| @@ -2512,7 +2513,8 @@ static void __annotation_line__write(struct annotation_line *al, struct annotati | |||
| 2512 | if (!notes->options->use_offset) { | 2513 | if (!notes->options->use_offset) { |
| 2513 | printed = scnprintf(bf, sizeof(bf), "%" PRIx64 ": ", addr); | 2514 | printed = scnprintf(bf, sizeof(bf), "%" PRIx64 ": ", addr); |
| 2514 | } else { | 2515 | } else { |
| 2515 | if (al->jump_sources) { | 2516 | if (al->jump_sources && |
| 2517 | notes->options->offset_level >= ANNOTATION__OFFSET_JUMP_TARGETS) { | ||
| 2516 | if (notes->options->show_nr_jumps) { | 2518 | if (notes->options->show_nr_jumps) { |
| 2517 | int prev; | 2519 | int prev; |
| 2518 | printed = scnprintf(bf, sizeof(bf), "%*d ", | 2520 | printed = scnprintf(bf, sizeof(bf), "%*d ", |
| @@ -2523,9 +2525,14 @@ static void __annotation_line__write(struct annotation_line *al, struct annotati | |||
| 2523 | obj__printf(obj, bf); | 2525 | obj__printf(obj, bf); |
| 2524 | obj__set_color(obj, prev); | 2526 | obj__set_color(obj, prev); |
| 2525 | } | 2527 | } |
| 2526 | 2528 | print_addr: | |
| 2527 | printed = scnprintf(bf, sizeof(bf), "%*" PRIx64 ": ", | 2529 | printed = scnprintf(bf, sizeof(bf), "%*" PRIx64 ": ", |
| 2528 | notes->widths.target, addr); | 2530 | notes->widths.target, addr); |
| 2531 | } else if (ins__is_call(&disasm_line(al)->ins) && | ||
| 2532 | notes->options->offset_level >= ANNOTATION__OFFSET_CALL) { | ||
| 2533 | goto print_addr; | ||
| 2534 | } else if (notes->options->offset_level == ANNOTATION__MAX_OFFSET_LEVEL) { | ||
| 2535 | goto print_addr; | ||
| 2529 | } else { | 2536 | } else { |
| 2530 | printed = scnprintf(bf, sizeof(bf), "%-*s ", | 2537 | printed = scnprintf(bf, sizeof(bf), "%-*s ", |
| 2531 | notes->widths.addr, " "); | 2538 | notes->widths.addr, " "); |
| @@ -2642,10 +2649,11 @@ int __annotation__scnprintf_samples_period(struct annotation *notes, | |||
| 2642 | */ | 2649 | */ |
| 2643 | static struct annotation_config { | 2650 | static struct annotation_config { |
| 2644 | const char *name; | 2651 | const char *name; |
| 2645 | bool *value; | 2652 | void *value; |
| 2646 | } annotation__configs[] = { | 2653 | } annotation__configs[] = { |
| 2647 | ANNOTATION__CFG(hide_src_code), | 2654 | ANNOTATION__CFG(hide_src_code), |
| 2648 | ANNOTATION__CFG(jump_arrows), | 2655 | ANNOTATION__CFG(jump_arrows), |
| 2656 | ANNOTATION__CFG(offset_level), | ||
| 2649 | ANNOTATION__CFG(show_linenr), | 2657 | ANNOTATION__CFG(show_linenr), |
| 2650 | ANNOTATION__CFG(show_nr_jumps), | 2658 | ANNOTATION__CFG(show_nr_jumps), |
| 2651 | ANNOTATION__CFG(show_nr_samples), | 2659 | ANNOTATION__CFG(show_nr_samples), |
| @@ -2677,8 +2685,16 @@ static int annotation__config(const char *var, const char *value, | |||
| 2677 | 2685 | ||
| 2678 | if (cfg == NULL) | 2686 | if (cfg == NULL) |
| 2679 | pr_debug("%s variable unknown, ignoring...", var); | 2687 | pr_debug("%s variable unknown, ignoring...", var); |
| 2680 | else | 2688 | else if (strcmp(var, "annotate.offset_level") == 0) { |
| 2681 | *cfg->value = perf_config_bool(name, value); | 2689 | perf_config_int(cfg->value, name, value); |
| 2690 | |||
| 2691 | if (*(int *)cfg->value > ANNOTATION__MAX_OFFSET_LEVEL) | ||
| 2692 | *(int *)cfg->value = ANNOTATION__MAX_OFFSET_LEVEL; | ||
| 2693 | else if (*(int *)cfg->value < ANNOTATION__MIN_OFFSET_LEVEL) | ||
| 2694 | *(int *)cfg->value = ANNOTATION__MIN_OFFSET_LEVEL; | ||
| 2695 | } else { | ||
| 2696 | *(bool *)cfg->value = perf_config_bool(name, value); | ||
| 2697 | } | ||
| 2682 | return 0; | 2698 | return 0; |
| 2683 | } | 2699 | } |
| 2684 | 2700 | ||
