public inbox for linux-kernel@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox