X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=include%2Flttng%2Fust-tracepoint-event.h;h=c6dfed7ddc36700f1ab8d43430d3f676ed8f53d9;hb=5b675300cd432c3dff378ac5b78eb6b56d4294e6;hp=9678b83c934604ec975e30dade671882d13fa115;hpb=b2e37d27accf5e32128b82392dbe1a9522c7dc20;p=lttng-ust.git diff --git a/include/lttng/ust-tracepoint-event.h b/include/lttng/ust-tracepoint-event.h index 9678b83c..c6dfed7d 100644 --- a/include/lttng/ust-tracepoint-event.h +++ b/include/lttng/ust-tracepoint-event.h @@ -84,7 +84,7 @@ LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, \ LTTNG_UST__TP_PARAMS(_args), \ LTTNG_UST__TP_PARAMS(_fields)) \ - LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _name, _name, \ + LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _name, _provider, _name, \ LTTNG_UST__TP_PARAMS(_args)) #undef LTTNG_UST_TRACEPOINT_EVENT_CLASS @@ -92,8 +92,8 @@ LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, LTTNG_UST__TP_PARAMS(_args), LTTNG_UST__TP_PARAMS(_fields)) #undef LTTNG_UST_TRACEPOINT_EVENT_INSTANCE -#define LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ - LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, LTTNG_UST__TP_PARAMS(_args)) +#define LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(_template_provider, _template_name, _provider, _name, _args) \ + LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_template_provider, _template_name, _provider, _name, LTTNG_UST__TP_PARAMS(_args)) /* Helpers */ #define LTTNG_UST__TP_ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) @@ -128,7 +128,7 @@ void LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust_tracepoint_provider_mismatch_, LTTNG lttng_ust_tracepoint_provider_mismatch_##_provider(); #undef LTTNG_UST__TRACEPOINT_EVENT_INSTANCE -#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ +#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_template_provider, _template_name, _provider, _name, _args) \ lttng_ust_tracepoint_provider_mismatch_##_provider(); static inline @@ -151,7 +151,7 @@ void LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust_tracepoint_provider_check_, LTTNG_US #include #undef LTTNG_UST__TRACEPOINT_EVENT_INSTANCE -#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ +#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_template_provider, _template_name, _provider, _name, _args) \ lttng_ust_tracepoint_validate_name_len(_provider, _name); #include LTTNG_UST_TRACEPOINT_INCLUDE @@ -171,8 +171,8 @@ void LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust_tracepoint_provider_check_, LTTNG_US #define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ #undef LTTNG_UST__TRACEPOINT_EVENT_INSTANCE -#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ -void lttng_ust__event_template_proto___##_provider##___##_template(LTTNG_UST__TP_ARGS_DATA_PROTO(_args)); +#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_template_provider, _template_name, _provider, _name, _args) \ +void lttng_ust__event_template_proto___##_template_provider##___##_template_name(LTTNG_UST__TP_ARGS_DATA_PROTO(_args)); #undef LTTNG_UST__TRACEPOINT_EVENT_CLASS #define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ @@ -288,9 +288,50 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG #include LTTNG_UST_TRACEPOINT_INCLUDE +/* + * Stage 0.9.2 of tracepoint event generation. + * + * Create probe signature + */ + +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ +#include + +#undef LTTNG_UST_TP_ARGS +#define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ + +#define LTTNG_UST__TP_EXTRACT_STRING2(...) #__VA_ARGS__ + +#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS +#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ +static const char __tp_event_signature___##_provider##___##_name[] = \ + LTTNG_UST__TP_EXTRACT_STRING2(_args); + +#include LTTNG_UST_TRACEPOINT_INCLUDE + +#undef LTTNG_UST__TP_EXTRACT_STRING2 + /* * Stage 1 of tracepoint event generation. * + * Create probe callback prototypes. + */ + +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ +#include + +#undef LTTNG_UST_TP_ARGS +#define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ + +#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS +#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ +static void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PROTO(_args)); + +#include LTTNG_UST_TRACEPOINT_INCLUDE + +/* + * Stage 2 of tracepoint event generation. + * * Create event field type metadata section. * Each event produce an array of fields. */ @@ -360,7 +401,7 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG .type = lttng_ust_type_sequence, \ }, \ .struct_size = sizeof(struct lttng_ust_type_sequence), \ - .length_name = "_" #_item "_length", \ + .length_name = NULL, /* Use previous field. */ \ .elem_type = lttng_ust_type_integer_define(_type, _byte_order, _elem_type_base), \ .alignment = 0, \ .encoding = lttng_ust_string_encoding_##_encoding, \ @@ -413,6 +454,13 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG static const struct lttng_ust_event_field * const lttng_ust__event_fields___##_provider##___##_name[] = { \ _fields \ lttng_ust_field_integer(int, dummy, 0) /* Dummy, C99 forbids 0-len array. */ \ + }; \ + static const struct lttng_ust_tracepoint_class lttng_ust__event_class___##_provider##___##_name = { \ + .struct_size = sizeof(struct lttng_ust_tracepoint_class), \ + .fields = lttng_ust__event_fields___##_provider##___##_name, \ + .nr_fields = LTTNG_UST__TP_ARRAY_SIZE(lttng_ust__event_fields___##_provider##___##_name) - 1, \ + .probe_callback = (void (*)(void)) <tng_ust__event_probe__##_provider##___##_name, \ + .signature = __tp_event_signature___##_provider##___##_name, \ }; #undef LTTNG_UST_TRACEPOINT_ENUM @@ -426,24 +474,6 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG #include LTTNG_UST_TRACEPOINT_INCLUDE -/* - * Stage 2 of tracepoint event generation. - * - * Create probe callback prototypes. - */ - -/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ -#include - -#undef LTTNG_UST_TP_ARGS -#define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ - -#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS -#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ -static void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PROTO(_args)); - -#include LTTNG_UST_TRACEPOINT_INCLUDE - /* * Stage 3.0 of tracepoint event generation. * @@ -707,20 +737,20 @@ void lttng_ust__event_prepare_interpreter_stack__##_provider##___##_name(char *_ #define lttng_ust__field_integer_ext(_type, _item, _src, _byte_order, _base, _nowrite) \ if (0) \ (void) (_src); /* Unused */ \ - lttng_ust__event_align = lttng_ust__tp_max_t(size_t, lttng_ust__event_align, lttng_ust_rb_alignof(_type)); + __event_align = lttng_ust__tp_max_t(size_t, __event_align, lttng_ust_rb_alignof(_type)); #undef lttng_ust__field_float #define lttng_ust__field_float(_type, _item, _src, _nowrite) \ if (0) \ (void) (_src); /* Unused */ \ - lttng_ust__event_align = lttng_ust__tp_max_t(size_t, lttng_ust__event_align, lttng_ust_rb_alignof(_type)); + __event_align = lttng_ust__tp_max_t(size_t, __event_align, lttng_ust_rb_alignof(_type)); #undef lttng_ust__field_array_encoded #define lttng_ust__field_array_encoded(_type, _item, _src, _byte_order, _length, \ _encoding, _nowrite, _elem_type_base) \ if (0) \ (void) (_src); /* Unused */ \ - lttng_ust__event_align = lttng_ust__tp_max_t(size_t, lttng_ust__event_align, lttng_ust_rb_alignof(_type)); + __event_align = lttng_ust__tp_max_t(size_t, __event_align, lttng_ust_rb_alignof(_type)); #undef lttng_ust__field_sequence_encoded #define lttng_ust__field_sequence_encoded(_type, _item, _src, _byte_order, _length_type, \ @@ -729,8 +759,8 @@ void lttng_ust__event_prepare_interpreter_stack__##_provider##___##_name(char *_ (void) (_src); /* Unused */ \ if (0) \ (void) (_src_length); /* Unused */ \ - lttng_ust__event_align = lttng_ust__tp_max_t(size_t, lttng_ust__event_align, lttng_ust_rb_alignof(_length_type)); \ - lttng_ust__event_align = lttng_ust__tp_max_t(size_t, lttng_ust__event_align, lttng_ust_rb_alignof(_type)); + __event_align = lttng_ust__tp_max_t(size_t, __event_align, lttng_ust_rb_alignof(_length_type)); \ + __event_align = lttng_ust__tp_max_t(size_t, __event_align, lttng_ust_rb_alignof(_type)); #undef lttng_ust__field_string #define lttng_ust__field_string(_item, _src, _nowrite) \ @@ -760,9 +790,9 @@ size_t lttng_ust__event_get_align__##_provider##___##_name(LTTNG_UST__TP_ARGS_PR static inline \ size_t lttng_ust__event_get_align__##_provider##___##_name(LTTNG_UST__TP_ARGS_PROTO(_args)) \ { \ - size_t lttng_ust__event_align = 1; \ + size_t __event_align = 1; \ _fields \ - return lttng_ust__event_align; \ + return __event_align; \ } #include LTTNG_UST_TRACEPOINT_INCLUDE @@ -903,8 +933,8 @@ void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PRO switch (__event->type) { \ case LTTNG_UST_EVENT_TYPE_RECORDER: \ { \ - struct lttng_ust_event_recorder *lttng_ust__event_recorder = (struct lttng_ust_event_recorder *) __event->child; \ - struct lttng_ust_channel_buffer *__chan = lttng_ust__event_recorder->chan; \ + struct lttng_ust_event_recorder *__event_recorder = (struct lttng_ust_event_recorder *) __event->child; \ + struct lttng_ust_channel_buffer *__chan = __event_recorder->chan; \ struct lttng_ust_channel_common *__chan_common = __chan->parent; \ \ if (!LTTNG_UST__TP_SESSION_CHECK(session, __chan_common->session)) \ @@ -935,15 +965,15 @@ void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PRO switch (__event->type) { \ case LTTNG_UST_EVENT_TYPE_RECORDER: \ { \ - size_t __event_len, lttng_ust__event_align; \ - struct lttng_ust_event_recorder *lttng_ust__event_recorder = (struct lttng_ust_event_recorder *) __event->child; \ - struct lttng_ust_channel_buffer *__chan = lttng_ust__event_recorder->chan; \ + size_t __event_len, __event_align; \ + struct lttng_ust_event_recorder *__event_recorder = (struct lttng_ust_event_recorder *) __event->child; \ + struct lttng_ust_channel_buffer *__chan = __event_recorder->chan; \ struct lttng_ust_ring_buffer_ctx __ctx; \ \ __event_len = lttng_ust__event_get_size__##_provider##___##_name(__stackvar.__dynamic_len, \ LTTNG_UST__TP_ARGS_DATA_VAR(_args)); \ - lttng_ust__event_align = lttng_ust__event_get_align__##_provider##___##_name(LTTNG_UST__TP_ARGS_VAR(_args)); \ - lttng_ust_ring_buffer_ctx_init(&__ctx, lttng_ust__event_recorder, __event_len, lttng_ust__event_align, \ + __event_align = lttng_ust__event_get_align__##_provider##___##_name(LTTNG_UST__TP_ARGS_VAR(_args)); \ + lttng_ust_ring_buffer_ctx_init(&__ctx, __event_recorder, __event_len, __event_align, \ &__probe_ctx); \ __ret = __chan->ops->event_reserve(&__ctx); \ if (__ret < 0) \ @@ -954,17 +984,17 @@ void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PRO } \ case LTTNG_UST_EVENT_TYPE_NOTIFIER: \ { \ - struct lttng_ust_event_notifier *lttng_ust__event_notifier = (struct lttng_ust_event_notifier *) __event->child; \ + 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(lttng_ust__event_notifier->eval_capture); \ + __notif_ctx.eval_capture = CMM_ACCESS_ONCE(__event_notifier->eval_capture); \ \ if (caa_unlikely(!__interpreter_stack_prepared && __notif_ctx.eval_capture)) \ lttng_ust__event_prepare_interpreter_stack__##_provider##___##_name(__stackvar.__interpreter_stack_data, \ LTTNG_UST__TP_ARGS_DATA_VAR(_args)); \ \ - lttng_ust__event_notifier->notification_send(lttng_ust__event_notifier, \ + __event_notifier->notification_send(__event_notifier, \ __stackvar.__interpreter_stack_data, \ &__probe_ctx, \ &__notif_ctx); \ @@ -977,29 +1007,6 @@ void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PRO #undef lttng_ust__get_dynamic_len -/* - * Stage 5.1 of tracepoint event generation. - * - * Create probe signature - */ - -/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ -#include - -#undef LTTNG_UST_TP_ARGS -#define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ - -#define LTTNG_UST__TP_EXTRACT_STRING2(...) #__VA_ARGS__ - -#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS -#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ -static const char __tp_event_signature___##_provider##___##_name[] = \ - LTTNG_UST__TP_EXTRACT_STRING2(_args); - -#include LTTNG_UST_TRACEPOINT_INCLUDE - -#undef LTTNG_UST__TP_EXTRACT_STRING2 - /* * Stage 6 of tracepoint event generation. * @@ -1096,7 +1103,7 @@ extern const struct lttng_ust_probe_desc LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust_ #include #undef LTTNG_UST__TRACEPOINT_EVENT_INSTANCE -#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ +#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_template_provider, _template_name, _provider, _name, _args) \ static const int * \ __ref_loglevel___##_provider##___##_name \ __attribute__((weakref ("_loglevel___" #_provider "___" #_name))); \ @@ -1107,11 +1114,8 @@ static const struct lttng_ust_event_desc lttng_ust__event_desc___##_provider##_# .struct_size = sizeof(struct lttng_ust_event_desc), \ .event_name = #_name, \ .probe_desc = <tng_ust__probe_desc___##_provider, \ - .probe_callback = (void (*)(void)) <tng_ust__event_probe__##_provider##___##_template, \ - .fields = lttng_ust__event_fields___##_provider##___##_template, \ - .nr_fields = LTTNG_UST__TP_ARRAY_SIZE(lttng_ust__event_fields___##_provider##___##_template) - 1, \ + .tp_class = <tng_ust__event_class___##_template_provider##___##_template_name, \ .loglevel = &__ref_loglevel___##_provider##___##_name, \ - .signature = __tp_event_signature___##_provider##___##_template, \ .model_emf_uri = &__ref_model_emf_uri___##_provider##___##_name, \ }; @@ -1127,7 +1131,7 @@ static const struct lttng_ust_event_desc lttng_ust__event_desc___##_provider##_# #include #undef LTTNG_UST__TRACEPOINT_EVENT_INSTANCE -#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ +#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_template_provider, _template_name, _provider, _name, _args) \ <tng_ust__event_desc___##_provider##_##_name, static const struct lttng_ust_event_desc * const LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__event_desc___, LTTNG_UST_TRACEPOINT_PROVIDER)[] = { @@ -1211,5 +1215,21 @@ LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__events_exit__, LTTNG_UST_TRACEPOINT_PROV LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__probe_register_cookie___, LTTNG_UST_TRACEPOINT_PROVIDER) = NULL; } +/* + * LTTNG_UST_TRACEPOINT_PROVIDER_HIDDEN_DEFINITION: Define this before + * including a tracepoint instrumentation header to hide symbols + * associated with the tracepoint provider. This is useful if the + * tracepoint definition (including the header after defining + * LTTNG_UST_TRACEPOINT_DEFINE) is in the same module as the provider + * (including the header after defining + * LTTNG_UST_TRACEPOINT_CREATE_PROBES). + */ +#undef LTTNG_UST__TRACEPOINT_PROVIDER_DEFINITION_VISIBILITY +#ifdef LTTNG_UST_TRACEPOINT_PROVIDER_HIDDEN_DEFINITION +#define LTTNG_UST__TRACEPOINT_PROVIDER_DEFINITION_VISIBILITY __attribute__((visibility("hidden"))) +#else +#define LTTNG_UST__TRACEPOINT_PROVIDER_DEFINITION_VISIBILITY __attribute__((visibility("default"))) +#endif + int LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust_tracepoint_provider_, LTTNG_UST_TRACEPOINT_PROVIDER) - __attribute__((visibility("default"))); + LTTNG_UST__TRACEPOINT_PROVIDER_DEFINITION_VISIBILITY;