Skip to content

Commit

Permalink
perf report: Fix kernel symbol resolution
Browse files Browse the repository at this point in the history
kallsyms have just the symbol start, so we need to read two lines
to get the len.

[ Impact: fix incorrect kernel symbol display in perf report ]

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: John Kacur <jkacur@redhat.com>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Arnaldo Carvalho de Melo authored and Ingo Molnar committed May 26, 2009
1 parent f17e04a commit 59d8102
Showing 1 changed file with 21 additions and 5 deletions.
26 changes: 21 additions & 5 deletions Documentation/perf_counter/builtin-report.c
Original file line number Diff line number Diff line change
Expand Up @@ -360,9 +360,17 @@ static int load_kallsyms(void)
char *line = NULL;
size_t n;

if (getline(&line, &n, file) < 0 || !line)
goto out_delete_dso;

unsigned long long previous_start;
char c, previous_symbf[4096];
if (sscanf(line, "%llx %c %s", &previous_start, &c, previous_symbf) != 3)
goto out_delete_line;

while (!feof(file)) {
unsigned long long start;
char c, symbf[4096];
char symbf[4096];

if (getline(&line, &n, file) < 0)
break;
Expand All @@ -371,12 +379,18 @@ static int load_kallsyms(void)
goto out_delete_dso;

if (sscanf(line, "%llx %c %s", &start, &c, symbf) == 3) {
struct symbol *sym = symbol__new(start, 0x1000000, symbf);
if (start > previous_start) {
struct symbol *sym = symbol__new(previous_start,
start - previous_start,
previous_symbf);

if (sym == NULL)
goto out_delete_dso;
if (sym == NULL)
goto out_delete_dso;

dso__insert_symbol(kernel_dso, sym);
dso__insert_symbol(kernel_dso, sym);
previous_start = start;
strcpy(previous_symbf, symbf);
}
}
}

Expand All @@ -385,6 +399,8 @@ static int load_kallsyms(void)
fclose(file);
return 0;

out_delete_line:
free(line);
out_delete_dso:
dso__delete(kernel_dso);
return -1;
Expand Down

0 comments on commit 59d8102

Please sign in to comment.