projects
/
lttng-modules.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sequence and variant types: use previous field for length/tag if NULL
[lttng-modules.git]
/
src
/
lttng-events.c
diff --git
a/src/lttng-events.c
b/src/lttng-events.c
index 0a36ccb390df2d43bb2d0b4ad6af7734d2c0a7ec..51c5cb39a58bcecfeb23c4cc267a36b3356b4408 100644
(file)
--- a/
src/lttng-events.c
+++ b/
src/lttng-events.c
@@
-89,7
+89,7
@@
int _lttng_type_statedump(struct lttng_session *session,
static
int _lttng_field_statedump(struct lttng_session *session,
const struct lttng_kernel_event_field *field,
static
int _lttng_field_statedump(struct lttng_session *session,
const struct lttng_kernel_event_field *field,
- size_t nesting);
+ size_t nesting
, const char **prev_field_name_p
);
void synchronize_trace(void)
{
void synchronize_trace(void)
{
@@
-885,6
+885,7
@@
struct lttng_kernel_event_recorder *_lttng_kernel_event_recorder_create(struct l
event_recorder->parent.priv = &event_recorder_priv->parent;
event_recorder->parent.type = LTTNG_KERNEL_EVENT_TYPE_RECORDER;
event_recorder->parent.priv = &event_recorder_priv->parent;
event_recorder->parent.type = LTTNG_KERNEL_EVENT_TYPE_RECORDER;
+ event_recorder->parent.run_filter = lttng_kernel_interpret_event_filter;
event_recorder->chan = chan;
event_recorder->priv->id = chan->free_event_id++;
event_recorder->priv->parent.instrumentation = itype;
event_recorder->chan = chan;
event_recorder->priv->id = chan->free_event_id++;
event_recorder->priv->parent.instrumentation = itype;
@@
-960,6
+961,7
@@
struct lttng_kernel_event_recorder *_lttng_kernel_event_recorder_create(struct l
event_recorder_return->parent.priv = &event_recorder_return_priv->parent;
event_recorder_return->parent.type = LTTNG_KERNEL_EVENT_TYPE_RECORDER;
event_recorder_return->parent.priv = &event_recorder_return_priv->parent;
event_recorder_return->parent.type = LTTNG_KERNEL_EVENT_TYPE_RECORDER;
+ event_recorder_return->parent.run_filter = lttng_kernel_interpret_event_filter;
event_recorder_return->chan = chan;
event_recorder_return->priv->id = chan->free_event_id++;
event_recorder_return->priv->parent.instrumentation = itype;
event_recorder_return->chan = chan;
event_recorder_return->priv->id = chan->free_event_id++;
event_recorder_return->priv->parent.instrumentation = itype;
@@
-1161,6
+1163,7
@@
struct lttng_kernel_event_notifier *_lttng_event_notifier_create(
INIT_LIST_HEAD(&event_notifier->priv->parent.filter_bytecode_runtime_head);
INIT_LIST_HEAD(&event_notifier->priv->parent.enablers_ref_head);
INIT_LIST_HEAD(&event_notifier->priv->capture_bytecode_runtime_head);
INIT_LIST_HEAD(&event_notifier->priv->parent.filter_bytecode_runtime_head);
INIT_LIST_HEAD(&event_notifier->priv->parent.enablers_ref_head);
INIT_LIST_HEAD(&event_notifier->priv->capture_bytecode_runtime_head);
+ event_notifier->parent.run_filter = lttng_kernel_interpret_event_filter;
switch (itype) {
case LTTNG_KERNEL_ABI_TRACEPOINT:
switch (itype) {
case LTTNG_KERNEL_ABI_TRACEPOINT:
@@
-2462,7
+2465,7
@@
int lttng_enabler_attach_filter_bytecode(struct lttng_enabler *enabler,
if (ret)
goto error_free;
if (ret)
goto error_free;
- bytecode_node->type = LTTNG_
BYTECODE_N
ODE_TYPE_FILTER;
+ bytecode_node->type = LTTNG_
KERNEL_BYTEC
ODE_TYPE_FILTER;
bytecode_node->enabler = enabler;
/* Enforce length based on allocated size */
bytecode_node->bc.len = bytecode_len;
bytecode_node->enabler = enabler;
/* Enforce length based on allocated size */
bytecode_node->bc.len = bytecode_len;
@@
-2621,7
+2624,7
@@
int lttng_event_notifier_enabler_attach_capture_bytecode(
if (ret)
goto error_free;
if (ret)
goto error_free;
- bytecode_node->type = LTTNG_
BYTECODE_N
ODE_TYPE_CAPTURE;
+ bytecode_node->type = LTTNG_
KERNEL_BYTEC
ODE_TYPE_CAPTURE;
bytecode_node->enabler = enabler;
/* Enforce length based on allocated size */
bytecode_node->enabler = enabler;
/* Enforce length based on allocated size */
@@
-2728,7
+2731,7
@@
void lttng_session_sync_event_enablers(struct lttng_session *session)
/* Enable filters */
list_for_each_entry(runtime,
&event_recorder_priv->parent.filter_bytecode_runtime_head, node) {
/* Enable filters */
list_for_each_entry(runtime,
&event_recorder_priv->parent.filter_bytecode_runtime_head, node) {
- lttng_bytecode_
filter_
sync_state(runtime);
+ lttng_bytecode_sync_state(runtime);
nr_filters++;
}
WRITE_ONCE(event_recorder_priv->parent.pub->eval_filter,
nr_filters++;
}
WRITE_ONCE(event_recorder_priv->parent.pub->eval_filter,
@@
-2818,7
+2821,7
@@
void lttng_event_notifier_group_sync_enablers(struct lttng_event_notifier_group
/* Enable filters */
list_for_each_entry(runtime,
&event_notifier_priv->parent.filter_bytecode_runtime_head, node) {
/* Enable filters */
list_for_each_entry(runtime,
&event_notifier_priv->parent.filter_bytecode_runtime_head, node) {
- lttng_bytecode_
filter_
sync_state(runtime);
+ lttng_bytecode_sync_state(runtime);
nr_filters++;
}
WRITE_ONCE(event_notifier_priv->parent.pub->eval_filter,
nr_filters++;
}
WRITE_ONCE(event_notifier_priv->parent.pub->eval_filter,
@@
-2827,7
+2830,7
@@
void lttng_event_notifier_group_sync_enablers(struct lttng_event_notifier_group
/* Enable captures */
list_for_each_entry(runtime,
&event_notifier_priv->capture_bytecode_runtime_head, node) {
/* Enable captures */
list_for_each_entry(runtime,
&event_notifier_priv->capture_bytecode_runtime_head, node) {
- lttng_bytecode_
capture_
sync_state(runtime);
+ lttng_bytecode_sync_state(runtime);
nr_captures++;
}
WRITE_ONCE(event_notifier->eval_capture, !!nr_captures);
nr_captures++;
}
WRITE_ONCE(event_notifier->eval_capture, !!nr_captures);
@@
-3049,6
+3052,7
@@
int _lttng_struct_type_statedump(struct lttng_session *session,
const struct lttng_kernel_type_struct *type,
size_t nesting)
{
const struct lttng_kernel_type_struct *type,
size_t nesting)
{
+ const char *prev_field_name = NULL;
int ret;
uint32_t i, nr_fields;
unsigned int alignment;
int ret;
uint32_t i, nr_fields;
unsigned int alignment;
@@
-3065,7
+3069,7
@@
int _lttng_struct_type_statedump(struct lttng_session *session,
const struct lttng_kernel_event_field *iter_field;
iter_field = type->fields[i];
const struct lttng_kernel_event_field *iter_field;
iter_field = type->fields[i];
- ret = _lttng_field_statedump(session, iter_field, nesting + 1);
+ ret = _lttng_field_statedump(session, iter_field, nesting + 1
, &prev_field_name
);
if (ret)
return ret;
}
if (ret)
return ret;
}
@@
-3107,11
+3111,18
@@
int _lttng_struct_field_statedump(struct lttng_session *session,
static
int _lttng_variant_type_statedump(struct lttng_session *session,
const struct lttng_kernel_type_variant *type,
static
int _lttng_variant_type_statedump(struct lttng_session *session,
const struct lttng_kernel_type_variant *type,
- size_t nesting)
+ size_t nesting,
+ const char *prev_field_name)
{
{
+ const char *tag_name;
int ret;
uint32_t i, nr_choices;
int ret;
uint32_t i, nr_choices;
+ tag_name = type->tag_name;
+ if (!tag_name)
+ tag_name = prev_field_name;
+ if (!tag_name)
+ return -EINVAL;
/*
* CTF 1.8 does not allow expressing nonzero variant alignment in a nestable way.
*/
/*
* CTF 1.8 does not allow expressing nonzero variant alignment in a nestable way.
*/
@@
-3122,7
+3133,7
@@
int _lttng_variant_type_statedump(struct lttng_session *session,
return ret;
ret = lttng_metadata_printf(session,
"variant <_%s> {\n",
return ret;
ret = lttng_metadata_printf(session,
"variant <_%s> {\n",
- t
ype->t
ag_name);
+ tag_name);
if (ret)
return ret;
nr_choices = type->nr_choices;
if (ret)
return ret;
nr_choices = type->nr_choices;
@@
-3130,7
+3141,7
@@
int _lttng_variant_type_statedump(struct lttng_session *session,
const struct lttng_kernel_event_field *iter_field;
iter_field = type->choices[i];
const struct lttng_kernel_event_field *iter_field;
iter_field = type->choices[i];
- ret = _lttng_field_statedump(session, iter_field, nesting + 1);
+ ret = _lttng_field_statedump(session, iter_field, nesting + 1
, NULL
);
if (ret)
return ret;
}
if (ret)
return ret;
}
@@
-3148,12
+3159,14
@@
int _lttng_variant_type_statedump(struct lttng_session *session,
static
int _lttng_variant_field_statedump(struct lttng_session *session,
const struct lttng_kernel_event_field *field,
static
int _lttng_variant_field_statedump(struct lttng_session *session,
const struct lttng_kernel_event_field *field,
- size_t nesting)
+ size_t nesting,
+ const char *prev_field_name)
{
int ret;
ret = _lttng_variant_type_statedump(session,
{
int ret;
ret = _lttng_variant_type_statedump(session,
- lttng_kernel_get_type_variant(field->type), nesting);
+ lttng_kernel_get_type_variant(field->type), nesting,
+ prev_field_name);
if (ret)
return ret;
return lttng_field_name_statedump(session, field, nesting);
if (ret)
return ret;
return lttng_field_name_statedump(session, field, nesting);
@@
-3216,7
+3229,8
@@
int _lttng_array_field_statedump(struct lttng_session *session,
static
int _lttng_sequence_field_statedump(struct lttng_session *session,
const struct lttng_kernel_event_field *field,
static
int _lttng_sequence_field_statedump(struct lttng_session *session,
const struct lttng_kernel_event_field *field,
- size_t nesting)
+ size_t nesting,
+ const char *prev_field_name)
{
int ret;
const char *length_name;
{
int ret;
const char *length_name;
@@
-3227,6
+3241,10
@@
int _lttng_sequence_field_statedump(struct lttng_session *session,
WARN_ON_ONCE(!sequence_type);
length_name = sequence_type->length_name;
WARN_ON_ONCE(!sequence_type);
length_name = sequence_type->length_name;
+ if (!length_name)
+ length_name = prev_field_name;
+ if (!length_name)
+ return -EINVAL;
if (sequence_type->alignment) {
ret = print_tabs(session, nesting);
if (sequence_type->alignment) {
ret = print_tabs(session, nesting);
@@
-3261,7
+3279,7
@@
int _lttng_sequence_field_statedump(struct lttng_session *session,
ret = lttng_metadata_printf(session,
" _%s[ _%s ];\n",
field->name,
ret = lttng_metadata_printf(session,
" _%s[ _%s ];\n",
field->name,
-
sequence_type->
length_name);
+ length_name);
return ret;
}
return ret;
}
@@
-3484,7
+3502,7
@@
int _lttng_type_statedump(struct lttng_session *session,
case lttng_kernel_type_variant:
ret = _lttng_variant_type_statedump(session,
lttng_kernel_get_type_variant(type),
case lttng_kernel_type_variant:
ret = _lttng_variant_type_statedump(session,
lttng_kernel_get_type_variant(type),
- nesting);
+ nesting
, NULL
);
break;
/* Nested arrays and sequences are not supported yet. */
break;
/* Nested arrays and sequences are not supported yet. */
@@
-3503,10
+3521,14
@@
int _lttng_type_statedump(struct lttng_session *session,
static
int _lttng_field_statedump(struct lttng_session *session,
const struct lttng_kernel_event_field *field,
static
int _lttng_field_statedump(struct lttng_session *session,
const struct lttng_kernel_event_field *field,
- size_t nesting)
+ size_t nesting,
+ const char **prev_field_name_p)
{
{
+ const char *prev_field_name = NULL;
int ret = 0;
int ret = 0;
+ if (prev_field_name_p)
+ prev_field_name = *prev_field_name_p;
switch (field->type->type) {
case lttng_kernel_type_integer:
ret = _lttng_integer_field_statedump(session, field, nesting);
switch (field->type->type) {
case lttng_kernel_type_integer:
ret = _lttng_integer_field_statedump(session, field, nesting);
@@
-3524,16
+3546,18
@@
int _lttng_field_statedump(struct lttng_session *session,
ret = _lttng_array_field_statedump(session, field, nesting);
break;
case lttng_kernel_type_sequence:
ret = _lttng_array_field_statedump(session, field, nesting);
break;
case lttng_kernel_type_sequence:
- ret = _lttng_sequence_field_statedump(session, field, nesting);
+ ret = _lttng_sequence_field_statedump(session, field, nesting
, prev_field_name
);
break;
case lttng_kernel_type_variant:
break;
case lttng_kernel_type_variant:
- ret = _lttng_variant_field_statedump(session, field, nesting);
+ ret = _lttng_variant_field_statedump(session, field, nesting
, prev_field_name
);
break;
default:
WARN_ON_ONCE(1);
return -EINVAL;
}
break;
default:
WARN_ON_ONCE(1);
return -EINVAL;
}
+ if (prev_field_name_p)
+ *prev_field_name_p = field->name;
return ret;
}
return ret;
}
@@
-3541,6
+3565,7
@@
static
int _lttng_context_metadata_statedump(struct lttng_session *session,
struct lttng_kernel_ctx *ctx)
{
int _lttng_context_metadata_statedump(struct lttng_session *session,
struct lttng_kernel_ctx *ctx)
{
+ const char *prev_field_name = NULL;
int ret = 0;
int i;
int ret = 0;
int i;
@@
-3549,7
+3574,7
@@
int _lttng_context_metadata_statedump(struct lttng_session *session,
for (i = 0; i < ctx->nr_fields; i++) {
const struct lttng_kernel_ctx_field *field = &ctx->fields[i];
for (i = 0; i < ctx->nr_fields; i++) {
const struct lttng_kernel_ctx_field *field = &ctx->fields[i];
- ret = _lttng_field_statedump(session, field->event_field, 2);
+ ret = _lttng_field_statedump(session, field->event_field, 2
, &prev_field_name
);
if (ret)
return ret;
}
if (ret)
return ret;
}
@@
-3560,6
+3585,7
@@
static
int _lttng_fields_metadata_statedump(struct lttng_session *session,
struct lttng_kernel_event_recorder *event_recorder)
{
int _lttng_fields_metadata_statedump(struct lttng_session *session,
struct lttng_kernel_event_recorder *event_recorder)
{
+ const char *prev_field_name = NULL;
const struct lttng_kernel_event_desc *desc = event_recorder->priv->parent.desc;
int ret = 0;
int i;
const struct lttng_kernel_event_desc *desc = event_recorder->priv->parent.desc;
int ret = 0;
int i;
@@
-3567,7
+3593,7
@@
int _lttng_fields_metadata_statedump(struct lttng_session *session,
for (i = 0; i < desc->nr_fields; i++) {
const struct lttng_kernel_event_field *field = desc->fields[i];
for (i = 0; i < desc->nr_fields; i++) {
const struct lttng_kernel_event_field *field = desc->fields[i];
- ret = _lttng_field_statedump(session, field, 2);
+ ret = _lttng_field_statedump(session, field, 2
, &prev_field_name
);
if (ret)
return ret;
}
if (ret)
return ret;
}
This page took
0.028313 seconds
and
4
git commands to generate.