X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;ds=sidebyside;f=include%2Flttng%2Fevents.h;h=80de505056fe8a265d06c02f43717c92934fc0ea;hb=99d223adfae9b68800e91bda470c92acb14efae6;hp=20c08cf8fcaa6696a55ed45fe9fa66b5e67137dc;hpb=80c2a69a8298768c9010052e6c3668914191b9e7;p=lttng-modules.git diff --git a/include/lttng/events.h b/include/lttng/events.h index 20c08cf8..80de5050 100644 --- a/include/lttng/events.h +++ b/include/lttng/events.h @@ -234,6 +234,7 @@ enum lttng_event_type { enum lttng_bytecode_node_type { LTTNG_BYTECODE_NODE_TYPE_FILTER, + LTTNG_BYTECODE_NODE_TYPE_CAPTURE, }; struct lttng_bytecode_node { @@ -257,12 +258,20 @@ enum lttng_bytecode_interpreter_ret { /* Other bits are kept for future use. */ }; +struct lttng_interpreter_output; + struct lttng_bytecode_runtime { /* Associated bytecode */ struct lttng_bytecode_node *bc; - uint64_t (*filter)(void *filter_data, - struct lttng_probe_ctx *lttng_probe_ctx, - const char *filter_stack_data); + union { + uint64_t (*filter)(void *filter_data, + struct lttng_probe_ctx *lttng_probe_ctx, + const char *filter_stack_data); + uint64_t (*capture)(void *filter_data, + struct lttng_probe_ctx *lttng_probe_ctx, + const char *capture_stack_data, + struct lttng_interpreter_output *output); + } interpreter_funcs; int link_failed; struct list_head node; /* list of bytecode runtime in event */ struct lttng_ctx *ctx; @@ -371,9 +380,13 @@ struct lttng_event_notifier { struct hlist_node hlist; /* session ht of event_notifiers */ /* list of struct lttng_bytecode_runtime, sorted by seqnum */ struct list_head filter_bytecode_runtime_head; + size_t num_captures; + struct list_head capture_bytecode_runtime_head; int has_enablers_without_bytecode; - void (*send_notification)(struct lttng_event_notifier *event_notifier); + void (*send_notification)(struct lttng_event_notifier *event_notifier, + struct lttng_probe_ctx *lttng_probe_ctx, + const char *interpreter_stack_data); struct lttng_event_notifier_group *group; /* Weak ref */ }; @@ -391,7 +404,7 @@ struct lttng_enabler { enum lttng_enabler_format_type format_type; - /* head list of struct lttng_ust_filter_bytecode_node */ + /* head list of struct lttng_bytecode_node */ struct list_head filter_bytecode_head; struct lttng_kernel_event event_param; @@ -415,8 +428,13 @@ struct lttng_event_notifier_enabler { struct lttng_enabler base; struct list_head node; /* List of event_notifier enablers */ struct lttng_event_notifier_group *group; + + /* head list of struct lttng_bytecode_node */ + struct list_head capture_bytecode_head; + uint64_t num_captures; }; + static inline struct lttng_enabler *lttng_event_enabler_as_enabler( struct lttng_event_enabler *event_enabler) @@ -893,17 +911,19 @@ static inline int lttng_syscall_filter_disable_event_notifier( #endif -void lttng_filter_sync_state(struct lttng_bytecode_runtime *runtime); int lttng_event_enabler_attach_filter_bytecode(struct lttng_event_enabler *event_enabler, struct lttng_kernel_filter_bytecode __user *bytecode); int lttng_event_notifier_enabler_attach_filter_bytecode( struct lttng_event_notifier_enabler *event_notifier_enabler, struct lttng_kernel_filter_bytecode __user *bytecode); +int lttng_event_notifier_enabler_attach_capture_bytecode( + struct lttng_event_notifier_enabler *event_notifier_enabler, + struct lttng_kernel_capture_bytecode __user *bytecode); void lttng_enabler_link_bytecode(const struct lttng_event_desc *event_desc, struct lttng_ctx *ctx, - struct list_head *bytecode_runtime_head, - struct lttng_enabler *enabler); + struct list_head *instance_bytecode_runtime_head, + struct list_head *enabler_bytecode_runtime_head); int lttng_probes_init(void);