X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=include%2Flttng%2Fust-tracepoint-event.h;h=9066e495850a7a93a7bedc5b77fa379b1c111e10;hb=7433d32d5a8f0e8833461b586a8c8b2274da0141;hp=872dfa57bb5b3fa5ff1f6ce9992efb25baefc084;hpb=25cff019d711338b8a7efe1cc54e4b1870157348;p=lttng-ust.git diff --git a/include/lttng/ust-tracepoint-event.h b/include/lttng/ust-tracepoint-event.h index 872dfa57..9066e495 100644 --- a/include/lttng/ust-tracepoint-event.h +++ b/include/lttng/ust-tracepoint-event.h @@ -10,7 +10,8 @@ #include #include #include -#include +#include +#include #include #include #include @@ -147,7 +148,8 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) /* Enumeration entry (single value) */ #undef ctf_enum_value #define ctf_enum_value(_string, _value) \ - { \ + __LTTNG_COMPOUND_LITERAL(struct lttng_ust_enum_entry, { \ + .struct_size = sizeof(struct lttng_ust_enum_entry), \ .start = { \ .value = lttng_is_signed_type(__typeof__(_value)) ? \ (long long) (_value) : (_value), \ @@ -159,12 +161,13 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) .signedness = lttng_is_signed_type(__typeof__(_value)), \ }, \ .string = (_string), \ - }, + }), /* Enumeration entry (range) */ #undef ctf_enum_range #define ctf_enum_range(_string, _range_start, _range_end) \ - { \ + __LTTNG_COMPOUND_LITERAL(struct lttng_ust_enum_entry, { \ + .struct_size = sizeof(struct lttng_ust_enum_entry), \ .start = { \ .value = lttng_is_signed_type(__typeof__(_range_start)) ? \ (long long) (_range_start) : (_range_start), \ @@ -176,12 +179,13 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) .signedness = lttng_is_signed_type(__typeof__(_range_end)), \ }, \ .string = (_string), \ - }, + }), /* Enumeration entry (automatic value; follows the rules of CTF) */ #undef ctf_enum_auto -#define ctf_enum_auto(_string) \ - { \ +#define ctf_enum_auto(_string) \ + __LTTNG_COMPOUND_LITERAL(struct lttng_ust_enum_entry, { \ + .struct_size = sizeof(struct lttng_ust_enum_entry), \ .start = { \ .value = -1ULL, \ .signedness = 0, \ @@ -191,12 +195,8 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) .signedness = 0, \ }, \ .string = (_string), \ - .u = { \ - .extra = { \ - .options = LTTNG_ENUM_ENTRY_OPTION_IS_AUTO, \ - }, \ - }, \ - }, + .options = LTTNG_UST_ENUM_ENTRY_OPTION_IS_AUTO, \ + }), #undef TP_ENUM_VALUES #define TP_ENUM_VALUES(...) \ @@ -204,7 +204,7 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) #undef TRACEPOINT_ENUM #define TRACEPOINT_ENUM(_provider, _name, _values) \ - const struct lttng_enum_entry __enum_values__##_provider##_##_name[] = { \ + struct lttng_ust_enum_entry *__enum_values__##_provider##_##_name[] = { \ _values \ ctf_enum_value("", 0) /* Dummy, 0-len array forbidden by C99. */ \ }; @@ -255,20 +255,20 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) #undef _ctf_integer_ext #define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _nowrite) \ - __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ + __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ .struct_size = sizeof(struct lttng_ust_event_field), \ .name = #_item, \ - .type = __type_integer(_type, _byte_order, _base, none), \ + .type = lttng_ust_type_integer_define(_type, _byte_order, _base), \ .nowrite = _nowrite, \ .nofilter = 0, \ }), #undef _ctf_float #define _ctf_float(_type, _item, _src, _nowrite) \ - __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ + __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ .struct_size = sizeof(struct lttng_ust_event_field), \ .name = #_item, \ - .type = __type_float(_type), \ + .type = lttng_ust_type_float_define(_type), \ .nowrite = _nowrite, \ .nofilter = 0, \ }), @@ -277,20 +277,19 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) #define _ctf_array_encoded(_type, _item, _src, _byte_order, \ _length, _encoding, _nowrite, \ _elem_type_base) \ - __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ + __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ .struct_size = sizeof(struct lttng_ust_event_field), \ .name = #_item, \ - .type = { \ - .atype = atype_array_nestable, \ - .u = { \ - .array_nestable = { \ - .elem_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ - __type_integer(_type, _byte_order, _elem_type_base, _encoding)), \ - .length = _length, \ - .alignment = 0, \ - } \ - } \ - }, \ + .type = (struct lttng_ust_type_common *) __LTTNG_COMPOUND_LITERAL(struct lttng_ust_type_array, { \ + .parent = { \ + .type = lttng_ust_type_array, \ + }, \ + .struct_size = sizeof(struct lttng_ust_type_array), \ + .elem_type = lttng_ust_type_integer_define(_type, _byte_order, _elem_type_base), \ + .length = _length, \ + .alignment = 0, \ + .encoding = lttng_ust_string_encoding_##_encoding, \ + }), \ .nowrite = _nowrite, \ .nofilter = 0, \ }), @@ -299,61 +298,59 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) #define _ctf_sequence_encoded(_type, _item, _src, _byte_order, \ _length_type, _src_length, _encoding, _nowrite, \ _elem_type_base) \ - __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ + __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ .struct_size = sizeof(struct lttng_ust_event_field), \ .name = "_" #_item "_length", \ - .type = __type_integer(_length_type, BYTE_ORDER, 10, none), \ + .type = lttng_ust_type_integer_define(_length_type, BYTE_ORDER, 10), \ .nowrite = _nowrite, \ .nofilter = 1, \ }), \ - __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ + __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ .struct_size = sizeof(struct lttng_ust_event_field), \ .name = #_item, \ - .type = { \ - .atype = atype_sequence_nestable, \ - .u = { \ - .sequence_nestable = { \ - .length_name = "_" #_item "_length", \ - .elem_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ - __type_integer(_type, _byte_order, _elem_type_base, _encoding)), \ - .alignment = 0, \ - }, \ + .type = (struct lttng_ust_type_common *) __LTTNG_COMPOUND_LITERAL(struct lttng_ust_type_sequence, { \ + .parent = { \ + .type = lttng_ust_type_sequence, \ }, \ - }, \ + .struct_size = sizeof(struct lttng_ust_type_sequence), \ + .length_name = "_" #_item "_length", \ + .elem_type = lttng_ust_type_integer_define(_type, _byte_order, _elem_type_base), \ + .alignment = 0, \ + .encoding = lttng_ust_string_encoding_##_encoding, \ + }), \ .nowrite = _nowrite, \ .nofilter = 0, \ }), #undef _ctf_string #define _ctf_string(_item, _src, _nowrite) \ - __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ + __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ .struct_size = sizeof(struct lttng_ust_event_field), \ .name = #_item, \ - .type = { \ - .atype = atype_string, \ - .u = { \ - .string = { .encoding = lttng_encode_UTF8 } \ + .type = (struct lttng_ust_type_common *) __LTTNG_COMPOUND_LITERAL(struct lttng_ust_type_string, { \ + .parent = { \ + .type = lttng_ust_type_string, \ }, \ - }, \ + .struct_size = sizeof(struct lttng_ust_type_string), \ + .encoding = lttng_ust_string_encoding_UTF8, \ + }), \ .nowrite = _nowrite, \ .nofilter = 0, \ }), #undef _ctf_enum #define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \ - __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ + __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \ .struct_size = sizeof(struct lttng_ust_event_field), \ .name = #_item, \ - .type = { \ - .atype = atype_enum_nestable, \ - .u = { \ - .enum_nestable = { \ - .desc = &__enum_##_provider##_##_name, \ - .container_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ - __type_integer(_type, BYTE_ORDER, 10, none)), \ - }, \ + .type = (struct lttng_ust_type_common *) __LTTNG_COMPOUND_LITERAL(struct lttng_ust_type_enum, { \ + .parent = { \ + .type = lttng_ust_type_enum, \ }, \ - }, \ + .struct_size = sizeof(struct lttng_ust_type_enum), \ + .desc = &__enum_##_provider##_##_name, \ + .container_type = lttng_ust_type_integer_define(_type, BYTE_ORDER, 10), \ + }), \ .nowrite = _nowrite, \ .nofilter = 0, \ }), @@ -363,14 +360,15 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) #undef _TRACEPOINT_EVENT_CLASS #define _TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ - static const struct lttng_ust_event_field *__event_fields___##_provider##___##_name[] = { \ + static struct lttng_ust_event_field *__event_fields___##_provider##___##_name[] = { \ _fields \ ctf_integer(int, dummy, 0) /* Dummy, C99 forbids 0-len array. */ \ }; #undef TRACEPOINT_ENUM #define TRACEPOINT_ENUM(_provider, _name, _values) \ - static const struct lttng_enum_desc __enum_##_provider##_##_name = { \ + static struct lttng_ust_enum_desc __enum_##_provider##_##_name = { \ + .struct_size = sizeof(struct lttng_ust_enum_desc), \ .name = #_provider "_" #_name, \ .entries = __enum_values__##_provider##_##_name, \ .nr_entries = _TP_ARRAY_SIZE(__enum_values__##_provider##_##_name) - 1, \ @@ -769,11 +767,11 @@ size_t __event_get_align__##_provider##___##_name(_TP_ARGS_PROTO(_args)) \ #define _TP_IP_PARAM(x) (x) #else /* TP_IP_PARAM */ -#if defined(__PPC__) && !defined(__PPC64__) +#if defined(LTTNG_UST_ARCH_PPC) && !defined(LTTNG_UST_ARCH_PPC64) #define _TP_IP_PARAM(x) NULL -#else /* #if defined(__PPC__) && !defined(__PPC64__) */ +#else #define _TP_IP_PARAM(x) __builtin_return_address(0) -#endif /* #else #if defined(__PPC__) && !defined(__PPC64__) */ +#endif #endif /* TP_IP_PARAM */ @@ -799,6 +797,7 @@ void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)) \ char __interpreter_stack_data[2 * sizeof(unsigned long) * __num_fields]; \ } __stackvar; \ int __ret; \ + bool __interpreter_stack_prepared = false; \ \ if (0) \ (void) __dynamic_len_idx; /* don't warn if unused */ \ @@ -806,13 +805,14 @@ void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)) \ case LTTNG_UST_EVENT_TYPE_RECORDER: \ { \ struct lttng_ust_event_recorder *__event_recorder = (struct lttng_ust_event_recorder *) __event->child; \ - struct lttng_channel *__chan = __event_recorder->chan; \ + struct lttng_ust_channel_buffer *__chan = __event_recorder->chan; \ + struct lttng_ust_channel_common *__chan_common = __chan->parent; \ \ - if (!_TP_SESSION_CHECK(session, __chan->session)) \ + if (!_TP_SESSION_CHECK(session, __chan_common->session)) \ return; \ - if (caa_unlikely(!CMM_ACCESS_ONCE(__chan->session->active))) \ + if (caa_unlikely(!CMM_ACCESS_ONCE(__chan_common->session->active))) \ return; \ - if (caa_unlikely(!CMM_ACCESS_ONCE(__chan->enabled))) \ + if (caa_unlikely(!CMM_ACCESS_ONCE(__chan_common->enabled))) \ return; \ break; \ } \ @@ -823,20 +823,12 @@ void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)) \ return; \ if (caa_unlikely(!TP_RCU_LINK_TEST())) \ return; \ - if (caa_unlikely(!cds_list_empty(&__event->filter_bytecode_runtime_head))) { \ - struct lttng_bytecode_runtime *__filter_bc_runtime; \ - int __filter_record = __event->has_enablers_without_bytecode; \ - \ + if (caa_unlikely(CMM_ACCESS_ONCE(__event->eval_filter))) { \ __event_prepare_interpreter_stack__##_provider##___##_name(__stackvar.__interpreter_stack_data, \ _TP_ARGS_DATA_VAR(_args)); \ - tp_list_for_each_entry_rcu(__filter_bc_runtime, &__event->filter_bytecode_runtime_head, node) { \ - if (caa_unlikely(__filter_bc_runtime->interpreter_funcs.filter(__filter_bc_runtime, \ - __stackvar.__interpreter_stack_data) & LTTNG_INTERPRETER_RECORD_FLAG)) { \ - __filter_record = 1; \ - break; \ - } \ - } \ - if (caa_likely(!__filter_record)) \ + __interpreter_stack_prepared = true; \ + if (caa_likely(__event->run_filter(__event, \ + __stackvar.__interpreter_stack_data, NULL) != LTTNG_UST_EVENT_FILTER_ACCEPT)) \ return; \ } \ switch (__event->type) { \ @@ -844,17 +836,16 @@ void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)) \ { \ size_t __event_len, __event_align; \ struct lttng_ust_event_recorder *__event_recorder = (struct lttng_ust_event_recorder *) __event->child; \ - struct lttng_channel *__chan = __event_recorder->chan; \ + struct lttng_ust_channel_buffer *__chan = __event_recorder->chan; \ struct lttng_ust_lib_ring_buffer_ctx __ctx; \ - struct lttng_stack_ctx __lttng_ctx; \ + struct lttng_ust_stack_ctx __lttng_ctx; \ \ __event_len = __event_get_size__##_provider##___##_name(__stackvar.__dynamic_len, \ _TP_ARGS_DATA_VAR(_args)); \ __event_align = __event_get_align__##_provider##___##_name(_TP_ARGS_VAR(_args)); \ memset(&__lttng_ctx, 0, sizeof(__lttng_ctx)); \ + __lttng_ctx.struct_size = sizeof(struct lttng_ust_stack_ctx); \ __lttng_ctx.event_recorder = __event_recorder; \ - __lttng_ctx.chan_ctx = tp_rcu_dereference(__chan->ctx); \ - __lttng_ctx.event_ctx = tp_rcu_dereference(__event_recorder->ctx); \ lib_ring_buffer_ctx_init(&__ctx, __chan->chan, &__lttng_ctx, __event_len, \ __event_align, -1, __chan->handle); \ __ctx.ip = _TP_IP_PARAM(TP_IP_PARAM); \ @@ -868,13 +859,18 @@ void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)) \ case LTTNG_UST_EVENT_TYPE_NOTIFIER: \ { \ struct lttng_ust_event_notifier *__event_notifier = (struct lttng_ust_event_notifier *) __event->child; \ + struct lttng_ust_notification_ctx __notif_ctx; \ + \ + __notif_ctx.struct_size = sizeof(struct lttng_ust_notification_ctx); \ + __notif_ctx.eval_capture = CMM_ACCESS_ONCE(__event_notifier->eval_capture); \ \ - if (caa_unlikely(!cds_list_empty(&__event_notifier->capture_bytecode_runtime_head))) \ + if (caa_unlikely(!__interpreter_stack_prepared && __notif_ctx.eval_capture)) \ __event_prepare_interpreter_stack__##_provider##___##_name(__stackvar.__interpreter_stack_data, \ _TP_ARGS_DATA_VAR(_args)); \ \ __event_notifier->notification_send(__event_notifier, \ - __stackvar.__interpreter_stack_data); \ + __stackvar.__interpreter_stack_data, \ + &__notif_ctx); \ break; \ } \ } \ @@ -991,7 +987,7 @@ static const int * \ static const char * \ __ref_model_emf_uri___##_provider##___##_name \ __attribute__((weakref ("_model_emf_uri___" #_provider "___" #_name)));\ -static const struct lttng_ust_event_desc __event_desc___##_provider##_##_name = { \ +static struct lttng_ust_event_desc __event_desc___##_provider##_##_name = { \ .struct_size = sizeof(struct lttng_ust_event_desc), \ .name = #_provider ":" #_name, \ .probe_callback = (void (*)(void)) &__event_probe__##_provider##___##_template, \ @@ -1018,7 +1014,7 @@ static const struct lttng_ust_event_desc __event_desc___##_provider##_##_name = #define _TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ &__event_desc___##_provider##_##_name, -static const struct lttng_ust_event_desc *_TP_COMBINE_TOKENS(__event_desc___, TRACEPOINT_PROVIDER)[] = { +static struct lttng_ust_event_desc *_TP_COMBINE_TOKENS(__event_desc___, TRACEPOINT_PROVIDER)[] = { #include TRACEPOINT_INCLUDE NULL, /* Dummy, C99 forbids 0-len array. */ };