X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=include%2Flttng%2Fust-events.h;h=7abca292729671151cf1fb50d821f49db706e6ea;hb=808edfc82d5518fb99f5fdc781c74dcf61d8e770;hp=5b18fb452c707adead4f7f9fc621a82fcf23317a;hpb=7753d283c5e8cc76e9bc7d5960754a589426ffa3;p=lttng-ust.git diff --git a/include/lttng/ust-events.h b/include/lttng/ust-events.h index 5b18fb45..7abca292 100644 --- a/include/lttng/ust-events.h +++ b/include/lttng/ust-events.h @@ -44,7 +44,6 @@ struct lttng_channel; struct lttng_session; struct lttng_ust_lib_ring_buffer_ctx; struct lttng_event_field; -struct lttng_event_notifier; struct lttng_event_notifier_group; /* @@ -57,13 +56,9 @@ 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, @@ -162,29 +157,6 @@ 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; /* 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; @@ -215,22 +187,6 @@ struct lttng_type { 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; }; @@ -351,26 +307,6 @@ struct lttng_probe_desc { /* 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. */ @@ -381,16 +317,18 @@ enum lttng_bytecode_interpreter_ret { }; 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); @@ -398,27 +336,7 @@ struct lttng_bytecode_runtime { 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 */ }; /* @@ -429,40 +347,47 @@ struct lttng_enabler_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; + +enum lttng_ust_event_type { + LTTNG_UST_EVENT_TYPE_RECORDER = 0, + LTTNG_UST_EVENT_TYPE_NOTIFIER = 1, +}; + +struct lttng_ust_event_common { + uint32_t struct_size; /* Size of this structure. */ + struct lttng_ust_event_common_private *priv; /* Private event interface */ + + enum lttng_ust_event_type type; + 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 { @@ -536,20 +461,12 @@ struct lttng_channel { /* 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, @@ -573,7 +490,7 @@ struct lttng_counter_ops { #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]; @@ -599,69 +516,18 @@ struct lttng_ust_enum_ht { 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); @@ -676,8 +542,6 @@ struct lttng_transport *lttng_transport_find(const char *name); int lttng_session_active(void); -typedef int (*t_statedump_func_ptr)(struct lttng_session *session); - void lttng_ust_dl_update(void *ip); #ifdef __cplusplus