1 /* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
3 * lttng/events-internal.h
5 * Copyright (C) 2010-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
8 #ifndef _LTTNG_EVENTS_INTERNAL_H
9 #define _LTTNG_EVENTS_INTERNAL_H
11 #include <lttng/events.h>
13 struct lttng_kernel_event_common_private
{
14 struct lttng_kernel_event_common
*pub
; /* Public event interface */
16 const struct lttng_kernel_event_desc
*desc
;
17 /* Backward references: list of lttng_enabler_ref (ref to enablers) */
18 struct list_head enablers_ref_head
;
19 int registered
; /* has reg'd tracepoint probe */
22 int has_enablers_without_filter_bytecode
;
23 /* list of struct lttng_bytecode_runtime, sorted by seqnum */
24 struct list_head filter_bytecode_runtime_head
;
25 enum lttng_kernel_abi_instrumentation instrumentation
;
26 /* Selected by instrumentation */
28 struct lttng_kprobe kprobe
;
29 struct lttng_uprobe uprobe
;
31 struct lttng_krp
*lttng_krp
;
35 enum lttng_syscall_entryexit entryexit
;
36 enum lttng_syscall_abi abi
;
37 struct hlist_node node
; /* chain registered syscall event_notifier */
38 unsigned int syscall_id
;
43 struct lttng_kernel_event_recorder_private
{
44 struct lttng_kernel_event_common_private parent
;
46 struct lttng_kernel_event_recorder
*pub
; /* Public event interface */
47 struct list_head node
; /* Event recorder list */
48 struct hlist_node hlist
; /* Hash table of event recorders */
49 struct lttng_kernel_ctx
*ctx
;
51 unsigned int metadata_dumped
:1;
54 struct lttng_kernel_event_notifier_private
{
55 struct lttng_kernel_event_common_private parent
;
57 struct lttng_kernel_event_notifier
*pub
; /* Public event notifier interface */
58 struct lttng_event_notifier_group
*group
; /* weak ref */
59 size_t num_captures
; /* Needed to allocate the msgpack array. */
60 uint64_t error_counter_index
;
61 struct list_head node
; /* Event notifier list */
62 struct hlist_node hlist
; /* Hash table of event notifiers */
63 struct list_head capture_bytecode_runtime_head
;
67 enum lttng_kernel_bytecode_interpreter_ret
{
68 LTTNG_KERNEL_BYTECODE_INTERPRETER_ERROR
= -1,
69 LTTNG_KERNEL_BYTECODE_INTERPRETER_OK
= 0,
72 enum lttng_kernel_bytecode_filter_result
{
73 LTTNG_KERNEL_BYTECODE_FILTER_ACCEPT
= 0,
74 LTTNG_KERNEL_BYTECODE_FILTER_REJECT
= 1,
77 struct lttng_kernel_bytecode_filter_ctx
{
78 enum lttng_kernel_bytecode_filter_result result
;
82 const struct lttng_kernel_type_integer
*lttng_kernel_get_type_integer(const struct lttng_kernel_type_common
*type
)
84 if (type
->type
!= lttng_kernel_type_integer
)
86 return container_of(type
, const struct lttng_kernel_type_integer
, parent
);
90 const struct lttng_kernel_type_string
*lttng_kernel_get_type_string(const struct lttng_kernel_type_common
*type
)
92 if (type
->type
!= lttng_kernel_type_string
)
94 return container_of(type
, const struct lttng_kernel_type_string
, parent
);
98 const struct lttng_kernel_type_enum
*lttng_kernel_get_type_enum(const struct lttng_kernel_type_common
*type
)
100 if (type
->type
!= lttng_kernel_type_enum
)
102 return container_of(type
, const struct lttng_kernel_type_enum
, parent
);
106 const struct lttng_kernel_type_array
*lttng_kernel_get_type_array(const struct lttng_kernel_type_common
*type
)
108 if (type
->type
!= lttng_kernel_type_array
)
110 return container_of(type
, const struct lttng_kernel_type_array
, parent
);
114 const struct lttng_kernel_type_sequence
*lttng_kernel_get_type_sequence(const struct lttng_kernel_type_common
*type
)
116 if (type
->type
!= lttng_kernel_type_sequence
)
118 return container_of(type
, const struct lttng_kernel_type_sequence
, parent
);
122 const struct lttng_kernel_type_struct
*lttng_kernel_get_type_struct(const struct lttng_kernel_type_common
*type
)
124 if (type
->type
!= lttng_kernel_type_struct
)
126 return container_of(type
, const struct lttng_kernel_type_struct
, parent
);
130 const struct lttng_kernel_type_variant
*lttng_kernel_get_type_variant(const struct lttng_kernel_type_common
*type
)
132 if (type
->type
!= lttng_kernel_type_variant
)
134 return container_of(type
, const struct lttng_kernel_type_variant
, parent
);
137 static inline bool lttng_kernel_type_is_bytewise_integer(const struct lttng_kernel_type_common
*type
)
139 const struct lttng_kernel_type_integer
*type_integer
= lttng_kernel_get_type_integer(type
);
143 switch (type_integer
->size
) {
144 case 8: /* Fall-through. */
145 case 16: /* Fall-through. */
146 case 32: /* Fall-through. */
155 int lttng_kernel_interpret_event_filter(const struct lttng_kernel_event_common
*event
,
156 const char *interpreter_stack_data
,
157 struct lttng_probe_ctx
*probe_ctx
,
158 void *event_filter_ctx
);
160 #endif /* _LTTNG_EVENTS_INTERNAL_H */