diff options
Diffstat (limited to 'tools/perf/util/trace-event-parse.c')
| -rw-r--r-- | tools/perf/util/trace-event-parse.c | 118 | 
1 files changed, 24 insertions, 94 deletions
diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c index 613c9cc90570..73a02223c629 100644 --- a/tools/perf/util/trace-event-parse.c +++ b/tools/perf/util/trace-event-parse.c @@ -37,10 +37,12 @@ int header_page_ts_offset;  int header_page_ts_size;  int header_page_size_offset;  int header_page_size_size; +int header_page_overwrite_offset; +int header_page_overwrite_size;  int header_page_data_offset;  int header_page_data_size; -int latency_format; +bool latency_format;  static char *input_buf;  static unsigned long long input_buf_ptr; @@ -628,23 +630,32 @@ static int test_type(enum event_type type, enum event_type expect)  	return 0;  } -static int test_type_token(enum event_type type, char *token, -		    enum event_type expect, const char *expect_tok) +static int __test_type_token(enum event_type type, char *token, +			     enum event_type expect, const char *expect_tok, +			     bool warn)  {  	if (type != expect) { -		warning("Error: expected type %d but read %d", -		    expect, type); +		if (warn) +			warning("Error: expected type %d but read %d", +				expect, type);  		return -1;  	}  	if (strcmp(token, expect_tok) != 0) { -		warning("Error: expected '%s' but read '%s'", -		    expect_tok, token); +		if (warn) +			warning("Error: expected '%s' but read '%s'", +				expect_tok, token);  		return -1;  	}  	return 0;  } +static int test_type_token(enum event_type type, char *token, +			   enum event_type expect, const char *expect_tok) +{ +	return __test_type_token(type, token, expect, expect_tok, true); +} +  static int __read_expect_type(enum event_type expect, char **tok, int newline_ok)  {  	enum event_type type; @@ -661,7 +672,8 @@ static int read_expect_type(enum event_type expect, char **tok)  	return __read_expect_type(expect, tok, 1);  } -static int __read_expected(enum event_type expect, const char *str, int newline_ok) +static int __read_expected(enum event_type expect, const char *str, +			   int newline_ok, bool warn)  {  	enum event_type type;  	char *token; @@ -672,7 +684,7 @@ static int __read_expected(enum event_type expect, const char *str, int newline_  	else  		type = read_token_item(&token); -	ret = test_type_token(type, token, expect, str); +	ret = __test_type_token(type, token, expect, str, warn);  	free_token(token); @@ -681,12 +693,12 @@ static int __read_expected(enum event_type expect, const char *str, int newline_  static int read_expected(enum event_type expect, const char *str)  { -	return __read_expected(expect, str, 1); +	return __read_expected(expect, str, 1, true);  }  static int read_expected_item(enum event_type expect, const char *str)  { -	return __read_expected(expect, str, 0); +	return __read_expected(expect, str, 0, true);  }  static char *event_read_name(void) @@ -744,7 +756,7 @@ static int field_is_string(struct format_field *field)  static int field_is_dynamic(struct format_field *field)  { -	if (!strcmp(field->type, "__data_loc")) +	if (!strncmp(field->type, "__data_loc", 10))  		return 1;  	return 0; @@ -3087,88 +3099,6 @@ static void print_args(struct print_arg *args)  	}  } -static void parse_header_field(const char *field, -			       int *offset, int *size) -{ -	char *token; -	int type; - -	if (read_expected(EVENT_ITEM, "field") < 0) -		return; -	if (read_expected(EVENT_OP, ":") < 0) -		return; - -	/* type */ -	if (read_expect_type(EVENT_ITEM, &token) < 0) -		goto fail; -	free_token(token); - -	if (read_expected(EVENT_ITEM, field) < 0) -		return; -	if (read_expected(EVENT_OP, ";") < 0) -		return; -	if (read_expected(EVENT_ITEM, "offset") < 0) -		return; -	if (read_expected(EVENT_OP, ":") < 0) -		return; -	if (read_expect_type(EVENT_ITEM, &token) < 0) -		goto fail; -	*offset = atoi(token); -	free_token(token); -	if (read_expected(EVENT_OP, ";") < 0) -		return; -	if (read_expected(EVENT_ITEM, "size") < 0) -		return; -	if (read_expected(EVENT_OP, ":") < 0) -		return; -	if (read_expect_type(EVENT_ITEM, &token) < 0) -		goto fail; -	*size = atoi(token); -	free_token(token); -	if (read_expected(EVENT_OP, ";") < 0) -		return; -	type = read_token(&token); -	if (type != EVENT_NEWLINE) { -		/* newer versions of the kernel have a "signed" type */ -		if (type != EVENT_ITEM) -			goto fail; - -		if (strcmp(token, "signed") != 0) -			goto fail; - -		free_token(token); - -		if (read_expected(EVENT_OP, ":") < 0) -			return; - -		if (read_expect_type(EVENT_ITEM, &token)) -			goto fail; - -		free_token(token); -		if (read_expected(EVENT_OP, ";") < 0) -			return; - -		if (read_expect_type(EVENT_NEWLINE, &token)) -			goto fail; -	} - fail: -	free_token(token); -} - -int parse_header_page(char *buf, unsigned long size) -{ -	init_input_buf(buf, size); - -	parse_header_field("timestamp", &header_page_ts_offset, -			   &header_page_ts_size); -	parse_header_field("commit", &header_page_size_offset, -			   &header_page_size_size); -	parse_header_field("data", &header_page_data_offset, -			   &header_page_data_size); - -	return 0; -} -  int parse_ftrace_file(char *buf, unsigned long size)  {  	struct format_field *field;  |