perf report: Output more symbol related debug data
Peter Zijlstra [Mon, 22 Jun 2009 14:52:51 +0000 (16:52 +0200)]
Print more symbol relocation related info under -vv.

Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>

tools/perf/builtin-report.c
tools/perf/util/symbol.c

index 5eb5566..ec230a0 100644 (file)
@@ -797,7 +797,7 @@ resolve_symbol(struct thread *thread, struct map **mapp,
 {
        struct dso *dso = dsop ? *dsop : NULL;
        struct map *map = mapp ? *mapp : NULL;
-       uint64_t ip = *ipp;
+       u64 ip = *ipp;
 
        if (!thread)
                return NULL;
@@ -814,7 +814,6 @@ resolve_symbol(struct thread *thread, struct map **mapp,
                        *mapp = map;
 got_map:
                ip = map->map_ip(map, ip);
-               *ipp  = ip;
 
                dso = map->dso;
        } else {
@@ -828,6 +827,8 @@ got_map:
                dso = kernel_dso;
        }
        dprintf(" ...... dso: %s\n", dso ? dso->name : "<not found>");
+       dprintf(" ...... map: %Lx -> %Lx\n", *ipp, ip);
+       *ipp  = ip;
 
        if (dsop)
                *dsop = dso;
index 01b62fa..9c659ef 100644 (file)
@@ -535,6 +535,10 @@ static int dso__load_sym(struct dso *self, int fd, const char *name,
                gelf_getshdr(sec, &shdr);
                obj_start = sym.st_value;
 
+               if (verbose >= 2)
+                       printf("adjusting symbol: st_value: %Lx sh_addr: %Lx sh_offset: %Lx\n",
+                               (u64)sym.st_value, (u64)shdr.sh_addr, (u64)shdr.sh_offset);
+
                sym.st_value -= shdr.sh_addr - shdr.sh_offset;
 
                f = symbol__new(sym.st_value, sym.st_size,