diff options
Diffstat (limited to 'tools/perf/util/scripting-engines/trace-event-perl.c')
| -rw-r--r-- | tools/perf/util/scripting-engines/trace-event-perl.c | 32 | 
1 files changed, 20 insertions, 12 deletions
| diff --git a/tools/perf/util/scripting-engines/trace-event-perl.c b/tools/perf/util/scripting-engines/trace-event-perl.c index 4c1b3d72a1d2..02dfa19a467f 100644 --- a/tools/perf/util/scripting-engines/trace-event-perl.c +++ b/tools/perf/util/scripting-engines/trace-event-perl.c @@ -209,6 +209,10 @@ static void define_event_symbols(struct event_format *event,  		define_symbolic_values(args->symbol.symbols, ev_name,  				       cur_field_name);  		break; +	case PRINT_HEX: +		define_event_symbols(event, ev_name, args->hex.field); +		define_event_symbols(event, ev_name, args->hex.size); +		break;  	case PRINT_BSTRING:  	case PRINT_DYNAMIC_ARRAY:  	case PRINT_STRING: @@ -233,7 +237,8 @@ static void define_event_symbols(struct event_format *event,  		define_event_symbols(event, ev_name, args->next);  } -static inline struct event_format *find_cache_event(int type) +static inline +struct event_format *find_cache_event(struct pevent *pevent, int type)  {  	static char ev_name[256];  	struct event_format *event; @@ -241,7 +246,7 @@ static inline struct event_format *find_cache_event(int type)  	if (events[type])  		return events[type]; -	events[type] = event = trace_find_event(type); +	events[type] = event = pevent_find_event(pevent, type);  	if (!event)  		return NULL; @@ -252,7 +257,8 @@ static inline struct event_format *find_cache_event(int type)  	return event;  } -static void perl_process_tracepoint(union perf_event *pevent __unused, +static void perl_process_tracepoint(union perf_event *perf_event __unused, +				    struct pevent *pevent,  				    struct perf_sample *sample,  				    struct perf_evsel *evsel,  				    struct machine *machine __unused, @@ -275,13 +281,13 @@ static void perl_process_tracepoint(union perf_event *pevent __unused,  	if (evsel->attr.type != PERF_TYPE_TRACEPOINT)  		return; -	type = trace_parse_common_type(data); +	type = trace_parse_common_type(pevent, data); -	event = find_cache_event(type); +	event = find_cache_event(pevent, type);  	if (!event)  		die("ug! no event found for type %d", type); -	pid = trace_parse_common_pid(data); +	pid = trace_parse_common_pid(pevent, data);  	sprintf(handler, "%s::%s", event->system, event->name); @@ -314,7 +320,8 @@ static void perl_process_tracepoint(union perf_event *pevent __unused,  				offset = field->offset;  			XPUSHs(sv_2mortal(newSVpv((char *)data + offset, 0)));  		} else { /* FIELD_IS_NUMERIC */ -			val = read_size(data + field->offset, field->size); +			val = read_size(pevent, data + field->offset, +					field->size);  			if (field->flags & FIELD_IS_SIGNED) {  				XPUSHs(sv_2mortal(newSViv(val)));  			} else { @@ -368,14 +375,15 @@ static void perl_process_event_generic(union perf_event *pevent __unused,  	LEAVE;  } -static void perl_process_event(union perf_event *pevent, +static void perl_process_event(union perf_event *event, +			       struct pevent *pevent,  			       struct perf_sample *sample,  			       struct perf_evsel *evsel,  			       struct machine *machine,  			       struct thread *thread)  { -	perl_process_tracepoint(pevent, sample, evsel, machine, thread); -	perl_process_event_generic(pevent, sample, evsel, machine, thread); +	perl_process_tracepoint(event, pevent, sample, evsel, machine, thread); +	perl_process_event_generic(event, sample, evsel, machine, thread);  }  static void run_start_sub(void) @@ -448,7 +456,7 @@ static int perl_stop_script(void)  	return 0;  } -static int perl_generate_script(const char *outfile) +static int perl_generate_script(struct pevent *pevent, const char *outfile)  {  	struct event_format *event = NULL;  	struct format_field *f; @@ -495,7 +503,7 @@ static int perl_generate_script(const char *outfile)  	fprintf(ofp, "sub trace_begin\n{\n\t# optional\n}\n\n");  	fprintf(ofp, "sub trace_end\n{\n\t# optional\n}\n\n"); -	while ((event = trace_find_next_event(event))) { +	while ((event = trace_find_next_event(pevent, event))) {  		fprintf(ofp, "sub %s::%s\n{\n", event->system, event->name);  		fprintf(ofp, "\tmy ("); | 
