/* Data structures used by the tracer. */
+/*
+ * 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.
+ *
+ * The probe_ctx is not const because it may be extended to add future
+ * fields which could be modified by callbacks.
+ */
+struct lttng_ust_probe_ctx {
+ uint32_t struct_size; /* Size of this structure. */
+
+ void *ip; /* caller ip address */
+
+ /* End of base ABI. Fields below should be used after checking struct_size. */
+};
+
/*
* lttng_event structure is referred to by the tracing fast path. It
* must be kept small.
int eval_filter; /* Need to evaluate filters */
int (*run_filter)(const struct lttng_ust_event_common *event,
const char *stack_data,
+ struct lttng_ust_probe_ctx *probe_ctx,
void *filter_ctx);
/* End of base ABI. Fields below should be used after checking struct_size. */
struct lttng_ust_notification_ctx {
uint32_t struct_size; /* Size of this structure. */
int eval_capture; /* Capture evaluation available. */
-
/* End of base ABI. Fields below should be used after checking struct_size. */
};
int eval_capture; /* Need to evaluate capture */
void (*notification_send)(const struct lttng_ust_event_notifier *event_notifier,
const char *stack_data,
+ struct lttng_ust_probe_ctx *probe_ctx,
struct lttng_ust_notification_ctx *notif_ctx);
/* End of base ABI. Fields below should be used after checking struct_size. */
struct lttng_ust_ring_buffer_channel;
struct lttng_ust_ring_buffer_ctx;
struct lttng_ust_ring_buffer_ctx_private;
+struct lttng_ust_probe_ctx;
/*
* ring buffer context
* alignment of the largest element
* in the payload
*/
- void *ip; /* caller ip address */
+ struct lttng_ust_probe_ctx *probe_ctx; /* Probe context */
/* Private ring buffer context, set by reserve callback. */
struct lttng_ust_ring_buffer_ctx_private *priv;
static inline
void lttng_ust_ring_buffer_ctx_init(struct lttng_ust_ring_buffer_ctx *ctx,
void *client_priv, size_t data_size, int largest_align,
- void *ip)
+ struct lttng_ust_probe_ctx *probe_ctx)
lttng_ust_notrace;
static inline
void lttng_ust_ring_buffer_ctx_init(struct lttng_ust_ring_buffer_ctx *ctx,
void *client_priv, size_t data_size, int largest_align,
- void *ip)
+ struct lttng_ust_probe_ctx *probe_ctx)
{
ctx->struct_size = sizeof(struct lttng_ust_ring_buffer_ctx);
ctx->client_priv = client_priv;
ctx->data_size = data_size;
ctx->largest_align = largest_align;
- ctx->ip = ip;
+ ctx->probe_ctx = probe_ctx;
ctx->priv = NULL;
}
* Perform UNION (||) of filter runtime list.
*/
#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS
-#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \
+#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \
static \
-void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PROTO(_args)) \
+void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PROTO(_args)) \
lttng_ust_notrace; \
static \
-void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PROTO(_args)) \
+void lttng_ust__event_probe__##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PROTO(_args)) \
{ \
struct lttng_ust_event_common *__event = (struct lttng_ust_event_common *) __tp_data; \
size_t __dynamic_len_idx = 0; \
const size_t __num_fields = LTTNG_UST__TP_ARRAY_SIZE(lttng_ust__event_fields___##_provider##___##_name) - 1; \
+ struct lttng_ust_probe_ctx __probe_ctx; \
union { \
size_t __dynamic_len[__num_fields]; \
char __interpreter_stack_data[2 * sizeof(unsigned long) * __num_fields]; \
struct lttng_ust_channel_buffer *__chan = lttng_ust__event_recorder->chan; \
struct lttng_ust_channel_common *__chan_common = __chan->parent; \
\
- if (!LTTNG_UST__TP_SESSION_CHECK(session, __chan_common->session)) \
+ if (!LTTNG_UST__TP_SESSION_CHECK(session, __chan_common->session)) \
return; \
if (caa_unlikely(!CMM_ACCESS_ONCE(__chan_common->session->active))) \
return; \
} \
if (caa_unlikely(!CMM_ACCESS_ONCE(__event->enabled))) \
return; \
- if (caa_unlikely(!LTTNG_UST_TP_RCU_LINK_TEST())) \
+ if (caa_unlikely(!LTTNG_UST_TP_RCU_LINK_TEST())) \
return; \
- if (caa_unlikely(CMM_ACCESS_ONCE(__event->eval_filter))) { \
+ __probe_ctx.struct_size = sizeof(struct lttng_ust_probe_ctx); \
+ __probe_ctx.ip = LTTNG_UST__TP_IP_PARAM(LTTNG_UST_TP_IP_PARAM); \
+ if (caa_unlikely(CMM_ACCESS_ONCE(__event->eval_filter))) { \
lttng_ust__event_prepare_interpreter_stack__##_provider##___##_name(__stackvar.__interpreter_stack_data, \
- LTTNG_UST__TP_ARGS_DATA_VAR(_args)); \
+ LTTNG_UST__TP_ARGS_DATA_VAR(_args)); \
__interpreter_stack_prepared = true; \
- if (caa_likely(__event->run_filter(__event, \
- __stackvar.__interpreter_stack_data, NULL) != LTTNG_UST_EVENT_FILTER_ACCEPT)) \
+ if (caa_likely(__event->run_filter(__event, \
+ __stackvar.__interpreter_stack_data, &__probe_ctx, NULL) != LTTNG_UST_EVENT_FILTER_ACCEPT)) \
return; \
} \
switch (__event->type) { \
case LTTNG_UST_EVENT_TYPE_RECORDER: \
{ \
- size_t __event_len, lttng_ust__event_align; \
+ size_t __event_len, lttng_ust__event_align; \
struct lttng_ust_event_recorder *lttng_ust__event_recorder = (struct lttng_ust_event_recorder *) __event->child; \
struct lttng_ust_channel_buffer *__chan = lttng_ust__event_recorder->chan; \
- struct lttng_ust_ring_buffer_ctx __ctx; \
+ struct lttng_ust_ring_buffer_ctx __ctx; \
\
__event_len = lttng_ust__event_get_size__##_provider##___##_name(__stackvar.__dynamic_len, \
LTTNG_UST__TP_ARGS_DATA_VAR(_args)); \
lttng_ust__event_align = lttng_ust__event_get_align__##_provider##___##_name(LTTNG_UST__TP_ARGS_VAR(_args)); \
lttng_ust_ring_buffer_ctx_init(&__ctx, lttng_ust__event_recorder, __event_len, lttng_ust__event_align, \
- LTTNG_UST__TP_IP_PARAM(LTTNG_UST_TP_IP_PARAM)); \
+ &__probe_ctx); \
__ret = __chan->ops->event_reserve(&__ctx); \
if (__ret < 0) \
return; \
\
if (caa_unlikely(!__interpreter_stack_prepared && __notif_ctx.eval_capture)) \
lttng_ust__event_prepare_interpreter_stack__##_provider##___##_name(__stackvar.__interpreter_stack_data, \
- LTTNG_UST__TP_ARGS_DATA_VAR(_args)); \
+ LTTNG_UST__TP_ARGS_DATA_VAR(_args)); \
\
- lttng_ust__event_notifier->notification_send(lttng_ust__event_notifier, \
+ lttng_ust__event_notifier->notification_send(lttng_ust__event_notifier, \
__stackvar.__interpreter_stack_data, \
+ &__probe_ctx, \
&__notif_ctx); \
break; \
} \
int link_failed;
int (*interpreter_func)(struct lttng_ust_bytecode_runtime *bytecode_runtime,
const char *interpreter_stack_data,
+ struct lttng_ust_probe_ctx *probe_ctx,
void *ctx);
struct cds_list_head node; /* list of bytecode runtime in event */
/*
struct lttng_ust_ctx_field {
const struct lttng_ust_event_field *event_field;
- size_t (*get_size)(void *priv, size_t offset);
- void (*record)(void *priv, struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan);
- void (*get_value)(void *priv, struct lttng_ust_ctx_value *value);
+ size_t (*get_size)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ size_t offset);
+ void (*record)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan);
+ void (*get_value)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ctx_value *value);
void (*destroy)(void *priv);
void *priv;
};
#include "common/dynamic-type.h"
struct lttng_ust_registered_context_provider;
+struct lttng_ust_probe_ctx;
/*
* Context value
uint32_t struct_size;
const char *name;
- size_t (*get_size)(void *priv, size_t offset);
- void (*record)(void *priv, struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan);
- void (*get_value)(void *priv, struct lttng_ust_ctx_value *value);
+ size_t (*get_size)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ size_t offset);
+ void (*record)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan);
+ void (*get_value)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ctx_value *value);
void *priv;
/* End of base ABI. Fields below should be used after checking struct_size. */
return NULL;
}
-static size_t get_size_cb(void *priv, size_t offset)
+static size_t get_size_cb(void *priv, struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ size_t offset)
{
struct lttng_ust_jni_ctx_entry *jctx;
size_t size = 0;
}
static void record_cb(void *priv,
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ring_buffer_ctx *ctx,
struct lttng_ust_channel_buffer *lttng_chan_buf)
{
}
}
-static void get_value_cb(void *priv, struct lttng_ust_ctx_value *value)
+static void get_value_cb(void *priv, struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ctx_value *value)
{
struct lttng_ust_jni_provider *jni_provider = (struct lttng_ust_jni_provider *) priv;
struct lttng_ust_jni_ctx_entry *jctx;
#include <lttng/ust-events.h>
void lttng_ust_context_set_event_notifier_group_provider(const char *name,
- size_t (*get_size)(void *priv, size_t offset),
- void (*record)(void *priv,
+ size_t (*get_size)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ size_t offset),
+ void (*record)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
struct lttng_ust_ring_buffer_ctx *ctx,
struct lttng_ust_channel_buffer *chan),
- void (*get_value)(void *priv,
+ void (*get_value)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
struct lttng_ust_ctx_value *value),
void *priv)
__attribute__((visibility("hidden")));
void lttng_event_notifier_notification_send(
const struct lttng_ust_event_notifier *event_notifier,
const char *stack_data,
+ struct lttng_ust_probe_ctx *probe_ctx,
struct lttng_ust_notification_ctx *notif_ctx)
{
/*
struct lttng_interpreter_output output;
if (capture_bc_runtime->interpreter_func(capture_bc_runtime,
- stack_data, &output) == LTTNG_UST_BYTECODE_INTERPRETER_OK)
+ stack_data, probe_ctx, &output) == LTTNG_UST_BYTECODE_INTERPRETER_OK)
notification_append_capture(¬if, &output);
else
notification_append_empty_capture(¬if);
int lttng_ust_interpret_event_filter(const struct lttng_ust_event_common *event,
const char *interpreter_stack_data,
+ struct lttng_ust_probe_ctx *probe_ctx,
void *filter_ctx)
__attribute__((visibility("hidden")));
int lttng_ust_context_set_provider_rcu(struct lttng_ust_ctx **_ctx,
const char *name,
- size_t (*get_size)(void *priv, size_t offset),
- void (*record)(void *priv, struct lttng_ust_ring_buffer_ctx *ctx,
+ size_t (*get_size)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ size_t offset),
+ void (*record)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ring_buffer_ctx *ctx,
struct lttng_ust_channel_buffer *chan),
- void (*get_value)(void *priv, struct lttng_ust_ctx_value *value),
+ void (*get_value)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ctx_value *value),
void *priv)
__attribute__((visibility("hidden")));
void lttng_ust_context_set_session_provider(const char *name,
- size_t (*get_size)(void *priv, size_t offset),
- void (*record)(void *priv, struct lttng_ust_ring_buffer_ctx *ctx,
+ size_t (*get_size)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ size_t offset),
+ void (*record)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ring_buffer_ctx *ctx,
struct lttng_ust_channel_buffer *chan),
- void (*get_value)(void *priv, struct lttng_ust_ctx_value *value),
+ void (*get_value)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ctx_value *value),
void *priv)
__attribute__((visibility("hidden")));
int lttng_bytecode_interpret_error(
struct lttng_ust_bytecode_runtime *bytecode_runtime __attribute__((unused)),
const char *stack_data __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
void *ctx __attribute__((unused)))
{
return LTTNG_UST_BYTECODE_INTERPRETER_ERROR;
(reg_type == REG_U64 || reg_type == REG_S64)
static int context_get_index(struct lttng_ust_ctx *ctx,
+ struct lttng_ust_probe_ctx *probe_ctx,
struct load_ptr *ptr,
uint32_t idx)
{
switch (field->type->type) {
case lttng_ust_type_integer:
- ctx_field->get_value(ctx_field->priv, &v);
+ ctx_field->get_value(ctx_field->priv, probe_ctx, &v);
if (lttng_ust_get_type_integer(field->type)->signedness) {
ptr->object_type = OBJECT_TYPE_S64;
ptr->u.s64 = v.u.s64;
const struct lttng_ust_type_integer *itype;
itype = lttng_ust_get_type_integer(lttng_ust_get_type_enum(field->type)->container_type);
- ctx_field->get_value(ctx_field->priv, &v);
+ ctx_field->get_value(ctx_field->priv, probe_ctx, &v);
if (itype->signedness) {
ptr->object_type = OBJECT_TYPE_SIGNED_ENUM;
ptr->u.s64 = v.u.s64;
return -EINVAL;
}
ptr->object_type = OBJECT_TYPE_STRING;
- ctx_field->get_value(ctx_field->priv, &v);
+ ctx_field->get_value(ctx_field->priv, probe_ctx, &v);
ptr->ptr = v.u.str;
break;
case lttng_ust_type_sequence:
return -EINVAL;
}
ptr->object_type = OBJECT_TYPE_STRING;
- ctx_field->get_value(ctx_field->priv, &v);
+ ctx_field->get_value(ctx_field->priv, probe_ctx, &v);
ptr->ptr = v.u.str;
break;
case lttng_ust_type_string:
ptr->object_type = OBJECT_TYPE_STRING;
- ctx_field->get_value(ctx_field->priv, &v);
+ ctx_field->get_value(ctx_field->priv, probe_ctx, &v);
ptr->ptr = v.u.str;
break;
case lttng_ust_type_float:
ptr->object_type = OBJECT_TYPE_DOUBLE;
- ctx_field->get_value(ctx_field->priv, &v);
+ ctx_field->get_value(ctx_field->priv, probe_ctx, &v);
ptr->u.d = v.u.d;
ptr->ptr = &ptr->u.d;
break;
case lttng_ust_type_dynamic:
- ctx_field->get_value(ctx_field->priv, &v);
+ ctx_field->get_value(ctx_field->priv, probe_ctx, &v);
switch (v.sel) {
case LTTNG_UST_DYNAMIC_TYPE_NONE:
return -EINVAL;
}
static int dynamic_get_index(struct lttng_ust_ctx *ctx,
+ struct lttng_ust_probe_ctx *probe_ctx,
struct bytecode_runtime *runtime,
uint64_t index, struct estack_entry *stack_top)
{
case LOAD_ROOT_APP_CONTEXT: /* Fall-through */
{
ret = context_get_index(ctx,
+ probe_ctx,
&stack_top->u.ptr,
gid->ctx_index);
if (ret) {
*/
int lttng_bytecode_interpret(struct lttng_ust_bytecode_runtime *ust_bytecode,
const char *interpreter_stack_data,
+ struct lttng_ust_probe_ctx *probe_ctx,
void *caller_ctx)
{
struct bytecode_runtime *bytecode = caa_container_of(ust_bytecode, struct bytecode_runtime, p);
dbg_printf("get context ref offset %u type dynamic\n",
ref->offset);
ctx_field = &ctx->fields[ref->offset];
- ctx_field->get_value(ctx_field->priv, &v);
+ ctx_field->get_value(ctx_field->priv, probe_ctx, &v);
estack_push(stack, top, ax, bx, ax_t, bx_t);
switch (v.sel) {
case LTTNG_UST_DYNAMIC_TYPE_NONE:
dbg_printf("get context ref offset %u type string\n",
ref->offset);
ctx_field = &ctx->fields[ref->offset];
- ctx_field->get_value(ctx_field->priv, &v);
+ ctx_field->get_value(ctx_field->priv, probe_ctx, &v);
estack_push(stack, top, ax, bx, ax_t, bx_t);
estack_ax(stack, top)->u.s.str = v.u.str;
if (unlikely(!estack_ax(stack, top)->u.s.str)) {
dbg_printf("get context ref offset %u type s64\n",
ref->offset);
ctx_field = &ctx->fields[ref->offset];
- ctx_field->get_value(ctx_field->priv, &v);
+ ctx_field->get_value(ctx_field->priv, probe_ctx, &v);
estack_push(stack, top, ax, bx, ax_t, bx_t);
estack_ax_v = v.u.s64;
estack_ax_t = REG_S64;
dbg_printf("get context ref offset %u type double\n",
ref->offset);
ctx_field = &ctx->fields[ref->offset];
- ctx_field->get_value(ctx_field->priv, &v);
+ ctx_field->get_value(ctx_field->priv, probe_ctx, &v);
estack_push(stack, top, ax, bx, ax_t, bx_t);
memcpy(&estack_ax(stack, top)->u.d, &v.u.d, sizeof(struct literal_double));
estack_ax_t = REG_DOUBLE;
struct get_index_u16 *index = (struct get_index_u16 *) insn->data;
dbg_printf("op get index u16\n");
- ret = dynamic_get_index(ctx, bytecode, index->index, estack_ax(stack, top));
+ ret = dynamic_get_index(ctx, probe_ctx, bytecode, index->index, estack_ax(stack, top));
if (ret)
goto end;
estack_ax_v = estack_ax(stack, top)->u.v;
struct get_index_u64 *index = (struct get_index_u64 *) insn->data;
dbg_printf("op get index u64\n");
- ret = dynamic_get_index(ctx, bytecode, index->index, estack_ax(stack, top));
+ ret = dynamic_get_index(ctx, probe_ctx, bytecode, index->index, estack_ax(stack, top));
if (ret)
goto end;
estack_ax_v = estack_ax(stack, top)->u.v;
*/
int lttng_ust_interpret_event_filter(const struct lttng_ust_event_common *event,
const char *interpreter_stack_data,
+ struct lttng_ust_probe_ctx *probe_ctx,
void *event_filter_ctx __attribute__((unused)))
{
struct lttng_ust_bytecode_runtime *filter_bc_runtime;
cds_list_for_each_entry_rcu(filter_bc_runtime, filter_bytecode_runtime_head, node) {
if (caa_likely(filter_bc_runtime->interpreter_func(filter_bc_runtime,
- interpreter_stack_data, &bytecode_filter_ctx) == LTTNG_UST_BYTECODE_INTERPRETER_OK)) {
+ interpreter_stack_data, probe_ctx, &bytecode_filter_ctx) == LTTNG_UST_BYTECODE_INTERPRETER_OK)) {
if (caa_unlikely(bytecode_filter_ctx.result == LTTNG_UST_BYTECODE_FILTER_ACCEPT)) {
filter_record = true;
break;
int lttng_bytecode_interpret_error(struct lttng_ust_bytecode_runtime *bytecode_runtime,
const char *stack_data,
+ struct lttng_ust_probe_ctx *probe_ctx,
void *ctx)
__attribute__((visibility("hidden")));
int lttng_bytecode_interpret(struct lttng_ust_bytecode_runtime *bytecode_runtime,
const char *stack_data,
+ struct lttng_ust_probe_ctx *probe_ctx,
void *ctx)
__attribute__((visibility("hidden")));
static
size_t cgroup_ns_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void cgroup_ns_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
ino_t cgroup_ns;
static
void cgroup_ns_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_cgroup_ns();
+ value->u.u64 = get_cgroup_ns();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t cpu_id_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void cpu_id_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
int cpu;
static
void cpu_id_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
value->u.s64 = lttng_ust_get_cpu();
static
size_t ip_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void ip_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
void *ip;
- ip = ctx->ip;
+ ip = probe_ctx->ip;
chan->ops->event_write(ctx, &ip, sizeof(ip), lttng_ust_rb_alignof(ip));
}
+static
+void ip_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ctx_value *value)
+{
+ value->u.u64 = (unsigned long) probe_ctx->ip;
+}
+
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
lttng_ust_static_event_field("ip",
lttng_ust_static_type_integer(sizeof(void *) * CHAR_BIT,
false, false),
ip_get_size,
ip_record,
- NULL, NULL, NULL);
+ ip_get_value,
+ NULL, NULL);
int lttng_add_ip_to_ctx(struct lttng_ust_ctx **ctx)
{
static
size_t ipc_ns_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void ipc_ns_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
ino_t ipc_ns;
static
void ipc_ns_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_ipc_ns();
+ value->u.u64 = get_ipc_ns();
}
const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t mnt_ns_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void mnt_ns_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
ino_t mnt_ns;
static
void mnt_ns_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_mnt_ns();
+ value->u.u64 = get_mnt_ns();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t net_ns_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void net_ns_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
ino_t net_ns;
static
void net_ns_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_net_ns();
+ value->u.u64 = get_net_ns();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t perf_counter_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void perf_counter_record(void *priv,
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
uint64_t value;
static
void perf_counter_get_value(void *priv,
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = wrapper_perf_counter_read(priv);
+ value->u.u64 = wrapper_perf_counter_read(priv);
}
/* Called with perf lock held */
static
size_t pid_ns_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void pid_ns_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
ino_t pid_ns;
static
void pid_ns_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_pid_ns();
+ value->u.u64 = get_pid_ns();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t procname_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset __attribute__((unused)))
{
return LTTNG_UST_ABI_PROCNAME_LEN;
static
void procname_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
const char *procname;
static
void procname_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
value->u.str = wrapper_getprocname();
static
size_t pthread_id_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void pthread_id_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
unsigned long pthread_id;
static
void pthread_id_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = (unsigned long) pthread_self();
+ value->u.u64 = (unsigned long) pthread_self();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t time_ns_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void time_ns_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
ino_t time_ns;
static
void time_ns_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_time_ns();
+ value->u.u64 = get_time_ns();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t user_ns_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void user_ns_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
ino_t user_ns;
static
void user_ns_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_user_ns();
+ value->u.u64 = get_user_ns();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t uts_ns_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void uts_ns_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
ino_t uts_ns;
static
void uts_ns_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_uts_ns();
+ value->u.u64 = get_uts_ns();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t vegid_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void vegid_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
gid_t vegid;
static
void vegid_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_vegid();
+ value->u.u64 = get_vegid();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t veuid_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void veuid_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
uid_t veuid;
static
void veuid_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_veuid();
+ value->u.u64 = get_veuid();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t vgid_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void vgid_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
gid_t vgid;
static
void vgid_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_vgid();
+ value->u.u64 = get_vgid();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t vpid_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void vpid_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
pid_t vpid = wrapper_getvpid();
static
void vpid_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
value->u.s64 = wrapper_getvpid();
static
size_t vsgid_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void vsgid_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
gid_t vsgid;
static
void vsgid_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_vsgid();
+ value->u.u64 = get_vsgid();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t vsuid_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void vsuid_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
uid_t vsuid;
static
void vsuid_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_vsuid();
+ value->u.u64 = get_vsuid();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
static
size_t vtid_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void vtid_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
pid_t vtid = wrapper_getvtid();
static
void vtid_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
value->u.s64 = wrapper_getvtid();
static
size_t vuid_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
static
void vuid_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
uid_t vuid;
static
void vuid_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
- value->u.s64 = get_vuid();
+ value->u.u64 = get_vuid();
}
static const struct lttng_ust_ctx_field *ctx_field = lttng_ust_static_ctx_field(
*/
int lttng_ust_context_set_provider_rcu(struct lttng_ust_ctx **_ctx,
const char *name,
- size_t (*get_size)(void *priv, size_t offset),
- void (*record)(void *priv, struct lttng_ust_ring_buffer_ctx *ctx,
+ size_t (*get_size)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ size_t offset),
+ void (*record)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ring_buffer_ctx *ctx,
struct lttng_ust_channel_buffer *chan),
- void (*get_value)(void *priv, struct lttng_ust_ctx_value *value),
+ void (*get_value)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ctx_value *value),
void *priv)
{
int i, ret;
* context (either app context callbacks, or dummy callbacks).
*/
void lttng_ust_context_set_session_provider(const char *name,
- size_t (*get_size)(void *priv, size_t offset),
- void (*record)(void *priv, struct lttng_ust_ring_buffer_ctx *ctx,
+ size_t (*get_size)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ size_t offset),
+ void (*record)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ring_buffer_ctx *ctx,
struct lttng_ust_channel_buffer *chan),
- void (*get_value)(void *priv, struct lttng_ust_ctx_value *value),
+ void (*get_value)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ctx_value *value),
void *priv)
{
struct lttng_ust_session_private *session_priv;
* context (either app context callbacks, or dummy callbacks).
*/
void lttng_ust_context_set_event_notifier_group_provider(const char *name,
- size_t (*get_size)(void *priv, size_t offset),
- void (*record)(void *priv, struct lttng_ust_ring_buffer_ctx *ctx,
+ size_t (*get_size)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ size_t offset),
+ void (*record)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ring_buffer_ctx *ctx,
struct lttng_ust_channel_buffer *chan),
- void (*get_value)(void *priv, struct lttng_ust_ctx_value *value),
+ void (*get_value)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ctx_value *value),
void *priv)
{
struct lttng_event_notifier_group *event_notifier_group;
}
static inline
-void ctx_get_struct_size(struct lttng_ust_ctx *ctx, size_t *ctx_len)
+void ctx_get_struct_size(struct lttng_ust_ring_buffer_ctx *bufctx,
+ struct lttng_ust_ctx *ctx, size_t *ctx_len)
{
int i;
size_t offset = 0;
return;
}
for (i = 0; i < ctx->nr_fields; i++)
- offset += ctx->fields[i].get_size(ctx->fields[i].priv, offset);
+ offset += ctx->fields[i].get_size(ctx->fields[i].priv, bufctx->probe_ctx, offset);
*ctx_len = offset;
}
return;
lttng_ust_ring_buffer_align_ctx(bufctx, ctx->largest_align);
for (i = 0; i < ctx->nr_fields; i++)
- ctx->fields[i].record(ctx->fields[i].priv, bufctx, chan);
+ ctx->fields[i].record(ctx->fields[i].priv, bufctx->probe_ctx, bufctx, chan);
}
/*
client_ctx.chan_ctx = lttng_ust_rcu_dereference(lttng_chan->priv->ctx);
client_ctx.event_ctx = lttng_ust_rcu_dereference(event_recorder->priv->ctx);
/* Compute internal size of context structures. */
- ctx_get_struct_size(client_ctx.chan_ctx, &client_ctx.packet_context_len);
- ctx_get_struct_size(client_ctx.event_ctx, &client_ctx.event_context_len);
+ ctx_get_struct_size(ctx, client_ctx.chan_ctx, &client_ctx.packet_context_len);
+ ctx_get_struct_size(ctx, client_ctx.event_ctx, &client_ctx.event_context_len);
nesting = lib_ring_buffer_nesting_inc(&client_config);
if (nesting < 0)
void lttng_ust_sockinfo_session_enabled(void *owner)
__attribute__((visibility("hidden")));
-size_t lttng_ust_dummy_get_size(void *priv, size_t offset)
+size_t lttng_ust_dummy_get_size(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ size_t offset)
__attribute__((visibility("hidden")));
-void lttng_ust_dummy_record(void *priv, struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+void lttng_ust_dummy_record(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
__attribute__((visibility("hidden")));
-void lttng_ust_dummy_get_value(void *priv, struct lttng_ust_ctx_value *value)
+void lttng_ust_dummy_get_value(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
+ struct lttng_ust_ctx_value *value)
__attribute__((visibility("hidden")));
void lttng_event_notifier_notification_send(
const struct lttng_ust_event_notifier *event_notifier,
const char *stack_data,
+ struct lttng_ust_probe_ctx *probe_ctx,
struct lttng_ust_notification_ctx *notif_ctx)
__attribute__((visibility("hidden")));
}
size_t lttng_ust_dummy_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
size_t offset)
{
size_t size = 0;
}
void lttng_ust_dummy_record(void *priv __attribute__((unused)),
- struct lttng_ust_ring_buffer_ctx *ctx,
- struct lttng_ust_channel_buffer *chan)
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ struct lttng_ust_ring_buffer_ctx *ctx,
+ struct lttng_ust_channel_buffer *chan)
{
char sel_char = (char) LTTNG_UST_DYNAMIC_TYPE_NONE;
}
void lttng_ust_dummy_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
value->sel = LTTNG_UST_DYNAMIC_TYPE_NONE;
}
static
-size_t test_get_size(void *priv __attribute__((unused)), size_t offset)
+size_t test_get_size(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
+ size_t offset)
{
int sel = test_count % _NR_LTTNG_UST_DYNAMIC_TYPES;
size_t size = 0;
static
void test_record(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ring_buffer_ctx *ctx,
struct lttng_ust_channel_buffer *lttng_chan_buf)
{
static
void test_get_value(void *priv __attribute__((unused)),
+ struct lttng_ust_probe_ctx *probe_ctx __attribute__((unused)),
struct lttng_ust_ctx_value *value)
{
int sel = test_count % _NR_LTTNG_UST_DYNAMIC_TYPES;