perf report: fix crash showing warning related to kernel maps
PATCH 1/1 perf report: fix crash showing warning related to kernel maps
While testing https://lkml.org/lkml/2012/4/10/123 I hit this crash:
(gdb) bt
0 0x000000000042000f in __cmd_report (rep=0x7fff80cec580) at builtin-report.c:380 1 cmd_report (argc=0, argv=<optimized out>, prefix=<optimized out>) at builtin-report.c:759 2 0x0000000000414513 in run_builtin (p=0x7724a8, argc=3, argv=0x7fff80ceca70) at perf.c:273 3 0x0000000000413d41 in handle_internal_command (argv=0x7fff80ceca70, argc=3) at perf.c:345 4 run_argv (argv=0x7fff80cec880, argcp=0x7fff80cec88c) at perf.c:389 5 main (argc=3, argv=0x7fff80ceca70) at perf.c:487
kernel_map can be NULL, so need to handle it while dumping a warning to user.
Signed-off-by David Ahern <[email protected]>
--- tools/perf/builtin-report.c | 17 ++++++++++++----- 1 files changed, 12 insertions(+), 5 deletions(-)
tools/perf/builtin-report.c +12 -5
@@ -374,16 +374,23 @@ static int __cmd_report(struct perf_report *rep) (kernel_map->dso->hit && (kernel_kmap->ref_reloc_sym == NULL || kernel_kmap->ref_reloc_sym->addr == 0))) { -const struct dso *kdso = kernel_map->dso; +const char *desc = +"As no suitable kallsyms nor vmlinux was found, kernel samples\n" +"can't be resolved." ; + +if (kernel_map) { +const struct dso *kdso = kernel_map->dso; +if (RB_EMPTY_ROOT (&kdso->symbols[MAP__FUNCTION ])) { + desc ="If some relocation was applied (e.g. " +"kexec) symbols may be misresolved." ; + } + }ui__warning ("Kernel address maps (/proc/{kallsyms,modules}) were restricted.\n\n" "Check /proc/sys/kernel/kptr_restrict before running 'perf record'.\n\n%s\n\n" "Samples in kernel modules can't be resolved as well.\n\n" , -RB_EMPTY_ROOT (&kdso->symbols[MAP__FUNCTION ]) ? -"As no suitable kallsyms nor vmlinux was found, kernel samples\n" -"can't be resolved." : -"If some relocation was applied (e.g. kexec) symbols may be misresolved." ); + desc); }if (dump_trace) {
Signature · 1 line
1.7.5.4
Hi Arnaldo:
Haven't seen this one come through your urgent queue.
Quoted 51 lines · David Ahern
While testing https://lkml.org/lkml/2012/4/10/123 I hit this crash:
(gdb) bt
0 0x000000000042000f in __cmd_report (rep=0x7fff80cec580) at builtin-report.c:380 1 cmd_report (argc=0, argv=<optimized out>, prefix=<optimized out>) at builtin-report.c:759 2 0x0000000000414513 in run_builtin (p=0x7724a8, argc=3, argv=0x7fff80ceca70) at perf.c:273 3 0x0000000000413d41 in handle_internal_command (argv=0x7fff80ceca70, argc=3) at perf.c:345 4 run_argv (argv=0x7fff80cec880, argcp=0x7fff80cec88c) at perf.c:389 5 main (argc=3, argv=0x7fff80ceca70) at perf.c:487
kernel_mapcan be NULL, so need to handle it while dumping a warning to user.Signed-off-by David Ahern<[email protected]>--- tools/perf/builtin-report.c | 17 ++++++++++++----- 1 files changed, 12 insertions(+), 5 deletions(-)tools/perf/builtin-report.c +12
-5@@ -374,16 +374,23 @@ static int __cmd_report(struct perf_report *rep) (kernel_map->dso->hit&& (kernel_kmap->ref_reloc_sym == NULL || kernel_kmap->ref_reloc_sym->addr == 0))) { -const struct dso *kdso = kernel_map->dso; +const char *desc = +"As no suitable kallsyms nor vmlinux was found, kernel samples\n" +"can't be resolved." ; + +if (kernel_map) { +const struct dso *kdso = kernel_map->dso; +if (RB_EMPTY_ROOT (&kdso->symbols[MAP__FUNCTION ])) { + desc ="If some relocation was applied (e.g. " +"kexec) symbols may be misresolved." ; + } + }ui__warning ("Kernel address maps (/proc/{kallsyms,modules}) were restricted.\n\n" "Check /proc/sys/kernel/kptr_restrict before running 'perf record'.\n\n%s\n\n" "Samples in kernel modules can't be resolved as well.\n\n" , -RB_EMPTY_ROOT (&kdso->symbols[MAP__FUNCTION ]) ? -"As no suitable kallsyms nor vmlinux was found, kernel samples\n" -"can't be resolved." : -"If some relocation was applied (e.g. kexec) symbols may be misresolved." ); + desc); }if (dump_trace) {