diff options
| author | Ingo Molnar <mingo@kernel.org> | 2018-04-16 02:14:00 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2018-04-16 02:15:22 -0400 |
| commit | aacd188a2deea4e0886e43641cdae6b47b540b7f (patch) | |
| tree | 7896329830230b757348867ec1d3536405c2e982 /tools/perf/util/annotate.c | |
| parent | 60cc43fc888428bb2f18f08997432d426a243338 (diff) | |
| parent | b0d5c81e872ed21de1e56feb0fa6e4161da7be61 (diff) | |
Merge tag 'perf-core-for-mingo-4.17-20180413' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent
Pull tooling improvements and fixes from Arnaldo Carvalho de Melo:
perf annotate fixes and improvements:
- Allow showing offsets in more than just jump targets, use the new
'O' hotkey in the TUI, config ~/.perfconfig annotate.offset_level
for it and for --stdio2 (Arnaldo Carvalho de Melo)
- Use the resolved variable names from objdump disassembled lines to
make them more compact, just like was already done for some instructions,
like "mov", this eventually will be done more generally, but lets now add
some more to the existing mechanism (Arnaldo Carvalho de Melo)
perf record fixes:
- Change warning for missing topology sysfs entry to debug, as not all
architectures have those files, s390 being one of those (Thomas Richter)
perf sched fixes:
- Fix -g/--call-graph documentation (Takuya Yamamoto)
perf stat:
- Enable 1ms interval for printing event counters values in (Alexey Budankov)
perf test fixes:
- Run dwarf unwind on arm32 (Kim Phillips)
- Remove unused ptrace.h include from LLVM test, sidesteping older
clang's lack of support for some asm constructs (Arnaldo Carvalho de Melo)
perf version fixes:
- Do not print info about HAVE_LIBAUDIT_SUPPORT in 'perf version --build-options'
when HAVE_SYSCALL_TABLE_SUPPORT is true, as libaudit won't be used in that
case, print info about syscall_table support instead (Jin Yao)
Build system fixes:
- Use HAVE_..._SUPPORT used consistently (Jin Yao)
- Restore READ_ONCE() C++ compatibility in tools/include (Mark Rutland)
- Give hints about package names needed to build jvmti (Arnaldo Carvalho de Melo)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
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 | ||
