diff options
Diffstat (limited to 'tools/perf/util/scripting-engines/trace-event-python.c')
-rw-r--r-- | tools/perf/util/scripting-engines/trace-event-python.c | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index c2623c6f9b51..ce4d1b0c3862 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c | |||
@@ -37,7 +37,7 @@ PyMODINIT_FUNC initperf_trace_context(void); | |||
37 | #define FTRACE_MAX_EVENT \ | 37 | #define FTRACE_MAX_EVENT \ |
38 | ((1 << (sizeof(unsigned short) * 8)) - 1) | 38 | ((1 << (sizeof(unsigned short) * 8)) - 1) |
39 | 39 | ||
40 | struct event *events[FTRACE_MAX_EVENT]; | 40 | struct event_format *events[FTRACE_MAX_EVENT]; |
41 | 41 | ||
42 | #define MAX_FIELDS 64 | 42 | #define MAX_FIELDS 64 |
43 | #define N_COMMON_FIELDS 7 | 43 | #define N_COMMON_FIELDS 7 |
@@ -136,7 +136,7 @@ static void define_field(enum print_arg_type field_type, | |||
136 | Py_DECREF(t); | 136 | Py_DECREF(t); |
137 | } | 137 | } |
138 | 138 | ||
139 | static void define_event_symbols(struct event *event, | 139 | static void define_event_symbols(struct event_format *event, |
140 | const char *ev_name, | 140 | const char *ev_name, |
141 | struct print_arg *args) | 141 | struct print_arg *args) |
142 | { | 142 | { |
@@ -166,6 +166,10 @@ static void define_event_symbols(struct event *event, | |||
166 | define_values(PRINT_SYMBOL, args->symbol.symbols, ev_name, | 166 | define_values(PRINT_SYMBOL, args->symbol.symbols, ev_name, |
167 | cur_field_name); | 167 | cur_field_name); |
168 | break; | 168 | break; |
169 | case PRINT_HEX: | ||
170 | define_event_symbols(event, ev_name, args->hex.field); | ||
171 | define_event_symbols(event, ev_name, args->hex.size); | ||
172 | break; | ||
169 | case PRINT_STRING: | 173 | case PRINT_STRING: |
170 | break; | 174 | break; |
171 | case PRINT_TYPE: | 175 | case PRINT_TYPE: |
@@ -178,6 +182,10 @@ static void define_event_symbols(struct event *event, | |||
178 | define_event_symbols(event, ev_name, args->op.right); | 182 | define_event_symbols(event, ev_name, args->op.right); |
179 | break; | 183 | break; |
180 | default: | 184 | default: |
185 | /* gcc warns for these? */ | ||
186 | case PRINT_BSTRING: | ||
187 | case PRINT_DYNAMIC_ARRAY: | ||
188 | case PRINT_FUNC: | ||
181 | /* we should warn... */ | 189 | /* we should warn... */ |
182 | return; | 190 | return; |
183 | } | 191 | } |
@@ -186,15 +194,16 @@ static void define_event_symbols(struct event *event, | |||
186 | define_event_symbols(event, ev_name, args->next); | 194 | define_event_symbols(event, ev_name, args->next); |
187 | } | 195 | } |
188 | 196 | ||
189 | static inline struct event *find_cache_event(int type) | 197 | static inline |
198 | struct event_format *find_cache_event(struct pevent *pevent, int type) | ||
190 | { | 199 | { |
191 | static char ev_name[256]; | 200 | static char ev_name[256]; |
192 | struct event *event; | 201 | struct event_format *event; |
193 | 202 | ||
194 | if (events[type]) | 203 | if (events[type]) |
195 | return events[type]; | 204 | return events[type]; |
196 | 205 | ||
197 | events[type] = event = trace_find_event(type); | 206 | events[type] = event = pevent_find_event(pevent, type); |
198 | if (!event) | 207 | if (!event) |
199 | return NULL; | 208 | return NULL; |
200 | 209 | ||
@@ -205,7 +214,8 @@ static inline struct event *find_cache_event(int type) | |||
205 | return event; | 214 | return event; |
206 | } | 215 | } |
207 | 216 | ||
208 | static void python_process_event(union perf_event *pevent __unused, | 217 | static void python_process_event(union perf_event *perf_event __unused, |
218 | struct pevent *pevent, | ||
209 | struct perf_sample *sample, | 219 | struct perf_sample *sample, |
210 | struct perf_evsel *evsel __unused, | 220 | struct perf_evsel *evsel __unused, |
211 | struct machine *machine __unused, | 221 | struct machine *machine __unused, |
@@ -216,7 +226,7 @@ static void python_process_event(union perf_event *pevent __unused, | |||
216 | struct format_field *field; | 226 | struct format_field *field; |
217 | unsigned long long val; | 227 | unsigned long long val; |
218 | unsigned long s, ns; | 228 | unsigned long s, ns; |
219 | struct event *event; | 229 | struct event_format *event; |
220 | unsigned n = 0; | 230 | unsigned n = 0; |
221 | int type; | 231 | int type; |
222 | int pid; | 232 | int pid; |
@@ -229,13 +239,13 @@ static void python_process_event(union perf_event *pevent __unused, | |||
229 | if (!t) | 239 | if (!t) |
230 | Py_FatalError("couldn't create Python tuple"); | 240 | Py_FatalError("couldn't create Python tuple"); |
231 | 241 | ||
232 | type = trace_parse_common_type(data); | 242 | type = trace_parse_common_type(pevent, data); |
233 | 243 | ||
234 | event = find_cache_event(type); | 244 | event = find_cache_event(pevent, type); |
235 | if (!event) | 245 | if (!event) |
236 | die("ug! no event found for type %d", type); | 246 | die("ug! no event found for type %d", type); |
237 | 247 | ||
238 | pid = trace_parse_common_pid(data); | 248 | pid = trace_parse_common_pid(pevent, data); |
239 | 249 | ||
240 | sprintf(handler_name, "%s__%s", event->system, event->name); | 250 | sprintf(handler_name, "%s__%s", event->system, event->name); |
241 | 251 | ||
@@ -280,7 +290,8 @@ static void python_process_event(union perf_event *pevent __unused, | |||
280 | offset = field->offset; | 290 | offset = field->offset; |
281 | obj = PyString_FromString((char *)data + offset); | 291 | obj = PyString_FromString((char *)data + offset); |
282 | } else { /* FIELD_IS_NUMERIC */ | 292 | } else { /* FIELD_IS_NUMERIC */ |
283 | val = read_size(data + field->offset, field->size); | 293 | val = read_size(pevent, data + field->offset, |
294 | field->size); | ||
284 | if (field->flags & FIELD_IS_SIGNED) { | 295 | if (field->flags & FIELD_IS_SIGNED) { |
285 | if ((long long)val >= LONG_MIN && | 296 | if ((long long)val >= LONG_MIN && |
286 | (long long)val <= LONG_MAX) | 297 | (long long)val <= LONG_MAX) |
@@ -434,9 +445,9 @@ out: | |||
434 | return err; | 445 | return err; |
435 | } | 446 | } |
436 | 447 | ||
437 | static int python_generate_script(const char *outfile) | 448 | static int python_generate_script(struct pevent *pevent, const char *outfile) |
438 | { | 449 | { |
439 | struct event *event = NULL; | 450 | struct event_format *event = NULL; |
440 | struct format_field *f; | 451 | struct format_field *f; |
441 | char fname[PATH_MAX]; | 452 | char fname[PATH_MAX]; |
442 | int not_first, count; | 453 | int not_first, count; |
@@ -483,7 +494,7 @@ static int python_generate_script(const char *outfile) | |||
483 | fprintf(ofp, "def trace_end():\n"); | 494 | fprintf(ofp, "def trace_end():\n"); |
484 | fprintf(ofp, "\tprint \"in trace_end\"\n\n"); | 495 | fprintf(ofp, "\tprint \"in trace_end\"\n\n"); |
485 | 496 | ||
486 | while ((event = trace_find_next_event(event))) { | 497 | while ((event = trace_find_next_event(pevent, event))) { |
487 | fprintf(ofp, "def %s__%s(", event->system, event->name); | 498 | fprintf(ofp, "def %s__%s(", event->system, event->name); |
488 | fprintf(ofp, "event_name, "); | 499 | fprintf(ofp, "event_name, "); |
489 | fprintf(ofp, "context, "); | 500 | fprintf(ofp, "context, "); |