On Sat, Feb 24, 2018 at 02:35:40PM +0900, Masami Hiramatsu wrote: > Add array type support for probe events. > This allows user to get arraied types from memory address. > The array type syntax is > > TYPE[N] > > Where TYPE is one of types (u8/16/32/64,s8/16/32/64, > x8/16/32/64, symbol, string) and N is a fixed value less > than 64. > > The string array type is a bit different from other types. For > other base types, <base-type>[1] is equal to <base-type> > (e.g. +0(%di):x32[1] is same as +0(%di):x32.) But string[1] is not > equal to string. The string type itself represents "char array", > but string array type represents "char * array". So, for example, > +0(%di):string[1] is equal to +0(+0(%di)):string. > > Signed-off-by: Masami Hiramatsu <mhiramat@xxxxxxxxxx> > --- > Changes in v2: > - Add array description in README file > - Fix to init s3 code out of loop. > - Fix to proceed code when the last code is OP_ARRAY. > - Add string array type and bitfield array type. > --- [SNIP] > @@ -546,11 +610,16 @@ int traceprobe_define_arg_fields(struct trace_event_call *event_call, > /* Set argument names as fields */ > for (i = 0; i < tp->nr_args; i++) { > struct probe_arg *parg = &tp->args[i]; > - > - ret = trace_define_field(event_call, parg->type->fmttype, > - parg->name, > + const char *fmt = parg->type->fmttype; > + int size = parg->type->size; > + > + if (parg->fmt) > + fmt = parg->fmt; > + if (parg->count) > + size *= parg->count; > + ret = trace_define_field(event_call, fmt, parg->name, > offset + parg->offset, > - parg->type->size, > + parg->type->size * parg->count, It should use the 'size' variable, otherwise scalar types will have 0 size. Thanks, Namhyung > parg->type->is_signed, > FILTER_OTHER); -- To unsubscribe from this list: send the line "unsubscribe linux-trace-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html