struct lttng_session;
struct lttng_ust_lib_ring_buffer_ctx;
struct lttng_event_field;
-struct lttng_event_notifier;
struct lttng_event_notifier_group;
/*
/* Update the astract_types name table in lttng-types.c along with this enum */
enum lttng_abstract_types {
atype_integer,
- atype_enum, /* legacy */
- atype_array, /* legacy */
- atype_sequence, /* legacy */
atype_string,
atype_float,
atype_dynamic,
- atype_struct, /* legacy */
atype_enum_nestable,
atype_array_nestable,
atype_sequence_nestable,
char padding[LTTNG_UST_FLOAT_TYPE_PADDING];
};
-/* legacy */
-#define LTTNG_UST_BASIC_TYPE_PADDING 128
-union _lttng_basic_type {
- struct lttng_integer_type integer; /* legacy */
- struct {
- const struct lttng_enum_desc *desc; /* Enumeration mapping */
- struct lttng_integer_type container_type;
- } enumeration; /* legacy */
- struct {
- enum lttng_string_encodings encoding;
- } 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 {
- union _lttng_basic_type basic;
- } u;
-};
-
#define LTTNG_UST_TYPE_PADDING 128
struct lttng_type {
enum lttng_abstract_types atype;
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;
};
/* Data structures used by the tracer. */
-struct tp_list_entry {
- struct lttng_ust_tracepoint_iter tp;
- struct cds_list_head head;
-};
-
-struct lttng_ust_tracepoint_list {
- struct tp_list_entry *iter;
- struct cds_list_head head;
-};
-
-struct tp_field_list_entry {
- struct lttng_ust_field_iter field;
- struct cds_list_head head;
-};
-
-struct lttng_ust_field_list {
- struct tp_field_list_entry *iter;
- struct cds_list_head head;
-};
-
/*
* Bytecode interpreter return value masks.
*/
};
struct lttng_interpreter_output;
+struct lttng_ust_bytecode_runtime_private;
/*
- * 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.
+ * This structure is used in the probes. More specifically, the
+ * `interpreter_funcs` 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 {
+ struct lttng_ust_bytecode_runtime_private *priv;
+
/* Associated bytecode */
- struct lttng_ust_bytecode_node *bc;
union {
uint64_t (*filter)(void *interpreter_data,
const char *interpreter_stack_data);
const char *interpreter_stack_data,
struct lttng_interpreter_output *interpreter_output);
} interpreter_funcs;
- int link_failed;
struct cds_list_head node; /* list of bytecode runtime in event */
- /*
- * Pointer to a URCU-protected pointer owned by an `struct
- * lttng_session`or `struct lttng_event_notifier_group`.
- */
- struct lttng_ctx **pctx;
-};
-
-/*
- * Objects in a linked-list of enablers, owned by an event or event_notifier.
- * This is used because an event (or a event_notifier) can be enabled by more
- * than one enabler and we want a quick way to iterate over all enablers of an
- * object.
- *
- * For example, event rules "my_app:a*" and "my_app:ab*" will both match the
- * event with the name "my_app:abc".
- */
-struct lttng_enabler_ref {
- struct cds_list_head node; /* enabler ref list */
- struct lttng_enabler *ref; /* backward ref */
};
/*
* UST. Fields need to be only added at the end, never reordered, never
* removed.
*/
-struct lttng_event {
- unsigned int id;
- struct lttng_channel *chan;
- int enabled;
- const struct lttng_event_desc *desc;
- struct lttng_ctx *ctx;
- enum lttng_ust_instrumentation instrumentation;
- struct cds_list_head node; /* Event list in session */
+struct lttng_ust_event_common_private;
+
+struct lttng_ust_event_common {
+ uint32_t struct_size; /* Size of this structure. */
+ struct lttng_ust_event_common_private *priv; /* Private event interface */
+
+ int enabled;
+ int has_enablers_without_bytecode;
/* list of struct lttng_bytecode_runtime, sorted by seqnum */
struct cds_list_head filter_bytecode_runtime_head;
- int has_enablers_without_bytecode;
- /* Backward references: list of lttng_enabler_ref (ref to enablers) */
- struct cds_list_head enablers_ref_head;
- struct cds_hlist_node hlist; /* session ht of events */
- int registered; /* has reg'd tracepoint probe */
};
-struct lttng_event_notifier {
- uint64_t user_token;
- uint64_t error_counter_index;
- int enabled;
- int registered; /* has reg'd tracepoint probe */
- size_t num_captures; /* Needed to allocate the msgpack array. */
- void (*notification_send)(struct lttng_event_notifier *event_notifier,
+struct lttng_ust_event_recorder_private;
+
+struct lttng_ust_event_recorder {
+ uint32_t struct_size; /* Size of this structure. */
+ struct lttng_ust_event_common *parent;
+ struct lttng_ust_event_recorder_private *priv; /* Private event record interface */
+
+ unsigned int id;
+ struct lttng_channel *chan;
+ struct lttng_ctx *ctx;
+};
+
+struct lttng_ust_event_notifier_private;
+
+struct lttng_ust_event_notifier {
+ uint32_t struct_size; /* Size of this structure. */
+ struct lttng_ust_event_common *parent;
+ struct lttng_ust_event_notifier_private *priv; /* Private event notifier interface */
+
+ void (*notification_send)(struct lttng_ust_event_notifier *event_notifier,
const char *stack_data);
- struct cds_list_head filter_bytecode_runtime_head;
struct cds_list_head capture_bytecode_runtime_head;
- int has_enablers_without_bytecode;
- struct cds_list_head enablers_ref_head;
- const struct lttng_event_desc *desc;
- struct cds_hlist_node hlist; /* hashtable of event_notifiers */
- struct cds_list_head node; /* event_notifier list in session */
- struct lttng_event_notifier_group *group; /* weak ref */
};
struct lttng_enum {
/* Channel ID */
unsigned int id;
- enum lttng_ust_chan_type type;
+ enum lttng_ust_abi_chan_type type;
unsigned char uuid[LTTNG_UST_UUID_LEN]; /* Trace session unique ID */
int tstate:1; /* Transient enable state */
};
-#define LTTNG_COUNTER_DIMENSION_MAX 8
-
-struct lttng_counter_dimension {
- uint64_t size;
- uint64_t underflow_index;
- uint64_t overflow_index;
- uint8_t has_underflow;
- uint8_t has_overflow;
-};
+struct lttng_counter_dimension;
struct lttng_counter_ops {
struct lib_counter *(*counter_create)(size_t nr_dimensions,
#define LTTNG_UST_STACK_CTX_PADDING 32
struct lttng_stack_ctx {
- struct lttng_event *event;
+ struct lttng_ust_event_recorder *event_recorder;
struct lttng_ctx *chan_ctx; /* RCU dereferenced. */
struct lttng_ctx *event_ctx; /* RCU dereferenced. */
char padding[LTTNG_UST_STACK_CTX_PADDING];
struct cds_hlist_head table[LTTNG_UST_ENUM_HT_SIZE];
};
+struct lttng_ust_session_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.
*/
struct lttng_session {
- int active; /* Is trace session active ? */
- int been_active; /* Been active ? */
- int objd; /* Object associated */
- struct cds_list_head chan_head; /* Channel list head */
- struct cds_list_head events_head; /* list of events */
- struct cds_list_head node; /* Session list */
-
- /* New UST 2.1 */
- /* List of enablers */
- struct cds_list_head enablers_head;
- struct lttng_ust_event_ht events_ht; /* ht of events */
- void *owner; /* object owner */
- int tstate:1; /* Transient enable state */
-
- /* New UST 2.4 */
- int statedump_pending:1;
-
- /* New UST 2.8 */
- struct lttng_ust_enum_ht enums_ht; /* ht of enumerations */
- struct cds_list_head enums_head;
- struct lttng_ctx *ctx; /* contexts for filters. */
-};
-
-struct lttng_counter {
- int objd;
- struct lttng_event_notifier_group *event_notifier_group; /* owner */
- struct lttng_counter_transport *transport;
- struct lib_counter *counter;
- struct lttng_counter_ops *ops;
-};
-
-struct lttng_event_notifier_group {
- int objd;
- void *owner;
- int notification_fd;
- struct cds_list_head node; /* Event notifier group handle list */
- struct cds_list_head enablers_head;
- struct cds_list_head event_notifiers_head; /* list of event_notifiers */
- struct lttng_ust_event_notifier_ht event_notifiers_ht; /* hashtable of event_notifiers */
- struct lttng_ctx *ctx; /* contexts for filters. */
-
- struct lttng_counter *error_counter;
- size_t error_counter_len;
-};
+ uint32_t struct_size; /* Size of this structure */
+ struct lttng_ust_session_private *priv; /* Private session interface */
-struct lttng_transport {
- char *name;
- struct cds_list_head node;
- struct lttng_channel_ops ops;
- const struct lttng_ust_lib_ring_buffer_config *client_config;
-};
-
-struct lttng_counter_transport {
- char *name;
- struct cds_list_head node;
- struct lttng_counter_ops ops;
- const struct lib_counter_config *client_config;
+ int active; /* Is trace session active ? */
};
int lttng_probe_register(struct lttng_probe_desc *desc);
int lttng_session_active(void);
-typedef int (*t_statedump_func_ptr)(struct lttng_session *session);
-
void lttng_ust_dl_update(void *ip);
#ifdef __cplusplus