sequence type: use previous field for length if length_name is NULL
[lttng-ust.git] / include / lttng / ust-events.h
index 2b035d8fa457f2be335cdaa78b157184266070bf..6920306846f2bc273d883b027403d97281492adb 100644 (file)
@@ -125,7 +125,7 @@ struct lttng_ust_type_integer {
                .size = sizeof(_type) * CHAR_BIT,                       \
                .alignment = lttng_ust_rb_alignof(_type) * CHAR_BIT,    \
                .signedness = lttng_ust_is_signed_type(_type),          \
-               .reverse_byte_order = _byte_order != BYTE_ORDER,        \
+               .reverse_byte_order = _byte_order != LTTNG_UST_BYTE_ORDER,      \
                .base = _base,                                          \
        }))
 
@@ -157,7 +157,7 @@ struct lttng_ust_type_float {
                        - lttng_ust_float_mant_dig(_type),              \
                .mant_dig = lttng_ust_float_mant_dig(_type),            \
                .alignment = lttng_ust_rb_alignof(_type) * CHAR_BIT,    \
-               .reverse_byte_order = BYTE_ORDER != FLOAT_WORD_ORDER,   \
+               .reverse_byte_order = LTTNG_UST_BYTE_ORDER != LTTNG_UST_FLOAT_WORD_ORDER,       \
        }))
 
 
@@ -193,7 +193,7 @@ struct lttng_ust_type_array {
 struct lttng_ust_type_sequence {
        struct lttng_ust_type_common parent;
        uint32_t struct_size;
-       const char *length_name;        /* Length field name. */
+       const char *length_name;        /* Length field name. If NULL, use previous field. */
        const struct lttng_ust_type_common *elem_type;
        unsigned int alignment;         /* Minimum alignment before elements. */
        enum lttng_ust_string_encoding encoding;
@@ -203,8 +203,8 @@ struct lttng_ust_type_struct {
        struct lttng_ust_type_common parent;
        uint32_t struct_size;
        unsigned int nr_fields;
-       const struct lttng_ust_event_field **fields;    /* Array of pointers to fields. */
-       unsigned int alignment;         /* Minimum alignment for this type. */
+       const struct lttng_ust_event_field * const *fields;     /* Array of pointers to fields. */
+       unsigned int alignment;                                 /* Minimum alignment for this type. */
 };
 
 /*
@@ -223,7 +223,7 @@ struct lttng_ust_enum_desc {
        uint32_t struct_size;
 
        const char *name;
-       const struct lttng_ust_enum_entry **entries;
+       const struct lttng_ust_enum_entry * const *entries;
        unsigned int nr_entries;
 
        /* End of base ABI. Fields below should be used after checking struct_size. */
@@ -268,7 +268,7 @@ struct lttng_ust_event_desc {
        const char *event_name;
        const struct lttng_ust_probe_desc *probe_desc;
        void (*probe_callback)(void);
-       const struct lttng_ust_event_field **fields;    /* event payload */
+       const struct lttng_ust_event_field * const *fields;     /* event payload */
        unsigned int nr_fields;
        const int **loglevel;
        const char *signature;                          /* Argument types/names received */
@@ -290,7 +290,7 @@ struct lttng_ust_probe_desc {
        uint32_t struct_size;                   /* Size of this structure. */
 
        const char *provider_name;
-       const struct lttng_ust_event_desc **event_desc;
+       const struct lttng_ust_event_desc * const *event_desc;
        unsigned int nr_events;
        uint32_t major;
        uint32_t minor;
@@ -300,6 +300,26 @@ struct lttng_ust_probe_desc {
 
 /* Data structures used by the tracer. */
 
+/*
+ * IMPORTANT: this structure is part of the ABI between the probe and
+ * UST. Fields need to be only added at the end, never reordered, never
+ * removed.
+ *
+ * The field @struct_size should be used to determine the size of the
+ * structure. It should be queried before using additional fields added
+ * at the end of the structure.
+ *
+ * The probe_ctx is not const because it may be extended to add future
+ * fields which could be modified by callbacks.
+ */
+struct lttng_ust_probe_ctx {
+       uint32_t struct_size;                   /* Size of this structure. */
+
+       void *ip;                               /* caller ip address */
+
+       /* End of base ABI. Fields below should be used after checking struct_size. */
+};
+
 /*
  * lttng_event structure is referred to by the tracing fast path. It
  * must be kept small.
@@ -351,6 +371,7 @@ struct lttng_ust_event_common {
        int eval_filter;                                /* Need to evaluate filters */
        int (*run_filter)(const struct lttng_ust_event_common *event,
                const char *stack_data,
+               struct lttng_ust_probe_ctx *probe_ctx,
                void *filter_ctx);
 
        /* End of base ABI. Fields below should be used after checking struct_size. */
@@ -395,7 +416,6 @@ struct lttng_ust_event_recorder {
 struct lttng_ust_notification_ctx {
        uint32_t struct_size;           /* Size of this structure. */
        int eval_capture;               /* Capture evaluation available. */
-
        /* End of base ABI. Fields below should be used after checking struct_size. */
 };
 
@@ -424,6 +444,7 @@ struct lttng_ust_event_notifier {
        int eval_capture;                               /* Need to evaluate capture */
        void (*notification_send)(const struct lttng_ust_event_notifier *event_notifier,
                const char *stack_data,
+               struct lttng_ust_probe_ctx *probe_ctx,
                struct lttng_ust_notification_ctx *notif_ctx);
 
        /* End of base ABI. Fields below should be used after checking struct_size. */
This page took 0.023965 seconds and 4 git commands to generate.