X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=include%2Flttng%2Fust-tracepoint-event.h;h=586f59f9643cd392720cf0c81ce35986e1c0e482;hb=28db08270297a0e0654ce359069954bdc6c904f1;hp=0df951a4655f23d1ac79d9b86589ddf58a06d550;hpb=c28c4a88a1cad73bbeeae2e33546e7b77d1608a1;p=lttng-ust.git diff --git a/include/lttng/ust-tracepoint-event.h b/include/lttng/ust-tracepoint-event.h index 0df951a4..586f59f9 100644 --- a/include/lttng/ust-tracepoint-event.h +++ b/include/lttng/ust-tracepoint-event.h @@ -17,14 +17,56 @@ #include #include #include +#include -#define LTTNG_UST__NULL_STRING "(null)" +#if LTTNG_UST_COMPAT_API(0) +#define TP_FIELDS LTTNG_UST_TP_FIELDS + +#define ctf_integer lttng_ust_field_integer +#define ctf_integer_hex lttng_ust_field_integer_hex +#define ctf_integer_network lttng_ust_field_integer_network +#define ctf_integer_network_hex lttng_ust_field_integer_network_hex +#define ctf_integer_nowrite lttng_ust_field_integer_nowrite + +#define ctf_float lttng_ust_field_float +#define ctf_float_nowrite lttng_ust_field_float_nowrite + +#define ctf_array lttng_ust_field_array +#define ctf_array_hex lttng_ust_field_array_hex +#define ctf_array_network lttng_ust_field_array_network +#define ctf_array_network_hex lttng_ust_field_array_network_hex +#define ctf_array_text lttng_ust_field_array_text +#define ctf_array_nowrite lttng_ust_field_array_nowrite +#define ctf_array_nowrite_hex lttng_ust_field_array_nowrite_hex +#define ctf_array_network_nowrite lttng_ust_field_array_network_nowrite +#define ctf_array_network_nowrite_hex lttng_ust_field_array_network_nowrite_hex +#define ctf_array_text_nowrite lttng_ust_field_array_text_nowrite + +#define ctf_sequence lttng_ust_field_sequence +#define ctf_sequence_hex lttng_ust_field_sequence_hex +#define ctf_sequence_network lttng_ust_field_sequence_network +#define ctf_sequence_network_hex lttng_ust_field_sequence_network_hex +#define ctf_sequence_text lttng_ust_field_sequence_text +#define ctf_sequence_nowrite lttng_ust_field_sequence_nowrite +#define ctf_sequence_nowrite_hex lttng_ust_field_sequence_nowrite_hex +#define ctf_sequence_network_nowrite lttng_ust_field_sequence_network_nowrite +#define ctf_sequence_network_nowrite_hex lttng_ust_field_sequence_network_nowrite_hex +#define ctf_sequence_text_nowrite lttng_ust_field_sequence_text_nowrite + +#define ctf_string lttng_ust_field_string +#define ctf_string_nowrite lttng_ust_field_string_nowrite + +#define ctf_unused lttng_ust_field_unused +#define ctf_unused_nowrite lttng_ust_field_unused_nowrite + +#define ctf_enum lttng_ust_field_enum +#define ctf_enum_nowrite lttng_ust_field_enum_nowrite +#define ctf_enum_value lttng_ust_field_enum_value +#define ctf_enum_range lttng_ust_field_enum_range +#define ctf_enum_auto lttng_ust_field_enum_auto +#endif /* #if LTTNG_UST_COMPAT_API(0) */ -#undef tp_list_for_each_entry_rcu -#define tp_list_for_each_entry_rcu(pos, head, member) \ - for (pos = cds_list_entry(tp_rcu_dereference((head)->next), __typeof__(*pos), member); \ - &pos->member != (head); \ - pos = cds_list_entry(tp_rcu_dereference(pos->member.next), __typeof__(*pos), member)) +#define LTTNG_UST__NULL_STRING "(null)" /* * LTTNG_UST_TRACEPOINT_EVENT_CLASS declares a class of tracepoints receiving the @@ -146,8 +188,8 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG #include /* Enumeration entry (single value) */ -#undef ctf_enum_value -#define ctf_enum_value(_string, _value) \ +#undef lttng_ust_field_enum_value +#define lttng_ust_field_enum_value(_string, _value) \ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_enum_entry, { \ .struct_size = sizeof(struct lttng_ust_enum_entry), \ .start = { \ @@ -164,8 +206,8 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG }), /* Enumeration entry (range) */ -#undef ctf_enum_range -#define ctf_enum_range(_string, _range_start, _range_end) \ +#undef lttng_ust_field_enum_range +#define lttng_ust_field_enum_range(_string, _range_start, _range_end) \ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_enum_entry, { \ .struct_size = sizeof(struct lttng_ust_enum_entry), \ .start = { \ @@ -182,8 +224,8 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG }), /* Enumeration entry (automatic value; follows the rules of CTF) */ -#undef ctf_enum_auto -#define ctf_enum_auto(_string) \ +#undef lttng_ust_field_enum_auto +#define lttng_ust_field_enum_auto(_string) \ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_enum_entry, { \ .struct_size = sizeof(struct lttng_ust_enum_entry), \ .start = { \ @@ -211,7 +253,7 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG #define LTTNG_UST_TRACEPOINT_ENUM(_provider, _name, _values) \ const struct lttng_ust_enum_entry * const __enum_values__##_provider##_##_name[] = { \ _values \ - ctf_enum_value("", 0) /* Dummy, 0-len array forbidden by C99. */ \ + lttng_ust_field_enum_value("", 0) /* Dummy, 0-len array forbidden by C99. */ \ }; #include LTTNG_UST_TRACEPOINT_INCLUDE @@ -225,17 +267,17 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG #include #include -#undef _ctf_array_encoded -#define _ctf_array_encoded(_type, _item, _src, _byte_order, \ +#undef lttng_ust__field_array_encoded +#define lttng_ust__field_array_encoded(_type, _item, _src, _byte_order, \ _length, _encoding, _nowrite, \ _elem_type_base) \ - lttng_ust_ctf_array_element_type_is_supported(_type, _item); + lttng_ust_field_array_element_type_is_supported(_type, _item); -#undef _ctf_sequence_encoded -#define _ctf_sequence_encoded(_type, _item, _src, _byte_order, \ +#undef lttng_ust__field_sequence_encoded +#define lttng_ust__field_sequence_encoded(_type, _item, _src, _byte_order, \ _length_type, _src_length, _encoding, _nowrite, \ _elem_type_base) \ - lttng_ust_ctf_array_element_type_is_supported(_type, _item); + lttng_ust_field_array_element_type_is_supported(_type, _item); #undef LTTNG_UST_TP_FIELDS #define LTTNG_UST_TP_FIELDS(...) __VA_ARGS__ /* Only one used in this phase */ @@ -258,8 +300,8 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG #include #include -#undef _ctf_integer_ext -#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _nowrite) \ +#undef lttng_ust__field_integer_ext +#define lttng_ust__field_integer_ext(_type, _item, _src, _byte_order, _base, _nowrite) \ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_event_field, { \ .struct_size = sizeof(struct lttng_ust_event_field), \ .name = #_item, \ @@ -268,8 +310,8 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG .nofilter = 0, \ }), -#undef _ctf_float -#define _ctf_float(_type, _item, _src, _nowrite) \ +#undef lttng_ust__field_float +#define lttng_ust__field_float(_type, _item, _src, _nowrite) \ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_event_field, { \ .struct_size = sizeof(struct lttng_ust_event_field), \ .name = #_item, \ @@ -278,8 +320,8 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG .nofilter = 0, \ }), -#undef _ctf_array_encoded -#define _ctf_array_encoded(_type, _item, _src, _byte_order, \ +#undef lttng_ust__field_array_encoded +#define lttng_ust__field_array_encoded(_type, _item, _src, _byte_order, \ _length, _encoding, _nowrite, \ _elem_type_base) \ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_event_field, { \ @@ -299,14 +341,14 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG .nofilter = 0, \ }), -#undef _ctf_sequence_encoded -#define _ctf_sequence_encoded(_type, _item, _src, _byte_order, \ +#undef lttng_ust__field_sequence_encoded +#define lttng_ust__field_sequence_encoded(_type, _item, _src, _byte_order, \ _length_type, _src_length, _encoding, _nowrite, \ _elem_type_base) \ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_event_field, { \ .struct_size = sizeof(struct lttng_ust_event_field), \ .name = "_" #_item "_length", \ - .type = lttng_ust_type_integer_define(_length_type, BYTE_ORDER, 10), \ + .type = lttng_ust_type_integer_define(_length_type, LTTNG_UST_BYTE_ORDER, 10), \ .nowrite = _nowrite, \ .nofilter = 1, \ }), \ @@ -318,7 +360,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, \ @@ -327,8 +369,8 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG .nofilter = 0, \ }), -#undef _ctf_string -#define _ctf_string(_item, _src, _nowrite) \ +#undef lttng_ust__field_string +#define lttng_ust__field_string(_item, _src, _nowrite) \ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_event_field, { \ .struct_size = sizeof(struct lttng_ust_event_field), \ .name = #_item, \ @@ -343,11 +385,11 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG .nofilter = 0, \ }), -#undef _ctf_unused -#define _ctf_unused(_src) +#undef lttng_ust__field_unused +#define lttng_ust__field_unused(_src) -#undef _ctf_enum -#define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \ +#undef lttng_ust__field_enum +#define lttng_ust__field_enum(_provider, _name, _type, _item, _src, _nowrite) \ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_event_field, { \ .struct_size = sizeof(struct lttng_ust_event_field), \ .name = #_item, \ @@ -357,7 +399,7 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG }, \ .struct_size = sizeof(struct lttng_ust_type_enum), \ .desc = &__enum_##_provider##_##_name, \ - .container_type = lttng_ust_type_integer_define(_type, BYTE_ORDER, 10), \ + .container_type = lttng_ust_type_integer_define(_type, LTTNG_UST_BYTE_ORDER, 10), \ }), \ .nowrite = _nowrite, \ .nofilter = 0, \ @@ -370,7 +412,7 @@ void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARG #define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ static const struct lttng_ust_event_field * const lttng_ust__event_fields___##_provider##___##_name[] = { \ _fields \ - ctf_integer(int, dummy, 0) /* Dummy, C99 forbids 0-len array. */ \ + lttng_ust_field_integer(int, dummy, 0) /* Dummy, C99 forbids 0-len array. */ \ }; #undef LTTNG_UST_TRACEPOINT_ENUM @@ -412,30 +454,30 @@ static void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_D #include #include -#undef _ctf_integer_ext -#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _nowrite) \ +#undef lttng_ust__field_integer_ext +#define lttng_ust__field_integer_ext(_type, _item, _src, _byte_order, _base, _nowrite) \ if (0) \ (void) (_src); /* Unused */ \ __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) \ +#undef lttng_ust__field_float +#define lttng_ust__field_float(_type, _item, _src, _nowrite) \ if (0) \ (void) (_src); /* Unused */ \ __event_len += lttng_ust_ring_buffer_align(__event_len, lttng_ust_rb_alignof(_type)); \ __event_len += sizeof(_type); -#undef _ctf_array_encoded -#define _ctf_array_encoded(_type, _item, _src, _byte_order, _length, _encoding, \ +#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 */ \ __event_len += lttng_ust_ring_buffer_align(__event_len, lttng_ust_rb_alignof(_type)); \ __event_len += sizeof(_type) * (_length); -#undef _ctf_sequence_encoded -#define _ctf_sequence_encoded(_type, _item, _src, _byte_order, _length_type, \ +#undef lttng_ust__field_sequence_encoded +#define lttng_ust__field_sequence_encoded(_type, _item, _src, _byte_order, _length_type, \ _src_length, _encoding, _nowrite, _elem_type_base) \ if (0) \ (void) (_src); /* Unused */ \ @@ -446,19 +488,19 @@ static void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_D __event_len += sizeof(_type) * __dynamic_len[__dynamic_len_idx]; \ __dynamic_len_idx++; -#undef _ctf_string -#define _ctf_string(_item, _src, _nowrite) \ +#undef lttng_ust__field_string +#define lttng_ust__field_string(_item, _src, _nowrite) \ __event_len += __dynamic_len[__dynamic_len_idx++] = \ strlen((_src) ? (_src) : LTTNG_UST__NULL_STRING) + 1; -#undef _ctf_unused -#define _ctf_unused(_src) \ +#undef lttng_ust__field_unused +#define lttng_ust__field_unused(_src) \ if (0) \ (void) (_src); /* Unused */ -#undef _ctf_enum -#define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \ - _ctf_integer_ext(_type, _item, _src, BYTE_ORDER, 10, _nowrite) +#undef lttng_ust__field_enum +#define lttng_ust__field_enum(_provider, _name, _type, _item, _src, _nowrite) \ + lttng_ust__field_integer_ext(_type, _item, _src, LTTNG_UST_BYTE_ORDER, 10, _nowrite) #undef LTTNG_UST_TP_ARGS #define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ @@ -500,8 +542,8 @@ size_t lttng_ust__event_get_size__##_provider##___##_name( \ #include #include -#undef _ctf_integer_ext -#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _nowrite) \ +#undef lttng_ust__field_integer_ext +#define lttng_ust__field_integer_ext(_type, _item, _src, _byte_order, _base, _nowrite) \ if (lttng_ust_is_signed_type(_type)) { \ int64_t __ctf_tmp_int64; \ switch (sizeof(_type)) { \ @@ -514,24 +556,24 @@ size_t lttng_ust__event_get_size__##_provider##___##_name( \ case 2: \ { \ union { _type t; int16_t v; } __tmp = { (_type) (_src) }; \ - if (_byte_order != BYTE_ORDER) \ - __tmp.v = bswap_16(__tmp.v); \ + if (_byte_order != LTTNG_UST_BYTE_ORDER) \ + __tmp.v = lttng_ust_bswap_16(__tmp.v); \ __ctf_tmp_int64 = (int64_t) __tmp.v; \ break; \ } \ case 4: \ { \ union { _type t; int32_t v; } __tmp = { (_type) (_src) }; \ - if (_byte_order != BYTE_ORDER) \ - __tmp.v = bswap_32(__tmp.v); \ + if (_byte_order != LTTNG_UST_BYTE_ORDER) \ + __tmp.v = lttng_ust_bswap_32(__tmp.v); \ __ctf_tmp_int64 = (int64_t) __tmp.v; \ break; \ } \ case 8: \ { \ union { _type t; int64_t v; } __tmp = { (_type) (_src) }; \ - if (_byte_order != BYTE_ORDER) \ - __tmp.v = bswap_64(__tmp.v); \ + if (_byte_order != LTTNG_UST_BYTE_ORDER) \ + __tmp.v = lttng_ust_bswap_64(__tmp.v); \ __ctf_tmp_int64 = (int64_t) __tmp.v; \ break; \ } \ @@ -551,24 +593,24 @@ size_t lttng_ust__event_get_size__##_provider##___##_name( \ case 2: \ { \ union { _type t; uint16_t v; } __tmp = { (_type) (_src) }; \ - if (_byte_order != BYTE_ORDER) \ - __tmp.v = bswap_16(__tmp.v); \ + if (_byte_order != LTTNG_UST_BYTE_ORDER) \ + __tmp.v = lttng_ust_bswap_16(__tmp.v); \ __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ break; \ } \ case 4: \ { \ union { _type t; uint32_t v; } __tmp = { (_type) (_src) }; \ - if (_byte_order != BYTE_ORDER) \ - __tmp.v = bswap_32(__tmp.v); \ + if (_byte_order != LTTNG_UST_BYTE_ORDER) \ + __tmp.v = lttng_ust_bswap_32(__tmp.v); \ __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ break; \ } \ case 8: \ { \ union { _type t; uint64_t v; } __tmp = { (_type) (_src) }; \ - if (_byte_order != BYTE_ORDER) \ - __tmp.v = bswap_64(__tmp.v); \ + if (_byte_order != LTTNG_UST_BYTE_ORDER) \ + __tmp.v = lttng_ust_bswap_64(__tmp.v); \ __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ break; \ } \ @@ -579,16 +621,16 @@ size_t lttng_ust__event_get_size__##_provider##___##_name( \ } \ __stack_data += sizeof(int64_t); -#undef _ctf_float -#define _ctf_float(_type, _item, _src, _nowrite) \ +#undef lttng_ust__field_float +#define lttng_ust__field_float(_type, _item, _src, _nowrite) \ { \ double __ctf_tmp_double = (double) (_type) (_src); \ memcpy(__stack_data, &__ctf_tmp_double, sizeof(double)); \ __stack_data += sizeof(double); \ } -#undef _ctf_array_encoded -#define _ctf_array_encoded(_type, _item, _src, _byte_order, _length, \ +#undef lttng_ust__field_array_encoded +#define lttng_ust__field_array_encoded(_type, _item, _src, _byte_order, _length, \ _encoding, _nowrite, _elem_type_base) \ { \ unsigned long __ctf_tmp_ulong = (unsigned long) (_length); \ @@ -599,8 +641,8 @@ size_t lttng_ust__event_get_size__##_provider##___##_name( \ __stack_data += sizeof(void *); \ } -#undef _ctf_sequence_encoded -#define _ctf_sequence_encoded(_type, _item, _src, _byte_order, _length_type, \ +#undef lttng_ust__field_sequence_encoded +#define lttng_ust__field_sequence_encoded(_type, _item, _src, _byte_order, _length_type, \ _src_length, _encoding, _nowrite, _elem_type_base) \ { \ unsigned long __ctf_tmp_ulong = (unsigned long) (_src_length); \ @@ -611,8 +653,8 @@ size_t lttng_ust__event_get_size__##_provider##___##_name( \ __stack_data += sizeof(void *); \ } -#undef _ctf_string -#define _ctf_string(_item, _src, _nowrite) \ +#undef lttng_ust__field_string +#define lttng_ust__field_string(_item, _src, _nowrite) \ { \ const void *__ctf_tmp_ptr = \ ((_src) ? (_src) : LTTNG_UST__NULL_STRING); \ @@ -620,14 +662,14 @@ size_t lttng_ust__event_get_size__##_provider##___##_name( \ __stack_data += sizeof(void *); \ } -#undef _ctf_unused -#define _ctf_unused(_src) \ +#undef lttng_ust__field_unused +#define lttng_ust__field_unused(_src) \ if (0) \ (void) (_src); -#undef _ctf_enum -#define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \ - _ctf_integer_ext(_type, _item, _src, BYTE_ORDER, 10, _nowrite) +#undef lttng_ust__field_enum +#define lttng_ust__field_enum(_provider, _name, _type, _item, _src, _nowrite) \ + lttng_ust__field_integer_ext(_type, _item, _src, LTTNG_UST_BYTE_ORDER, 10, _nowrite) #undef LTTNG_UST_TP_ARGS #define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ @@ -661,48 +703,48 @@ void lttng_ust__event_prepare_interpreter_stack__##_provider##___##_name(char *_ #include #include -#undef _ctf_integer_ext -#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _nowrite) \ +#undef lttng_ust__field_integer_ext +#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 _ctf_float -#define _ctf_float(_type, _item, _src, _nowrite) \ +#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 _ctf_array_encoded -#define _ctf_array_encoded(_type, _item, _src, _byte_order, _length, \ +#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 _ctf_sequence_encoded -#define _ctf_sequence_encoded(_type, _item, _src, _byte_order, _length_type, \ +#undef lttng_ust__field_sequence_encoded +#define lttng_ust__field_sequence_encoded(_type, _item, _src, _byte_order, _length_type, \ _src_length, _encoding, _nowrite, _elem_type_base) \ if (0) \ (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 _ctf_string -#define _ctf_string(_item, _src, _nowrite) \ +#undef lttng_ust__field_string +#define lttng_ust__field_string(_item, _src, _nowrite) \ if (0) \ (void) (_src); /* Unused */ -#undef _ctf_unused -#define _ctf_unused(_src) \ +#undef lttng_ust__field_unused +#define lttng_ust__field_unused(_src) \ if (0) \ (void) (_src); /* Unused */ -#undef _ctf_enum -#define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \ - _ctf_integer_ext(_type, _item, _src, BYTE_ORDER, 10, _nowrite) +#undef lttng_ust__field_enum +#define lttng_ust__field_enum(_provider, _name, _type, _item, _src, _nowrite) \ + lttng_ust__field_integer_ext(_type, _item, _src, LTTNG_UST_BYTE_ORDER, 10, _nowrite) #undef LTTNG_UST_TP_ARGS #define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ @@ -718,9 +760,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 @@ -737,30 +779,30 @@ size_t lttng_ust__event_get_align__##_provider##___##_name(LTTNG_UST__TP_ARGS_PR #include #include -#undef _ctf_integer_ext -#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _nowrite) \ +#undef lttng_ust__field_integer_ext +#define lttng_ust__field_integer_ext(_type, _item, _src, _byte_order, _base, _nowrite) \ { \ _type __tmp = (_src); \ __chan->ops->event_write(&__ctx, &__tmp, sizeof(__tmp), lttng_ust_rb_alignof(__tmp));\ } -#undef _ctf_float -#define _ctf_float(_type, _item, _src, _nowrite) \ +#undef lttng_ust__field_float +#define lttng_ust__field_float(_type, _item, _src, _nowrite) \ { \ _type __tmp = (_src); \ __chan->ops->event_write(&__ctx, &__tmp, sizeof(__tmp), lttng_ust_rb_alignof(__tmp));\ } -#undef _ctf_array_encoded -#define _ctf_array_encoded(_type, _item, _src, _byte_order, _length, \ +#undef lttng_ust__field_array_encoded +#define lttng_ust__field_array_encoded(_type, _item, _src, _byte_order, _length, \ _encoding, _nowrite, _elem_type_base) \ if (lttng_ust_string_encoding_##_encoding == lttng_ust_string_encoding_none) \ __chan->ops->event_write(&__ctx, _src, sizeof(_type) * (_length), lttng_ust_rb_alignof(_type)); \ else \ __chan->ops->event_pstrcpy_pad(&__ctx, (const char *) (_src), _length); \ -#undef _ctf_sequence_encoded -#define _ctf_sequence_encoded(_type, _item, _src, _byte_order, _length_type, \ +#undef lttng_ust__field_sequence_encoded +#define lttng_ust__field_sequence_encoded(_type, _item, _src, _byte_order, _length_type, \ _src_length, _encoding, _nowrite, _elem_type_base) \ { \ _length_type __tmpl = __stackvar.__dynamic_len[__dynamic_len_idx]; \ @@ -768,29 +810,29 @@ size_t lttng_ust__event_get_align__##_provider##___##_name(LTTNG_UST__TP_ARGS_PR } \ if (lttng_ust_string_encoding_##_encoding == lttng_ust_string_encoding_none) \ __chan->ops->event_write(&__ctx, _src, \ - sizeof(_type) * __get_dynamic_len(dest), lttng_ust_rb_alignof(_type)); \ + sizeof(_type) * lttng_ust__get_dynamic_len(dest), lttng_ust_rb_alignof(_type)); \ else \ - __chan->ops->event_pstrcpy_pad(&__ctx, (const char *) (_src), __get_dynamic_len(dest)); \ + __chan->ops->event_pstrcpy_pad(&__ctx, (const char *) (_src), lttng_ust__get_dynamic_len(dest)); \ -#undef _ctf_string -#define _ctf_string(_item, _src, _nowrite) \ +#undef lttng_ust__field_string +#define lttng_ust__field_string(_item, _src, _nowrite) \ { \ const char *__ctf_tmp_string = \ ((_src) ? (_src) : LTTNG_UST__NULL_STRING); \ __chan->ops->event_strcpy(&__ctx, __ctf_tmp_string, \ - __get_dynamic_len(dest)); \ + lttng_ust__get_dynamic_len(dest)); \ } -#undef _ctf_unused -#define _ctf_unused(_src) +#undef lttng_ust__field_unused +#define lttng_ust__field_unused(_src) -#undef _ctf_enum -#define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \ - _ctf_integer_ext(_type, _item, _src, BYTE_ORDER, 10, _nowrite) +#undef lttng_ust__field_enum +#define lttng_ust__field_enum(_provider, _name, _type, _item, _src, _nowrite) \ + lttng_ust__field_integer_ext(_type, _item, _src, LTTNG_UST_BYTE_ORDER, 10, _nowrite) /* Beware: this get len actually consumes the len value */ -#undef __get_dynamic_len -#define __get_dynamic_len(field) __stackvar.__dynamic_len[__dynamic_len_idx++] +#undef lttng_ust__get_dynamic_len +#define lttng_ust__get_dynamic_len(field) __stackvar.__dynamic_len[__dynamic_len_idx++] #undef LTTNG_UST_TP_ARGS #define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ @@ -838,16 +880,17 @@ size_t lttng_ust__event_get_align__##_provider##___##_name(LTTNG_UST__TP_ARGS_PR * Perform UNION (||) of filter runtime list. */ #undef LTTNG_UST__TRACEPOINT_EVENT_CLASS -#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ +#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)) \ +void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PROTO(_args)) \ lttng_ust_notrace; \ static \ -void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PROTO(_args)) \ +void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PROTO(_args)) \ { \ struct lttng_ust_event_common *__event = (struct lttng_ust_event_common *) __tp_data; \ size_t __dynamic_len_idx = 0; \ const size_t __num_fields = LTTNG_UST__TP_ARRAY_SIZE(lttng_ust__event_fields___##_provider##___##_name) - 1; \ + struct lttng_ust_probe_ctx __probe_ctx; \ union { \ size_t __dynamic_len[__num_fields]; \ char __interpreter_stack_data[2 * sizeof(unsigned long) * __num_fields]; \ @@ -860,11 +903,11 @@ 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)) \ + if (!LTTNG_UST__TP_SESSION_CHECK(session, __chan_common->session)) \ return; \ if (caa_unlikely(!CMM_ACCESS_ONCE(__chan_common->session->active))) \ return; \ @@ -877,29 +920,31 @@ void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PRO } \ if (caa_unlikely(!CMM_ACCESS_ONCE(__event->enabled))) \ return; \ - if (caa_unlikely(!TP_RCU_LINK_TEST())) \ + if (caa_unlikely(!LTTNG_UST_TP_RCU_LINK_TEST())) \ return; \ - if (caa_unlikely(CMM_ACCESS_ONCE(__event->eval_filter))) { \ + __probe_ctx.struct_size = sizeof(struct lttng_ust_probe_ctx); \ + __probe_ctx.ip = LTTNG_UST__TP_IP_PARAM(LTTNG_UST_TP_IP_PARAM); \ + if (caa_unlikely(CMM_ACCESS_ONCE(__event->eval_filter))) { \ lttng_ust__event_prepare_interpreter_stack__##_provider##___##_name(__stackvar.__interpreter_stack_data, \ - LTTNG_UST__TP_ARGS_DATA_VAR(_args)); \ + LTTNG_UST__TP_ARGS_DATA_VAR(_args)); \ __interpreter_stack_prepared = true; \ - if (caa_likely(__event->run_filter(__event, \ - __stackvar.__interpreter_stack_data, NULL) != LTTNG_UST_EVENT_FILTER_ACCEPT)) \ + if (caa_likely(__event->run_filter(__event, \ + __stackvar.__interpreter_stack_data, &__probe_ctx, NULL) != LTTNG_UST_EVENT_FILTER_ACCEPT)) \ return; \ } \ 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; \ - struct lttng_ust_ring_buffer_ctx __ctx; \ + 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, \ - LTTNG_UST__TP_IP_PARAM(LTTNG_UST_TP_IP_PARAM)); \ + __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) \ return; \ @@ -909,18 +954,19 @@ 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__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); \ break; \ } \ @@ -929,7 +975,7 @@ void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PRO #include LTTNG_UST_TRACEPOINT_INCLUDE -#undef __get_dynamic_len +#undef lttng_ust__get_dynamic_len /* * Stage 5.1 of tracepoint event generation. @@ -943,16 +989,16 @@ void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PRO #undef LTTNG_UST_TP_ARGS #define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ -#define _TP_EXTRACT_STRING2(...) #__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[] = \ - _TP_EXTRACT_STRING2(_args); + LTTNG_UST__TP_EXTRACT_STRING2(_args); #include LTTNG_UST_TRACEPOINT_INCLUDE -#undef _TP_EXTRACT_STRING2 +#undef LTTNG_UST__TP_EXTRACT_STRING2 /* * Stage 6 of tracepoint event generation. @@ -1029,7 +1075,7 @@ LTTNG_UST_TP_EXTERN_C const char * const _model_emf_uri___##__provider##___##__n * symbol table. */ -extern const struct lttng_ust_probe_desc LTTNG_UST__TP_COMBINE_TOKENS(__probe_desc___, LTTNG_UST_TRACEPOINT_PROVIDER) +extern const struct lttng_ust_probe_desc LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__probe_desc___, LTTNG_UST_TRACEPOINT_PROVIDER) __attribute__((visibility("hidden"))); /* @@ -1060,7 +1106,7 @@ static const char * \ static const struct lttng_ust_event_desc lttng_ust__event_desc___##_provider##_##_name = { \ .struct_size = sizeof(struct lttng_ust_event_desc), \ .event_name = #_name, \ - .probe_desc = &__probe_desc___##_provider, \ + .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, \ @@ -1096,7 +1142,7 @@ static const struct lttng_ust_event_desc * const LTTNG_UST__TP_COMBINE_TOKENS(lt * Create a toplevel descriptor for the whole probe. */ -const struct lttng_ust_probe_desc LTTNG_UST__TP_COMBINE_TOKENS(__probe_desc___, LTTNG_UST_TRACEPOINT_PROVIDER) = { +const struct lttng_ust_probe_desc LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__probe_desc___, LTTNG_UST_TRACEPOINT_PROVIDER) = { .struct_size = sizeof(struct lttng_ust_probe_desc), .provider_name = lttng_ust__tp_stringify(LTTNG_UST_TRACEPOINT_PROVIDER), .event_desc = LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__event_desc___, LTTNG_UST_TRACEPOINT_PROVIDER), @@ -1105,8 +1151,8 @@ const struct lttng_ust_probe_desc LTTNG_UST__TP_COMBINE_TOKENS(__probe_desc___, .minor = LTTNG_UST_PROVIDER_MINOR, }; -static int LTTNG_UST__TP_COMBINE_TOKENS(__probe_register_refcount___, LTTNG_UST_TRACEPOINT_PROVIDER); -static struct lttng_ust_registered_probe *LTTNG_UST__TP_COMBINE_TOKENS(__lttng_ust_probe_register_cookie___, LTTNG_UST_TRACEPOINT_PROVIDER); +static int LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__probe_register_refcount___, LTTNG_UST_TRACEPOINT_PROVIDER); +static struct lttng_ust_registered_probe *LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__probe_register_cookie___, LTTNG_UST_TRACEPOINT_PROVIDER); /* * Stage 9 of tracepoint event generation. @@ -1122,14 +1168,14 @@ static struct lttng_ust_registered_probe *LTTNG_UST__TP_COMBINE_TOKENS(__lttng_u /* Reset all macros within LTTNG_UST_TRACEPOINT_EVENT */ #include static void -LTTNG_UST__TP_COMBINE_TOKENS(__lttng_ust_events_init__, LTTNG_UST_TRACEPOINT_PROVIDER)(void) +LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__events_init__, LTTNG_UST_TRACEPOINT_PROVIDER)(void) lttng_ust_notrace __attribute__((constructor)); static void -LTTNG_UST__TP_COMBINE_TOKENS(__lttng_ust_events_init__, LTTNG_UST_TRACEPOINT_PROVIDER)(void) +LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__events_init__, LTTNG_UST_TRACEPOINT_PROVIDER)(void) { struct lttng_ust_registered_probe *reg_probe; - if (LTTNG_UST__TP_COMBINE_TOKENS(__probe_register_refcount___, + if (LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__probe_register_refcount___, LTTNG_UST_TRACEPOINT_PROVIDER)++) { return; } @@ -1142,28 +1188,44 @@ LTTNG_UST__TP_COMBINE_TOKENS(__lttng_ust_events_init__, LTTNG_UST_TRACEPOINT_PRO * error will appear. */ LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust_tracepoint_provider_check_, LTTNG_UST_TRACEPOINT_PROVIDER)(); - assert(!LTTNG_UST__TP_COMBINE_TOKENS(__lttng_ust_probe_register_cookie___, LTTNG_UST_TRACEPOINT_PROVIDER)); - reg_probe = lttng_ust_probe_register(<TNG_UST__TP_COMBINE_TOKENS(__probe_desc___, LTTNG_UST_TRACEPOINT_PROVIDER)); + assert(!LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__probe_register_cookie___, LTTNG_UST_TRACEPOINT_PROVIDER)); + reg_probe = lttng_ust_probe_register(<TNG_UST__TP_COMBINE_TOKENS(lttng_ust__probe_desc___, LTTNG_UST_TRACEPOINT_PROVIDER)); if (!reg_probe) { fprintf(stderr, "LTTng-UST: Error while registering tracepoint probe.\n"); abort(); } - LTTNG_UST__TP_COMBINE_TOKENS(__lttng_ust_probe_register_cookie___, LTTNG_UST_TRACEPOINT_PROVIDER) = reg_probe; + LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__probe_register_cookie___, LTTNG_UST_TRACEPOINT_PROVIDER) = reg_probe; } static void -LTTNG_UST__TP_COMBINE_TOKENS(__lttng_ust_events_exit__, LTTNG_UST_TRACEPOINT_PROVIDER)(void) +LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__events_exit__, LTTNG_UST_TRACEPOINT_PROVIDER)(void) lttng_ust_notrace __attribute__((destructor)); static void -LTTNG_UST__TP_COMBINE_TOKENS(__lttng_ust_events_exit__, LTTNG_UST_TRACEPOINT_PROVIDER)(void) +LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__events_exit__, LTTNG_UST_TRACEPOINT_PROVIDER)(void) { - if (--LTTNG_UST__TP_COMBINE_TOKENS(__probe_register_refcount___, + if (--LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__probe_register_refcount___, LTTNG_UST_TRACEPOINT_PROVIDER)) { return; } - lttng_ust_probe_unregister(LTTNG_UST__TP_COMBINE_TOKENS(__lttng_ust_probe_register_cookie___, LTTNG_UST_TRACEPOINT_PROVIDER)); - LTTNG_UST__TP_COMBINE_TOKENS(__lttng_ust_probe_register_cookie___, LTTNG_UST_TRACEPOINT_PROVIDER) = NULL; + lttng_ust_probe_unregister(LTTNG_UST__TP_COMBINE_TOKENS(lttng_ust__probe_register_cookie___, LTTNG_UST_TRACEPOINT_PROVIDER)); + 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;