Skip to content

Commit

Permalink
perf symbols: Improve debugging information about symtab origins
Browse files Browse the repository at this point in the history
Be more clear about DSO long names and tell from which file
kernel symbols were obtained, all in --verbose mode:

    [root@mica ~]# perf report -v > /dev/null
    Looking at the vmlinux_path (5 entries long)
    Using /lib/modules/2.6.33-rc8-tip-00777-g0918527-dirty/build/vmlinux for symbols
    [root@mica ~]# mv /lib/modules/2.6.33-rc8-tip-00777-g0918527-dirty/build/vmlinux /tmp/dd
    [root@mica ~]# perf report -v > /dev/null
    Looking at the vmlinux_path (5 entries long)
    Using /proc/kallsyms for symbols
    [root@mica ~]#

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
LKML-Reference: <1266866139-6361-1-git-send-email-acme@infradead.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Arnaldo Carvalho de Melo authored and Ingo Molnar committed Feb 25, 2010
1 parent c7ad21a commit 3846df2
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 7 deletions.
5 changes: 5 additions & 0 deletions tools/perf/util/map.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
#include <stdio.h>
#include "debug.h"

const char *map_type__name[MAP__NR_TYPES] = {
[MAP__FUNCTION] = "Functions",
[MAP__VARIABLE] = "Variables",
};

static inline int is_anon_memory(const char *filename)
{
return strcmp(filename, "//anon") == 0;
Expand Down
2 changes: 2 additions & 0 deletions tools/perf/util/map.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ enum map_type {

#define MAP__NR_TYPES (MAP__VARIABLE + 1)

extern const char *map_type__name[MAP__NR_TYPES];

struct dso;
struct ref_reloc_sym;
struct map_groups;
Expand Down
16 changes: 14 additions & 2 deletions tools/perf/util/symbol.c
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,10 @@ size_t dso__fprintf(struct dso *self, enum map_type type, FILE *fp)
struct rb_node *nd;
size_t ret = fprintf(fp, "dso: %s (", self->short_name);

if (self->short_name != self->long_name)
ret += fprintf(fp, "%s, ", self->long_name);
ret += fprintf(fp, "%s, %sloaded, ", map_type__name[type],
self->loaded ? "" : "NOT ");
ret += dso__fprintf_buildid(self, fp);
ret += fprintf(fp, ")\n");
for (nd = rb_first(&self->symbols[type]); nd; nd = rb_next(nd)) {
Expand Down Expand Up @@ -1580,6 +1584,9 @@ static int dso__load_vmlinux(struct dso *self, struct map *map,
err = dso__load_sym(self, map, vmlinux, fd, filter, 0);
close(fd);

if (err > 0)
pr_debug("Using %s for symbols\n", vmlinux);

return err;
}

Expand All @@ -1594,7 +1601,6 @@ int dso__load_vmlinux_path(struct dso *self, struct map *map,
for (i = 0; i < vmlinux_path__nr_entries; ++i) {
err = dso__load_vmlinux(self, map, vmlinux_path[i], filter);
if (err > 0) {
pr_debug("Using %s for symbols\n", vmlinux_path[i]);
dso__set_long_name(self, strdup(vmlinux_path[i]));
break;
}
Expand Down Expand Up @@ -1661,12 +1667,16 @@ static int dso__load_kernel_sym(struct dso *self, struct map *map,

if (asprintf(&kallsyms_allocated_filename,
"%s/.debug/[kernel.kallsyms]/%s",
getenv("HOME"), sbuild_id) == -1)
getenv("HOME"), sbuild_id) == -1) {
pr_err("Not enough memory for kallsyms file lookup\n");
return -1;
}

kallsyms_filename = kallsyms_allocated_filename;

if (access(kallsyms_filename, F_OK)) {
pr_err("No kallsyms or vmlinux with build-id %s "
"was found\n", sbuild_id);
free(kallsyms_allocated_filename);
return -1;
}
Expand All @@ -1680,6 +1690,8 @@ static int dso__load_kernel_sym(struct dso *self, struct map *map,

do_kallsyms:
err = dso__load_kallsyms(self, kallsyms_filename, map, filter);
if (err > 0)
pr_debug("Using %s for symbols\n", kallsyms_filename);
free(kallsyms_allocated_filename);

out_try_fixup:
Expand Down
5 changes: 0 additions & 5 deletions tools/perf/util/thread.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,6 @@ int thread__comm_len(struct thread *self)
return self->comm_len;
}

static const char *map_type__name[MAP__NR_TYPES] = {
[MAP__FUNCTION] = "Functions",
[MAP__VARIABLE] = "Variables",
};

static size_t __map_groups__fprintf_maps(struct map_groups *self,
enum map_type type, FILE *fp)
{
Expand Down

0 comments on commit 3846df2

Please sign in to comment.