2009-10-20 17:55:43

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: [PATCH] perf top: Fix symbol annotation

We need to use map->unmap_ip() here too to match section relative symbol
address to the absolute address needed to match objdump -dS addresses.

Reported-by: Mike Galbraith <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Paul Mackerras <[email protected]>
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
---
tools/perf/builtin-top.c | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index cc66286..fa20345 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -141,7 +141,8 @@ static void parse_source(struct sym_entry *syme)
sprintf(command,
"objdump --start-address=0x%016Lx "
"--stop-address=0x%016Lx -dS %s",
- sym->start, sym->end, path);
+ map->unmap_ip(map, sym->start),
+ map->unmap_ip(map, sym->end), path);

file = popen(command, "r");
if (!file)
@@ -173,11 +174,11 @@ static void parse_source(struct sym_entry *syme)

if (strlen(src->line)>8 && src->line[8] == ':') {
src->eip = strtoull(src->line, NULL, 16);
- src->eip += map->start;
+ src->eip = map->unmap_ip(map, src->eip);
}
if (strlen(src->line)>8 && src->line[16] == ':') {
src->eip = strtoull(src->line, NULL, 16);
- src->eip += map->start;
+ src->eip = map->unmap_ip(map, src->eip);
}
}
pclose(file);
--
1.5.5.1


2009-10-24 01:09:41

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: [tip:branch?] perf top: Fix symbol annotation

Commit-ID: c88e4bf60de6253a048cf4e6b3b0715e543e0460
Gitweb: http://git.kernel.org/tip/c88e4bf60de6253a048cf4e6b3b0715e543e0460
Author: Arnaldo Carvalho de Melo <[email protected]>
AuthorDate: Tue, 20 Oct 2009 15:54:55 -0200
Committer: Ingo Molnar <[email protected]>
CommitDate: Tue, 20 Oct 2009 21:12:59 +0200

perf top: Fix symbol annotation

We need to use map->unmap_ip() here too to match section
relative symbol address to the absolute address needed to match
objdump -dS addresses.

Reported-by: Mike Galbraith <[email protected]>
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Paul Mackerras <[email protected]>
LKML-Reference: <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
---
tools/perf/builtin-top.c | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index cc66286..fa20345 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -141,7 +141,8 @@ static void parse_source(struct sym_entry *syme)
sprintf(command,
"objdump --start-address=0x%016Lx "
"--stop-address=0x%016Lx -dS %s",
- sym->start, sym->end, path);
+ map->unmap_ip(map, sym->start),
+ map->unmap_ip(map, sym->end), path);

file = popen(command, "r");
if (!file)
@@ -173,11 +174,11 @@ static void parse_source(struct sym_entry *syme)

if (strlen(src->line)>8 && src->line[8] == ':') {
src->eip = strtoull(src->line, NULL, 16);
- src->eip += map->start;
+ src->eip = map->unmap_ip(map, src->eip);
}
if (strlen(src->line)>8 && src->line[16] == ':') {
src->eip = strtoull(src->line, NULL, 16);
- src->eip += map->start;
+ src->eip = map->unmap_ip(map, src->eip);
}
}
pclose(file);