[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20130805195927.GA24584@ghostprotocols.net>
Date: Mon, 5 Aug 2013 16:59:27 -0300
From: Arnaldo Carvalho de Melo <acme@...stprotocols.net>
To: Adrian Hunter <adrian.hunter@...el.com>
Cc: linux-kernel@...r.kernel.org, David Ahern <dsahern@...il.com>,
Frederic Weisbecker <fweisbec@...il.com>,
Jiri Olsa <jolsa@...hat.com>, Mike Galbraith <efault@....de>,
Namhyung Kim <namhyung@...il.com>,
Paul Mackerras <paulus@...ba.org>,
Peter Zijlstra <peterz@...radead.org>,
Stephane Eranian <eranian@...gle.com>,
Ingo Molnar <mingo@...nel.org>
Subject: Re: [PATCH V3 10/10] perf tools: allow annotation using /proc/kcore
Em Fri, Aug 02, 2013 at 01:10:52PM +0300, Adrian Hunter escreveu:
> Annotation with /proc/kcore is possible so the logic
> is adjusted to allow it. The main difference is that
> /proc/kcore had no symbols so the parsing logic needed
> a tweak to read jump offsets.
>
> The other difference is that objdump cannot always
> read from kcore. That seems to be a bug with objdump.
Was this reported to the objdump guys? Can you ellaborate on the failure
cases?
> Signed-off-by: Adrian Hunter <adrian.hunter@...el.com>
> ---
> tools/perf/builtin-top.c | 3 ++-
> tools/perf/util/annotate.c | 13 +++++++++----
> 2 files changed, 11 insertions(+), 5 deletions(-)
>
> diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
> index bbf4635..3b19a6b 100644
> --- a/tools/perf/builtin-top.c
> +++ b/tools/perf/builtin-top.c
> @@ -103,7 +103,8 @@ static int perf_top__parse_source(struct perf_top *top, struct hist_entry *he)
> /*
> * We can't annotate with just /proc/kallsyms
> */
> - if (map->dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS) {
> + if (map->dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS &&
> + !dso__is_kcore(map->dso)) {
> pr_err("Can't annotate %s: No vmlinux file was found in the "
> "path\n", sym->name);
> sleep(1);
> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
> index d102716..4ab2f11 100644
> --- a/tools/perf/util/annotate.c
> +++ b/tools/perf/util/annotate.c
> @@ -110,10 +110,10 @@ static int jump__parse(struct ins_operands *ops)
> {
> const char *s = strchr(ops->raw, '+');
>
> - ops->target.addr = strtoll(ops->raw, NULL, 16);
> + ops->target.addr = strtoull(ops->raw, NULL, 16);
>
> if (s++ != NULL)
> - ops->target.offset = strtoll(s, NULL, 16);
> + ops->target.offset = strtoull(s, NULL, 16);
> else
> ops->target.offset = UINT64_MAX;
>
> @@ -821,6 +821,10 @@ static int symbol__parse_objdump_line(struct symbol *sym, struct map *map,
> if (dl == NULL)
> return -1;
>
> + if (dl->ops.target.offset == UINT64_MAX)
> + dl->ops.target.offset = dl->ops.target.addr -
> + map__rip_2objdump(map, sym->start);
> +
> disasm__add(¬es->src->source, dl);
>
> return 0;
> @@ -864,7 +868,8 @@ fallback:
> free_filename = false;
> }
>
> - if (dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS) {
> + if (dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS &&
> + !dso__is_kcore(dso)) {
> char bf[BUILD_ID_SIZE * 2 + 16] = " with build id ";
> char *build_id_msg = NULL;
>
> @@ -898,7 +903,7 @@ fallback:
> snprintf(command, sizeof(command),
> "%s %s%s --start-address=0x%016" PRIx64
> " --stop-address=0x%016" PRIx64
> - " -d %s %s -C %s|grep -v %s|expand",
> + " -d %s %s -C %s 2>/dev/null|grep -v %s|expand",
> objdump_path ? objdump_path : "objdump",
> disassembler_style ? "-M " : "",
> disassembler_style ? disassembler_style : "",
> --
> 1.7.11.7
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists