Remove the LTTNG_PACKED macro
[lttng-ust.git] / include / lttng / ust-events.h
CommitLineData
8020ceb5 1/*
c0c0989a 2 * SPDX-License-Identifier: MIT
8020ceb5 3 *
c0c0989a 4 * Copyright (C) 2010-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
8020ceb5
MD
5 *
6 * Holds LTTng per-session event registry.
8020ceb5
MD
7 */
8
c0c0989a
MJ
9#ifndef _LTTNG_UST_EVENTS_H
10#define _LTTNG_UST_EVENTS_H
11
9f3fdbc6 12#include <urcu/list.h>
1f18504e 13#include <urcu/hlist.h>
b4051ad8 14#include <stddef.h>
9f3fdbc6 15#include <stdint.h>
4318ae1b
MD
16#include <lttng/ust-abi.h>
17#include <lttng/ust-tracer.h>
2ae57758 18#include <lttng/ust-endian.h>
20f1eee7 19#include <float.h>
d58d1454
MD
20#include <errno.h>
21#include <urcu/ref.h>
22#include <pthread.h>
8020ceb5 23
6453d237
MD
24#ifdef __cplusplus
25extern "C" {
26#endif
27
19d8b1b3
MD
28#define LTTNG_UST_UUID_LEN 16
29
71d31690
MD
30/*
31 * Tracepoint provider version. Compatibility based on the major number.
32 * Older tracepoint providers can always register to newer lttng-ust
33 * library, but the opposite is rejected: a newer tracepoint provider is
34 * rejected by an older lttng-ust library.
35 */
04f0b55a 36#define LTTNG_UST_PROVIDER_MAJOR 2
71d31690
MD
37#define LTTNG_UST_PROVIDER_MINOR 0
38
7dd08bec 39struct lttng_channel;
f69fe5fb 40struct lttng_ust_session;
4cfec15c 41struct lttng_ust_lib_ring_buffer_ctx;
25cff019 42struct lttng_ust_event_field;
8020ceb5 43
37d5e202
MD
44/*
45 * Data structures used by tracepoint event declarations, and by the
a084756d 46 * tracer.
37d5e202
MD
47 */
48
8020ceb5
MD
49/* Type description */
50
a084756d
MD
51enum lttng_ust_type {
52 lttng_ust_type_integer,
53 lttng_ust_type_string,
54 lttng_ust_type_float,
55 lttng_ust_type_dynamic,
56 lttng_ust_type_enum,
57 lttng_ust_type_array,
58 lttng_ust_type_sequence,
59 lttng_ust_type_struct,
60 NR_LTTNG_UST_TYPE,
8020ceb5
MD
61};
62
a084756d
MD
63enum lttng_ust_string_encoding {
64 lttng_ust_string_encoding_none = 0,
65 lttng_ust_string_encoding_UTF8 = 1,
66 lttng_ust_string_encoding_ASCII = 2,
67 NR_LTTNG_UST_STRING_ENCODING,
8020ceb5
MD
68};
69
1a37a873 70struct lttng_ust_enum_value {
a6f80644
MD
71 unsigned long long value;
72 unsigned int signedness:1;
73};
74
1a37a873
MD
75enum lttng_ust_enum_entry_option {
76 LTTNG_UST_ENUM_ENTRY_OPTION_IS_AUTO = 1U << 0,
3e762260
PP
77};
78
891d6b55
MD
79/*
80 * Enumeration entry description
81 *
82 * IMPORTANT: this structure is part of the ABI between the probe and
83 * UST. Fields need to be only added at the end, never reordered, never
84 * removed.
85 *
86 * The field @struct_size should be used to determine the size of the
87 * structure. It should be queried before using additional fields added
88 * at the end of the structure.
89 */
90
91struct lttng_ust_enum_entry {
92 uint32_t struct_size;
93
1a37a873 94 struct lttng_ust_enum_value start, end; /* start and end are inclusive */
8020ceb5 95 const char *string;
891d6b55
MD
96 unsigned int options;
97
98 /* End of base ABI. Fields below should be used after checking struct_size. */
8020ceb5
MD
99};
100
a084756d
MD
101/*
102 * struct lttng_ust_type_common is fixed-size. Its children inherits
103 * from it by embedding struct lttng_ust_type_common as its first field.
104 */
105struct lttng_ust_type_common {
106 enum lttng_ust_type type;
107};
108
109struct lttng_ust_type_integer {
110 struct lttng_ust_type_common parent;
111 uint32_t struct_size;
8020ceb5
MD
112 unsigned int size; /* in bits */
113 unsigned short alignment; /* in bits */
114 unsigned int signedness:1;
115 unsigned int reverse_byte_order:1;
116 unsigned int base; /* 2, 8, 10, 16, for pretty print */
a084756d
MD
117};
118
119#define lttng_ust_type_integer_define(_type, _byte_order, _base) \
120 ((struct lttng_ust_type_common *) __LTTNG_COMPOUND_LITERAL(struct lttng_ust_type_integer, { \
121 .parent = { \
122 .type = lttng_ust_type_integer, \
123 }, \
124 .struct_size = sizeof(struct lttng_ust_type_integer), \
125 .size = sizeof(_type) * CHAR_BIT, \
126 .alignment = lttng_alignof(_type) * CHAR_BIT, \
127 .signedness = lttng_is_signed_type(_type), \
128 .reverse_byte_order = _byte_order != BYTE_ORDER, \
129 .base = _base, \
130 }))
131
132struct lttng_ust_type_float {
133 struct lttng_ust_type_common parent;
134 uint32_t struct_size;
135 unsigned int exp_dig; /* exponent digits, in bits */
136 unsigned int mant_dig; /* mantissa digits, in bits */
137 unsigned short alignment; /* in bits */
138 unsigned int reverse_byte_order:1;
8020ceb5
MD
139};
140
d3ed854b
MD
141/*
142 * Only float and double are supported. long double is not supported at
143 * the moment.
144 */
89080a49 145#define lttng_ust_float_mant_dig(_type) \
20f1eee7
MD
146 (sizeof(_type) == sizeof(float) ? FLT_MANT_DIG \
147 : (sizeof(_type) == sizeof(double) ? DBL_MANT_DIG \
d3ed854b 148 : 0))
20f1eee7 149
a084756d
MD
150#define lttng_ust_type_float_define(_type) \
151 ((struct lttng_ust_type_common *) __LTTNG_COMPOUND_LITERAL(struct lttng_ust_type_float, { \
152 .parent = { \
153 .type = lttng_ust_type_float, \
154 }, \
155 .struct_size = sizeof(struct lttng_ust_type_float), \
156 .exp_dig = sizeof(_type) * CHAR_BIT \
89080a49
MD
157 - lttng_ust_float_mant_dig(_type), \
158 .mant_dig = lttng_ust_float_mant_dig(_type), \
a084756d
MD
159 .alignment = lttng_alignof(_type) * CHAR_BIT, \
160 .reverse_byte_order = BYTE_ORDER != FLOAT_WORD_ORDER, \
161 }))
162
163
164struct lttng_ust_type_string {
165 struct lttng_ust_type_common parent;
166 uint32_t struct_size;
167 enum lttng_ust_string_encoding encoding;
20f1eee7
MD
168};
169
a084756d
MD
170struct lttng_ust_type_enum {
171 struct lttng_ust_type_common parent;
172 uint32_t struct_size;
173 struct lttng_ust_enum_desc *desc; /* Enumeration mapping */
174 struct lttng_ust_type_common *container_type;
175};
176
177struct lttng_ust_type_array {
178 struct lttng_ust_type_common parent;
179 uint32_t struct_size;
180 struct lttng_ust_type_common *elem_type;
181 unsigned int length; /* Num. elems. */
182 unsigned int alignment;
183 enum lttng_ust_string_encoding encoding;
184};
185
186struct lttng_ust_type_sequence {
187 struct lttng_ust_type_common parent;
188 uint32_t struct_size;
189 const char *length_name; /* Length field name. */
190 struct lttng_ust_type_common *elem_type;
191 unsigned int alignment; /* Alignment before elements. */
192 enum lttng_ust_string_encoding encoding;
193};
194
195struct lttng_ust_type_struct {
196 struct lttng_ust_type_common parent;
197 uint32_t struct_size;
198 unsigned int nr_fields;
199 struct lttng_ust_event_field **fields; /* Array of pointers to fields. */
200 unsigned int alignment;
8020ceb5
MD
201};
202
891d6b55
MD
203/*
204 * Enumeration description
205 *
206 * IMPORTANT: this structure is part of the ABI between the probe and
207 * UST. Fields need to be only added at the end, never reordered, never
208 * removed.
209 *
210 * The field @struct_size should be used to determine the size of the
211 * structure. It should be queried before using additional fields added
212 * at the end of the structure.
213 */
214
215struct lttng_ust_enum_desc {
216 uint32_t struct_size;
217
8020ceb5 218 const char *name;
a084756d 219 struct lttng_ust_enum_entry **entries;
c785c634 220 unsigned int nr_entries;
891d6b55
MD
221
222 /* End of base ABI. Fields below should be used after checking struct_size. */
8020ceb5
MD
223};
224
180901e6
MD
225/*
226 * Event field description
227 *
228 * IMPORTANT: this structure is part of the ABI between the probe and
229 * UST. Fields need to be only added at the end, never reordered, never
230 * removed.
25cff019
MD
231 *
232 * The field @struct_size should be used to determine the size of the
233 * structure. It should be queried before using additional fields added
234 * at the end of the structure.
180901e6 235 */
8020ceb5 236
25cff019
MD
237struct lttng_ust_event_field {
238 uint32_t struct_size;
239
8020ceb5 240 const char *name;
a084756d 241 struct lttng_ust_type_common *type;
25cff019
MD
242 unsigned int nowrite:1, /* do not write into trace */
243 nofilter:1; /* do not consider for filter */
244
245 /* End of base ABI. Fields below should be used after checking struct_size. */
8020ceb5
MD
246};
247
37d5e202 248
dc11f93f
MD
249/*
250 * IMPORTANT: this structure is part of the ABI between the probe and
251 * UST. Fields need to be only added at the end, never reordered, never
252 * removed.
253 *
254 * The field @struct_size should be used to determine the size of the
255 * structure. It should be queried before using additional fields added
256 * at the end of the structure.
257 */
258struct lttng_ust_event_desc {
259 uint32_t struct_size; /* Size of this structure. */
dc177d11 260
37d5e202 261 const char *name;
fbdeb5ec 262 void (*probe_callback)(void);
a084756d
MD
263 struct lttng_event_ctx *ctx; /* context */
264 struct lttng_ust_event_field **fields; /* event payload */
37d5e202
MD
265 unsigned int nr_fields;
266 const int **loglevel;
dc11f93f
MD
267 const char *signature; /* Argument types/names received */
268 const char **model_emf_uri;
269
270 /* End of base ABI. Fields below should be used after checking struct_size. */
37d5e202
MD
271};
272
dc11f93f
MD
273/*
274 * IMPORTANT: this structure is part of the ABI between the probe and
275 * UST. Fields need to be only added at the end, never reordered, never
276 * removed.
277 *
278 * The field @struct_size should be used to determine the size of the
279 * structure. It should be queried before using additional fields added
280 * at the end of the structure.
281 */
282struct lttng_ust_probe_desc {
283 uint32_t struct_size; /* Size of this structure. */
284
37d5e202 285 const char *provider;
a084756d 286 struct lttng_ust_event_desc **event_desc;
37d5e202
MD
287 unsigned int nr_events;
288 struct cds_list_head head; /* chain registered probes */
6715d7d1
MD
289 struct cds_list_head lazy_init_head;
290 int lazy; /* lazy registration */
71d31690
MD
291 uint32_t major;
292 uint32_t minor;
dc11f93f
MD
293
294 /* End of base ABI. Fields below should be used after checking struct_size. */
8020ceb5
MD
295};
296
37d5e202
MD
297/* Data structures used by the tracer. */
298
8a92ed2a 299/*
04aa13f8 300 * Bytecode interpreter return value masks.
8a92ed2a 301 */
c7abfd47
MD
302enum lttng_ust_bytecode_interpreter_ret {
303 LTTNG_UST_BYTECODE_INTERPRETER_DISCARD = 0,
304 LTTNG_UST_BYTECODE_INTERPRETER_RECORD_FLAG = (1ULL << 0),
8a92ed2a
MD
305 /* Other bits are kept for future use. */
306};
307
d37ecb3f 308struct lttng_interpreter_output;
362a65de 309struct lttng_ust_bytecode_runtime_private;
d37ecb3f 310
73d37531 311/*
5469a374
MD
312 * IMPORTANT: this structure is part of the ABI between the probe and
313 * UST. Fields need to be only added at the end, never reordered, never
314 * removed.
315 *
316 * The field @struct_size should be used to determine the size of the
317 * structure. It should be queried before using additional fields added
318 * at the end of the structure.
73d37531 319 */
5469a374
MD
320struct lttng_ust_bytecode_runtime {
321 uint32_t struct_size; /* Size of this structure. */
362a65de 322
5469a374 323 struct lttng_ust_bytecode_runtime_private *priv;
f488575f 324 /* Associated bytecode */
c42416df
FD
325 union {
326 uint64_t (*filter)(void *interpreter_data,
327 const char *interpreter_stack_data);
d37ecb3f
FD
328 uint64_t (*capture)(void *interpreter_data,
329 const char *interpreter_stack_data,
330 struct lttng_interpreter_output *interpreter_output);
c42416df 331 } interpreter_funcs;
e58095ef 332 struct cds_list_head node; /* list of bytecode runtime in event */
5469a374
MD
333
334 /* End of base ABI. Fields below should be used after checking struct_size. */
e58095ef
MD
335};
336
8020ceb5 337/*
7dd08bec
MD
338 * lttng_event structure is referred to by the tracing fast path. It
339 * must be kept small.
180901e6
MD
340 *
341 * IMPORTANT: this structure is part of the ABI between the probe and
342 * UST. Fields need to be only added at the end, never reordered, never
343 * removed.
8020ceb5 344 */
68bb7559 345
daacdbfc 346struct lttng_ust_ctx;
80333dfa
MD
347struct lttng_ust_event_common_private;
348
808edfc8
MD
349enum lttng_ust_event_type {
350 LTTNG_UST_EVENT_TYPE_RECORDER = 0,
351 LTTNG_UST_EVENT_TYPE_NOTIFIER = 1,
352};
353
93cfd247 354/*
6d35572a
MD
355 * IMPORTANT: this structure is part of the ABI between the probe and
356 * UST. Fields need to be only added at the end, never reordered, never
357 * removed.
358 *
93cfd247
MD
359 * struct lttng_ust_event_common is the common ancestor of the various
360 * public event actions. Inheritance is done by composition: The parent
361 * has a pointer to its child, and the child has a pointer to its
362 * parent. Inheritance of those public structures is done by composition
363 * to ensure both parent and child structures can be extended.
364 *
365 * The field @struct_size should be used to determine the size of the
366 * structure. It should be queried before using additional fields added
367 * at the end of the structure.
368 */
7ee76145 369struct lttng_ust_event_common {
80333dfa 370 uint32_t struct_size; /* Size of this structure. */
dc177d11 371
80333dfa
MD
372 struct lttng_ust_event_common_private *priv; /* Private event interface */
373
808edfc8 374 enum lttng_ust_event_type type;
ba99fbe2
MD
375 void *child; /* Pointer to child, for inheritance by aggregation. */
376
80333dfa
MD
377 int enabled;
378 int has_enablers_without_bytecode;
5469a374 379 /* list of struct lttng_ust_bytecode_runtime, sorted by seqnum */
80333dfa 380 struct cds_list_head filter_bytecode_runtime_head;
93cfd247
MD
381
382 /* End of base ABI. Fields below should be used after checking struct_size. */
80333dfa
MD
383};
384
2e70391c 385struct lttng_ust_event_recorder_private;
68bb7559 386
93cfd247 387/*
6d35572a
MD
388 * IMPORTANT: this structure is part of the ABI between the probe and
389 * UST. Fields need to be only added at the end, never reordered, never
390 * removed.
391 *
93cfd247
MD
392 * struct lttng_ust_event_recorder is the action for recording events
393 * into a ring buffer. It inherits from struct lttng_ust_event_common
394 * by composition to ensure both parent and child structure are
395 * extensible.
396 *
397 * The field @struct_size should be used to determine the size of the
398 * structure. It should be queried before using additional fields added
399 * at the end of the structure.
400 */
2e70391c
MD
401struct lttng_ust_event_recorder {
402 uint32_t struct_size; /* Size of this structure. */
dc177d11 403
ba99fbe2 404 struct lttng_ust_event_common *parent; /* Inheritance by aggregation. */
2e70391c 405 struct lttng_ust_event_recorder_private *priv; /* Private event record interface */
68bb7559 406
8020ceb5 407 unsigned int id;
68bb7559 408 struct lttng_channel *chan;
daacdbfc 409 struct lttng_ust_ctx *ctx;
93cfd247
MD
410
411 /* End of base ABI. Fields below should be used after checking struct_size. */
8020ceb5
MD
412};
413
115db533
MD
414struct lttng_ust_event_notifier_private;
415
93cfd247 416/*
6d35572a
MD
417 * IMPORTANT: this structure is part of the ABI between the probe and
418 * UST. Fields need to be only added at the end, never reordered, never
419 * removed.
420 *
93cfd247
MD
421 * struct lttng_ust_event_notifier is the action for sending
422 * notifications. It inherits from struct lttng_ust_event_common
423 * by composition to ensure both parent and child structure are
424 * extensible.
425 *
426 * The field @struct_size should be used to determine the size of the
427 * structure. It should be queried before using additional fields added
428 * at the end of the structure.
429 */
d7d45c0d 430struct lttng_ust_event_notifier {
115db533 431 uint32_t struct_size; /* Size of this structure. */
105cf2eb 432
ba99fbe2 433 struct lttng_ust_event_common *parent; /* Inheritance by aggregation. */
115db533
MD
434 struct lttng_ust_event_notifier_private *priv; /* Private event notifier interface */
435
d7d45c0d 436 void (*notification_send)(struct lttng_ust_event_notifier *event_notifier,
cab88ff8 437 const char *stack_data);
d37ecb3f 438 struct cds_list_head capture_bytecode_runtime_head;
93cfd247
MD
439
440 /* End of base ABI. Fields below should be used after checking struct_size. */
d8d2416d
FD
441};
442
5198080d 443struct lttng_ust_lib_ring_buffer_channel;
38fae1d3 444struct lttng_ust_shm_handle;
a880bae5 445struct lttng_ust_channel_ops_private;
8d8a24c8 446
180901e6
MD
447/*
448 * IMPORTANT: this structure is part of the ABI between the probe and
449 * UST. Fields need to be only added at the end, never reordered, never
450 * removed.
49926dbd
MD
451 *
452 * The field @struct_size should be used to determine the size of the
453 * structure. It should be queried before using additional fields added
454 * at the end of the structure.
180901e6 455 */
49926dbd
MD
456struct lttng_ust_channel_ops {
457 uint32_t struct_size;
458
a880bae5
MD
459 struct lttng_ust_channel_ops_private *priv; /* Private channel ops interface */
460
4cfec15c 461 int (*event_reserve)(struct lttng_ust_lib_ring_buffer_ctx *ctx,
8020ceb5 462 uint32_t event_id);
4cfec15c 463 void (*event_commit)(struct lttng_ust_lib_ring_buffer_ctx *ctx);
74d81a6c
MD
464 void (*event_write)(struct lttng_ust_lib_ring_buffer_ctx *ctx,
465 const void *src, size_t len);
a44c74d9
MD
466 void (*event_strcpy)(struct lttng_ust_lib_ring_buffer_ctx *ctx,
467 const char *src, size_t len);
49926dbd
MD
468
469 /* End of base ABI. Fields below should be used after checking struct_size. */
8020ceb5
MD
470};
471
180901e6
MD
472/*
473 * IMPORTANT: this structure is part of the ABI between the probe and
474 * UST. Fields need to be only added at the end, never reordered, never
475 * removed.
476 */
7dd08bec 477struct lttng_channel {
a3f61e7f
MD
478 /*
479 * The pointers located in this private data are NOT safe to be
480 * dereferenced by the consumer. The only operations the
481 * consumer process is designed to be allowed to do is to read
482 * and perform subbuffer flush.
483 */
5198080d 484 struct lttng_ust_lib_ring_buffer_channel *chan; /* Channel buffers */
976fe9ea 485 int enabled;
daacdbfc 486 struct lttng_ust_ctx *ctx;
8020ceb5 487 /* Event ID management */
f69fe5fb 488 struct lttng_ust_session *session;
0a42beb6 489 int objd; /* Object associated to channel */
e58095ef 490 struct cds_list_head node; /* Channel list in session */
a084756d 491 struct lttng_ust_channel_ops *ops;
8020ceb5 492 int header_type; /* 0: unset, 1: compact, 2: large */
38fae1d3 493 struct lttng_ust_shm_handle *handle; /* shared-memory handle */
a3f61e7f 494
74d81a6c 495 /* Channel ID */
a3f61e7f 496 unsigned int id;
fd17d7ce 497 enum lttng_ust_abi_chan_type type;
19d8b1b3 498 unsigned char uuid[LTTNG_UST_UUID_LEN]; /* Trace session unique ID */
ac6b4ac6 499 int tstate:1; /* Transient enable state */
8020ceb5
MD
500};
501
2a9d9339
MD
502/*
503 * IMPORTANT: this structure is part of the ABI between the probe and
504 * UST. Fields need to be only added at the end, never reordered, never
505 * removed.
506 *
507 * The field @struct_size should be used to determine the size of the
508 * structure. It should be queried before using additional fields added
509 * at the end of the structure.
510 */
511struct lttng_ust_stack_ctx {
512 uint32_t struct_size; /* Size of this structure */
513
2e70391c 514 struct lttng_ust_event_recorder *event_recorder;
daacdbfc
MD
515 struct lttng_ust_ctx *chan_ctx; /* RCU dereferenced. */
516 struct lttng_ust_ctx *event_ctx; /* RCU dereferenced. */
2a9d9339
MD
517
518 /* End of base ABI. Fields below should be used after checking struct_size. */
53569322
MD
519};
520
bdb12629
MD
521struct lttng_ust_session_private;
522
180901e6
MD
523/*
524 * IMPORTANT: this structure is part of the ABI between the probe and
525 * UST. Fields need to be only added at the end, never reordered, never
526 * removed.
6d35572a
MD
527 *
528 * The field @struct_size should be used to determine the size of the
529 * structure. It should be queried before using additional fields added
530 * at the end of the structure.
180901e6 531 */
f69fe5fb 532struct lttng_ust_session {
bd640d74 533 uint32_t struct_size; /* Size of this structure */
dc177d11 534
bdb12629
MD
535 struct lttng_ust_session_private *priv; /* Private session interface */
536
e58095ef 537 int active; /* Is trace session active ? */
6d35572a
MD
538
539 /* End of base ABI. Fields below should be used after checking struct_size. */
8020ceb5
MD
540};
541
dc11f93f
MD
542int lttng_ust_probe_register(struct lttng_ust_probe_desc *desc);
543void lttng_ust_probe_unregister(struct lttng_ust_probe_desc *desc);
9f3fdbc6 544
fc80554e 545/*
0af0bdb2
MJ
546 * Applications that change their procname and need the new value to be
547 * reflected in the procname event context have to call this function to clear
548 * the internally cached value. This should not be called from a signal
549 * handler.
fc80554e 550 */
0af0bdb2 551void lttng_ust_context_procname_reset(void);
d58d1454 552
6453d237
MD
553#ifdef __cplusplus
554}
555#endif
556
51489cad 557#endif /* _LTTNG_UST_EVENTS_H */
This page took 0.092923 seconds and 4 git commands to generate.