#include <urcu/compiler.h>
#include <urcu/rculist.h>
#include <lttng/ust-events.h>
-#include <lttng/ringbuffer-context.h>
+#include <lttng/ust-ringbuffer-context.h>
#include <lttng/ust-arch.h>
#include <lttng/ust-compiler.h>
#include <lttng/tracepoint.h>
#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;
+ lttng_ust_tracepoint_validate_name_len(_provider, _name);
#include TRACEPOINT_INCLUDE
/* Reset all macros within TRACEPOINT_EVENT */
#include <lttng/ust-tracepoint-event-reset.h>
-#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 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. */ \
};
_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) \
.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[] = { \
+ static const struct lttng_ust_event_field * const __event_fields___##_provider##___##_name[] = { \
_fields \
ctf_integer(int, dummy, 0) /* Dummy, C99 forbids 0-len array. */ \
};
/* Reset all macros within TRACEPOINT_EVENT */
#include <lttng/ust-tracepoint-event-reset.h>
-#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) \
#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _nowrite) \
if (0) \
(void) (_src); /* Unused */ \
- __event_len += lttng_ust_lib_ring_buffer_align(__event_len, lttng_ust_rb_alignof(_type)); \
+ __event_len += lttng_ust_ring_buffer_align(__event_len, lttng_ust_rb_alignof(_type)); \
__event_len += sizeof(_type);
#undef _ctf_float
#define _ctf_float(_type, _item, _src, _nowrite) \
if (0) \
(void) (_src); /* Unused */ \
- __event_len += lttng_ust_lib_ring_buffer_align(__event_len, lttng_ust_rb_alignof(_type)); \
+ __event_len += lttng_ust_ring_buffer_align(__event_len, lttng_ust_rb_alignof(_type)); \
__event_len += sizeof(_type);
#undef _ctf_array_encoded
_nowrite, _elem_type_base) \
if (0) \
(void) (_src); /* Unused */ \
- __event_len += lttng_ust_lib_ring_buffer_align(__event_len, lttng_ust_rb_alignof(_type)); \
+ __event_len += lttng_ust_ring_buffer_align(__event_len, lttng_ust_rb_alignof(_type)); \
__event_len += sizeof(_type) * (_length);
#undef _ctf_sequence_encoded
_src_length, _encoding, _nowrite, _elem_type_base) \
if (0) \
(void) (_src); /* Unused */ \
- __event_len += lttng_ust_lib_ring_buffer_align(__event_len, lttng_ust_rb_alignof(_length_type)); \
+ __event_len += lttng_ust_ring_buffer_align(__event_len, lttng_ust_rb_alignof(_length_type)); \
__event_len += sizeof(_length_type); \
- __event_len += lttng_ust_lib_ring_buffer_align(__event_len, lttng_ust_rb_alignof(_type)); \
+ __event_len += lttng_ust_ring_buffer_align(__event_len, lttng_ust_rb_alignof(_type)); \
__dynamic_len[__dynamic_len_idx] = (_src_length); \
__event_len += sizeof(_type) * __dynamic_len[__dynamic_len_idx]; \
__dynamic_len_idx++;
#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) \
#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) \
#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 __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
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_lib_ring_buffer_ctx __ctx; \
+ struct lttng_ust_ring_buffer_ctx __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)); \
- lttng_ust_lib_ring_buffer_ctx_init(&__ctx, __event_recorder, __event_len, __event_align, \
+ lttng_ust_ring_buffer_ctx_init(&__ctx, __event_recorder, __event_len, __event_align, \
_TP_IP_PARAM(TP_IP_PARAM)); \
__ret = __chan->ops->event_reserve(&__ctx); \
if (__ret < 0) \
/* Reset all macros within TRACEPOINT_EVENT */
#include <lttng/ust-tracepoint-event-reset.h>
-#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__
#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
#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
* 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 */
#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 const struct lttng_ust_event_desc * const _TP_COMBINE_TOKENS(__event_desc___, TRACEPOINT_PROVIDER)[] = {
#include TRACEPOINT_INCLUDE
NULL, /* Dummy, C99 forbids 0-len array. */
};