#define LTTNG_UST_EVENT_DESC_PADDING 40
struct lttng_event_desc {
const char *name;
- void *probe_callback;
+ void (*probe_callback)(void);
const struct lttng_event_ctx *ctx; /* context */
const struct lttng_event_field *fields; /* event payload */
unsigned int nr_fields;
struct cds_list_head list; /* per-session list of wildcards */
struct cds_list_head session_list; /* node of session wildcard list */
struct wildcard_entry *entry;
+ struct lttng_ust_filter_bytecode *filter_bytecode;
unsigned int enabled:1;
};
/* head of session list to which this wildcard apply */
struct cds_list_head session_list;
enum lttng_ust_loglevel_type loglevel_type;
+ struct lttng_ust_filter_bytecode *filter_bytecode;
int loglevel;
char name[0];
};
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;
+};
+
struct ust_pending_probe;
+struct ltt_event;
+struct lttng_ust_filter_bytecode;
/*
* ltt_event structure is referred to by the tracing fast path. It must be
struct ltt_channel *chan;
int enabled;
const struct lttng_event_desc *desc;
- void *filter;
+ int (*filter)(void *filter_data, const char *filter_stack_data);
+ void *filter_data;
struct lttng_ctx *ctx;
enum lttng_ust_instrumentation instrumentation;
union {
struct cds_list_head list; /* Event list */
struct cds_list_head wildcard_list; /* Event list for wildcard */
struct ust_pending_probe *pending_probe;
+ struct lttng_ust_filter_bytecode *filter_bytecode;
unsigned int metadata_dumped:1;
};
int ltt_event_create(struct ltt_channel *chan,
struct lttng_ust_event *event_param,
- void *filter,
struct ltt_event **event);
int ltt_channel_enable(struct ltt_channel *channel);
void lttng_context_vtid_reset(void);
void lttng_context_vpid_reset(void);
-const struct lttng_ust_lib_ring_buffer_client_cb *lttng_client_callbacks_metadata;
-const struct lttng_ust_lib_ring_buffer_client_cb *lttng_client_callbacks_discard;
-const struct lttng_ust_lib_ring_buffer_client_cb *lttng_client_callbacks_overwrite;
+extern const struct lttng_ust_lib_ring_buffer_client_cb *lttng_client_callbacks_metadata;
+extern const struct lttng_ust_lib_ring_buffer_client_cb *lttng_client_callbacks_discard;
+extern const struct lttng_ust_lib_ring_buffer_client_cb *lttng_client_callbacks_overwrite;
struct ltt_transport *ltt_transport_find(const char *name);
void ltt_probes_prune_event_list(struct lttng_ust_tracepoint_list *list);
struct lttng_ust_tracepoint_iter *
lttng_ust_tracepoint_list_get_iter_next(struct lttng_ust_tracepoint_list *list);
+int ltt_probes_get_field_list(struct lttng_ust_field_list *list);
+void ltt_probes_prune_field_list(struct lttng_ust_field_list *list);
+struct lttng_ust_field_iter *
+ lttng_ust_field_list_get_iter_next(struct lttng_ust_field_list *list);
int ltt_wildcard_enable(struct session_wildcard *wildcard);
int ltt_wildcard_disable(struct session_wildcard *wildcard);
int req_loglevel);
void ltt_probes_create_wildcard_events(struct wildcard_entry *entry,
struct session_wildcard *wildcard);
+int lttng_filter_event_attach_bytecode(struct ltt_event *event,
+ struct lttng_ust_filter_bytecode *filter);
+int lttng_filter_wildcard_attach_bytecode(struct session_wildcard *wildcard,
+ struct lttng_ust_filter_bytecode *filter);
+void lttng_filter_event_link_bytecode(struct ltt_event *event,
+ struct lttng_ust_filter_bytecode *filter_bytecode);
+void lttng_filter_wildcard_link_bytecode(struct session_wildcard *wildcard);
#endif /* _LTTNG_UST_EVENTS_H */