X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=liblttng-ust%2Flttng-bytecode-specialize.c;h=cb7480b3f9ccef3ac514c8b6a686dcf61a8d9dd6;hb=a084756d092167324ee09d3f819cc45407b58233;hp=f571dd60197b08b38f247f288ebd38d8e4063703;hpb=8c3470eaadb6e01fe65e1b852907467c0527ba05;p=lttng-ust.git diff --git a/liblttng-ust/lttng-bytecode-specialize.c b/liblttng-ust/lttng-bytecode-specialize.c index f571dd60..cb7480b3 100644 --- a/liblttng-ust/lttng-bytecode-specialize.c +++ b/liblttng-ust/lttng-bytecode-specialize.c @@ -15,6 +15,7 @@ #include "context-internal.h" #include "lttng-bytecode.h" #include "ust-events-internal.h" +#include "ust-helper.h" static int lttng_fls(int val) { @@ -252,20 +253,20 @@ static int specialize_get_index(struct bytecode_runtime *runtime, switch (stack_top->load.object_type) { case OBJECT_TYPE_ARRAY: { - const struct lttng_integer_type *integer_type; - const struct lttng_event_field *field; + struct lttng_ust_type_integer *integer_type; + struct lttng_ust_event_field *field; uint32_t elem_len, num_elems; int signedness; field = stack_top->load.field; - switch (field->type.atype) { - case atype_array_nestable: - if (field->type.u.array_nestable.elem_type->atype != atype_integer) { + switch (field->type->type) { + case lttng_ust_type_array: + if (lttng_ust_get_type_array(field->type)->elem_type->type != lttng_ust_type_integer) { ret = -EINVAL; goto end; } - integer_type = &field->type.u.array_nestable.elem_type->u.integer; - num_elems = field->type.u.array_nestable.length; + integer_type = lttng_ust_get_type_integer(lttng_ust_get_type_array(field->type)->elem_type); + num_elems = lttng_ust_get_type_array(field->type)->length; break; default: ret = -EINVAL; @@ -292,19 +293,19 @@ static int specialize_get_index(struct bytecode_runtime *runtime, } case OBJECT_TYPE_SEQUENCE: { - const struct lttng_integer_type *integer_type; - const struct lttng_event_field *field; + struct lttng_ust_type_integer *integer_type; + struct lttng_ust_event_field *field; uint32_t elem_len; int signedness; field = stack_top->load.field; - switch (field->type.atype) { - case atype_sequence_nestable: - if (field->type.u.sequence_nestable.elem_type->atype != atype_integer) { + switch (field->type->type) { + case lttng_ust_type_sequence: + if (lttng_ust_get_type_sequence(field->type)->elem_type->type != lttng_ust_type_integer) { ret = -EINVAL; goto end; } - integer_type = &field->type.u.sequence_nestable.elem_type->u.integer; + integer_type = lttng_ust_get_type_integer(lttng_ust_get_type_sequence(field->type)->elem_type); break; default: ret = -EINVAL; @@ -365,7 +366,7 @@ end: return ret; } -static int specialize_context_lookup_name(struct lttng_ctx *ctx, +static int specialize_context_lookup_name(struct lttng_ust_ctx *ctx, struct bytecode_runtime *bytecode, struct load_op *insn) { @@ -377,24 +378,24 @@ static int specialize_context_lookup_name(struct lttng_ctx *ctx, return lttng_get_context_index(ctx, name); } -static int specialize_load_object(const struct lttng_event_field *field, +static int specialize_load_object(struct lttng_ust_event_field *field, struct vstack_load *load, bool is_context) { load->type = LOAD_OBJECT; - switch (field->type.atype) { - case atype_integer: - if (field->type.u.integer.signedness) + switch (field->type->type) { + case lttng_ust_type_integer: + if (lttng_ust_get_type_integer(field->type)->signedness) load->object_type = OBJECT_TYPE_S64; else load->object_type = OBJECT_TYPE_U64; load->rev_bo = false; break; - case atype_enum_nestable: + case lttng_ust_type_enum: { - const struct lttng_integer_type *itype; + struct lttng_ust_type_integer *itype; - itype = &field->type.u.enum_nestable.container_type->u.integer; + itype = lttng_ust_get_type_integer(lttng_ust_get_type_enum(field->type)->container_type); if (itype->signedness) load->object_type = OBJECT_TYPE_SIGNED_ENUM; else @@ -402,15 +403,15 @@ static int specialize_load_object(const struct lttng_event_field *field, load->rev_bo = false; break; } - case atype_array_nestable: - if (field->type.u.array_nestable.elem_type->atype != atype_integer) { + case lttng_ust_type_array: + if (lttng_ust_get_type_array(field->type)->elem_type->type != lttng_ust_type_integer) { ERR("Array nesting only supports integer types."); return -EINVAL; } if (is_context) { load->object_type = OBJECT_TYPE_STRING; } else { - if (field->type.u.array_nestable.elem_type->u.integer.encoding == lttng_encode_none) { + if (lttng_ust_get_type_array(field->type)->encoding == lttng_ust_string_encoding_none) { load->object_type = OBJECT_TYPE_ARRAY; load->field = field; } else { @@ -418,15 +419,15 @@ static int specialize_load_object(const struct lttng_event_field *field, } } break; - case atype_sequence_nestable: - if (field->type.u.sequence_nestable.elem_type->atype != atype_integer) { + case lttng_ust_type_sequence: + if (lttng_ust_get_type_sequence(field->type)->elem_type->type != lttng_ust_type_integer) { ERR("Sequence nesting only supports integer types."); return -EINVAL; } if (is_context) { load->object_type = OBJECT_TYPE_STRING; } else { - if (field->type.u.sequence_nestable.elem_type->u.integer.encoding == lttng_encode_none) { + if (lttng_ust_get_type_sequence(field->type)->encoding == lttng_ust_string_encoding_none) { load->object_type = OBJECT_TYPE_SEQUENCE; load->field = field; } else { @@ -435,30 +436,30 @@ static int specialize_load_object(const struct lttng_event_field *field, } break; - case atype_string: + case lttng_ust_type_string: load->object_type = OBJECT_TYPE_STRING; break; - case atype_float: + case lttng_ust_type_float: load->object_type = OBJECT_TYPE_DOUBLE; break; - case atype_dynamic: + case lttng_ust_type_dynamic: load->object_type = OBJECT_TYPE_DYNAMIC; break; default: - ERR("Unknown type: %d", (int) field->type.atype); + ERR("Unknown type: %d", (int) field->type->type); return -EINVAL; } return 0; } -static int specialize_context_lookup(struct lttng_ctx *ctx, +static int specialize_context_lookup(struct lttng_ust_ctx *ctx, struct bytecode_runtime *runtime, struct load_op *insn, struct vstack_load *load) { int idx, ret; - struct lttng_ctx_field *ctx_field; - struct lttng_event_field *field; + struct lttng_ust_ctx_field *ctx_field; + struct lttng_ust_event_field *field; struct bytecode_get_index_data gid; ssize_t data_offset; @@ -466,8 +467,8 @@ static int specialize_context_lookup(struct lttng_ctx *ctx, if (idx < 0) { return -ENOENT; } - ctx_field = &ctx->fields[idx]; - field = &ctx_field->event_field; + ctx_field = ctx->fields[idx]; + field = ctx_field->event_field; ret = specialize_load_object(field, load, true); if (ret) return ret; @@ -487,7 +488,7 @@ static int specialize_context_lookup(struct lttng_ctx *ctx, return 0; } -static int specialize_app_context_lookup(struct lttng_ctx **pctx, +static int specialize_app_context_lookup(struct lttng_ust_ctx **pctx, struct bytecode_runtime *runtime, struct load_op *insn, struct vstack_load *load) @@ -496,8 +497,8 @@ static int specialize_app_context_lookup(struct lttng_ctx **pctx, const char *orig_name; char *name = NULL; int idx, ret; - struct lttng_ctx_field *ctx_field; - struct lttng_event_field *field; + struct lttng_ust_ctx_field *ctx_field; + struct lttng_ust_event_field *field; struct bytecode_get_index_data gid; ssize_t data_offset; @@ -521,8 +522,8 @@ static int specialize_app_context_lookup(struct lttng_ctx **pctx, if (idx < 0) return -ENOENT; } - ctx_field = &(*pctx)->fields[idx]; - field = &ctx_field->event_field; + ctx_field = (*pctx)->fields[idx]; + field = ctx_field->event_field; ret = specialize_load_object(field, load, true); if (ret) goto end; @@ -546,7 +547,7 @@ end: return ret; } -static int specialize_payload_lookup(const struct lttng_event_desc *event_desc, +static int specialize_payload_lookup(struct lttng_ust_event_desc *event_desc, struct bytecode_runtime *runtime, struct load_op *insn, struct vstack_load *load) @@ -556,7 +557,7 @@ static int specialize_payload_lookup(const struct lttng_event_desc *event_desc, unsigned int i, nr_fields; bool found = false; uint32_t field_offset = 0; - const struct lttng_event_field *field; + struct lttng_ust_event_field *field; int ret; struct bytecode_get_index_data gid; ssize_t data_offset; @@ -565,8 +566,8 @@ static int specialize_payload_lookup(const struct lttng_event_desc *event_desc, offset = ((struct get_symbol *) insn->data)->offset; name = runtime->p.priv->bc->bc.data + runtime->p.priv->bc->bc.reloc_offset + offset; for (i = 0; i < nr_fields; i++) { - field = &event_desc->fields[i]; - if (field->u.ext.nofilter) { + field = event_desc->fields[i]; + if (field->nofilter) { continue; } if (!strcmp(field->name, name)) { @@ -574,20 +575,20 @@ static int specialize_payload_lookup(const struct lttng_event_desc *event_desc, break; } /* compute field offset on stack */ - switch (field->type.atype) { - case atype_integer: - case atype_enum_nestable: + switch (field->type->type) { + case lttng_ust_type_integer: + case lttng_ust_type_enum: field_offset += sizeof(int64_t); break; - case atype_array_nestable: - case atype_sequence_nestable: + case lttng_ust_type_array: + case lttng_ust_type_sequence: field_offset += sizeof(unsigned long); field_offset += sizeof(void *); break; - case atype_string: + case lttng_ust_type_string: field_offset += sizeof(void *); break; - case atype_float: + case lttng_ust_type_float: field_offset += sizeof(double); break; default: @@ -623,14 +624,14 @@ end: return ret; } -int lttng_bytecode_specialize(const struct lttng_event_desc *event_desc, +int lttng_bytecode_specialize(struct lttng_ust_event_desc *event_desc, struct bytecode_runtime *bytecode) { void *pc, *next_pc, *start_pc; int ret = -EINVAL; struct vstack _stack; struct vstack *stack = &_stack; - struct lttng_ctx **pctx = bytecode->p.priv->pctx; + struct lttng_ust_ctx **pctx = bytecode->p.priv->pctx; vstack_init(stack);