/* End of base ABI. Fields below should be used after checking struct_size. */
};
-#define __type_integer(_type, _byte_order, _base, _encoding) \
- { \
- .atype = atype_integer, \
- .u = \
- { \
- .integer = \
- { \
- .size = sizeof(_type) * CHAR_BIT, \
- .alignment = lttng_alignof(_type) * CHAR_BIT, \
- .signedness = lttng_is_signed_type(_type), \
- .reverse_byte_order = _byte_order != BYTE_ORDER, \
- .base = _base, \
- .encoding = lttng_encode_##_encoding, \
+#define __type_integer(_type, _byte_order, _base, _encoding) \
+ { \
+ .atype = atype_integer, \
+ .u = { \
+ .integer = { \
+ .size = sizeof(_type) * CHAR_BIT, \
+ .alignment = lttng_alignof(_type) * CHAR_BIT, \
+ .signedness = lttng_is_signed_type(_type), \
+ .reverse_byte_order = _byte_order != BYTE_ORDER, \
+ .base = _base, \
+ .encoding = lttng_encode_##_encoding, \
} \
}, \
} \
: (sizeof(_type) == sizeof(double) ? DBL_MANT_DIG \
: 0))
-#define __type_float(_type) \
- { \
- .atype = atype_float, \
- .u = \
- { \
- ._float = \
- { \
- .exp_dig = sizeof(_type) * CHAR_BIT \
- - _float_mant_dig(_type), \
- .mant_dig = _float_mant_dig(_type), \
- .alignment = lttng_alignof(_type) * CHAR_BIT, \
- .reverse_byte_order = BYTE_ORDER != FLOAT_WORD_ORDER, \
- } \
- } \
- } \
+#define __type_float(_type) \
+ { \
+ .atype = atype_float, \
+ .u = { \
+ ._float = { \
+ .exp_dig = sizeof(_type) * CHAR_BIT \
+ - _float_mant_dig(_type), \
+ .mant_dig = _float_mant_dig(_type), \
+ .alignment = lttng_alignof(_type) * CHAR_BIT, \
+ .reverse_byte_order = BYTE_ORDER != FLOAT_WORD_ORDER, \
+ } \
+ } \
+ } \
#define LTTNG_UST_FLOAT_TYPE_PADDING 24
struct lttng_float_type {
/* End of base ABI. Fields below should be used after checking struct_size. */
};
-enum lttng_ust_dynamic_type {
- LTTNG_UST_DYNAMIC_TYPE_NONE,
- LTTNG_UST_DYNAMIC_TYPE_S8,
- LTTNG_UST_DYNAMIC_TYPE_S16,
- LTTNG_UST_DYNAMIC_TYPE_S32,
- LTTNG_UST_DYNAMIC_TYPE_S64,
- LTTNG_UST_DYNAMIC_TYPE_U8,
- LTTNG_UST_DYNAMIC_TYPE_U16,
- LTTNG_UST_DYNAMIC_TYPE_U32,
- LTTNG_UST_DYNAMIC_TYPE_U64,
- LTTNG_UST_DYNAMIC_TYPE_FLOAT,
- LTTNG_UST_DYNAMIC_TYPE_DOUBLE,
- LTTNG_UST_DYNAMIC_TYPE_STRING,
- _NR_LTTNG_UST_DYNAMIC_TYPES,
-};
-
-struct lttng_ctx_value {
- enum lttng_ust_dynamic_type sel;
- union {
- int64_t s64;
- uint64_t u64;
- const char *str;
- double d;
- } u;
-};
-
-struct lttng_perf_counter_field;
-
-#define LTTNG_UST_CTX_FIELD_PADDING 40
-struct lttng_ctx_field {
- struct lttng_ust_event_field event_field;
- size_t (*get_size)(struct lttng_ctx_field *field, size_t offset);
- void (*record)(struct lttng_ctx_field *field,
- struct lttng_ust_lib_ring_buffer_ctx *ctx,
- struct lttng_channel *chan);
- void (*get_value)(struct lttng_ctx_field *field,
- struct lttng_ctx_value *value);
- union {
- struct lttng_perf_counter_field *perf_counter;
- char padding[LTTNG_UST_CTX_FIELD_PADDING];
- } u;
- void (*destroy)(struct lttng_ctx_field *field);
- char *field_name; /* Has ownership, dynamically allocated. */
-};
-
-#define LTTNG_UST_CTX_PADDING 20
-struct lttng_ctx {
- struct lttng_ctx_field *fields;
- unsigned int nr_fields;
- unsigned int allocated_fields;
- unsigned int largest_align;
- char padding[LTTNG_UST_CTX_PADDING];
-};
/*
* IMPORTANT: this structure is part of the ABI between the probe and
*/
struct lttng_ust_event_desc {
uint32_t struct_size; /* Size of this structure. */
+
const char *name;
void (*probe_callback)(void);
const struct lttng_event_ctx *ctx; /* context */
struct lttng_ust_bytecode_runtime_private;
/*
- * This structure is used in the probes. More specifically, the
- * `interpreter_funcs` and `node` fields are explicity used in the
- * probes. When modifying this structure we must not change the layout
- * of these two fields as it is considered ABI.
+ * IMPORTANT: this structure is part of the ABI between the probe and
+ * UST. Fields need to be only added at the end, never reordered, never
+ * removed.
+ *
+ * The field @struct_size should be used to determine the size of the
+ * structure. It should be queried before using additional fields added
+ * at the end of the structure.
*/
-struct lttng_bytecode_runtime {
- struct lttng_ust_bytecode_runtime_private *priv;
+struct lttng_ust_bytecode_runtime {
+ uint32_t struct_size; /* Size of this structure. */
+ struct lttng_ust_bytecode_runtime_private *priv;
/* Associated bytecode */
union {
uint64_t (*filter)(void *interpreter_data,
struct lttng_interpreter_output *interpreter_output);
} interpreter_funcs;
struct cds_list_head node; /* list of bytecode runtime in event */
+
+ /* End of base ABI. Fields below should be used after checking struct_size. */
};
/*
* removed.
*/
+struct lttng_ust_ctx;
struct lttng_ust_event_common_private;
enum lttng_ust_event_type {
*/
struct lttng_ust_event_common {
uint32_t struct_size; /* Size of this structure. */
+
struct lttng_ust_event_common_private *priv; /* Private event interface */
enum lttng_ust_event_type type;
int enabled;
int has_enablers_without_bytecode;
- /* list of struct lttng_bytecode_runtime, sorted by seqnum */
+ /* list of struct lttng_ust_bytecode_runtime, sorted by seqnum */
struct cds_list_head filter_bytecode_runtime_head;
/* End of base ABI. Fields below should be used after checking struct_size. */
*/
struct lttng_ust_event_recorder {
uint32_t struct_size; /* Size of this structure. */
+
struct lttng_ust_event_common *parent; /* Inheritance by aggregation. */
struct lttng_ust_event_recorder_private *priv; /* Private event record interface */
unsigned int id;
struct lttng_channel *chan;
- struct lttng_ctx *ctx;
+ struct lttng_ust_ctx *ctx;
/* End of base ABI. Fields below should be used after checking struct_size. */
};
*/
struct lttng_ust_event_notifier {
uint32_t struct_size; /* Size of this structure. */
+
struct lttng_ust_event_common *parent; /* Inheritance by aggregation. */
struct lttng_ust_event_notifier_private *priv; /* Private event notifier interface */
/* End of base ABI. Fields below should be used after checking struct_size. */
};
-struct channel;
+struct lttng_ust_lib_ring_buffer_channel;
struct lttng_ust_shm_handle;
/*
* packet. Note that the size returned is only a hint, since it
* may change due to concurrent writes.
*/
- size_t (*packet_avail_size)(struct channel *chan,
+ size_t (*packet_avail_size)(struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle);
- int (*is_finalized)(struct channel *chan);
- int (*is_disabled)(struct channel *chan);
- int (*flush_buffer)(struct channel *chan, struct lttng_ust_shm_handle *handle);
+ int (*is_finalized)(struct lttng_ust_lib_ring_buffer_channel *chan);
+ int (*is_disabled)(struct lttng_ust_lib_ring_buffer_channel *chan);
+ int (*flush_buffer)(struct lttng_ust_lib_ring_buffer_channel *chan,
+ struct lttng_ust_shm_handle *handle);
void (*event_strcpy)(struct lttng_ust_lib_ring_buffer_ctx *ctx,
const char *src, size_t len);
* consumer process is designed to be allowed to do is to read
* and perform subbuffer flush.
*/
- struct channel *chan; /* Channel buffers */
+ struct lttng_ust_lib_ring_buffer_channel *chan; /* Channel buffers */
int enabled;
- struct lttng_ctx *ctx;
+ struct lttng_ust_ctx *ctx;
/* Event ID management */
struct lttng_session *session;
int objd; /* Object associated to channel */
int tstate:1; /* Transient enable state */
};
-#define LTTNG_UST_STACK_CTX_PADDING 32
-struct lttng_stack_ctx {
- struct lttng_ust_event_recorder *event_recorder;
- struct lttng_ctx *chan_ctx; /* RCU dereferenced. */
- struct lttng_ctx *event_ctx; /* RCU dereferenced. */
- char padding[LTTNG_UST_STACK_CTX_PADDING];
-};
-
-#define LTTNG_UST_EVENT_HT_BITS 12
-#define LTTNG_UST_EVENT_HT_SIZE (1U << LTTNG_UST_EVENT_HT_BITS)
-
-struct lttng_ust_event_ht {
- struct cds_hlist_head table[LTTNG_UST_EVENT_HT_SIZE];
-};
-
-#define LTTNG_UST_EVENT_NOTIFIER_HT_BITS 12
-#define LTTNG_UST_EVENT_NOTIFIER_HT_SIZE (1U << LTTNG_UST_EVENT_NOTIFIER_HT_BITS)
-struct lttng_ust_event_notifier_ht {
- struct cds_hlist_head table[LTTNG_UST_EVENT_NOTIFIER_HT_SIZE];
-};
+/*
+ * IMPORTANT: this structure is part of the ABI between the probe and
+ * UST. Fields need to be only added at the end, never reordered, never
+ * removed.
+ *
+ * The field @struct_size should be used to determine the size of the
+ * structure. It should be queried before using additional fields added
+ * at the end of the structure.
+ */
+struct lttng_ust_stack_ctx {
+ uint32_t struct_size; /* Size of this structure */
-#define LTTNG_UST_ENUM_HT_BITS 12
-#define LTTNG_UST_ENUM_HT_SIZE (1U << LTTNG_UST_ENUM_HT_BITS)
+ struct lttng_ust_event_recorder *event_recorder;
+ struct lttng_ust_ctx *chan_ctx; /* RCU dereferenced. */
+ struct lttng_ust_ctx *event_ctx; /* RCU dereferenced. */
-struct lttng_ust_enum_ht {
- struct cds_hlist_head table[LTTNG_UST_ENUM_HT_SIZE];
+ /* End of base ABI. Fields below should be used after checking struct_size. */
};
struct lttng_ust_session_private;
*/
struct lttng_session {
uint32_t struct_size; /* Size of this structure */
+
struct lttng_ust_session_private *priv; /* Private session interface */
int active; /* Is trace session active ? */
void lttng_ust_probe_unregister(struct lttng_ust_probe_desc *desc);
/*
- * Can be used by applications that change their procname to clear the ust cached value.
+ * Applications that change their procname and need the new value to be
+ * reflected in the procname event context have to call this function to clear
+ * the internally cached value. This should not be called from a signal
+ * handler.
*/
-void lttng_context_procname_reset(void);
-
-struct lttng_transport *lttng_transport_find(const char *name);
-
-int lttng_session_active(void);
-
-void lttng_ust_dl_update(void *ip);
+void lttng_ust_context_procname_reset(void);
#ifdef __cplusplus
}