Tracepoint: add ctf array for network byte order integers
[lttng-ust.git] / include / lttng / ust-tracepoint-event.h
index 26ca1d57c53220196ce3ecf1e74593a139a7a626..64c453578410ef17d6e62fd643e366a34a49e686 100644 (file)
@@ -28,6 +28,7 @@
 #include <lttng/ringbuffer-config.h>
 #include <lttng/ust-compiler.h>
 #include <lttng/tracepoint.h>
+#include <byteswap.h>
 #include <string.h>
 
 #define __LTTNG_UST_NULL_STRING        "(null)"
@@ -129,12 +130,36 @@ static const char                                                 \
 /* Enumeration entry (single value) */
 #undef ctf_enum_value
 #define ctf_enum_value(_string, _value)                                        \
-       { _value, _value, _string },
+       {                                                               \
+               .start = {                                              \
+                       .signedness = lttng_is_signed_type(__typeof__(_value)), \
+                       .value = lttng_is_signed_type(__typeof__(_value)) ? \
+                               (long long) (_value) : (_value),        \
+               },                                                      \
+               .end = {                                                \
+                       .signedness = lttng_is_signed_type(__typeof__(_value)), \
+                       .value = lttng_is_signed_type(__typeof__(_value)) ? \
+                               (long long) (_value) : (_value),        \
+               },                                                      \
+               .string = (_string),                                    \
+       },
 
 /* Enumeration entry (range) */
 #undef ctf_enum_range
 #define ctf_enum_range(_string, _range_start, _range_end)              \
-       { _range_start, _range_end, _string },
+       {                                                               \
+               .start = {                                              \
+                       .signedness = lttng_is_signed_type(__typeof__(_range_start)), \
+                       .value = lttng_is_signed_type(__typeof__(_range_start)) ? \
+                               (long long) (_range_start) : (_range_start), \
+               },                                                      \
+               .end = {                                                \
+                       .signedness = lttng_is_signed_type(__typeof__(_range_end)), \
+                       .value = lttng_is_signed_type(__typeof__(_range_end)) ? \
+                               (long long) (_range_end) : (_range_end), \
+               },                                                      \
+               .string = (_string),                                    \
+       },
 
 #undef TP_ENUM_VALUES
 #define TP_ENUM_VALUES(...)                                            \
@@ -177,7 +202,9 @@ static const char                                                   \
        },
 
 #undef _ctf_array_encoded
-#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _nowrite) \
+#define _ctf_array_encoded(_type, _item, _src, _byte_order,    \
+                       _length, _encoding, _nowrite,           \
+                       _elem_type_base)                        \
        {                                                       \
          .name = #_item,                                       \
          .type =                                               \
@@ -187,7 +214,7 @@ static const char                                                   \
                        {                                       \
                          .array =                              \
                                {                               \
-                                 .elem_type = __type_integer(_type, BYTE_ORDER, 10, _encoding), \
+                                 .elem_type = __type_integer(_type, _byte_order, _elem_type_base, _encoding), \
                                  .length = _length,            \
                                }                               \
                        }                                       \
@@ -196,7 +223,7 @@ static const char                                                   \
        },
 
 #undef _ctf_sequence_encoded
-#define _ctf_sequence_encoded(_type, _item, _src,              \
+#define _ctf_sequence_encoded(_type, _item, _src, _byte_order, \
                        _length_type, _src_length, _encoding, _nowrite, \
                        _elem_type_base)                        \
        {                                                       \
@@ -209,7 +236,7 @@ static const char                                                   \
                          .sequence =                           \
                                {                               \
                                  .length_type = __type_integer(_length_type, BYTE_ORDER, 10, none), \
-                                 .elem_type = __type_integer(_type, BYTE_ORDER, _elem_type_base, _encoding), \
+                                 .elem_type = __type_integer(_type, _byte_order, _elem_type_base, _encoding), \
                                },                              \
                        },                                      \
                },                                              \
@@ -314,12 +341,13 @@ static void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args));
        __event_len += sizeof(_type);
 
 #undef _ctf_array_encoded
-#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _nowrite)     \
+#define _ctf_array_encoded(_type, _item, _src, _byte_order, _length, _encoding,         \
+                       _nowrite, _elem_type_base)                               \
        __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); \
        __event_len += sizeof(_type) * (_length);
 
 #undef _ctf_sequence_encoded
-#define _ctf_sequence_encoded(_type, _item, _src, _length_type,                         \
+#define _ctf_sequence_encoded(_type, _item, _src, _byte_order, _length_type,    \
                        _src_length, _encoding, _nowrite, _elem_type_base)       \
        __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_length_type));   \
        __event_len += sizeof(_length_type);                                   \
@@ -387,18 +415,24 @@ size_t __event_get_size__##_provider##___##_name(size_t *__dynamic_len, _TP_ARGS
                case 2:                                                        \
                {                                                              \
                        union { _type t; int16_t v; } __tmp = { (_type) (_src) }; \
+                       if (_byte_order != BYTE_ORDER)                         \
+                               __tmp.v = 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);                   \
                        __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);                   \
                        __ctf_tmp_int64 = (int64_t) __tmp.v;                   \
                        break;                                                 \
                }                                                              \
@@ -418,18 +452,24 @@ size_t __event_get_size__##_provider##___##_name(size_t *__dynamic_len, _TP_ARGS
                case 2:                                                        \
                {                                                              \
                        union { _type t; uint16_t v; } __tmp = { (_type) (_src) }; \
+                       if (_byte_order != BYTE_ORDER)                         \
+                               __tmp.v = 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);                   \
                        __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);                   \
                        __ctf_tmp_uint64 = (uint64_t) __tmp.v;                 \
                        break;                                                 \
                }                                                              \
@@ -449,7 +489,8 @@ size_t __event_get_size__##_provider##___##_name(size_t *__dynamic_len, _TP_ARGS
        }
 
 #undef _ctf_array_encoded
-#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _nowrite)   \
+#define _ctf_array_encoded(_type, _item, _src, _byte_order, _length,          \
+                       _encoding, _nowrite, _elem_type_base)                  \
        {                                                                      \
                unsigned long __ctf_tmp_ulong = (unsigned long) (_length);     \
                const void *__ctf_tmp_ptr = (_src);                            \
@@ -460,7 +501,7 @@ size_t __event_get_size__##_provider##___##_name(size_t *__dynamic_len, _TP_ARGS
        }
 
 #undef _ctf_sequence_encoded
-#define _ctf_sequence_encoded(_type, _item, _src, _length_type,                       \
+#define _ctf_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); \
@@ -520,11 +561,12 @@ void __event_prepare_filter_stack__##_provider##___##_name(char *__stack_data,\
        __event_align = _tp_max_t(size_t, __event_align, lttng_alignof(_type));
 
 #undef _ctf_array_encoded
-#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _nowrite)   \
+#define _ctf_array_encoded(_type, _item, _src, _byte_order, _length,          \
+                       _encoding, _nowrite, _elem_type_base)                  \
        __event_align = _tp_max_t(size_t, __event_align, lttng_alignof(_type));
 
 #undef _ctf_sequence_encoded
-#define _ctf_sequence_encoded(_type, _item, _src, _length_type,                       \
+#define _ctf_sequence_encoded(_type, _item, _src, _byte_order, _length_type,   \
                        _src_length, _encoding, _nowrite, _elem_type_base)     \
        __event_align = _tp_max_t(size_t, __event_align, lttng_alignof(_length_type));    \
        __event_align = _tp_max_t(size_t, __event_align, lttng_alignof(_type));
@@ -585,12 +627,13 @@ size_t __event_get_align__##_provider##___##_name(_TP_ARGS_PROTO(_args))      \
        }
 
 #undef _ctf_array_encoded
-#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _nowrite) \
+#define _ctf_array_encoded(_type, _item, _src, _byte_order, _length,   \
+                       _encoding, _nowrite, _elem_type_base)           \
        lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type));        \
        __chan->ops->event_write(&__ctx, _src, sizeof(_type) * (_length));
 
 #undef _ctf_sequence_encoded
-#define _ctf_sequence_encoded(_type, _item, _src, _length_type,                \
+#define _ctf_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]; \
This page took 0.027765 seconds and 4 git commands to generate.