ctx_field->get_value(ctx_field, lttng_probe_ctx, &v);
if (itype->signedness) {
- ptr->object_type = OBJECT_TYPE_S64;
+ ptr->object_type = OBJECT_TYPE_SIGNED_ENUM;
ptr->u.s64 = v.s64;
ptr->ptr = &ptr->u.s64;
} else {
- ptr->object_type = OBJECT_TYPE_U64;
+ ptr->object_type = OBJECT_TYPE_UNSIGNED_ENUM;
ptr->u.u64 = v.s64; /* Cast. */
ptr->ptr = &ptr->u.u64;
}
stack_top->type = REG_S64;
break;
}
+ case OBJECT_TYPE_SIGNED_ENUM:
+ {
+ int64_t tmp;
+
+ dbg_printk("op load field signed enumeration\n");
+ tmp = *(int64_t *) stack_top->u.ptr.ptr;
+ if (stack_top->u.ptr.rev_bo)
+ __swab64s(&tmp);
+ stack_top->u.v = tmp;
+ stack_top->type = REG_S64;
+ break;
+ }
case OBJECT_TYPE_U8:
dbg_printk("op load field u8\n");
stack_top->u.v = *(uint8_t *) stack_top->u.ptr.ptr;
stack_top->type = REG_U64;
break;
}
+ case OBJECT_TYPE_UNSIGNED_ENUM:
+ {
+ uint64_t tmp;
+
+ dbg_printk("op load field unsigned enumeration\n");
+ tmp = *(uint64_t *) stack_top->u.ptr.ptr;
+ if (stack_top->u.ptr.rev_bo)
+ __swab64s(&tmp);
+ stack_top->u.v = tmp;
+ stack_top->type = REG_U64;
+ break;
+ }
case OBJECT_TYPE_STRING:
{
const char *str;
output->u.sequence.nr_elem = ax->u.ptr.field->type.u.array_nestable.length;
output->u.sequence.nested_type = ax->u.ptr.field->type.u.array_nestable.elem_type;
break;
+ case OBJECT_TYPE_SIGNED_ENUM:
+ ret = dynamic_load_field(ax);
+ if (ret)
+ return ret;
+ output->type = LTTNG_INTERPRETER_TYPE_SIGNED_ENUM;
+ output->u.s = ax->u.v;
+ break;
+ case OBJECT_TYPE_UNSIGNED_ENUM:
+ ret = dynamic_load_field(ax);
+ if (ret)
+ return ret;
+ output->type = LTTNG_INTERPRETER_TYPE_UNSIGNED_ENUM;
+ output->u.u = ax->u.v;
+ break;
case OBJECT_TYPE_STRUCT:
case OBJECT_TYPE_VARIANT:
default:
if (!stack_top->load.rev_bo)
insn->op = BYTECODE_OP_LOAD_FIELD_S64;
break;
+ case OBJECT_TYPE_SIGNED_ENUM:
+ dbg_printk("op load field signed enumeration\n");
+ stack_top->type = REG_PTR;
+ break;
case OBJECT_TYPE_U8:
dbg_printk("op load field u8\n");
stack_top->type = REG_S64;
if (!stack_top->load.rev_bo)
insn->op = BYTECODE_OP_LOAD_FIELD_U64;
break;
+ case OBJECT_TYPE_UNSIGNED_ENUM:
+ dbg_printk("op load field unsigned enumeration\n");
+ stack_top->type = REG_PTR;
+ break;
case OBJECT_TYPE_DOUBLE:
printk(KERN_WARNING "LTTng: bytecode: Double type unsupported\n\n");
ret = -EINVAL;
&field->type.u.enum_nestable.container_type->u.integer;
if (itype->signedness)
- load->object_type = OBJECT_TYPE_S64;
+ load->object_type = OBJECT_TYPE_SIGNED_ENUM;
else
- load->object_type = OBJECT_TYPE_U64;
+ load->object_type = OBJECT_TYPE_UNSIGNED_ENUM;
load->rev_bo = false;
break;
}