aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/scripting-engines/trace-event-python.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util/scripting-engines/trace-event-python.c')
-rw-r--r--tools/perf/util/scripting-engines/trace-event-python.c39
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
40struct event *events[FTRACE_MAX_EVENT]; 40struct 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
139static void define_event_symbols(struct event *event, 139static 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
189static inline struct event *find_cache_event(int type) 197static inline
198struct 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
208static void python_process_event(union perf_event *pevent __unused, 217static 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
437static int python_generate_script(const char *outfile) 448static 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, ");