From: Adrian Hunter <adrian.hunter@intel.com>
To: He Kuang <hekuang@huawei.com>
Cc: peterz@infradead.org, mingo@redhat.com, acme@kernel.org,
alexander.shishkin@linux.intel.com, jolsa@redhat.com,
wangnan0@huawei.com, jpoimboe@redhat.com, ak@linux.intel.com,
eranian@google.com, namhyung@kernel.org,
sukadev@linux.vnet.ibm.com, masami.hiramatsu.pt@hitachi.com,
tumanova@linux.vnet.ibm.com, kan.liang@intel.com,
penberg@kernel.org, dsahern@gmail.com,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 1/7 UPDATE] perf tools: Find vdso with the consider of cross-platform
Date: Tue, 17 May 2016 10:33:13 +0300 [thread overview]
Message-ID: <573AC939.8070107@intel.com> (raw)
In-Reply-To: <1463129509-160934-1-git-send-email-hekuang@huawei.com>
On 13/05/16 11:51, He Kuang wrote:
> There's a problem in machine__findnew_vdso(), vdso buildid generated
> by a 32-bit machine stores it with the name 'vdso', but when
> processing buildid on a 64-bit machine with the same 'perf.data', perf
> will search for vdso named as 'vdso32' and get failed.
>
> This patch tries to find the exsiting dsos in machine->dsos by thread
> dso_type. 64-bit thread tries to find vdso with name 'vdso', because
> all 64-bit vdso is named as that. 32-bit thread first tries to find
> vdso with name 'vdso32' if this thread was run on 64-bit machine, if
> failed, then it tries 'vdso' which indicates that the thread was run
> on 32-bit machine when recording.
>
> Signed-off-by: He Kuang <hekuang@huawei.com>
> ---
> tools/perf/util/vdso.c | 40 +++++++++++++++++++++++++++++++++++++---
> 1 file changed, 37 insertions(+), 3 deletions(-)
>
> diff --git a/tools/perf/util/vdso.c b/tools/perf/util/vdso.c
> index 44d440d..99f4a3d 100644
> --- a/tools/perf/util/vdso.c
> +++ b/tools/perf/util/vdso.c
> @@ -134,8 +134,6 @@ static struct dso *__machine__addnew_vdso(struct machine *machine, const char *s
> return dso;
> }
>
> -#if BITS_PER_LONG == 64
> -
> static enum dso_type machine__thread_dso_type(struct machine *machine,
> struct thread *thread)
> {
> @@ -156,6 +154,8 @@ static enum dso_type machine__thread_dso_type(struct machine *machine,
> return dso_type;
> }
>
> +#if BITS_PER_LONG == 64
> +
> static int vdso__do_copy_compat(FILE *f, int fd)
> {
> char buf[4096];
> @@ -283,8 +283,38 @@ static int __machine__findnew_vdso_compat(struct machine *machine,
>
> #endif
>
> +static struct dso *machine__find_vdso(struct machine *machine,
> + struct thread *thread)
> +{
> + struct dso *dso = NULL;
> + enum dso_type dso_type;
> +
> + dso_type = machine__thread_dso_type(machine, thread);
> + switch (dso_type) {
> + case DSO__TYPE_32BIT:
> + dso = __dsos__find(&machine->dsos, DSO__NAME_VDSO32, true);
> + if (!dso)
> + dso = __dsos__find(&machine->dsos, DSO__NAME_VDSO,
> + true);
So if we have not yet added the 32-bit vdso but have added the 64-bit vdso,
we will return the wrong one.
Can we check it? e.g.
if (!dso)
dso = __dsos__find(&machine->dsos, DSO__NAME_VDSO,
true);
if (dso_type != dso__type(dso, machine))
dso = NULL;
> + break;
> + case DSO__TYPE_X32BIT:
> + dso = __dsos__find(&machine->dsos, DSO__NAME_VDSOX32, true);
> + if (!dso)
> + dso = __dsos__find(&machine->dsos, DSO__NAME_VDSO,
> + true);
The x32 vdso is never called DSO__NAME_VDSO so this is not correct, but for
the same reason we don't need this __dsos__find() anyway.
> + break;
> + case DSO__TYPE_64BIT:
> + case DSO__TYPE_UNKNOWN:
> + default:
> + dso = __dsos__find(&machine->dsos, DSO__NAME_VDSO, true);
> + break;
> + }
> +
> + return dso;
> +}
> +
> struct dso *machine__findnew_vdso(struct machine *machine,
> - struct thread *thread __maybe_unused)
> + struct thread *thread)
> {
> struct vdso_info *vdso_info;
> struct dso *dso = NULL;
> @@ -297,6 +327,10 @@ struct dso *machine__findnew_vdso(struct machine *machine,
> if (!vdso_info)
> goto out_unlock;
>
> + dso = machine__find_vdso(machine, thread);
> + if (dso)
> + goto out_unlock;
> +
> #if BITS_PER_LONG == 64
> if (__machine__findnew_vdso_compat(machine, thread, vdso_info, &dso))
> goto out_unlock;
>
next prev parent reply other threads:[~2016-05-17 7:37 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-12 8:43 [PATCH v3 0/7] Add support for remote unwind He Kuang
2016-05-12 8:43 ` [PATCH v3 1/7] perf tools: Set vdso name to vdso[64,32] depending on platform He Kuang
2016-05-12 10:06 ` Adrian Hunter
2016-05-13 8:51 ` [PATCH v3 1/7 UPDATE] perf tools: Find vdso with the consider of cross-platform He Kuang
2016-05-16 13:32 ` Arnaldo Carvalho de Melo
2016-05-17 7:34 ` Adrian Hunter
2016-05-17 7:33 ` Adrian Hunter [this message]
2016-05-17 9:04 ` [PATCH v3 1/7 UPDATE2] " He Kuang
2016-05-17 9:17 ` Adrian Hunter
2016-05-17 12:46 ` Arnaldo Carvalho de Melo
2016-06-15 13:34 ` Arnaldo Carvalho de Melo
2016-06-16 0:22 ` Hekuang
2016-06-16 13:00 ` Adrian Hunter
2016-06-16 16:33 ` Arnaldo Carvalho de Melo
2016-05-17 9:05 ` [PATCH v3 1/7 UPDATE] " Hekuang
2016-05-13 8:53 ` [PATCH v3 1/7] perf tools: Set vdso name to vdso[64,32] depending on platform Hekuang
2016-05-12 8:43 ` [PATCH v3 2/7] perf tools: Store vdso buildid unconditionally He Kuang
2016-05-12 13:09 ` Arnaldo Carvalho de Melo
2016-05-20 6:43 ` [tip:perf/urgent] perf symbols: " tip-bot for He Kuang
2016-05-12 8:43 ` [PATCH v3 3/7] perf tools: Remove the logical that skip buildid cache if symfs is given He Kuang
2016-05-12 13:09 ` Arnaldo Carvalho de Melo
2016-05-12 20:23 ` David Ahern
2016-05-12 20:33 ` Arnaldo Carvalho de Melo
2016-05-13 7:19 ` Hekuang
2016-05-13 14:27 ` David Ahern
2016-05-13 18:01 ` Arnaldo Carvalho de Melo
2016-05-14 8:19 ` [PATCH v3 3/7 UPDATE] perf tools: Add option for the path of buildid dsos under symfs He Kuang
2016-05-14 14:43 ` David Ahern
2016-05-16 1:30 ` Hekuang
2016-05-16 2:50 ` David Ahern
2016-05-16 6:40 ` Hekuang
2016-05-18 1:47 ` Hekuang
2016-05-18 1:51 ` David Ahern
2016-05-18 2:48 ` Hekuang
2016-05-18 3:04 ` David Ahern
2016-05-12 8:43 ` [PATCH v3 4/7] perf tools: Promote proper messages for cross-platform unwind He Kuang
2016-05-12 8:43 ` [PATCH v3 5/7] perf callchain: Add support " He Kuang
2016-05-12 8:43 ` [PATCH v3 6/7] perf callchain: Support x86 target platform He Kuang
2016-05-12 8:43 ` [PATCH v3 7/7] perf callchain: Support aarch64 cross-platform He Kuang
2016-06-22 6:57 [PATCH 0/5] Fixes on perf unwind He Kuang
2016-06-22 6:57 ` [PATCH 1/5] perf unwind: Change macro names of perf register He Kuang
2016-06-26 10:56 ` [tip:perf/core] " tip-bot for He Kuang
2016-06-22 6:57 ` [PATCH 2/5] perf unwind: Fix wrongly used regs for x86_32 unwind He Kuang
2016-06-26 10:56 ` [tip:perf/core] " tip-bot for He Kuang
2016-06-22 6:57 ` [PATCH 3/5] perf unwind: Fix wrongly used regs for aarch64 unwind He Kuang
2016-06-26 10:57 ` [tip:perf/core] " tip-bot for He Kuang
2016-06-22 6:57 ` [PATCH 4/5] perf tools: Let python use correct gcc for build_ext He Kuang
2016-06-26 10:54 ` [tip:perf/core] " tip-bot for He Kuang
2016-06-22 6:57 ` [PATCH 5/5] perf tools: Fix NULL pointer deference when vdso not found He Kuang
2016-06-23 2:02 ` Wangnan (F)
2016-06-23 3:03 ` Hekuang
2016-06-23 12:07 ` Arnaldo Carvalho de Melo
2016-06-23 13:28 ` Arnaldo Carvalho de Melo
2016-06-26 10:55 ` [tip:perf/core] perf tools: Find right DSO taking into account if binary is 32 or 64-bit tip-bot for He Kuang
2016-06-23 13:30 ` [PATCH 0/5] Fixes on perf unwind Arnaldo Carvalho de Melo
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=573AC939.8070107@intel.com \
--to=adrian.hunter@intel.com \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=dsahern@gmail.com \
--cc=eranian@google.com \
--cc=hekuang@huawei.com \
--cc=jolsa@redhat.com \
--cc=jpoimboe@redhat.com \
--cc=kan.liang@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=penberg@kernel.org \
--cc=peterz@infradead.org \
--cc=sukadev@linux.vnet.ibm.com \
--cc=tumanova@linux.vnet.ibm.com \
--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;
as well as URLs for NNTP newsgroup(s).