From 5b68cb36ecc23ab6296e520e1651e18bcd5d9ea3 Mon Sep 17 00:00:00 2001 From: Tom Zanussi Date: Wed, 25 Nov 2009 01:15:47 -0600 Subject: [PATCH] --- yaml --- r: 169855 b: refs/heads/master c: eb9a42caa7a926beb935a22bc59d981b35f0b652 h: refs/heads/master i: 169853: 116082657791b920b804feddc7ed64c131cbbf1b 169851: 97c346b78e78232e393cede651ccd4d21c7b4011 169847: 273f7c98f3105166e6361bd03ae37fcbf81df369 169839: 4d88924f5f429cff503f31b3d24157b31e1b0efe 169823: 8b27dfda366b2e1678c46ef047ba7231ec58254a 169791: c3074e26ae2613ba5a475dbd4ee6ee42991c46af 169727: bee6342f96705e69683fca04ab71f30f4b2d8542 v: v3 --- [refs] | 2 +- trunk/tools/perf/util/trace-event-parse.c | 17 +++++++++++++++++ trunk/tools/perf/util/trace-event.h | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 54cc3c2aade8..94e43df04334 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 956ffd027bedc4106b901eb6a50f0a6c6de4113d +refs/heads/master: eb9a42caa7a926beb935a22bc59d981b35f0b652 diff --git a/trunk/tools/perf/util/trace-event-parse.c b/trunk/tools/perf/util/trace-event-parse.c index 7021dc1b0ca6..85d7163a9fd4 100644 --- a/trunk/tools/perf/util/trace-event-parse.c +++ b/trunk/tools/perf/util/trace-event-parse.c @@ -48,6 +48,11 @@ static unsigned long long input_buf_siz; static int cpus; static int long_size; +static int is_flag_field; +static int is_symbolic_field; + +static struct format_field * +find_any_field(struct event *event, const char *name); static void init_input_buf(char *buf, unsigned long long size) { @@ -1301,6 +1306,16 @@ process_entry(struct event *event __unused, struct print_arg *arg, arg->type = PRINT_FIELD; arg->field.name = field; + if (is_flag_field) { + arg->field.field = find_any_field(event, arg->field.name); + arg->field.field->flags |= FIELD_IS_FLAG; + is_flag_field = 0; + } else if (is_symbolic_field) { + arg->field.field = find_any_field(event, arg->field.name); + arg->field.field->flags |= FIELD_IS_SYMBOLIC; + is_symbolic_field = 0; + } + type = read_token(&token); *tok = token; @@ -1668,9 +1683,11 @@ process_arg_token(struct event *event, struct print_arg *arg, type = process_entry(event, arg, &token); } else if (strcmp(token, "__print_flags") == 0) { free_token(token); + is_flag_field = 1; type = process_flags(event, arg, &token); } else if (strcmp(token, "__print_symbolic") == 0) { free_token(token); + is_symbolic_field = 1; type = process_symbols(event, arg, &token); } else if (strcmp(token, "__get_str") == 0) { free_token(token); diff --git a/trunk/tools/perf/util/trace-event.h b/trunk/tools/perf/util/trace-event.h index e7aaf002e667..aeb915778ae7 100644 --- a/trunk/tools/perf/util/trace-event.h +++ b/trunk/tools/perf/util/trace-event.h @@ -29,6 +29,8 @@ enum format_flags { FIELD_IS_SIGNED = 4, FIELD_IS_STRING = 8, FIELD_IS_DYNAMIC = 16, + FIELD_IS_FLAG = 32, + FIELD_IS_SYMBOLIC = 64, }; struct format_field {