Add userspace time namespace context
[lttng-ust.git] / include / lttng / ust-events.h
index 905dbb6a661fe66c82ae04c03272eab8ded24b90..3fee93c435038acf3150759aa7d5c964bd38e448 100644 (file)
@@ -56,7 +56,7 @@ extern "C" {
  * library, but the opposite is rejected: a newer tracepoint provider is
  * rejected by an older lttng-ust library.
  */
-#define LTTNG_UST_PROVIDER_MAJOR       1
+#define LTTNG_UST_PROVIDER_MAJOR       2
 #define LTTNG_UST_PROVIDER_MINOR       0
 
 struct lttng_channel;
@@ -88,13 +88,17 @@ enum lttng_client_types {
 /* Update the astract_types name table in lttng-types.c along with this enum */
 enum lttng_abstract_types {
        atype_integer,
-       atype_enum,
-       atype_array,
-       atype_sequence,
+       atype_enum,     /* legacy */
+       atype_array,    /* legacy */
+       atype_sequence, /* legacy */
        atype_string,
        atype_float,
        atype_dynamic,
-       atype_struct,
+       atype_struct,   /* legacy */
+       atype_enum_nestable,
+       atype_array_nestable,
+       atype_sequence_nestable,
+       atype_struct_nestable,
        NR_ABSTRACT_TYPES,
 };
 
@@ -132,17 +136,14 @@ struct lttng_enum_entry {
          .atype = atype_integer,                               \
          .u =                                                  \
                {                                               \
-                 .basic =                                      \
+                 .integer =                                    \
                        {                                       \
-                         .integer =                            \
-                               {                               \
-                                 .size = sizeof(_type) * CHAR_BIT,             \
-                                 .alignment = lttng_alignof(_type) * CHAR_BIT, \
-                                 .signedness = lttng_is_signed_type(_type),    \
-                                 .reverse_byte_order = _byte_order != BYTE_ORDER, \
-                                 .base = _base,                                \
-                                 .encoding = lttng_encode_##_encoding,         \
-                               }                               \
+                         .size = sizeof(_type) * CHAR_BIT,     \
+                         .alignment = lttng_alignof(_type) * CHAR_BIT, \
+                         .signedness = lttng_is_signed_type(_type), \
+                         .reverse_byte_order = _byte_order != BYTE_ORDER, \
+                         .base = _base,                        \
+                         .encoding = lttng_encode_##_encoding, \
                        }                                       \
                },                                              \
        }                                                       \
@@ -172,18 +173,15 @@ struct lttng_integer_type {
          .atype = atype_float,                                 \
          .u =                                                  \
                {                                               \
-                 .basic =                                      \
+                 ._float =                                     \
                        {                                       \
-                         ._float =                             \
-                               {                               \
-                                 .exp_dig = sizeof(_type) * CHAR_BIT           \
-                                                 - _float_mant_dig(_type),     \
-                                 .mant_dig = _float_mant_dig(_type),           \
-                                 .alignment = lttng_alignof(_type) * CHAR_BIT, \
-                                 .reverse_byte_order = BYTE_ORDER != FLOAT_WORD_ORDER, \
-                               }                               \
+                         .exp_dig = sizeof(_type) * CHAR_BIT   \
+                                         - _float_mant_dig(_type), \
+                         .mant_dig = _float_mant_dig(_type),   \
+                         .alignment = lttng_alignof(_type) * CHAR_BIT, \
+                         .reverse_byte_order = BYTE_ORDER != FLOAT_WORD_ORDER, \
                        }                                       \
-               },                                              \
+               }                                               \
        }                                                       \
 
 #define LTTNG_UST_FLOAT_TYPE_PADDING   24
@@ -195,20 +193,22 @@ struct lttng_float_type {
        char padding[LTTNG_UST_FLOAT_TYPE_PADDING];
 };
 
+/* legacy */
 #define LTTNG_UST_BASIC_TYPE_PADDING   128
 union _lttng_basic_type {
-       struct lttng_integer_type integer;
+       struct lttng_integer_type integer;      /* legacy */
        struct {
                const struct lttng_enum_desc *desc;     /* Enumeration mapping */
                struct lttng_integer_type container_type;
-       } enumeration;
+       } enumeration;                          /* legacy */
        struct {
                enum lttng_string_encodings encoding;
-       } string;
-       struct lttng_float_type _float;
+       } string;                               /* legacy */
+       struct lttng_float_type _float;         /* legacy */
        char padding[LTTNG_UST_BASIC_TYPE_PADDING];
 };
 
+/* legacy */
 struct lttng_basic_type {
        enum lttng_abstract_types atype;
        union {
@@ -220,19 +220,48 @@ struct lttng_basic_type {
 struct lttng_type {
        enum lttng_abstract_types atype;
        union {
-               union _lttng_basic_type basic;
+               /* provider ABI 2.0 */
+               struct lttng_integer_type integer;
+               struct lttng_float_type _float;
+               struct {
+                       enum lttng_string_encodings encoding;
+               } string;
+               struct {
+                       const struct lttng_enum_desc *desc;     /* Enumeration mapping */
+                       struct lttng_type *container_type;
+               } enum_nestable;
                struct {
-                       struct lttng_basic_type elem_type;
-                       unsigned int length;            /* num. elems. */
-               } array;
+                       const struct lttng_type *elem_type;
+                       unsigned int length;                    /* Num. elems. */
+                       unsigned int alignment;
+               } array_nestable;
                struct {
-                       struct lttng_basic_type length_type;
-                       struct lttng_basic_type elem_type;
-               } sequence;
+                       const char *length_name;                /* Length field name. */
+                       const struct lttng_type *elem_type;
+                       unsigned int alignment;                 /* Alignment before elements. */
+               } sequence_nestable;
                struct {
-                       uint32_t nr_fields;
-                       struct lttng_event_field *fields;       /* Array of fields. */
-               } _struct;
+                       unsigned int nr_fields;
+                       const struct lttng_event_field *fields; /* Array of fields. */
+                       unsigned int alignment;
+               } struct_nestable;
+
+               union {
+                       /* legacy provider ABI 1.0 */
+                       union _lttng_basic_type basic;  /* legacy */
+                       struct {
+                               struct lttng_basic_type elem_type;
+                               unsigned int length;            /* Num. elems. */
+                       } array;                        /* legacy */
+                       struct {
+                               struct lttng_basic_type length_type;
+                               struct lttng_basic_type elem_type;
+                       } sequence;                     /* legacy */
+                       struct {
+                               unsigned int nr_fields;
+                               struct lttng_event_field *fields;       /* Array of fields. */
+                       } _struct;                      /* legacy */
+               } legacy;
                char padding[LTTNG_UST_TYPE_PADDING];
        } u;
 };
@@ -258,7 +287,12 @@ struct lttng_event_field {
        const char *name;
        struct lttng_type type;
        unsigned int nowrite;   /* do not write into trace */
-       char padding[LTTNG_UST_EVENT_FIELD_PADDING];
+       union {
+               struct {
+                       unsigned int nofilter:1;        /* do not consider for filter */
+               } ext;
+               char padding[LTTNG_UST_EVENT_FIELD_PADDING];
+       } u;
 };
 
 enum lttng_ust_dynamic_type {
@@ -366,6 +400,10 @@ struct lttng_enabler {
 
        struct lttng_ust_event event_param;
        struct lttng_channel *chan;
+       /*
+        * Unused, but kept around to make it explicit that the tracer can do
+        * it.
+        */
        struct lttng_ctx *ctx;
        unsigned int enabled:1;
 };
@@ -421,6 +459,12 @@ enum lttng_filter_ret {
        /* Other bits are kept for future use. */
 };
 
+/*
+ * This structure is used in the probes. More specifically, the `filter` and
+ * `node` fields are explicity used in the probes. When modifying this
+ * structure we must not change the layout of these two fields as it is
+ * considered ABI.
+ */
 struct lttng_bytecode_runtime {
        /* Associated bytecode */
        struct lttng_ust_filter_bytecode_node *bc;
@@ -428,7 +472,6 @@ struct lttng_bytecode_runtime {
        int link_failed;
        struct cds_list_head node;      /* list of bytecode runtime in event */
        struct lttng_session *session;
-       struct lttng_event *event;
 };
 
 /*
@@ -500,6 +543,13 @@ struct lttng_channel_ops {
        void (*channel_destroy)(struct lttng_channel *chan);
        union {
                void *_deprecated1;
+               /*
+                * has_strcpy is needed by probe providers version 1.0 to
+                * dynamically detect whether the LTTng-UST tracepoint
+                * provider ABI implements event_strcpy. Starting from
+                * probe providers version 2.0, the check is not needed,
+                * but backward compatibility is provided for older versions.
+                */
                unsigned long has_strcpy:1;             /* ABI has strcpy */
        } u;
        void *_deprecated2;
@@ -685,6 +735,7 @@ int lttng_add_ipc_ns_to_ctx(struct lttng_ctx **ctx);
 int lttng_add_mnt_ns_to_ctx(struct lttng_ctx **ctx);
 int lttng_add_net_ns_to_ctx(struct lttng_ctx **ctx);
 int lttng_add_pid_ns_to_ctx(struct lttng_ctx **ctx);
+int lttng_add_time_ns_to_ctx(struct lttng_ctx **ctx);
 int lttng_add_user_ns_to_ctx(struct lttng_ctx **ctx);
 int lttng_add_uts_ns_to_ctx(struct lttng_ctx **ctx);
 int lttng_add_vuid_to_ctx(struct lttng_ctx **ctx);
@@ -701,6 +752,7 @@ void lttng_context_ipc_ns_reset(void);
 void lttng_context_mnt_ns_reset(void);
 void lttng_context_net_ns_reset(void);
 void lttng_context_pid_ns_reset(void);
+void lttng_context_time_ns_reset(void);
 void lttng_context_user_ns_reset(void);
 void lttng_context_uts_ns_reset(void);
 void lttng_context_vuid_reset(void);
This page took 0.027315 seconds and 4 git commands to generate.