diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/util/trace-event-parse.c | 49 |
1 files changed, 34 insertions, 15 deletions
diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c index 9b3c20f42f98..3b81250ffedb 100644 --- a/tools/perf/util/trace-event-parse.c +++ b/tools/perf/util/trace-event-parse.c | |||
@@ -37,6 +37,8 @@ int header_page_ts_offset; | |||
37 | int header_page_ts_size; | 37 | int header_page_ts_size; |
38 | int header_page_size_offset; | 38 | int header_page_size_offset; |
39 | int header_page_size_size; | 39 | int header_page_size_size; |
40 | int header_page_overwrite_offset; | ||
41 | int header_page_overwrite_size; | ||
40 | int header_page_data_offset; | 42 | int header_page_data_offset; |
41 | int header_page_data_size; | 43 | int header_page_data_size; |
42 | 44 | ||
@@ -628,23 +630,32 @@ static int test_type(enum event_type type, enum event_type expect) | |||
628 | return 0; | 630 | return 0; |
629 | } | 631 | } |
630 | 632 | ||
631 | static int test_type_token(enum event_type type, char *token, | 633 | static int __test_type_token(enum event_type type, char *token, |
632 | enum event_type expect, const char *expect_tok) | 634 | enum event_type expect, const char *expect_tok, |
635 | bool warn) | ||
633 | { | 636 | { |
634 | if (type != expect) { | 637 | if (type != expect) { |
635 | warning("Error: expected type %d but read %d", | 638 | if (warn) |
636 | expect, type); | 639 | warning("Error: expected type %d but read %d", |
640 | expect, type); | ||
637 | return -1; | 641 | return -1; |
638 | } | 642 | } |
639 | 643 | ||
640 | if (strcmp(token, expect_tok) != 0) { | 644 | if (strcmp(token, expect_tok) != 0) { |
641 | warning("Error: expected '%s' but read '%s'", | 645 | if (warn) |
642 | expect_tok, token); | 646 | warning("Error: expected '%s' but read '%s'", |
647 | expect_tok, token); | ||
643 | return -1; | 648 | return -1; |
644 | } | 649 | } |
645 | return 0; | 650 | return 0; |
646 | } | 651 | } |
647 | 652 | ||
653 | static int test_type_token(enum event_type type, char *token, | ||
654 | enum event_type expect, const char *expect_tok) | ||
655 | { | ||
656 | return __test_type_token(type, token, expect, expect_tok, true); | ||
657 | } | ||
658 | |||
648 | static int __read_expect_type(enum event_type expect, char **tok, int newline_ok) | 659 | static int __read_expect_type(enum event_type expect, char **tok, int newline_ok) |
649 | { | 660 | { |
650 | enum event_type type; | 661 | enum event_type type; |
@@ -661,7 +672,8 @@ static int read_expect_type(enum event_type expect, char **tok) | |||
661 | return __read_expect_type(expect, tok, 1); | 672 | return __read_expect_type(expect, tok, 1); |
662 | } | 673 | } |
663 | 674 | ||
664 | static int __read_expected(enum event_type expect, const char *str, int newline_ok) | 675 | static int __read_expected(enum event_type expect, const char *str, |
676 | int newline_ok, bool warn) | ||
665 | { | 677 | { |
666 | enum event_type type; | 678 | enum event_type type; |
667 | char *token; | 679 | char *token; |
@@ -672,21 +684,26 @@ static int __read_expected(enum event_type expect, const char *str, int newline_ | |||
672 | else | 684 | else |
673 | type = read_token_item(&token); | 685 | type = read_token_item(&token); |
674 | 686 | ||
675 | ret = test_type_token(type, token, expect, str); | 687 | ret = __test_type_token(type, token, expect, str, warn); |
676 | 688 | ||
677 | free_token(token); | 689 | free_token(token); |
678 | 690 | ||
679 | return ret; | 691 | return ret; |
680 | } | 692 | } |
681 | 693 | ||
694 | static int read_expected_warn(enum event_type expect, const char *str, bool warn) | ||
695 | { | ||
696 | return __read_expected(expect, str, 1, warn); | ||
697 | } | ||
698 | |||
682 | static int read_expected(enum event_type expect, const char *str) | 699 | static int read_expected(enum event_type expect, const char *str) |
683 | { | 700 | { |
684 | return __read_expected(expect, str, 1); | 701 | return __read_expected(expect, str, 1, true); |
685 | } | 702 | } |
686 | 703 | ||
687 | static int read_expected_item(enum event_type expect, const char *str) | 704 | static int read_expected_item(enum event_type expect, const char *str) |
688 | { | 705 | { |
689 | return __read_expected(expect, str, 0); | 706 | return __read_expected(expect, str, 0, true); |
690 | } | 707 | } |
691 | 708 | ||
692 | static char *event_read_name(void) | 709 | static char *event_read_name(void) |
@@ -3088,7 +3105,7 @@ static void print_args(struct print_arg *args) | |||
3088 | } | 3105 | } |
3089 | 3106 | ||
3090 | static void parse_header_field(const char *field, | 3107 | static void parse_header_field(const char *field, |
3091 | int *offset, int *size) | 3108 | int *offset, int *size, bool warn) |
3092 | { | 3109 | { |
3093 | char *token; | 3110 | char *token; |
3094 | int type; | 3111 | int type; |
@@ -3103,7 +3120,7 @@ static void parse_header_field(const char *field, | |||
3103 | goto fail; | 3120 | goto fail; |
3104 | free_token(token); | 3121 | free_token(token); |
3105 | 3122 | ||
3106 | if (read_expected(EVENT_ITEM, field) < 0) | 3123 | if (read_expected_warn(EVENT_ITEM, field, warn) < 0) |
3107 | return; | 3124 | return; |
3108 | if (read_expected(EVENT_OP, ";") < 0) | 3125 | if (read_expected(EVENT_OP, ";") < 0) |
3109 | return; | 3126 | return; |
@@ -3160,11 +3177,13 @@ int parse_header_page(char *buf, unsigned long size) | |||
3160 | init_input_buf(buf, size); | 3177 | init_input_buf(buf, size); |
3161 | 3178 | ||
3162 | parse_header_field("timestamp", &header_page_ts_offset, | 3179 | parse_header_field("timestamp", &header_page_ts_offset, |
3163 | &header_page_ts_size); | 3180 | &header_page_ts_size, true); |
3164 | parse_header_field("commit", &header_page_size_offset, | 3181 | parse_header_field("commit", &header_page_size_offset, |
3165 | &header_page_size_size); | 3182 | &header_page_size_size, true); |
3183 | parse_header_field("overwrite", &header_page_overwrite_offset, | ||
3184 | &header_page_overwrite_size, false); | ||
3166 | parse_header_field("data", &header_page_data_offset, | 3185 | parse_header_field("data", &header_page_data_offset, |
3167 | &header_page_data_size); | 3186 | &header_page_data_size, true); |
3168 | 3187 | ||
3169 | return 0; | 3188 | return 0; |
3170 | } | 3189 | } |