Skip to content

Commit

Permalink
perf tools: Fix bprintk reading in trace output
Browse files Browse the repository at this point in the history
The bprintk parsing was broken in more ways than one.

The file parsing was incorrect, and the words used by the
arguments are always 4 bytes aligned, even on 64-bit machines.

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
LKML-Reference: <20091014194359.520931637@goodmis.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Steven Rostedt authored and Ingo Molnar committed Oct 15, 2009
1 parent 07a4bdd commit ffa1895
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions tools/perf/util/trace-event-parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -284,18 +284,16 @@ void parse_ftrace_printk(char *file, unsigned int size __unused)
char *line;
char *next = NULL;
char *addr_str;
int ret;
char *fmt;
int i;

line = strtok_r(file, "\n", &next);
while (line) {
item = malloc_or_die(sizeof(*item));
ret = sscanf(line, "%as : %as",
(float *)(void *)&addr_str, /* workaround gcc warning */
(float *)(void *)&item->printk);
addr_str = strtok_r(line, ":", &fmt);
item->addr = strtoull(addr_str, NULL, 16);
free(addr_str);

/* fmt still has a space, skip it */
item->printk = strdup(fmt+1);
item->next = list;
list = item;
line = strtok_r(NULL, "\n", &next);
Expand Down Expand Up @@ -2274,8 +2272,9 @@ static struct print_arg *make_bprint_args(char *fmt, void *data, int size, struc
case 'u':
case 'x':
case 'i':
bptr = (void *)(((unsigned long)bptr + (long_size - 1)) &
~(long_size - 1));
/* the pointers are always 4 bytes aligned */
bptr = (void *)(((unsigned long)bptr + 3) &
~3);
switch (ls) {
case 0:
case 1:
Expand Down

0 comments on commit ffa1895

Please sign in to comment.