aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--parse-events.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/parse-events.c b/parse-events.c
index ff44523..af50bc1 100644
--- a/parse-events.c
+++ b/parse-events.c
@@ -2255,6 +2255,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
2255{ 2255{
2256 struct print_flag_sym *flag; 2256 struct print_flag_sym *flag;
2257 unsigned long long val, fval; 2257 unsigned long long val, fval;
2258 unsigned long addr;
2258 char *str; 2259 char *str;
2259 int print; 2260 int print;
2260 int len; 2261 int len;
@@ -2274,7 +2275,19 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
2274 } 2275 }
2275 /* Zero sized fields, mean the rest of the data */ 2276 /* Zero sized fields, mean the rest of the data */
2276 len = arg->field.field->size ? : size; 2277 len = arg->field.field->size ? : size;
2277 str = malloc_or_die(size + 1); 2278
2279 /*
2280 * Some events pass in pointers. If this is not an array
2281 * and the size is the same as long_size, assume that it
2282 * is a pointer.
2283 */
2284 if (!(arg->field.field->flags & FIELD_IS_ARRAY) &&
2285 len == long_size) {
2286 addr = *(unsigned long *)(data + arg->field.field->offset);
2287 trace_seq_printf(s, "%lx", addr);
2288 break;
2289 }
2290 str = malloc_or_die(len + 1);
2278 memcpy(str, data + arg->field.field->offset, len); 2291 memcpy(str, data + arg->field.field->offset, len);
2279 str[len] = 0; 2292 str[len] = 0;
2280 trace_seq_puts(s, str); 2293 trace_seq_puts(s, str);