linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/2] perf report: Support annotation of code without symbols
@ 2020-02-20  0:59 Jin Yao
  2020-02-20  0:59 ` [PATCH v1 1/2] perf util: Print al_addr when symbol is not found Jin Yao
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Jin Yao @ 2020-02-20  0:59 UTC (permalink / raw)
  To: acme, jolsa, peterz, mingo, alexander.shishkin
  Cc: Linux-kernel, ak, kan.liang, yao.jin, Jin Yao

For perf report on stripped binaries it is currently impossible to do
annotation. The annotation state is all tied to symbols, but there are
either no symbols, or symbols are not covering all the code.

We should support the annotation functionality even without symbols.

The first patch uses al_addr to print because it's easy to dump
the instructions from this address in binary for branch mode.

The second patch supports the annotation on stripped binary.

Jin Yao (2):
  perf util: Print al_addr when symbol is not found
  perf annotate: Support interactive annotation of code without symbols

 tools/perf/ui/browsers/hists.c | 51 +++++++++++++++++++++++++++++-----
 tools/perf/util/annotate.h     |  2 ++
 tools/perf/util/sort.c         |  6 ++--
 3 files changed, 50 insertions(+), 9 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v1 1/2] perf util: Print al_addr when symbol is not found
  2020-02-20  0:59 [PATCH v1 0/2] perf report: Support annotation of code without symbols Jin Yao
@ 2020-02-20  0:59 ` Jin Yao
  2020-02-20  0:59 ` [PATCH v1 2/2] perf annotate: Support interactive annotation of code without symbols Jin Yao
  2020-02-20 11:56 ` [PATCH v1 0/2] perf report: Support " Jiri Olsa
  2 siblings, 0 replies; 9+ messages in thread
From: Jin Yao @ 2020-02-20  0:59 UTC (permalink / raw)
  To: acme, jolsa, peterz, mingo, alexander.shishkin
  Cc: Linux-kernel, ak, kan.liang, yao.jin, Jin Yao

For branch mode, if the symbol is not found, it prints
the address.

For example, 0x0000555eee0365a0 in below output.

Overhead  Command  Source Shared Object  Source Symbol                            Target Symbol
  17.55%  div      libc-2.27.so          [.] __random                             [.] __random
   6.11%  div      div                   [.] 0x0000555eee0365a0                   [.] rand
   6.10%  div      libc-2.27.so          [.] rand                                 [.] 0x0000555eee036769
   5.80%  div      libc-2.27.so          [.] __random_r                           [.] __random
   5.72%  div      libc-2.27.so          [.] __random                             [.] __random_r
   5.62%  div      libc-2.27.so          [.] __random_r                           [.] __random_r
   5.38%  div      libc-2.27.so          [.] __random                             [.] rand
   4.56%  div      libc-2.27.so          [.] __random                             [.] __random
   4.49%  div      div                   [.] 0x0000555eee036779                   [.] 0x0000555eee0365ff
   4.25%  div      div                   [.] 0x0000555eee0365fa                   [.] 0x0000555eee036760

But it's not very easy to understand what the instructions
are in the binary. So this patch uses the al_addr instead.

With this patch, the output is

Overhead  Command  Source Shared Object  Source Symbol                            Target Symbol
  17.55%  div      libc-2.27.so          [.] __random                             [.] __random
   6.11%  div      div                   [.] 0x00000000000005a0                   [.] rand
   6.10%  div      libc-2.27.so          [.] rand                                 [.] 0x0000000000000769
   5.80%  div      libc-2.27.so          [.] __random_r                           [.] __random
   5.72%  div      libc-2.27.so          [.] __random                             [.] __random_r
   5.62%  div      libc-2.27.so          [.] __random_r                           [.] __random_r
   5.38%  div      libc-2.27.so          [.] __random                             [.] rand
   4.56%  div      libc-2.27.so          [.] __random                             [.] __random
   4.49%  div      div                   [.] 0x0000000000000779                   [.] 0x00000000000005ff
   4.25%  div      div                   [.] 0x00000000000005fa                   [.] 0x0000000000000760

Now we can use objdump to dump the object starting from 0x5a0.

For example,
objdump -d --start-address 0x5a0 div

00000000000005a0 <rand@plt>:
 5a0:   ff 25 2a 0a 20 00       jmpq   *0x200a2a(%rip)        # 200fd0 <__cxa_finalize@plt+0x200a20>
 5a6:   68 02 00 00 00          pushq  $0x2
 5ab:   e9 c0 ff ff ff          jmpq   570 <srand@plt-0x10>
 ...

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
---
 tools/perf/util/sort.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index ab0cfd790ad0..e860595576c2 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -869,7 +869,8 @@ static int hist_entry__sym_from_snprintf(struct hist_entry *he, char *bf,
 	if (he->branch_info) {
 		struct addr_map_symbol *from = &he->branch_info->from;
 
-		return _hist_entry__sym_snprintf(&from->ms, from->addr, he->level, bf, size, width);
+		return _hist_entry__sym_snprintf(&from->ms, from->al_addr,
+						 he->level, bf, size, width);
 	}
 
 	return repsep_snprintf(bf, size, "%-*.*s", width, width, "N/A");
@@ -881,7 +882,8 @@ static int hist_entry__sym_to_snprintf(struct hist_entry *he, char *bf,
 	if (he->branch_info) {
 		struct addr_map_symbol *to = &he->branch_info->to;
 
-		return _hist_entry__sym_snprintf(&to->ms, to->addr, he->level, bf, size, width);
+		return _hist_entry__sym_snprintf(&to->ms, to->al_addr,
+						 he->level, bf, size, width);
 	}
 
 	return repsep_snprintf(bf, size, "%-*.*s", width, width, "N/A");
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v1 2/2] perf annotate: Support interactive annotation of code without symbols
  2020-02-20  0:59 [PATCH v1 0/2] perf report: Support annotation of code without symbols Jin Yao
  2020-02-20  0:59 ` [PATCH v1 1/2] perf util: Print al_addr when symbol is not found Jin Yao
@ 2020-02-20  0:59 ` Jin Yao
  2020-02-20 11:56 ` [PATCH v1 0/2] perf report: Support " Jiri Olsa
  2 siblings, 0 replies; 9+ messages in thread
From: Jin Yao @ 2020-02-20  0:59 UTC (permalink / raw)
  To: acme, jolsa, peterz, mingo, alexander.shishkin
  Cc: Linux-kernel, ak, kan.liang, yao.jin, Jin Yao

For perf report on stripped binaries it is currently impossible to do
annotation. The annotation state is all tied to symbols, but there are
either no symbols, or symbols are not covering all the code.

We should support the annotation functionality even without symbols.

This patch fakes a symbol and the symbol name is the string of address.
After that, we just follow current annotation working flow.

For example,

1. perf report

Overhead  Command  Shared Object     Symbol
  20.67%  div      libc-2.27.so      [.] __random_r
  17.29%  div      libc-2.27.so      [.] __random
  10.59%  div      div               [.] 0x0000000000000628
   9.25%  div      div               [.] 0x0000000000000612
   6.11%  div      div               [.] 0x0000000000000645

2. Select the line of "10.59%  div      div               [.] 0x0000000000000628" and ENTER.

Annotate 0x0000000000000628
Zoom into div thread
Zoom into div DSO (use the 'k' hotkey to zoom directly into the kernel)
Browse map details
Run scripts for samples of symbol [0x0000000000000628]
Run scripts for all samples
Switch to another data file in PWD
Exit

3. Select the "Annotate 0x0000000000000628" and ENTER.

Percent│
       │
       │
       │     Disassembly of section .text:
       │
       │     0000000000000628 <.text+0x68>:
       │       divsd %xmm4,%xmm0
       │       divsd %xmm3,%xmm1
       │       movsd (%rsp),%xmm2
       │       addsd %xmm1,%xmm0
       │       addsd %xmm2,%xmm0
       │       movsd %xmm0,(%rsp)

Now we can see the dump of object starting from 0x628.

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
---
 tools/perf/ui/browsers/hists.c | 51 +++++++++++++++++++++++++++++-----
 tools/perf/util/annotate.h     |  2 ++
 2 files changed, 46 insertions(+), 7 deletions(-)

diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
index f36dee499320..ff5711899234 100644
--- a/tools/perf/ui/browsers/hists.c
+++ b/tools/perf/ui/browsers/hists.c
@@ -2465,13 +2465,47 @@ do_annotate(struct hist_browser *browser, struct popup_action *act)
 	return 0;
 }
 
+static struct symbol *new_annotate_sym(u64 addr, struct map *map,
+				       struct annotation_options *opts)
+{
+	struct symbol *sym;
+	struct annotated_source *src;
+	char name[64];
+
+	snprintf(name, sizeof(name), "%-#.*lx", BITS_PER_LONG / 4, addr);
+
+	sym = symbol__new(addr,
+			  opts->annotate_dummy_len ?
+			  opts->annotate_dummy_len : ANNOTATION_DUMMY_LEN,
+			  0, 0, name);
+	if (sym) {
+		src = symbol__hists(sym, 1);
+		if (!src) {
+			symbol__delete(sym);
+			return NULL;
+		}
+
+		dso__insert_symbol(map->dso, sym);
+	}
+
+	return sym;
+}
+
 static int
-add_annotate_opt(struct hist_browser *browser __maybe_unused,
+add_annotate_opt(struct hist_browser *browser,
 		 struct popup_action *act, char **optstr,
-		 struct map_symbol *ms)
+		 struct map_symbol *ms,
+		 u64 addr)
 {
-	if (ms->sym == NULL || ms->map->dso->annotate_warned ||
-	    symbol__annotation(ms->sym)->src == NULL)
+	if (ms->map->dso->annotate_warned)
+		return 0;
+
+	if (!ms->sym) {
+		ms->sym = new_annotate_sym(addr, ms->map,
+					   browser->annotation_opts);
+	}
+
+	if (ms->sym == NULL || symbol__annotation(ms->sym)->src == NULL)
 		return 0;
 
 	if (asprintf(optstr, "Annotate %s", ms->sym->name) < 0)
@@ -3219,17 +3253,20 @@ static int perf_evsel__hists_browse(struct evsel *evsel, int nr_events,
 			nr_options += add_annotate_opt(browser,
 						       &actions[nr_options],
 						       &options[nr_options],
-						       &bi->from.ms);
+						       &bi->from.ms,
+						       bi->from.al_addr);
 			if (bi->to.ms.sym != bi->from.ms.sym)
 				nr_options += add_annotate_opt(browser,
 							&actions[nr_options],
 							&options[nr_options],
-							&bi->to.ms);
+							&bi->to.ms,
+							bi->to.al_addr);
 		} else {
 			nr_options += add_annotate_opt(browser,
 						       &actions[nr_options],
 						       &options[nr_options],
-						       browser->selection);
+						       browser->selection,
+						       browser->he_selection->ip);
 		}
 skip_annotation:
 		nr_options += add_thread_opt(browser, &actions[nr_options],
diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h
index 455403e8fede..40ca4b58cd17 100644
--- a/tools/perf/util/annotate.h
+++ b/tools/perf/util/annotate.h
@@ -74,6 +74,7 @@ bool ins__is_fused(struct arch *arch, const char *ins1, const char *ins2);
 #define ANNOTATION__CYCLES_WIDTH 6
 #define ANNOTATION__MINMAX_CYCLES_WIDTH 19
 #define ANNOTATION__AVG_IPC_WIDTH 36
+#define ANNOTATION_DUMMY_LEN	256
 
 struct annotation_options {
 	bool hide_src_code,
@@ -97,6 +98,7 @@ struct annotation_options {
 	const char *prefix;
 	const char *prefix_strip;
 	unsigned int percent_type;
+	int  annotate_dummy_len;
 };
 
 enum {
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 0/2] perf report: Support annotation of code without symbols
  2020-02-20  0:59 [PATCH v1 0/2] perf report: Support annotation of code without symbols Jin Yao
  2020-02-20  0:59 ` [PATCH v1 1/2] perf util: Print al_addr when symbol is not found Jin Yao
  2020-02-20  0:59 ` [PATCH v1 2/2] perf annotate: Support interactive annotation of code without symbols Jin Yao
@ 2020-02-20 11:56 ` Jiri Olsa
  2020-02-20 12:03   ` Jin, Yao
  2 siblings, 1 reply; 9+ messages in thread
From: Jiri Olsa @ 2020-02-20 11:56 UTC (permalink / raw)
  To: Jin Yao
  Cc: acme, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin

On Thu, Feb 20, 2020 at 08:59:00AM +0800, Jin Yao wrote:
> For perf report on stripped binaries it is currently impossible to do
> annotation. The annotation state is all tied to symbols, but there are
> either no symbols, or symbols are not covering all the code.
> 
> We should support the annotation functionality even without symbols.
> 
> The first patch uses al_addr to print because it's easy to dump
> the instructions from this address in binary for branch mode.
> 
> The second patch supports the annotation on stripped binary.
> 
> Jin Yao (2):
>   perf util: Print al_addr when symbol is not found
>   perf annotate: Support interactive annotation of code without symbols

looks good, but I'm getting crash when annotating unresolved kernel address:

jirka


Samples: 14  of event 'cycles:u', Event count (approx.): 1822321
Overhead  Command  Shared Object     Symbol
  26.86%  ls       libc-2.30.so      [.] __strcoll_l                                                                                                                                                               ▒
  17.03%  ls       ls                [.] 0x0000000000008968                                                                                                                                                        ▒
  13.10%  ls       [unknown]         [k] 0xffffffff81c00ae7                                                                                                                                                        ▒
  13.02%  ls       ld-2.30.so        [.] _dl_cache_libcmp                                                                                                                                                          ▒
  12.84%  ls       libc-2.30.so      [.] _int_malloc                                                                                                                                                               ▒
  11.94%  ls       libc-2.30.so      [.] __memcpy_chk                                                                                                                                                              ▒
   5.21%  ls       ld-2.30.so        [.] __GI___tunables_init                                                                                                                                                      ▒
                                                                                                                                                                                                                   ▒
                                                                                                                                                                                                                   Program received signal SIGSEGV, Segmentation fault.                                                                                                                                                                ▒
                                                   add_annotate_opt (browser=0xec34a0, act=0x7fffffffabf0, optstr=0x7fffffffab70, ms=0xdbdb60, addr=18446744071591430887) at ui/browsers/hists.c:2500              ▒
2500            if (ms->map->dso->annotate_warned)                                                                                                                                                                 ▒
Missing separate debuginfos, use: dnf debuginfo-install brotli-1.0.7-6.fc31.x86_64 bzip2-libs-1.0.8-1.fc31.x86_64 cyrus-sasl-lib-2.1.27-2.fc31.x86_64 elfutils-debuginfod-client-0.178-7.fc31.x86_64 elfutils-libelf-0.178-7.fc31.x86_64 elfutils-libs-0.178-7.fc31.x86_64 glib2-2.62.5-1.fc31.x86_64 keyutils-libs-1.6-3.fc31.x86_64 krb5-libs-1.17-46.fc31.x86_64 libbabeltrace-1.5.7-2.fc31.x86_64 libcap-2.26-6.fc31.x86_64 libcom_err-1.45.5-1.fc31.x86_64 libcurl-7.66.0-1.fc31.x86_64 libgcc-9.2.1-1.fc31.x86_64 libidn2-2.3.0-1.fc31.x86_64 libnghttp2-1.40.0-1.fc31.x86_64 libpsl-0.21.0-2.fc31.x86_64 libselinux-2.9-5.fc31.x86_64 libssh-0.9.3-1.fc31.x86_64 libunwind-1.3.1-5.fc31.x86_64 libuuid-2.34-4.fc31.x86_64 libxcrypt-4.4.14-1.fc31.x86_64 libzstd-1.4.4-1.fc31.x86_64 openldap-2.4.47-3.fc31.x86_64 openssl-libs-1.1.1d-2.fc31.x86_64 pcre-8.43-3.fc31.x86_64 pcre2-10.34-6.fc31.x86_64 perl-libs-5.30.1-449.fc31.x86_64 popt-1.16-18.fc31.x86_64 python2-libs-2.7.17-1.fc31.x86_64 slang-2.3.2-6.fc31.x86_64 xz-libs-5.2.4-6.fc31.x86_64 zlib-1.2.11-20.fc31.x86_64         ▒
(gdb) bt                                                                                                                                                                                                           ▒
#0  add_annotate_opt (browser=0xec34a0, act=0x7fffffffabf0, optstr=0x7fffffffab70, ms=0xdbdb60, addr=18446744071591430887) at ui/browsers/hists.c:2500                                                             ▒
#1  0x000000000061caf9 in perf_evsel__hists_browse (evsel=0xc58860, nr_events=1, helpline=0xef69f0 "Tip: Show current config key-value pairs: perf config --list", left_exits=false, hbt=0x0, min_pcnt=0,          ▒
    env=0xc5c7b0, warn_lost_event=true, annotation_opts=0x7fffffffb518) at ui/browsers/hists.c:3265                                                                                                                ▒
#2  0x000000000061dbc2 in perf_evlist__tui_browse_hists (evlist=0xc55ed0, help=0xef69f0 "Tip: Show current config key-value pairs: perf config --list", hbt=0x0, min_pcnt=0, env=0xc5c7b0, warn_lost_event=true,   ▒
    annotation_opts=0x7fffffffb518) at ui/browsers/hists.c:3569                                                                                                                                                    ▒
#3  0x00000000004511e4 in report__browse_hists (rep=0x7fffffffb380) at builtin-report.c:630                                                                                                                        ▒
#4  0x00000000004521db in __cmd_report (rep=0x7fffffffb380) at builtin-report.c:975                                                                                                                                ▒
#5  0x000000000045444a in cmd_report (argc=0, argv=0x7fffffffd820) at builtin-report.c:1540                                                                                                                        ▒
#6  0x00000000004e384a in run_builtin (p=0xa5b370 <commands+240>, argc=1, argv=0x7fffffffd820) at perf.c:312                                                                                                       ▒
#7  0x00000000004e3ab7 in handle_internal_command (argc=1, argv=0x7fffffffd820) at perf.c:364                                                                                                                      ▒
#8  0x00000000004e3bfe in run_argv (argcp=0x7fffffffd67c, argv=0x7fffffffd670) at perf.c:408                                                                                                                       ▒
#9  0x00000000004e3fca in main (argc=1, argv=0x7fffffffd820) at perf.c:538                                                                                                                                         ▒
(gdb)                                                                                                                                                                                                              ▒





^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 0/2] perf report: Support annotation of code without symbols
  2020-02-20 11:56 ` [PATCH v1 0/2] perf report: Support " Jiri Olsa
@ 2020-02-20 12:03   ` Jin, Yao
  2020-02-20 12:06     ` Jiri Olsa
  0 siblings, 1 reply; 9+ messages in thread
From: Jin, Yao @ 2020-02-20 12:03 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: acme, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin



On 2/20/2020 7:56 PM, Jiri Olsa wrote:
> On Thu, Feb 20, 2020 at 08:59:00AM +0800, Jin Yao wrote:
>> For perf report on stripped binaries it is currently impossible to do
>> annotation. The annotation state is all tied to symbols, but there are
>> either no symbols, or symbols are not covering all the code.
>>
>> We should support the annotation functionality even without symbols.
>>
>> The first patch uses al_addr to print because it's easy to dump
>> the instructions from this address in binary for branch mode.
>>
>> The second patch supports the annotation on stripped binary.
>>
>> Jin Yao (2):
>>    perf util: Print al_addr when symbol is not found
>>    perf annotate: Support interactive annotation of code without symbols
> 
> looks good, but I'm getting crash when annotating unresolved kernel address:
> 
> jirka
> 
> 

Thanks for reporting the issue.

I guess you are trying the "0xffffffff81c00ae7", let me try to reproduce 
this issue.

Thanks
Jin Yao

> Samples: 14  of event 'cycles:u', Event count (approx.): 1822321
> Overhead  Command  Shared Object     Symbol
>    26.86%  ls       libc-2.30.so      [.] __strcoll_l                                                                                                                                                               ▒
>    17.03%  ls       ls                [.] 0x0000000000008968                                                                                                                                                        ▒
>    13.10%  ls       [unknown]         [k] 0xffffffff81c00ae7                                                                                                                                                        ▒
>    13.02%  ls       ld-2.30.so        [.] _dl_cache_libcmp                                                                                                                                                          ▒
>    12.84%  ls       libc-2.30.so      [.] _int_malloc                                                                                                                                                               ▒
>    11.94%  ls       libc-2.30.so      [.] __memcpy_chk                                                                                                                                                              ▒
>     5.21%  ls       ld-2.30.so        [.] __GI___tunables_init                                                                                                                                                      ▒
>                                                                                                                                                                                                                     ▒
>                                                                                                                                                                                                                     Program received signal SIGSEGV, Segmentation fault.                                                                                                                                                                ▒
>                                                     add_annotate_opt (browser=0xec34a0, act=0x7fffffffabf0, optstr=0x7fffffffab70, ms=0xdbdb60, addr=18446744071591430887) at ui/browsers/hists.c:2500              ▒
> 2500            if (ms->map->dso->annotate_warned)                                                                                                                                                                 ▒
> Missing separate debuginfos, use: dnf debuginfo-install brotli-1.0.7-6.fc31.x86_64 bzip2-libs-1.0.8-1.fc31.x86_64 cyrus-sasl-lib-2.1.27-2.fc31.x86_64 elfutils-debuginfod-client-0.178-7.fc31.x86_64 elfutils-libelf-0.178-7.fc31.x86_64 elfutils-libs-0.178-7.fc31.x86_64 glib2-2.62.5-1.fc31.x86_64 keyutils-libs-1.6-3.fc31.x86_64 krb5-libs-1.17-46.fc31.x86_64 libbabeltrace-1.5.7-2.fc31.x86_64 libcap-2.26-6.fc31.x86_64 libcom_err-1.45.5-1.fc31.x86_64 libcurl-7.66.0-1.fc31.x86_64 libgcc-9.2.1-1.fc31.x86_64 libidn2-2.3.0-1.fc31.x86_64 libnghttp2-1.40.0-1.fc31.x86_64 libpsl-0.21.0-2.fc31.x86_64 libselinux-2.9-5.fc31.x86_64 libssh-0.9.3-1.fc31.x86_64 libunwind-1.3.1-5.fc31.x86_64 libuuid-2.34-4.fc31.x86_64 libxcrypt-4.4.14-1.fc31.x86_64 libzstd-1.4.4-1.fc31.x86_64 openldap-2.4.47-3.fc31.x86_64 openssl-libs-1.1.1d-2.fc31.x86_64 pcre-8.43-3.fc31.x86_64 pcre2-10.34-6.fc31.x86_64 perl-libs-5.30.1-449.fc31.x86_64 popt-1.16-18.fc31.x86_64 python2-libs-2.7.17-1.fc31.x86_64 slang-2.3.2-6.fc31.x86_64 xz-libs-5.2.4-6.fc31.x86_64 zlib-1.2.11-20.fc31.x86_64         ▒
> (gdb) bt                                                                                                                                                                                                           ▒
> #0  add_annotate_opt (browser=0xec34a0, act=0x7fffffffabf0, optstr=0x7fffffffab70, ms=0xdbdb60, addr=18446744071591430887) at ui/browsers/hists.c:2500                                                             ▒
> #1  0x000000000061caf9 in perf_evsel__hists_browse (evsel=0xc58860, nr_events=1, helpline=0xef69f0 "Tip: Show current config key-value pairs: perf config --list", left_exits=false, hbt=0x0, min_pcnt=0,          ▒
>      env=0xc5c7b0, warn_lost_event=true, annotation_opts=0x7fffffffb518) at ui/browsers/hists.c:3265                                                                                                                ▒
> #2  0x000000000061dbc2 in perf_evlist__tui_browse_hists (evlist=0xc55ed0, help=0xef69f0 "Tip: Show current config key-value pairs: perf config --list", hbt=0x0, min_pcnt=0, env=0xc5c7b0, warn_lost_event=true,   ▒
>      annotation_opts=0x7fffffffb518) at ui/browsers/hists.c:3569                                                                                                                                                    ▒
> #3  0x00000000004511e4 in report__browse_hists (rep=0x7fffffffb380) at builtin-report.c:630                                                                                                                        ▒
> #4  0x00000000004521db in __cmd_report (rep=0x7fffffffb380) at builtin-report.c:975                                                                                                                                ▒
> #5  0x000000000045444a in cmd_report (argc=0, argv=0x7fffffffd820) at builtin-report.c:1540                                                                                                                        ▒
> #6  0x00000000004e384a in run_builtin (p=0xa5b370 <commands+240>, argc=1, argv=0x7fffffffd820) at perf.c:312                                                                                                       ▒
> #7  0x00000000004e3ab7 in handle_internal_command (argc=1, argv=0x7fffffffd820) at perf.c:364                                                                                                                      ▒
> #8  0x00000000004e3bfe in run_argv (argcp=0x7fffffffd67c, argv=0x7fffffffd670) at perf.c:408                                                                                                                       ▒
> #9  0x00000000004e3fca in main (argc=1, argv=0x7fffffffd820) at perf.c:538                                                                                                                                         ▒
> (gdb)                                                                                                                                                                                                              ▒
> 
> 
> 
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 0/2] perf report: Support annotation of code without symbols
  2020-02-20 12:03   ` Jin, Yao
@ 2020-02-20 12:06     ` Jiri Olsa
  2020-02-20 13:50       ` Jin, Yao
  2020-02-20 14:42       ` Jin, Yao
  0 siblings, 2 replies; 9+ messages in thread
From: Jiri Olsa @ 2020-02-20 12:06 UTC (permalink / raw)
  To: Jin, Yao
  Cc: acme, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin

On Thu, Feb 20, 2020 at 08:03:18PM +0800, Jin, Yao wrote:
> 
> 
> On 2/20/2020 7:56 PM, Jiri Olsa wrote:
> > On Thu, Feb 20, 2020 at 08:59:00AM +0800, Jin Yao wrote:
> > > For perf report on stripped binaries it is currently impossible to do
> > > annotation. The annotation state is all tied to symbols, but there are
> > > either no symbols, or symbols are not covering all the code.
> > > 
> > > We should support the annotation functionality even without symbols.
> > > 
> > > The first patch uses al_addr to print because it's easy to dump
> > > the instructions from this address in binary for branch mode.
> > > 
> > > The second patch supports the annotation on stripped binary.
> > > 
> > > Jin Yao (2):
> > >    perf util: Print al_addr when symbol is not found
> > >    perf annotate: Support interactive annotation of code without symbols
> > 
> > looks good, but I'm getting crash when annotating unresolved kernel address:
> > 
> > jirka
> > 
> > 
> 
> Thanks for reporting the issue.
> 
> I guess you are trying the "0xffffffff81c00ae7", let me try to reproduce
> this issue.

yes, I also checked and it did not happen before

jirka

> 
> Thanks
> Jin Yao
> 
> > Samples: 14  of event 'cycles:u', Event count (approx.): 1822321
> > Overhead  Command  Shared Object     Symbol
> >    26.86%  ls       libc-2.30.so      [.] __strcoll_l                                                                                                                                                               ▒
> >    17.03%  ls       ls                [.] 0x0000000000008968                                                                                                                                                        ▒
> >    13.10%  ls       [unknown]         [k] 0xffffffff81c00ae7                                                                                                                                                        ▒
> >    13.02%  ls       ld-2.30.so        [.] _dl_cache_libcmp                                                                                                                                                          ▒
> >    12.84%  ls       libc-2.30.so      [.] _int_malloc                                                                                                                                                               ▒
> >    11.94%  ls       libc-2.30.so      [.] __memcpy_chk                                                                                                                                                              ▒
> >     5.21%  ls       ld-2.30.so        [.] __GI___tunables_init                                                                                                                                                      ▒
> >                                                                                                                                                                                                                     ▒
> >                                                                                                                                                                                                                     Program received signal SIGSEGV, Segmentation fault.                                                                                                                                                                ▒
> >                                                     add_annotate_opt (browser=0xec34a0, act=0x7fffffffabf0, optstr=0x7fffffffab70, ms=0xdbdb60, addr=18446744071591430887) at ui/browsers/hists.c:2500              ▒
> > 2500            if (ms->map->dso->annotate_warned)                                                                                                                                                                 ▒
> > Missing separate debuginfos, use: dnf debuginfo-install brotli-1.0.7-6.fc31.x86_64 bzip2-libs-1.0.8-1.fc31.x86_64 cyrus-sasl-lib-2.1.27-2.fc31.x86_64 elfutils-debuginfod-client-0.178-7.fc31.x86_64 elfutils-libelf-0.178-7.fc31.x86_64 elfutils-libs-0.178-7.fc31.x86_64 glib2-2.62.5-1.fc31.x86_64 keyutils-libs-1.6-3.fc31.x86_64 krb5-libs-1.17-46.fc31.x86_64 libbabeltrace-1.5.7-2.fc31.x86_64 libcap-2.26-6.fc31.x86_64 libcom_err-1.45.5-1.fc31.x86_64 libcurl-7.66.0-1.fc31.x86_64 libgcc-9.2.1-1.fc31.x86_64 libidn2-2.3.0-1.fc31.x86_64 libnghttp2-1.40.0-1.fc31.x86_64 libpsl-0.21.0-2.fc31.x86_64 libselinux-2.9-5.fc31.x86_64 libssh-0.9.3-1.fc31.x86_64 libunwind-1.3.1-5.fc31.x86_64 libuuid-2.34-4.fc31.x86_64 libxcrypt-4.4.14-1.fc31.x86_64 libzstd-1.4.4-1.fc31.x86_64 openldap-2.4.47-3.fc31.x86_64 openssl-libs-1.1.1d-2.fc31.x86_64 pcre-8.43-3.fc31.x86_64 pcre2-10.34-6.fc31.x86_64 perl-libs-5.30.1-449.fc31.x86_64 popt-1.16-18.fc31.x86_64 python2-libs-2.7.17-1.fc31.x86_64 slang-2.3.2-6.fc31.x86_64 xz-libs-5.2.4-6.fc31.x86_64 zlib-1.2.11-20.fc31.x86_64         ▒
> > (gdb) bt                                                                                                                                                                                                           ▒
> > #0  add_annotate_opt (browser=0xec34a0, act=0x7fffffffabf0, optstr=0x7fffffffab70, ms=0xdbdb60, addr=18446744071591430887) at ui/browsers/hists.c:2500                                                             ▒
> > #1  0x000000000061caf9 in perf_evsel__hists_browse (evsel=0xc58860, nr_events=1, helpline=0xef69f0 "Tip: Show current config key-value pairs: perf config --list", left_exits=false, hbt=0x0, min_pcnt=0,          ▒
> >      env=0xc5c7b0, warn_lost_event=true, annotation_opts=0x7fffffffb518) at ui/browsers/hists.c:3265                                                                                                                ▒
> > #2  0x000000000061dbc2 in perf_evlist__tui_browse_hists (evlist=0xc55ed0, help=0xef69f0 "Tip: Show current config key-value pairs: perf config --list", hbt=0x0, min_pcnt=0, env=0xc5c7b0, warn_lost_event=true,   ▒
> >      annotation_opts=0x7fffffffb518) at ui/browsers/hists.c:3569                                                                                                                                                    ▒
> > #3  0x00000000004511e4 in report__browse_hists (rep=0x7fffffffb380) at builtin-report.c:630                                                                                                                        ▒
> > #4  0x00000000004521db in __cmd_report (rep=0x7fffffffb380) at builtin-report.c:975                                                                                                                                ▒
> > #5  0x000000000045444a in cmd_report (argc=0, argv=0x7fffffffd820) at builtin-report.c:1540                                                                                                                        ▒
> > #6  0x00000000004e384a in run_builtin (p=0xa5b370 <commands+240>, argc=1, argv=0x7fffffffd820) at perf.c:312                                                                                                       ▒
> > #7  0x00000000004e3ab7 in handle_internal_command (argc=1, argv=0x7fffffffd820) at perf.c:364                                                                                                                      ▒
> > #8  0x00000000004e3bfe in run_argv (argcp=0x7fffffffd67c, argv=0x7fffffffd670) at perf.c:408                                                                                                                       ▒
> > #9  0x00000000004e3fca in main (argc=1, argv=0x7fffffffd820) at perf.c:538                                                                                                                                         ▒
> > (gdb)                                                                                                                                                                                                              ▒
> > 
> > 
> > 
> > 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 0/2] perf report: Support annotation of code without symbols
  2020-02-20 12:06     ` Jiri Olsa
@ 2020-02-20 13:50       ` Jin, Yao
  2020-02-20 14:42       ` Jin, Yao
  1 sibling, 0 replies; 9+ messages in thread
From: Jin, Yao @ 2020-02-20 13:50 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: acme, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin



On 2/20/2020 8:06 PM, Jiri Olsa wrote:
> On Thu, Feb 20, 2020 at 08:03:18PM +0800, Jin, Yao wrote:
>>
>>
>> On 2/20/2020 7:56 PM, Jiri Olsa wrote:
>>> On Thu, Feb 20, 2020 at 08:59:00AM +0800, Jin Yao wrote:
>>>> For perf report on stripped binaries it is currently impossible to do
>>>> annotation. The annotation state is all tied to symbols, but there are
>>>> either no symbols, or symbols are not covering all the code.
>>>>
>>>> We should support the annotation functionality even without symbols.
>>>>
>>>> The first patch uses al_addr to print because it's easy to dump
>>>> the instructions from this address in binary for branch mode.
>>>>
>>>> The second patch supports the annotation on stripped binary.
>>>>
>>>> Jin Yao (2):
>>>>     perf util: Print al_addr when symbol is not found
>>>>     perf annotate: Support interactive annotation of code without symbols
>>>
>>> looks good, but I'm getting crash when annotating unresolved kernel address:
>>>
>>> jirka
>>>
>>>
>>
>> Thanks for reporting the issue.
>>
>> I guess you are trying the "0xffffffff81c00ae7", let me try to reproduce
>> this issue.
> 
> yes, I also checked and it did not happen before
> 
> jirka
> 


I can reproduce it now.

perf record -e cycles:u ls
perf report --stdio

     75.29%  ls       ld-2.27.so        [.] do_lookup_x
     23.64%  ls       ld-2.27.so        [.] __GI___tunables_init
      1.04%  ls       [unknown]         [k] 0xffffffff85c01210
      0.03%  ls       ld-2.27.so        [.] _start

Looks it's caused by skid.

Thanks
Jin Yao


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 0/2] perf report: Support annotation of code without symbols
  2020-02-20 12:06     ` Jiri Olsa
  2020-02-20 13:50       ` Jin, Yao
@ 2020-02-20 14:42       ` Jin, Yao
  2020-02-20 14:51         ` Jiri Olsa
  1 sibling, 1 reply; 9+ messages in thread
From: Jin, Yao @ 2020-02-20 14:42 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: acme, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin



On 2/20/2020 8:06 PM, Jiri Olsa wrote:
> On Thu, Feb 20, 2020 at 08:03:18PM +0800, Jin, Yao wrote:
>>
>>
>> On 2/20/2020 7:56 PM, Jiri Olsa wrote:
>>> On Thu, Feb 20, 2020 at 08:59:00AM +0800, Jin Yao wrote:
>>>> For perf report on stripped binaries it is currently impossible to do
>>>> annotation. The annotation state is all tied to symbols, but there are
>>>> either no symbols, or symbols are not covering all the code.
>>>>
>>>> We should support the annotation functionality even without symbols.
>>>>
>>>> The first patch uses al_addr to print because it's easy to dump
>>>> the instructions from this address in binary for branch mode.
>>>>
>>>> The second patch supports the annotation on stripped binary.
>>>>
>>>> Jin Yao (2):
>>>>     perf util: Print al_addr when symbol is not found
>>>>     perf annotate: Support interactive annotation of code without symbols
>>>
>>> looks good, but I'm getting crash when annotating unresolved kernel address:
>>>
>>> jirka
>>>
>>>
>>
>> Thanks for reporting the issue.
>>
>> I guess you are trying the "0xffffffff81c00ae7", let me try to reproduce
>> this issue.
> 
> yes, I also checked and it did not happen before
> 
> jirka
> 

Hi Jiri,

Can you try this fix?

diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
index ff5711899234..5144528b2931 100644
--- a/tools/perf/ui/browsers/hists.c
+++ b/tools/perf/ui/browsers/hists.c
@@ -2497,7 +2497,7 @@ add_annotate_opt(struct hist_browser *browser,
                  struct map_symbol *ms,
                  u64 addr)
  {
-       if (ms->map->dso->annotate_warned)
+       if (!ms->map || !ms->map->dso || ms->map->dso->annotate_warned)
                 return 0;

         if (!ms->sym) {

It's tested OK at my side.

Thanks
Jin Yao


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 0/2] perf report: Support annotation of code without symbols
  2020-02-20 14:42       ` Jin, Yao
@ 2020-02-20 14:51         ` Jiri Olsa
  0 siblings, 0 replies; 9+ messages in thread
From: Jiri Olsa @ 2020-02-20 14:51 UTC (permalink / raw)
  To: Jin, Yao
  Cc: acme, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin

On Thu, Feb 20, 2020 at 10:42:11PM +0800, Jin, Yao wrote:
> 
> 
> On 2/20/2020 8:06 PM, Jiri Olsa wrote:
> > On Thu, Feb 20, 2020 at 08:03:18PM +0800, Jin, Yao wrote:
> > > 
> > > 
> > > On 2/20/2020 7:56 PM, Jiri Olsa wrote:
> > > > On Thu, Feb 20, 2020 at 08:59:00AM +0800, Jin Yao wrote:
> > > > > For perf report on stripped binaries it is currently impossible to do
> > > > > annotation. The annotation state is all tied to symbols, but there are
> > > > > either no symbols, or symbols are not covering all the code.
> > > > > 
> > > > > We should support the annotation functionality even without symbols.
> > > > > 
> > > > > The first patch uses al_addr to print because it's easy to dump
> > > > > the instructions from this address in binary for branch mode.
> > > > > 
> > > > > The second patch supports the annotation on stripped binary.
> > > > > 
> > > > > Jin Yao (2):
> > > > >     perf util: Print al_addr when symbol is not found
> > > > >     perf annotate: Support interactive annotation of code without symbols
> > > > 
> > > > looks good, but I'm getting crash when annotating unresolved kernel address:
> > > > 
> > > > jirka
> > > > 
> > > > 
> > > 
> > > Thanks for reporting the issue.
> > > 
> > > I guess you are trying the "0xffffffff81c00ae7", let me try to reproduce
> > > this issue.
> > 
> > yes, I also checked and it did not happen before
> > 
> > jirka
> > 
> 
> Hi Jiri,
> 
> Can you try this fix?
> 
> diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
> index ff5711899234..5144528b2931 100644
> --- a/tools/perf/ui/browsers/hists.c
> +++ b/tools/perf/ui/browsers/hists.c
> @@ -2497,7 +2497,7 @@ add_annotate_opt(struct hist_browser *browser,
>                  struct map_symbol *ms,
>                  u64 addr)
>  {
> -       if (ms->map->dso->annotate_warned)
> +       if (!ms->map || !ms->map->dso || ms->map->dso->annotate_warned)
>                 return 0;
> 
>         if (!ms->sym) {
> 
> It's tested OK at my side.

yep, the crash is gone

thanks,
jirka


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2020-02-20 14:51 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-20  0:59 [PATCH v1 0/2] perf report: Support annotation of code without symbols Jin Yao
2020-02-20  0:59 ` [PATCH v1 1/2] perf util: Print al_addr when symbol is not found Jin Yao
2020-02-20  0:59 ` [PATCH v1 2/2] perf annotate: Support interactive annotation of code without symbols Jin Yao
2020-02-20 11:56 ` [PATCH v1 0/2] perf report: Support " Jiri Olsa
2020-02-20 12:03   ` Jin, Yao
2020-02-20 12:06     ` Jiri Olsa
2020-02-20 13:50       ` Jin, Yao
2020-02-20 14:42       ` Jin, Yao
2020-02-20 14:51         ` Jiri Olsa

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).