Refactoring: bytecode interpreter ABI
[lttng-ust.git] / include / lttng / ust-events.h
index 107c746ef6d2426367e50bd787bcd3368971ed63..58a0baf4a5c92713d4658c58589010c828128f75 100644 (file)
 #include <urcu/ref.h>
 #include <pthread.h>
 
-#ifndef LTTNG_PACKED
-#error "LTTNG_PACKED should be defined"
-#endif
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -40,7 +36,7 @@ extern "C" {
 #define LTTNG_UST_PROVIDER_MAJOR       2
 #define LTTNG_UST_PROVIDER_MINOR       0
 
-struct lttng_channel;
+struct lttng_ust_channel_buffer;
 struct lttng_ust_session;
 struct lttng_ust_lib_ring_buffer_ctx;
 struct lttng_ust_event_field;
@@ -301,17 +297,38 @@ struct lttng_ust_probe_desc {
 /* Data structures used by the tracer. */
 
 /*
- * Bytecode interpreter return value masks.
+ * Bytecode interpreter return value.
  */
 enum lttng_ust_bytecode_interpreter_ret {
-       LTTNG_UST_BYTECODE_INTERPRETER_DISCARD = 0,
-       LTTNG_UST_BYTECODE_INTERPRETER_RECORD_FLAG = (1ULL << 0),
-       /* Other bits are kept for future use. */
+       LTTNG_UST_BYTECODE_INTERPRETER_ERROR = -1,
+       LTTNG_UST_BYTECODE_INTERPRETER_OK = 0,
 };
 
 struct lttng_interpreter_output;
 struct lttng_ust_bytecode_runtime_private;
 
+enum lttng_ust_bytecode_filter_result {
+       LTTNG_UST_BYTECODE_FILTER_ACCEPT = 0,
+       LTTNG_UST_BYTECODE_FILTER_REJECT = 1,
+};
+
+/*
+ * 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.
+ */
+struct lttng_ust_bytecode_filter_ctx {
+       uint32_t struct_size;                   /* Size of this structure. */
+
+       enum lttng_ust_bytecode_filter_result result;
+
+       /* End of base ABI. Fields below should be used after checking struct_size. */
+};
+
 /*
  * 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
@@ -325,14 +342,9 @@ struct lttng_ust_bytecode_runtime {
        uint32_t struct_size;                   /* Size of this structure. */
 
        struct lttng_ust_bytecode_runtime_private *priv;
-       /* Associated bytecode */
-       union {
-               uint64_t (*filter)(void *interpreter_data,
-                               const char *interpreter_stack_data);
-               uint64_t (*capture)(void *interpreter_data,
-                               const char *interpreter_stack_data,
-                               struct lttng_interpreter_output *interpreter_output);
-       } interpreter_funcs;
+       int (*interpreter_func)(struct lttng_ust_bytecode_runtime *bytecode_runtime,
+                       const char *interpreter_stack_data,
+                       void *ctx);
        struct cds_list_head node;      /* list of bytecode runtime in event */
 
        /* End of base ABI. Fields below should be used after checking struct_size. */
@@ -409,8 +421,7 @@ struct lttng_ust_event_recorder {
        struct lttng_ust_event_recorder_private *priv;  /* Private event record interface */
 
        unsigned int id;
-       struct lttng_channel *chan;
-       struct lttng_ust_ctx *ctx;
+       struct lttng_ust_channel_buffer *chan;
 
        /* End of base ABI. Fields below should be used after checking struct_size. */
 };
@@ -445,7 +456,6 @@ struct lttng_ust_event_notifier {
 };
 
 struct lttng_ust_lib_ring_buffer_channel;
-struct lttng_ust_shm_handle;
 struct lttng_ust_channel_ops_private;
 
 /*
@@ -473,34 +483,57 @@ struct lttng_ust_channel_ops {
        /* End of base ABI. Fields below should be used after checking struct_size. */
 };
 
+enum lttng_ust_channel_type {
+       LTTNG_UST_CHANNEL_TYPE_BUFFER = 0,
+};
+
+struct lttng_ust_channel_common_private;
+
 /*
  * 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.
  */
-struct lttng_channel {
-       /*
-        * The pointers located in this private data are NOT safe to be
-        * dereferenced by the consumer. The only operations the
-        * consumer process is designed to be allowed to do is to read
-        * and perform subbuffer flush.
-        */
-       struct lttng_ust_lib_ring_buffer_channel *chan; /* Channel buffers */
+struct lttng_ust_channel_common {
+       uint32_t struct_size;                           /* Size of this structure. */
+
+       struct lttng_ust_channel_common_private *priv;  /* Private channel interface */
+
+       enum lttng_ust_channel_type type;
+       void *child;                                    /* Pointer to child, for inheritance by aggregation. */
+
        int enabled;
-       struct lttng_ust_ctx *ctx;
-       /* Event ID management */
        struct lttng_ust_session *session;
-       int objd;                       /* Object associated to channel */
-       struct cds_list_head node;      /* Channel list in session */
+
+       /* End of base ABI. Fields below should be used after checking struct_size. */
+};
+
+struct lttng_ust_channel_buffer_private;
+
+/*
+ * 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.
+ */
+struct lttng_ust_channel_buffer {
+       uint32_t struct_size;                           /* Size of this structure. */
+
+       struct lttng_ust_channel_common *parent;        /* Inheritance by aggregation. */
+       struct lttng_ust_channel_buffer_private *priv;  /* Private channel buffer interface */
+
        struct lttng_ust_channel_ops *ops;
-       int header_type;                /* 0: unset, 1: compact, 2: large */
-       struct lttng_ust_shm_handle *handle;    /* shared-memory handle */
+       struct lttng_ust_lib_ring_buffer_channel *chan; /* Channel buffers */
+       struct lttng_ust_shm_handle *handle;            /* shared-memory handle */
 
-       /* Channel ID */
-       unsigned int id;
-       enum lttng_ust_abi_chan_type type;
-       unsigned char uuid[LTTNG_UST_UUID_LEN]; /* Trace session unique ID */
-       int tstate:1;                   /* Transient enable state */
+       /* End of base ABI. Fields below should be used after checking struct_size. */
 };
 
 /*
@@ -516,8 +549,6 @@ struct lttng_ust_stack_ctx {
        uint32_t struct_size;                   /* Size of this structure */
 
        struct lttng_ust_event_recorder *event_recorder;
-       struct lttng_ust_ctx *chan_ctx; /* RCU dereferenced. */
-       struct lttng_ust_ctx *event_ctx;        /* RCU dereferenced. */
 
        /* End of base ABI. Fields below should be used after checking struct_size. */
 };
This page took 0.025348 seconds and 4 git commands to generate.