All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hekuang <hekuang@huawei.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>, Jiri Olsa <jolsa@kernel.org>,
	"Peter Zijlstra" <peterz@infradead.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: perf unwind: Odd message about x86 unwind
Date: Fri, 1 Jul 2016 10:05:41 +0800	[thread overview]
Message-ID: <5775CFF5.6040802@huawei.com> (raw)
In-Reply-To: <20160630120601.GC5324@kernel.org>

hi

在 2016/6/30 20:06, Arnaldo Carvalho de Melo 写道:
> Hi He,
>
> 	While testing a patch by Peter Zijlstra to the --stdio
> annotation code I came accross these messages:
>
> [acme@jouet linux]$ perf annotate __vdso_gettimeofday 2>&1 | head -20
> unwind: target platform=x86 is not supported
> unwind: target platform=x86 is not supported
> unwind: target platform=x86 is not supported
> unwind: target platform=x86 is not supported
>   Percent |	Source code & Disassembly of perf-vdso.so-E5tFUx for cycles:u
> -----------------------------------------------------------------------------
>           :
>           :
>           :
>           :	Disassembly of section .text:
>           :
>           :	0000000000000cd0 <__vdso_gettimeofday@@LINUX_2.6>:
>      0.00 :	  cd0:   push   %rbp
>      0.00 :	  cd1:   mov    %rsp,%rbp
>      0.00 :	  cd4:   push   %r15
>      0.00 :	  cd6:   push   %r14
>      0.00 :	  cd8:   push   %r13
>      0.00 :	  cda:   push   %r12
>      0.00 :	  cdc:   push   %rbx
>      0.00 :	  cdd:   sub    $0x10,%rsp
> [acme@jouet linux]$
>
> And bisected it down to:
>
> commit 52ffe0ff02fc053a025c381d5808e9ecd3206dfe
> Author: He Kuang <hekuang@huawei.com>
> Date:   Fri Jun 3 03:33:22 2016 +0000
>
>      perf callchain: Support x86 target platform
>      
>      Support x86(32-bit) cross platform callchain unwind.
>      
>      Signed-off-by: He Kuang <hekuang@huawei.com>
>      Acked-by: Jiri Olsa <jolsa@kernel.org>
>
> --------------------------------------------------
>
> The source code where this message is emitted is:
>
> struct unwind_libunwind_ops __weak *local_unwind_libunwind_ops;
> <SNIP>
> unwind__prepare_access()
> {
> 	struct unwind_libunwind_ops *ops = local_unwind_libunwind_ops;
> <SNIP>
> 	if (!strcmp(arch, "x86")) {
>                  if (dso_type != DSO__TYPE_64BIT)
>                          ops = x86_32_unwind_libunwind_ops;
>          }
> <SNIP>
>          if (!ops) {
>                  pr_err("unwind: target platform=%s is not supported\n", arch);
>                  return -1;
>          }
>
> So, this should fallback to local_unwind_libunwind_ops, why is this not being
> set properly?
>
> Feature detection says:
>
> ...                     libunwind: [ on  ]
> ...            libdw-dwarf-unwind: [ on  ]
>
> This is:
>
> [acme@jouet linux]$ uname -a
> Linux jouet 4.5.7-300.fc24.x86_64 #1 SMP Wed Jun 8 18:12:45 UTC 2016 x86_64 x86_64 x86_64 GNU/Linuxo
>
> Can you please check this?

I think it's because of the perf.data contains both 32bit/64bit
threads while perf is only build with local unwind(unwind for
x86_64).

Then I have a simple test for this:

   $ file hello_x86_64
   hello_x86_64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 3.0.0, 
BuildID[sha1]=adc94932cbcb2be80f3b62df530b8c109f40478a, not strippe

   $ file hello_i686
   hello_i686: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 4.5.0, not stripped

   $ perf record -o perf.data.x86_64_singlethread    hello_x86_64
   $ perf record -o perf.data.x86_64_allcpu       -a hello_x86_64
   $ perf record -o perf.data.i686_singlethread      hello_i686
   $ perf record -o perf.data.i686_allcpu         -a hello_i686

Now I get 4 perf.data files:

   ID    name                32bit        64bit

   1    perf.data.x86_64_singlethread    N        Y
   2    perf.data.x86_64_allcpu        N        Y
   3    perf.data.i686_singlethread    Y        N
   4    perf.data.i686_allcpu        Y        Y

Because perf only supports local unwind(for x86_64), cases
contain 32bit thread should show the warnings, i.e. case3 and
case4. And perf.data contains only 32bit threads will show nothing
except the warnings while the one contains both 32bit/64bit will
show warnings for 32bit thread and annoate the 64bit thread.

Then check:

   $ perf annotate -i perf.data.x86_64_singlethread

    Percent |      Source code & Disassembly of hello for cycles:pp
   ----------------------------------------------------------------
            :
            :
            :
            :      Disassembly of section .text:
            :
            :      00000000004005c0 <fib>:
            :      fib():
            :      #endif

   $ perf annotate -i perf.data.x86_64_allcpu

   Percent |      Source code & Disassembly of hello for cycles:pp
   ----------------------------------------------------------------
            :
            :
            :
            :      Disassembly of section .text:
            :
            :      00000000004005c0 <fib>:
            :      fib():
            :      #endif
            :
            :      volatile int z = 0;
            :
            :      int fib(int x)

   $ perf annotate -i perf.data.i686_singlethread

   unwind: target platform=x86 is not supported
   unwind: target platform=x86 is not supported
   unwind: target platform=x86 is not supported

   $ perf annotate -i perf.data.i686_allcpu

   unwind: target platform=x86 is not supported
   unwind: target platform=x86 is not supported
   unwind: target platform=x86 is not supported

   Percent |      Source code & Disassembly of perf for cycles:pp
   ---------------------------------------------------------------
   :
   :
   :
   :      Disassembly of section .text:
   :
   :      0000000000442a8f <record__mmap_read>:
   :      record__mmap_read():
   :
   :              return backward_rb_find_range(data, mask, head, start, 
end);
   :      }

The result is the same as we expected, so if your case matches
the case4, the result is right. But I think we can improve the
warning message for not confusing the users.

Thank you.

> - Arnaldo
>

      reply	other threads:[~2016-07-01  2:07 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-30 12:06 perf unwind: Odd message about x86 unwind Arnaldo Carvalho de Melo
2016-07-01  2:05 ` Hekuang [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5775CFF5.6040802@huawei.com \
    --to=hekuang@huawei.com \
    --cc=acme@kernel.org \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=wangnan0@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.