X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=include%2Flttng%2Fevents-internal.h;h=38ae3a7b702450833c583b9b2fdd2c9a9edbb983;hb=b8b4704b8508da42ffcef26770b44642005695e6;hp=0c7628483271c06c0b012444371bbaced4e100a8;hpb=437d5aa59380583ce1cd14d394a53b398be1275d;p=lttng-modules.git diff --git a/include/lttng/events-internal.h b/include/lttng/events-internal.h index 0c762848..38ae3a7b 100644 --- a/include/lttng/events-internal.h +++ b/include/lttng/events-internal.h @@ -10,6 +10,107 @@ #include +struct lttng_kernel_event_common_private { + struct lttng_kernel_event_common *pub; /* Public event interface */ + + const struct lttng_kernel_event_desc *desc; + /* Backward references: list of lttng_enabler_ref (ref to enablers) */ + struct 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_bytecode_runtime, sorted by seqnum */ + struct list_head filter_bytecode_runtime_head; + enum lttng_kernel_abi_instrumentation instrumentation; + /* Selected by instrumentation */ + union { + struct lttng_kprobe kprobe; + struct lttng_uprobe uprobe; + struct { + struct lttng_krp *lttng_krp; + char *symbol_name; + } kretprobe; + struct { + enum lttng_syscall_entryexit entryexit; + enum lttng_syscall_abi abi; + struct hlist_node node; /* chain registered syscall event_notifier */ + unsigned int syscall_id; + } syscall; + } u; +}; + +struct lttng_kernel_event_recorder_private { + struct lttng_kernel_event_common_private parent; + + struct lttng_kernel_event_recorder *pub; /* Public event interface */ + struct list_head node; /* Event recorder list */ + struct hlist_node hlist; /* Hash table of event recorders */ + struct lttng_kernel_ctx *ctx; + unsigned int id; + unsigned int metadata_dumped:1; +}; + +struct lttng_kernel_event_notifier_private { + struct lttng_kernel_event_common_private parent; + + struct lttng_kernel_event_notifier *pub; /* Public event notifier interface */ + struct lttng_event_notifier_group *group; /* weak ref */ + size_t num_captures; /* Needed to allocate the msgpack array. */ + uint64_t error_counter_index; + struct list_head node; /* Event notifier list */ + struct hlist_node hlist; /* Hash table of event notifiers */ + struct list_head capture_bytecode_runtime_head; + +}; + +enum lttng_kernel_bytecode_interpreter_ret { + LTTNG_KERNEL_BYTECODE_INTERPRETER_ERROR = -1, + LTTNG_KERNEL_BYTECODE_INTERPRETER_OK = 0, +}; + +enum lttng_kernel_bytecode_filter_result { + LTTNG_KERNEL_BYTECODE_FILTER_ACCEPT = 0, + LTTNG_KERNEL_BYTECODE_FILTER_REJECT = 1, +}; + +struct lttng_kernel_bytecode_filter_ctx { + enum lttng_kernel_bytecode_filter_result result; +}; + +/* + * Enabler field, within whatever object is enabling an event. Target of + * backward reference. + */ +struct lttng_enabler { + enum lttng_enabler_format_type format_type; + + /* head list of struct lttng_bytecode_node */ + struct list_head filter_bytecode_head; + + struct lttng_kernel_abi_event event_param; + unsigned int enabled:1; + + uint64_t user_token; /* User-provided token. */ +}; + +struct lttng_event_enabler { + struct lttng_enabler base; + struct list_head node; /* per-session list of enablers */ + struct lttng_channel *chan; +}; + +struct lttng_event_notifier_enabler { + struct lttng_enabler base; + uint64_t error_counter_index; + 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 const struct lttng_kernel_type_integer *lttng_kernel_get_type_integer(const struct lttng_kernel_type_common *type) { @@ -84,4 +185,23 @@ static inline bool lttng_kernel_type_is_bytewise_integer(const struct lttng_kern return true; } +int lttng_kernel_interpret_event_filter(const struct lttng_kernel_event_common *event, + const char *interpreter_stack_data, + struct lttng_probe_ctx *probe_ctx, + void *event_filter_ctx); + +static inline +struct lttng_enabler *lttng_event_enabler_as_enabler( + struct lttng_event_enabler *event_enabler) +{ + return &event_enabler->base; +} + +static inline +struct lttng_enabler *lttng_event_notifier_enabler_as_enabler( + struct lttng_event_notifier_enabler *event_notifier_enabler) +{ + return &event_notifier_enabler->base; +} + #endif /* _LTTNG_EVENTS_INTERNAL_H */