X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=liblttng-ust%2Fust-events-internal.h;h=53c76d57c2d9d44f41086e2f7d7e46e6fb39a641;hb=0f2ab8669b01a138682e333cc2ff5ba721a5d4e1;hp=5466f25e2216e9eefc961a14e7dd1463e2858e44;hpb=a084756d092167324ee09d3f819cc45407b58233;p=lttng-ust.git diff --git a/liblttng-ust/ust-events-internal.h b/liblttng-ust/ust-events-internal.h index 5466f25e..53c76d57 100644 --- a/liblttng-ust/ust-events-internal.h +++ b/liblttng-ust/ust-events-internal.h @@ -76,7 +76,7 @@ struct lttng_enabler { struct lttng_event_enabler { struct lttng_enabler base; struct cds_list_head node; /* per-session list of enablers */ - struct lttng_channel *chan; + struct lttng_ust_channel_buffer *chan; /* * Unused, but kept around to make it explicit that the tracer can do * it. @@ -94,13 +94,13 @@ struct lttng_event_notifier_enabler { uint64_t num_captures; }; -enum lttng_ust_bytecode_node_type { - LTTNG_UST_BYTECODE_NODE_TYPE_FILTER, - LTTNG_UST_BYTECODE_NODE_TYPE_CAPTURE, +enum lttng_ust_bytecode_type { + LTTNG_UST_BYTECODE_TYPE_FILTER, + LTTNG_UST_BYTECODE_TYPE_CAPTURE, }; struct lttng_ust_bytecode_node { - enum lttng_ust_bytecode_node_type type; + enum lttng_ust_bytecode_type type; struct cds_list_head node; struct lttng_enabler *enabler; struct { @@ -111,6 +111,26 @@ struct lttng_ust_bytecode_node { } bc; }; +/* + * Bytecode interpreter return value. + */ +enum lttng_ust_bytecode_interpreter_ret { + 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, +}; + +struct lttng_ust_bytecode_filter_ctx { + enum lttng_ust_bytecode_filter_result result; +}; + struct lttng_ust_excluder_node { struct cds_list_head node; struct lttng_enabler *enabler; @@ -250,6 +270,10 @@ struct lttng_ust_event_common_private { struct cds_list_head enablers_ref_head; int registered; /* has reg'd tracepoint probe */ uint64_t user_token; + + int has_enablers_without_filter_bytecode; + /* list of struct lttng_ust_bytecode_runtime, sorted by seqnum */ + struct cds_list_head filter_bytecode_runtime_head; }; struct lttng_ust_event_recorder_private { @@ -258,6 +282,7 @@ struct lttng_ust_event_recorder_private { struct lttng_ust_event_recorder *pub; /* Public event interface */ struct cds_list_head node; /* Event recorder list */ struct cds_hlist_node hlist; /* Hash table of event recorders */ + struct lttng_ust_ctx *ctx; }; struct lttng_ust_event_notifier_private { @@ -269,13 +294,18 @@ struct lttng_ust_event_notifier_private { uint64_t error_counter_index; struct cds_list_head node; /* Event notifier list */ struct cds_hlist_node hlist; /* Hash table of event notifiers */ -}; + struct cds_list_head capture_bytecode_runtime_head; -struct lttng_ust_bytecode_runtime_private { - struct bytecode_runtime *pub; /* Public bytecode runtime interface */ +}; +struct lttng_ust_bytecode_runtime { + enum lttng_ust_bytecode_type type; struct lttng_ust_bytecode_node *bc; int link_failed; + 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 */ /* * Pointer to a URCU-protected pointer owned by an `struct * lttng_session`or `struct lttng_event_notifier_group`. @@ -292,17 +322,14 @@ struct lttng_ust_session_private { 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_ust_ctx *ctx; /* contexts for filters. */ @@ -316,10 +343,12 @@ struct lttng_enum { uint64_t id; /* Enumeration ID in sessiond */ }; +struct lttng_ust_shm_handle; + struct lttng_ust_channel_ops_private { struct lttng_ust_channel_ops *pub; /* Public channels ops interface */ - struct lttng_channel *(*channel_create)(const char *name, + struct lttng_ust_channel_buffer *(*channel_create)(const char *name, void *buf_addr, size_t subbuf_size, size_t num_subbuf, unsigned int switch_timer_interval, @@ -328,7 +357,7 @@ struct lttng_ust_channel_ops_private { uint32_t chan_id, const int *stream_fds, int nr_stream_fds, int64_t blocking_timeout); - void (*channel_destroy)(struct lttng_channel *chan); + void (*channel_destroy)(struct lttng_ust_channel_buffer *chan); /* * packet_avail_size returns the available size in the current * packet. Note that the size returned is only a hint, since it @@ -342,6 +371,51 @@ struct lttng_ust_channel_ops_private { struct lttng_ust_shm_handle *handle); }; +struct lttng_ust_channel_common_private { + struct lttng_ust_channel_common *pub; /* Public channel interface */ + + int objd; /* Object associated with channel. */ + int tstate:1; /* Transient enable state */ +}; + +struct lttng_ust_channel_buffer_private { + struct lttng_ust_channel_common_private parent; + + struct lttng_ust_channel_buffer *pub; /* Public channel buffer interface */ + struct cds_list_head node; /* Channel list in session */ + int header_type; /* 0: unset, 1: compact, 2: large */ + unsigned int id; /* Channel ID */ + enum lttng_ust_abi_chan_type type; + struct lttng_ust_ctx *ctx; + unsigned char uuid[LTTNG_UST_UUID_LEN]; /* Trace session unique ID */ +}; + +/* + * IMPORTANT: this structure is part of the ABI between the consumer + * daemon and the UST library within traced applications. Changing it + * breaks the UST communication protocol. + * + * TODO: remove unused fields on next UST communication protocol + * breaking update. + */ +struct lttng_ust_abi_channel_config { + void *unused1; + int unused2; + void *unused3; + void *unused4; + int unused5; + struct cds_list_head unused6; + void *unused7; + int unused8; + void *unused9; + + /* Channel ID */ + unsigned int id; + enum lttng_ust_abi_chan_type unused10; + unsigned char uuid[LTTNG_UST_UUID_LEN]; /* Trace session unique ID */ + int unused11:1; +}; + static inline struct lttng_ust_type_integer *lttng_ust_get_type_integer(struct lttng_ust_type_common *type) { @@ -466,6 +540,7 @@ void lttng_ust_destroy_type(struct lttng_ust_type_common *type) struct lttng_ust_type_enum *enum_type = (struct lttng_ust_type_enum *) type; lttng_ust_destroy_type(enum_type->container_type); + free(enum_type); break; } case lttng_ust_type_array: @@ -473,6 +548,7 @@ void lttng_ust_destroy_type(struct lttng_ust_type_common *type) struct lttng_ust_type_array *array_type = (struct lttng_ust_type_array *) type; lttng_ust_destroy_type(array_type->elem_type); + free(array_type); break; } case lttng_ust_type_sequence: @@ -480,6 +556,7 @@ void lttng_ust_destroy_type(struct lttng_ust_type_common *type) struct lttng_ust_type_sequence *sequence_type = (struct lttng_ust_type_sequence *) type; lttng_ust_destroy_type(sequence_type->elem_type); + free(sequence_type); break; } case lttng_ust_type_struct: @@ -489,6 +566,7 @@ void lttng_ust_destroy_type(struct lttng_ust_type_common *type) for (i = 0; i < struct_type->nr_fields; i++) lttng_ust_destroy_type(struct_type->fields[i]->type); + free(struct_type); break; } default: @@ -520,7 +598,7 @@ __attribute__((visibility("hidden"))) struct lttng_event_enabler *lttng_event_enabler_create( enum lttng_enabler_format_type format_type, struct lttng_ust_abi_event *event_param, - struct lttng_channel *chan); + struct lttng_ust_channel_buffer *chan); /* * Destroy a `struct lttng_event_enabler` object. @@ -757,21 +835,10 @@ __attribute__((visibility("hidden"))) void lttng_handle_pending_statedump(void *owner); __attribute__((visibility("hidden"))) -struct lttng_channel *lttng_channel_create(struct lttng_ust_session *session, - const char *transport_name, - void *buf_addr, - size_t subbuf_size, size_t num_subbuf, - unsigned int switch_timer_interval, - unsigned int read_timer_interval, - int **shm_fd, int **wait_fd, - uint64_t **memory_map_size, - struct lttng_channel *chan_priv_init); +int lttng_channel_enable(struct lttng_ust_channel_common *lttng_channel); __attribute__((visibility("hidden"))) -int lttng_channel_enable(struct lttng_channel *channel); - -__attribute__((visibility("hidden"))) -int lttng_channel_disable(struct lttng_channel *channel); +int lttng_channel_disable(struct lttng_ust_channel_common *lttng_channel); __attribute__((visibility("hidden"))) void lttng_transport_register(struct lttng_transport *transport); @@ -816,4 +883,15 @@ void lttng_ust_abi_events_exit(void); __attribute__((visibility("hidden"))) void lttng_ust_abi_objd_table_owner_cleanup(void *owner); +__attribute__((visibility("hidden"))) +struct lttng_ust_channel_buffer *lttng_ust_alloc_channel_buffer(void); + +__attribute__((visibility("hidden"))) +void lttng_ust_free_channel_common(struct lttng_ust_channel_common *chan); + +__attribute__((visibility("hidden"))) +int lttng_ust_interpret_event_filter(struct lttng_ust_event_common *event, + const char *interpreter_stack_data, + void *filter_ctx); + #endif /* _LTTNG_UST_EVENTS_INTERNAL_H */