aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lib/traceevent/event-parse.c
diff options
context:
space:
mode:
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>2013-11-01 17:53:55 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2013-11-04 12:34:26 -0500
commit0970b5f438261216afcd0ccaa2fcfffc83df7ca2 (patch)
tree317d6b35335071857d82ff0ee3f17374146b8434 /tools/lib/traceevent/event-parse.c
parent18900af8292180151c82f0762506fa0740aa54a5 (diff)
tools lib traceevent: If %s is a pointer, check printk formats
If the format string of TP_printk() contains a %s, and the argument is not a string, check if the argument is a pointer that might match the printk_formats that were stored. Signed-off-by: Steven Rostedt <rostedt@goodmis.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Link: http://lkml.kernel.org/r/20131101215500.698924777@goodmis.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/lib/traceevent/event-parse.c')
-rw-r--r--tools/lib/traceevent/event-parse.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
index 856b79105abc..013c8d3db806 100644
--- a/tools/lib/traceevent/event-parse.c
+++ b/tools/lib/traceevent/event-parse.c
@@ -3505,6 +3505,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
3505 struct pevent *pevent = event->pevent; 3505 struct pevent *pevent = event->pevent;
3506 struct print_flag_sym *flag; 3506 struct print_flag_sym *flag;
3507 struct format_field *field; 3507 struct format_field *field;
3508 struct printk_map *printk;
3508 unsigned long long val, fval; 3509 unsigned long long val, fval;
3509 unsigned long addr; 3510 unsigned long addr;
3510 char *str; 3511 char *str;
@@ -3540,7 +3541,12 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
3540 if (!(field->flags & FIELD_IS_ARRAY) && 3541 if (!(field->flags & FIELD_IS_ARRAY) &&
3541 field->size == pevent->long_size) { 3542 field->size == pevent->long_size) {
3542 addr = *(unsigned long *)(data + field->offset); 3543 addr = *(unsigned long *)(data + field->offset);
3543 trace_seq_printf(s, "%lx", addr); 3544 /* Check if it matches a print format */
3545 printk = find_printk(pevent, addr);
3546 if (printk)
3547 trace_seq_puts(s, printk->printk);
3548 else
3549 trace_seq_printf(s, "%lx", addr);
3544 break; 3550 break;
3545 } 3551 }
3546 str = malloc(len + 1); 3552 str = malloc(len + 1);