diff options
| -rw-r--r-- | tools/perf/util/trace-event-parse.c | 17 | ||||
| -rw-r--r-- | tools/perf/util/trace-event.h | 2 |
2 files changed, 19 insertions, 0 deletions
diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c index 7021dc1b0ca6..85d7163a9fd4 100644 --- a/tools/perf/util/trace-event-parse.c +++ b/tools/perf/util/trace-event-parse.c | |||
| @@ -48,6 +48,11 @@ static unsigned long long input_buf_siz; | |||
| 48 | 48 | ||
| 49 | static int cpus; | 49 | static int cpus; |
| 50 | static int long_size; | 50 | static int long_size; |
| 51 | static int is_flag_field; | ||
| 52 | static int is_symbolic_field; | ||
| 53 | |||
| 54 | static struct format_field * | ||
| 55 | find_any_field(struct event *event, const char *name); | ||
| 51 | 56 | ||
| 52 | static void init_input_buf(char *buf, unsigned long long size) | 57 | static void init_input_buf(char *buf, unsigned long long size) |
| 53 | { | 58 | { |
| @@ -1301,6 +1306,16 @@ process_entry(struct event *event __unused, struct print_arg *arg, | |||
| 1301 | arg->type = PRINT_FIELD; | 1306 | arg->type = PRINT_FIELD; |
| 1302 | arg->field.name = field; | 1307 | arg->field.name = field; |
| 1303 | 1308 | ||
| 1309 | if (is_flag_field) { | ||
| 1310 | arg->field.field = find_any_field(event, arg->field.name); | ||
| 1311 | arg->field.field->flags |= FIELD_IS_FLAG; | ||
| 1312 | is_flag_field = 0; | ||
| 1313 | } else if (is_symbolic_field) { | ||
| 1314 | arg->field.field = find_any_field(event, arg->field.name); | ||
| 1315 | arg->field.field->flags |= FIELD_IS_SYMBOLIC; | ||
| 1316 | is_symbolic_field = 0; | ||
| 1317 | } | ||
| 1318 | |||
| 1304 | type = read_token(&token); | 1319 | type = read_token(&token); |
| 1305 | *tok = token; | 1320 | *tok = token; |
| 1306 | 1321 | ||
| @@ -1668,9 +1683,11 @@ process_arg_token(struct event *event, struct print_arg *arg, | |||
| 1668 | type = process_entry(event, arg, &token); | 1683 | type = process_entry(event, arg, &token); |
| 1669 | } else if (strcmp(token, "__print_flags") == 0) { | 1684 | } else if (strcmp(token, "__print_flags") == 0) { |
| 1670 | free_token(token); | 1685 | free_token(token); |
| 1686 | is_flag_field = 1; | ||
| 1671 | type = process_flags(event, arg, &token); | 1687 | type = process_flags(event, arg, &token); |
| 1672 | } else if (strcmp(token, "__print_symbolic") == 0) { | 1688 | } else if (strcmp(token, "__print_symbolic") == 0) { |
| 1673 | free_token(token); | 1689 | free_token(token); |
| 1690 | is_symbolic_field = 1; | ||
| 1674 | type = process_symbols(event, arg, &token); | 1691 | type = process_symbols(event, arg, &token); |
| 1675 | } else if (strcmp(token, "__get_str") == 0) { | 1692 | } else if (strcmp(token, "__get_str") == 0) { |
| 1676 | free_token(token); | 1693 | free_token(token); |
diff --git a/tools/perf/util/trace-event.h b/tools/perf/util/trace-event.h index e7aaf002e667..aeb915778ae7 100644 --- a/tools/perf/util/trace-event.h +++ b/tools/perf/util/trace-event.h | |||
| @@ -29,6 +29,8 @@ enum format_flags { | |||
| 29 | FIELD_IS_SIGNED = 4, | 29 | FIELD_IS_SIGNED = 4, |
| 30 | FIELD_IS_STRING = 8, | 30 | FIELD_IS_STRING = 8, |
| 31 | FIELD_IS_DYNAMIC = 16, | 31 | FIELD_IS_DYNAMIC = 16, |
| 32 | FIELD_IS_FLAG = 32, | ||
| 33 | FIELD_IS_SYMBOLIC = 64, | ||
| 32 | }; | 34 | }; |
| 33 | 35 | ||
| 34 | struct format_field { | 36 | struct format_field { |
