|
@@ -3588,15 +3588,23 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
|
|
|
}
|
|
|
break;
|
|
|
case PRINT_HEX:
|
|
|
- field = arg->hex.field->field.field;
|
|
|
- if (!field) {
|
|
|
- str = arg->hex.field->field.name;
|
|
|
- field = pevent_find_any_field(event, str);
|
|
|
- if (!field)
|
|
|
- goto out_warning_field;
|
|
|
- arg->hex.field->field.field = field;
|
|
|
+ if (arg->hex.field->type == PRINT_DYNAMIC_ARRAY) {
|
|
|
+ unsigned long offset;
|
|
|
+ offset = pevent_read_number(pevent,
|
|
|
+ data + arg->hex.field->dynarray.field->offset,
|
|
|
+ arg->hex.field->dynarray.field->size);
|
|
|
+ hex = data + (offset & 0xffff);
|
|
|
+ } else {
|
|
|
+ field = arg->hex.field->field.field;
|
|
|
+ if (!field) {
|
|
|
+ str = arg->hex.field->field.name;
|
|
|
+ field = pevent_find_any_field(event, str);
|
|
|
+ if (!field)
|
|
|
+ goto out_warning_field;
|
|
|
+ arg->hex.field->field.field = field;
|
|
|
+ }
|
|
|
+ hex = data + field->offset;
|
|
|
}
|
|
|
- hex = data + field->offset;
|
|
|
len = eval_num_arg(data, size, event, arg->hex.size);
|
|
|
for (i = 0; i < len; i++) {
|
|
|
if (i)
|