Messages in this thread | | | Subject | Re: kernelshark plugins and ftrace array fields | From | Steven Rostedt <> | Date | Thu, 02 Sep 2010 14:38:56 -0400 |
| |
On Thu, 2010-09-02 at 14:16 -0400, Steven Rostedt wrote: > On Thu, 2010-09-02 at 17:34 +0300, Avi Kivity wrote:
> > OK, with no modification of what I have already, I just created this > handler: > > static int > kvm_emulate_insn_handler(struct trace_seq *s, struct record *record, > struct event_format *event, void *context) > { > struct format_field *field; > unsigned char *data = record->data; > int i; > > field = pevent_find_field(event, "insn"); > if (!field) { > trace_seq_puts(s, "Can't find inst field"); > return 0; > } > > trace_seq_puts(s, "insn: "); > for (i = 0; i < field->size; i++) { > trace_seq_printf(s, "%s%02x", > i ? "," : "", > data[field->offset + i]); > } > > return 0; > } > > > I think this is what you would want, right?
I think I will add a:
void *pevent_get_field_raw(stuct trace_seq *s, struct event_format *event, char *field_name, struct record *record, int **field_len);
which will return a pointer into record->data and set the field_len to the actual size.
This will be useful for dynamic arrays too, since it is more complex than just using a field->offset.
-- Steve
| |