X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=include%2Flttng%2Fust-tracepoint-event.h;h=4a6ebc5aa13942d0e3fbfee6402ef67ef8dd4c2f;hb=7f2f82c3b336458e815e9a4ed100d7084c9e7138;hp=28684092bde07213a1fcbe9be5990f0c582a96dc;hpb=b5457df5fd74e033cbaa75307f9bbc12aff4ab8f;p=lttng-ust.git diff --git a/include/lttng/ust-tracepoint-event.h b/include/lttng/ust-tracepoint-event.h index 28684092..4a6ebc5a 100644 --- a/include/lttng/ust-tracepoint-event.h +++ b/include/lttng/ust-tracepoint-event.h @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include #include #include @@ -26,31 +26,31 @@ pos = cds_list_entry(tp_rcu_dereference(pos->member.next), __typeof__(*pos), member)) /* - * TRACEPOINT_EVENT_CLASS declares a class of tracepoints receiving the + * LTTNG_UST_TRACEPOINT_EVENT_CLASS declares a class of tracepoints receiving the * same arguments and having the same field layout. * - * TRACEPOINT_EVENT_INSTANCE declares an instance of a tracepoint, with + * LTTNG_UST_TRACEPOINT_EVENT_INSTANCE declares an instance of a tracepoint, with * its own provider and name. It refers to a class (template). * - * TRACEPOINT_EVENT declared both a class and an instance and does a + * LTTNG_UST_TRACEPOINT_EVENT declared both a class and an instance and does a * direct mapping from the instance to the class. */ -#undef TRACEPOINT_EVENT -#define TRACEPOINT_EVENT(_provider, _name, _args, _fields) \ - _TRACEPOINT_EVENT_CLASS(_provider, _name, \ +#undef LTTNG_UST_TRACEPOINT_EVENT +#define LTTNG_UST_TRACEPOINT_EVENT(_provider, _name, _args, _fields) \ + LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, \ _TP_PARAMS(_args), \ _TP_PARAMS(_fields)) \ - _TRACEPOINT_EVENT_INSTANCE(_provider, _name, _name, \ + LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _name, _name, \ _TP_PARAMS(_args)) -#undef TRACEPOINT_EVENT_CLASS -#define TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ - _TRACEPOINT_EVENT_CLASS(_provider, _name, _TP_PARAMS(_args), _TP_PARAMS(_fields)) +#undef LTTNG_UST_TRACEPOINT_EVENT_CLASS +#define LTTNG_UST_TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ + LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _TP_PARAMS(_args), _TP_PARAMS(_fields)) -#undef TRACEPOINT_EVENT_INSTANCE -#define TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ - _TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _TP_PARAMS(_args)) +#undef LTTNG_UST_TRACEPOINT_EVENT_INSTANCE +#define LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ + LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _TP_PARAMS(_args)) /* Helpers */ #define _TP_ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) @@ -65,11 +65,11 @@ /* * Stage 0 of tracepoint event generation. * - * Check that each TRACEPOINT_EVENT provider argument match the + * Check that each LTTNG_UST_TRACEPOINT_EVENT provider argument match the * TRACEPOINT_PROVIDER by creating dummy callbacks. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include static inline @@ -80,12 +80,12 @@ void _TP_COMBINE_TOKENS(__tracepoint_provider_mismatch_, TRACEPOINT_PROVIDER)(vo { } -#undef _TRACEPOINT_EVENT_CLASS -#define _TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ +#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS +#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ __tracepoint_provider_mismatch_##_provider(); -#undef _TRACEPOINT_EVENT_INSTANCE -#define _TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ +#undef LTTNG_UST__TRACEPOINT_EVENT_INSTANCE +#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ __tracepoint_provider_mismatch_##_provider(); static inline @@ -100,19 +100,16 @@ void _TP_COMBINE_TOKENS(__tracepoint_provider_check_, TRACEPOINT_PROVIDER)(void) /* * Stage 0.1 of tracepoint event generation. * - * Check that each TRACEPOINT_EVENT provider:name does not exceed the + * Check that each LTTNG_UST_TRACEPOINT_EVENT provider:name does not exceed the * tracepoint name length limit. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include -#undef _TRACEPOINT_EVENT_INSTANCE -#define _TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ -static const char \ - __tp_name_len_check##_provider##___##_name[LTTNG_UST_ABI_SYM_NAME_LEN] \ - __attribute__((unused)) = \ - #_provider ":" #_name; +#undef LTTNG_UST__TRACEPOINT_EVENT_INSTANCE +#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ + lttng_ust_tracepoint_validate_name_len(_provider, _name); #include TRACEPOINT_INCLUDE @@ -124,18 +121,18 @@ static const char \ * class and the instance using the class actually match. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include -#undef TP_ARGS -#define TP_ARGS(...) __VA_ARGS__ +#undef LTTNG_UST_TP_ARGS +#define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ -#undef _TRACEPOINT_EVENT_INSTANCE -#define _TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ +#undef LTTNG_UST__TRACEPOINT_EVENT_INSTANCE +#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ void __event_template_proto___##_provider##___##_template(_TP_ARGS_DATA_PROTO(_args)); -#undef _TRACEPOINT_EVENT_CLASS -#define _TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ +#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS +#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)); #include TRACEPOINT_INCLUDE @@ -206,7 +203,7 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) #undef TRACEPOINT_ENUM #define TRACEPOINT_ENUM(_provider, _name, _values) \ - const struct lttng_ust_enum_entry *__enum_values__##_provider##_##_name[] = { \ + const struct lttng_ust_enum_entry * const __enum_values__##_provider##_##_name[] = { \ _values \ ctf_enum_value("", 0) /* Dummy, 0-len array forbidden by C99. */ \ }; @@ -217,7 +214,7 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) * Verifying array and sequence elements are of an integer type. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include #include #include @@ -234,11 +231,11 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) _elem_type_base) \ lttng_ust_ctf_array_element_type_is_supported(_type, _item); -#undef TP_FIELDS -#define TP_FIELDS(...) __VA_ARGS__ /* Only one used in this phase */ +#undef LTTNG_UST_TP_FIELDS +#define LTTNG_UST_TP_FIELDS(...) __VA_ARGS__ /* Only one used in this phase */ -#undef _TRACEPOINT_EVENT_CLASS -#define _TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ +#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS +#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ _fields #include TRACEPOINT_INCLUDE @@ -250,7 +247,7 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) * Each event produce an array of fields. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include #include #include @@ -360,12 +357,12 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) .nofilter = 0, \ }), -#undef TP_FIELDS -#define TP_FIELDS(...) __VA_ARGS__ /* Only one used in this phase */ +#undef LTTNG_UST_TP_FIELDS +#define LTTNG_UST_TP_FIELDS(...) __VA_ARGS__ /* Only one used in this phase */ -#undef _TRACEPOINT_EVENT_CLASS -#define _TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ - static const struct lttng_ust_event_field *__event_fields___##_provider##___##_name[] = { \ +#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS +#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ + static const struct lttng_ust_event_field * const __event_fields___##_provider##___##_name[] = { \ _fields \ ctf_integer(int, dummy, 0) /* Dummy, C99 forbids 0-len array. */ \ }; @@ -387,14 +384,14 @@ void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args) * Create probe callback prototypes. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include -#undef TP_ARGS -#define TP_ARGS(...) __VA_ARGS__ +#undef LTTNG_UST_TP_ARGS +#define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ -#undef _TRACEPOINT_EVENT_CLASS -#define _TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ +#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS +#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ static void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)); #include TRACEPOINT_INCLUDE @@ -405,7 +402,7 @@ static void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)); * Create static inline function that calculates event size. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include #include @@ -457,14 +454,14 @@ static void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)); #define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \ _ctf_integer_ext(_type, _item, _src, BYTE_ORDER, 10, _nowrite) -#undef TP_ARGS -#define TP_ARGS(...) __VA_ARGS__ +#undef LTTNG_UST_TP_ARGS +#define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ -#undef TP_FIELDS -#define TP_FIELDS(...) __VA_ARGS__ +#undef LTTNG_UST_TP_FIELDS +#define LTTNG_UST_TP_FIELDS(...) __VA_ARGS__ -#undef _TRACEPOINT_EVENT_CLASS -#define _TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ +#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS +#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ static inline \ size_t __event_get_size__##_provider##___##_name(size_t *__dynamic_len, _TP_ARGS_DATA_PROTO(_args)) \ lttng_ust_notrace; \ @@ -492,7 +489,7 @@ size_t __event_get_size__##_provider##___##_name( \ * We make both write and nowrite data available to the filter. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include #include #include @@ -626,14 +623,14 @@ size_t __event_get_size__##_provider##___##_name( \ #define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \ _ctf_integer_ext(_type, _item, _src, BYTE_ORDER, 10, _nowrite) -#undef TP_ARGS -#define TP_ARGS(...) __VA_ARGS__ +#undef LTTNG_UST_TP_ARGS +#define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ -#undef TP_FIELDS -#define TP_FIELDS(...) __VA_ARGS__ +#undef LTTNG_UST_TP_FIELDS +#define LTTNG_UST_TP_FIELDS(...) __VA_ARGS__ -#undef _TRACEPOINT_EVENT_CLASS -#define _TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ +#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS +#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ static inline \ void __event_prepare_interpreter_stack__##_provider##___##_name(char *__stack_data,\ _TP_ARGS_DATA_PROTO(_args)) \ @@ -654,7 +651,7 @@ void __event_prepare_interpreter_stack__##_provider##___##_name(char *__stack_da * Create static inline function that calculates event payload alignment. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include #include @@ -701,14 +698,14 @@ void __event_prepare_interpreter_stack__##_provider##___##_name(char *__stack_da #define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \ _ctf_integer_ext(_type, _item, _src, BYTE_ORDER, 10, _nowrite) -#undef TP_ARGS -#define TP_ARGS(...) __VA_ARGS__ +#undef LTTNG_UST_TP_ARGS +#define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ -#undef TP_FIELDS -#define TP_FIELDS(...) __VA_ARGS__ +#undef LTTNG_UST_TP_FIELDS +#define LTTNG_UST_TP_FIELDS(...) __VA_ARGS__ -#undef _TRACEPOINT_EVENT_CLASS -#define _TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ +#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS +#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ static inline \ size_t __event_get_align__##_provider##___##_name(_TP_ARGS_PROTO(_args)) \ lttng_ust_notrace; \ @@ -730,7 +727,7 @@ size_t __event_get_align__##_provider##___##_name(_TP_ARGS_PROTO(_args)) \ * and writes event data into the buffer. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include #include @@ -789,11 +786,11 @@ size_t __event_get_align__##_provider##___##_name(_TP_ARGS_PROTO(_args)) \ #undef __get_dynamic_len #define __get_dynamic_len(field) __stackvar.__dynamic_len[__dynamic_len_idx++] -#undef TP_ARGS -#define TP_ARGS(...) __VA_ARGS__ +#undef LTTNG_UST_TP_ARGS +#define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ -#undef TP_FIELDS -#define TP_FIELDS(...) __VA_ARGS__ +#undef LTTNG_UST_TP_FIELDS +#define LTTNG_UST_TP_FIELDS(...) __VA_ARGS__ /* * For state dump, check that "session" argument (mandatory) matches the @@ -833,8 +830,8 @@ size_t __event_get_align__##_provider##___##_name(_TP_ARGS_PROTO(_args)) \ * 2*sizeof(unsigned long) for all supported architectures. * Perform UNION (||) of filter runtime list. */ -#undef _TRACEPOINT_EVENT_CLASS -#define _TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ +#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS +#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ static \ void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)) \ lttng_ust_notrace; \ @@ -933,16 +930,16 @@ void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)) \ * Create probe signature */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include -#undef TP_ARGS -#define TP_ARGS(...) __VA_ARGS__ +#undef LTTNG_UST_TP_ARGS +#define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ #define _TP_EXTRACT_STRING2(...) #__VA_ARGS__ -#undef _TRACEPOINT_EVENT_CLASS -#define _TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ +#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS +#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ static const char __tp_event_signature___##_provider##___##_name[] = \ _TP_EXTRACT_STRING2(_args); @@ -959,7 +956,7 @@ static const char __tp_event_signature___##_provider##___##_name[] = \ * the compiler will complain. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include /* @@ -975,10 +972,10 @@ static const char __tp_event_signature___##_provider##___##_name[] = \ #endif #undef TRACEPOINT_LOGLEVEL -#define TRACEPOINT_LOGLEVEL(__provider, __name, __loglevel) \ -static const int _loglevel_value___##__provider##___##__name = __loglevel; \ -LTTNG_UST_TP_EXTERN_C const int *_loglevel___##__provider##___##__name \ - __attribute__((visibility("hidden"))) = \ +#define TRACEPOINT_LOGLEVEL(__provider, __name, __loglevel) \ +static const int _loglevel_value___##__provider##___##__name = __loglevel; \ +LTTNG_UST_TP_EXTERN_C const int * const _loglevel___##__provider##___##__name \ + __attribute__((visibility("hidden"))) = \ &_loglevel_value___##__provider##___##__name; #include TRACEPOINT_INCLUDE @@ -991,7 +988,7 @@ LTTNG_UST_TP_EXTERN_C const int *_loglevel___##__provider##___##__name \ * Tracepoint UML URI info. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include /* @@ -1008,7 +1005,7 @@ LTTNG_UST_TP_EXTERN_C const int *_loglevel___##__provider##___##__name \ #undef TRACEPOINT_MODEL_EMF_URI #define TRACEPOINT_MODEL_EMF_URI(__provider, __name, __uri) \ -LTTNG_UST_TP_EXTERN_C const char *_model_emf_uri___##__provider##___##__name \ +LTTNG_UST_TP_EXTERN_C const char * const _model_emf_uri___##__provider##___##__name \ __attribute__((visibility("hidden"))) = __uri; \ #include TRACEPOINT_INCLUDE @@ -1032,15 +1029,21 @@ extern const struct lttng_ust_probe_desc _TP_COMBINE_TOKENS(__probe_desc___, TRA * Stage 7.1 of tracepoint event generation. * * Create events description structures. We use a weakref because - * loglevels are optional. If not declared, the event will point to the + * loglevels are optional. If not declared, the event will point to * a loglevel that contains NULL. + * + * C++ requires that const objects have a user-declared default + * constructor. However, in both C++ and C, weakref cannot be + * initialized because it causes the weakref attribute to be ignored. + * Therefore, the loglevel and model_emf_uri pointers are not const + * to ensure C++ compilers default-initialize them. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include -#undef _TRACEPOINT_EVENT_INSTANCE -#define _TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ +#undef LTTNG_UST__TRACEPOINT_EVENT_INSTANCE +#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ static const int * \ __ref_loglevel___##_provider##___##_name \ __attribute__((weakref ("_loglevel___" #_provider "___" #_name))); \ @@ -1067,14 +1070,14 @@ static const struct lttng_ust_event_desc __event_desc___##_provider##_##_name = * Create array of events. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include -#undef _TRACEPOINT_EVENT_INSTANCE -#define _TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ +#undef LTTNG_UST__TRACEPOINT_EVENT_INSTANCE +#define LTTNG_UST__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 const struct lttng_ust_event_desc * const _TP_COMBINE_TOKENS(__event_desc___, TRACEPOINT_PROVIDER)[] = { #include TRACEPOINT_INCLUDE NULL, /* Dummy, C99 forbids 0-len array. */ }; @@ -1109,7 +1112,7 @@ static struct lttng_ust_registered_probe *_TP_COMBINE_TOKENS(__lttng_ust_probe_r * Register refcount is protected by libc dynamic loader mutex. */ -/* Reset all macros within TRACEPOINT_EVENT */ +/* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include static void _TP_COMBINE_TOKENS(__lttng_ust_events_init__, TRACEPOINT_PROVIDER)(void)