perf symbols: Fix symbol annotation for relocated kernel
Kernel maps map memory addresses to file offsets. For symbol annotation, objdump needs the object VMA addresses. For an unrelocated kernel, that is the same as the memory address. The addresses passed to objdump for symbol annotation did not take into account kernel relocation. This patch fixes that. Reported-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Tested-by: Jiri Olsa <jolsa@redhat.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1391004884-10334-2-git-send-email-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
6a02652df5
commit
9176753d1e
@@ -39,6 +39,7 @@ void map__init(struct map *map, enum map_type type,
|
||||
map->start = start;
|
||||
map->end = end;
|
||||
map->pgoff = pgoff;
|
||||
map->reloc = 0;
|
||||
map->dso = dso;
|
||||
map->map_ip = map__map_ip;
|
||||
map->unmap_ip = map__unmap_ip;
|
||||
@@ -288,7 +289,7 @@ u64 map__rip_2objdump(struct map *map, u64 rip)
|
||||
if (map->dso->rel)
|
||||
return rip - map->pgoff;
|
||||
|
||||
return map->unmap_ip(map, rip);
|
||||
return map->unmap_ip(map, rip) - map->reloc;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -311,7 +312,7 @@ u64 map__objdump_2mem(struct map *map, u64 ip)
|
||||
if (map->dso->rel)
|
||||
return map->unmap_ip(map, ip + map->pgoff);
|
||||
|
||||
return ip;
|
||||
return ip + map->reloc;
|
||||
}
|
||||
|
||||
void map_groups__init(struct map_groups *mg)
|
||||
|
||||
Reference in New Issue
Block a user