const struct lttng_credentials *creds);
typedef const char *(*event_rule_get_filter_cb)(
const struct lttng_event_rule *event_rule);
-typedef const struct lttng_filter_bytecode *(
+typedef const struct lttng_bytecode *(
*event_rule_get_filter_bytecode_cb)(
const struct lttng_event_rule *event_rule);
typedef enum lttng_event_rule_generate_exclusions_status (
* Caller DOES NOT own the returned object.
*/
LTTNG_HIDDEN
-const struct lttng_filter_bytecode *lttng_event_rule_get_filter_bytecode(
+const struct lttng_bytecode *lttng_event_rule_get_filter_bytecode(
const struct lttng_event_rule *rule);
/*
/* Internal use only. */
struct {
char *filter;
- struct lttng_filter_bytecode *bytecode;
+ struct lttng_bytecode *bytecode;
} internal_filter;
};
/* internal use only. */
struct {
char *filter;
- struct lttng_filter_bytecode *bytecode;
+ struct lttng_bytecode *bytecode;
} internal_filter;
};
*/
struct agent_event *agent_create_event(const char *name,
enum lttng_loglevel_type loglevel_type, int loglevel_value,
- struct lttng_filter_bytecode *filter, char *filter_expression)
+ struct lttng_bytecode *filter, char *filter_expression)
{
struct agent_event *event = NULL;
struct lttng_ht_node_str node;
/* Filter associated with the event. NULL if none. */
- struct lttng_filter_bytecode *filter;
+ struct lttng_bytecode *filter;
char *filter_expression;
struct lttng_event_exclusion *exclusion;
};
/* Agent event API. */
struct agent_event *agent_create_event(const char *name,
enum lttng_loglevel_type loglevel_type, int loglevel_value,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
char *filter_expression);
void agent_add_event(struct agent_event *event, struct agent *agt);
{
struct lttng_event *ev = NULL;
struct lttng_event_exclusion *exclusion = NULL;
- struct lttng_filter_bytecode *bytecode = NULL;
+ struct lttng_bytecode *bytecode = NULL;
char *filter_expression = NULL;
/* Handle exclusion events and receive it from the client. */
const struct lttng_domain *domain,
char *channel_name, struct lttng_event *event,
char *filter_expression,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
struct lttng_event_exclusion *exclusion,
int wpipe);
const struct lttng_domain *domain,
char *channel_name, struct lttng_event *event,
char *filter_expression,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
struct lttng_event_exclusion *exclusion,
int wpipe, bool internal_event)
{
case LTTNG_EVENT_ALL:
{
char *filter_expression_a = NULL;
- struct lttng_filter_bytecode *filter_a = NULL;
+ struct lttng_bytecode *filter_a = NULL;
/*
* We need to duplicate filter_expression and filter,
{
char *filter_expression_copy = NULL;
- struct lttng_filter_bytecode *filter_copy = NULL;
+ struct lttng_bytecode *filter_copy = NULL;
if (filter) {
const size_t filter_size = sizeof(
- struct lttng_filter_bytecode)
+ struct lttng_bytecode)
+ filter->len;
filter_copy = zmalloc(filter_size);
const struct lttng_domain *domain,
char *channel_name, struct lttng_event *event,
char *filter_expression,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
struct lttng_event_exclusion *exclusion,
int wpipe)
{
const struct lttng_domain *domain,
char *channel_name, struct lttng_event *event,
char *filter_expression,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
struct lttng_event_exclusion *exclusion,
int wpipe)
{
char *channel_name, const struct lttng_event_context *ctx, int kwpipe);
int cmd_set_filter(struct ltt_session *session, enum lttng_domain_type domain,
char *channel_name, struct lttng_event *event,
- struct lttng_filter_bytecode *bytecode);
+ struct lttng_bytecode *bytecode);
int cmd_enable_event(struct ltt_session *session, const struct lttng_domain *domain,
char *channel_name, struct lttng_event *event,
char *filter_expression,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
struct lttng_event_exclusion *exclusion,
int wpipe);
assert(event);
key.name = event->attr.name;
- key.filter = (struct lttng_filter_bytecode *) event->filter;
+ key.filter = (struct lttng_bytecode *) event->filter;
key.loglevel_type = event->attr.loglevel_type;
key.loglevel_value = event->attr.loglevel;
key.exclusion = event->exclusion;
*/
int event_kernel_enable_event(struct ltt_kernel_channel *kchan,
struct lttng_event *event, char *filter_expression,
- struct lttng_filter_bytecode *filter)
+ struct lttng_bytecode *filter)
{
int ret;
struct ltt_kernel_event *kevent;
int event_ust_enable_tracepoint(struct ltt_ust_session *usess,
struct ltt_ust_channel *uchan, struct lttng_event *event,
char *filter_expression,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
struct lttng_event_exclusion *exclusion,
bool internal_event)
{
*/
int event_agent_enable_all(struct ltt_ust_session *usess,
struct agent *agt, struct lttng_event *event,
- struct lttng_filter_bytecode *filter ,char *filter_expression)
+ struct lttng_bytecode *filter ,char *filter_expression)
{
int ret;
* contexts yet. Not an issue for now, since they are not generated by
* the lttng-ctl library.
*/
-static int add_filter_app_ctx(struct lttng_filter_bytecode *bytecode,
+static int add_filter_app_ctx(struct lttng_bytecode *bytecode,
const char *filter_expression, struct agent *agt)
{
int ret = LTTNG_OK;
static int agent_enable(struct agent *agt,
struct lttng_event *event,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
char *filter_expression)
{
int ret, created = 0;
int event_agent_enable(struct ltt_ust_session *usess,
struct agent *agt,
struct lttng_event *event,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
char *filter_expression)
{
assert(usess);
const struct lttng_event_rule *rule;
const char *filter_expression;
char *filter_expression_copy = NULL;
- const struct lttng_filter_bytecode *filter_bytecode;
- struct lttng_filter_bytecode *filter_bytecode_copy = NULL;
+ const struct lttng_bytecode *filter_bytecode;
+ struct lttng_bytecode *filter_bytecode_copy = NULL;
struct lttng_event *event = NULL;
uid_t trigger_owner_uid = 0;
const char *trigger_name;
filter_bytecode = lttng_event_rule_get_filter_bytecode(rule);
if (filter_bytecode) {
filter_bytecode_copy =
- lttng_filter_bytecode_copy(filter_bytecode);
+ lttng_bytecode_copy(filter_bytecode);
if (!filter_bytecode_copy) {
ret = LTTNG_ERR_NOMEM;
goto end;
int event_kernel_enable_event(struct ltt_kernel_channel *kchan,
struct lttng_event *event, char *filter_expression,
- struct lttng_filter_bytecode *filter);
+ struct lttng_bytecode *filter);
int event_ust_enable_tracepoint(struct ltt_ust_session *usess,
struct ltt_ust_channel *uchan, struct lttng_event *event,
char *filter_expression,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
struct lttng_event_exclusion *exclusion,
bool internal_event);
int event_ust_disable_tracepoint(struct ltt_ust_session *usess,
struct ltt_ust_channel *uchan);
int event_agent_enable(struct ltt_ust_session *usess, struct agent *agt,
- struct lttng_event *event, struct lttng_filter_bytecode *filter,
+ struct lttng_event *event, struct lttng_bytecode *filter,
char *filter_expression);
int event_agent_enable_all(struct ltt_ust_session *usess, struct agent *agt,
- struct lttng_event *event, struct lttng_filter_bytecode *filter,
+ struct lttng_event *event, struct lttng_bytecode *filter,
char *filter_expression);
int event_agent_disable(struct ltt_ust_session *usess, struct agent *agt,
int kernel_create_event(struct lttng_event *ev,
struct ltt_kernel_channel *channel,
char *filter_expression,
- struct lttng_filter_bytecode *filter)
+ struct lttng_bytecode *filter)
{
int err, fd;
enum lttng_error_code ret;
int kernel_create_channel(struct ltt_kernel_session *session,
struct lttng_channel *chan);
int kernel_create_event(struct lttng_event *ev, struct ltt_kernel_channel *channel,
- char *filter_expression, struct lttng_filter_bytecode *filter);
+ char *filter_expression, struct lttng_bytecode *filter);
int kernel_disable_channel(struct ltt_kernel_channel *chan);
int kernel_disable_event(struct ltt_kernel_event *event);
int kernel_enable_event(struct ltt_kernel_event *event);
struct ltt_kernel_event *trace_kernel_find_event(
char *name, struct ltt_kernel_channel *channel,
enum lttng_event_type type,
- struct lttng_filter_bytecode *filter)
+ struct lttng_bytecode *filter)
{
struct ltt_kernel_event *ev;
int found = 0;
*/
enum lttng_error_code trace_kernel_create_event(
struct lttng_event *ev, char *filter_expression,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
struct ltt_kernel_event **kernel_event)
{
enum lttng_error_code ret;
struct lttng_kernel_event *event;
struct cds_list_head list;
char *filter_expression;
- struct lttng_filter_bytecode *filter;
+ struct lttng_bytecode *filter;
struct lttng_userspace_probe_location *userspace_probe_location;
};
enum lttng_event_type type;
struct lttng_trigger *trigger;
uint64_t token;
- const struct lttng_filter_bytecode *filter;
+ const struct lttng_bytecode *filter;
struct lttng_userspace_probe_location *userspace_probe_location;
struct cds_lfht_node ht_node;
/* call_rcu delayed reclaim. */
struct ltt_kernel_event *trace_kernel_find_event(
char *name, struct ltt_kernel_channel *channel,
enum lttng_event_type type,
- struct lttng_filter_bytecode *filter);
+ struct lttng_bytecode *filter);
struct ltt_kernel_channel *trace_kernel_get_channel_by_name(
const char *name, struct ltt_kernel_session *session);
struct ltt_kernel_channel *trace_kernel_create_channel(
struct lttng_channel *chan);
enum lttng_error_code trace_kernel_create_event(struct lttng_event *ev,
- char *filter_expression, struct lttng_filter_bytecode *filter,
+ char *filter_expression, struct lttng_bytecode *filter,
struct ltt_kernel_event **kernel_event);
struct ltt_kernel_metadata *trace_kernel_create_metadata(void);
struct ltt_kernel_stream *trace_kernel_create_stream(const char *name,
* MUST be acquired before calling this.
*/
struct ltt_ust_event *trace_ust_find_event(struct lttng_ht *ht,
- char *name, struct lttng_filter_bytecode *filter,
+ char *name, struct lttng_bytecode *filter,
enum lttng_ust_loglevel_type loglevel_type, int loglevel_value,
struct lttng_event_exclusion *exclusion)
{
*/
enum lttng_error_code trace_ust_create_event(struct lttng_event *ev,
char *filter_expression,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
struct lttng_event_exclusion *exclusion,
bool internal_event,
struct ltt_ust_event **ust_event)
struct ltt_ust_ht_key {
const char *name;
- const struct lttng_filter_bytecode *filter;
+ const struct lttng_bytecode *filter;
enum lttng_ust_loglevel_type loglevel_type;
int loglevel_value;
const struct lttng_event_exclusion *exclusion;
struct lttng_ust_event attr;
struct lttng_ht_node_str node;
char *filter_expression;
- struct lttng_filter_bytecode *filter;
+ struct lttng_bytecode *filter;
struct lttng_event_exclusion *exclusion;
/*
* An internal event is an event which was created by the session daemon
* Lookup functions. NULL is returned if not found.
*/
struct ltt_ust_event *trace_ust_find_event(struct lttng_ht *ht,
- char *name, struct lttng_filter_bytecode *filter,
+ char *name, struct lttng_bytecode *filter,
enum lttng_ust_loglevel_type loglevel_type, int loglevel_value,
struct lttng_event_exclusion *exclusion);
struct ltt_ust_channel *trace_ust_find_channel_by_name(struct lttng_ht *ht,
enum lttng_domain_type domain);
enum lttng_error_code trace_ust_create_event(struct lttng_event *ev,
char *filter_expression,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
struct lttng_event_exclusion *exclusion,
bool internal_event, struct ltt_ust_event **ust_event);
struct ltt_ust_context *trace_ust_create_context(
static inline
enum lttng_error_code trace_ust_create_event(struct lttng_event *ev,
const char *filter_expression,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
struct lttng_event_exclusion *exclusion,
bool internal_event, struct ltt_ust_event **ust_event)
{
}
static inline
struct ltt_ust_event *trace_ust_find_event(struct lttng_ht *ht,
- char *name, struct lttng_filter_bytecode *filter,
+ char *name, struct lttng_bytecode *filter,
enum lttng_ust_loglevel_type loglevel_type, int loglevel_value,
struct lttng_event_exclusion *exclusion)
{
* Return allocated filter or NULL on error.
*/
static struct lttng_ust_filter_bytecode *create_ust_bytecode_from_bytecode(
- const struct lttng_filter_bytecode *orig_f)
+ const struct lttng_bytecode *orig_f)
{
struct lttng_ust_filter_bytecode *filter = NULL;
goto error;
}
- assert(sizeof(struct lttng_filter_bytecode) ==
+ assert(sizeof(struct lttng_bytecode) ==
sizeof(struct lttng_ust_filter_bytecode));
memcpy(filter, orig_f, sizeof(*filter) + orig_f->len);
error:
* Return an ust_app_event object or NULL on error.
*/
static struct ust_app_event *find_ust_app_event(struct lttng_ht *ht,
- const char *name, const struct lttng_filter_bytecode *filter,
+ const char *name, const struct lttng_bytecode *filter,
int loglevel_value,
const struct lttng_event_exclusion *exclusion)
{
* Set the filter on the tracer.
*/
static int set_ust_object_filter(struct ust_app *app,
- const struct lttng_filter_bytecode *bytecode,
+ const struct lttng_bytecode *bytecode,
struct lttng_ust_object_data *ust_object)
{
int ret;
/* Copy filter bytecode */
if (uevent->filter) {
- ua_event->filter = lttng_filter_bytecode_copy(uevent->filter);
+ ua_event->filter = lttng_bytecode_copy(uevent->filter);
/* Filter might be NULL here in case of ENONEM. */
}
/* Process name (short). */
#define UST_APP_PROCNAME_LEN 16
-struct lttng_filter_bytecode;
+struct lttng_bytecode;
struct lttng_ust_filter_bytecode;
extern int ust_consumerd64_fd, ust_consumerd32_fd;
struct ust_app_ht_key {
const char *name;
- const struct lttng_filter_bytecode *filter;
+ const struct lttng_bytecode *filter;
enum lttng_ust_loglevel_type loglevel_type;
const struct lttng_event_exclusion *exclusion;
};
struct lttng_ust_event attr;
char name[LTTNG_UST_SYM_NAME_LEN];
struct lttng_ht_node_str node;
- struct lttng_filter_bytecode *filter;
+ struct lttng_bytecode *filter;
struct lttng_event_exclusion *exclusion;
};
uint64_t token;
struct lttng_ht_node_u64 node;
/* The event_rule object owns the filter. */
- const struct lttng_filter_bytecode *filter;
+ const struct lttng_bytecode *filter;
/* Owned by this. */
struct lttng_event_exclusion *exclusion;
/* For delayed reclaim. */
}
LTTNG_HIDDEN
-int bytecode_init(struct lttng_filter_bytecode_alloc **fb)
+int bytecode_init(struct lttng_bytecode_alloc **fb)
{
uint32_t alloc_len;
- alloc_len = sizeof(struct lttng_filter_bytecode_alloc) + INIT_ALLOC_SIZE;
+ alloc_len = sizeof(struct lttng_bytecode_alloc) + INIT_ALLOC_SIZE;
*fb = calloc(alloc_len, 1);
if (!*fb) {
return -ENOMEM;
}
LTTNG_HIDDEN
-int32_t bytecode_reserve(struct lttng_filter_bytecode_alloc **fb, uint32_t align, uint32_t len)
+int32_t bytecode_reserve(struct lttng_bytecode_alloc **fb, uint32_t align, uint32_t len)
{
int32_t ret;
uint32_t padding = offset_align((*fb)->b.len, align);
uint32_t new_len = (*fb)->b.len + padding + len;
- uint32_t new_alloc_len = sizeof(struct lttng_filter_bytecode_alloc) + new_len;
+ uint32_t new_alloc_len = sizeof(struct lttng_bytecode_alloc) + new_len;
uint32_t old_alloc_len = (*fb)->alloc_len;
if (new_len > LTTNG_FILTER_MAX_LEN)
return -EINVAL;
if (new_alloc_len > old_alloc_len) {
- struct lttng_filter_bytecode_alloc *newptr;
+ struct lttng_bytecode_alloc *newptr;
new_alloc_len =
max_t(uint32_t, 1U << get_count_order(new_alloc_len), old_alloc_len << 1);
}
LTTNG_HIDDEN
-int bytecode_push(struct lttng_filter_bytecode_alloc **fb, const void *data,
+int bytecode_push(struct lttng_bytecode_alloc **fb, const void *data,
uint32_t align, uint32_t len)
{
int32_t offset;
}
LTTNG_HIDDEN
-int bytecode_push_logical(struct lttng_filter_bytecode_alloc **fb,
+int bytecode_push_logical(struct lttng_bytecode_alloc **fb,
struct logical_op *data,
uint32_t align, uint32_t len,
uint16_t *skip_offset)
* Return allocated bytecode or NULL on error.
*/
LTTNG_HIDDEN
-struct lttng_filter_bytecode *lttng_filter_bytecode_copy(
- const struct lttng_filter_bytecode *orig_f)
+struct lttng_bytecode *lttng_bytecode_copy(
+ const struct lttng_bytecode *orig_f)
{
- struct lttng_filter_bytecode *bytecode = NULL;
+ struct lttng_bytecode *bytecode = NULL;
bytecode = zmalloc(sizeof(*bytecode) + orig_f->len);
if (!bytecode) {
char string[0];
} LTTNG_PACKED;
-enum filter_op {
- FILTER_OP_UNKNOWN = 0,
+enum bytecode_op {
+ BYTECODE_OP_UNKNOWN = 0,
- FILTER_OP_RETURN = 1,
+ BYTECODE_OP_RETURN = 1,
/* binary */
- FILTER_OP_MUL = 2,
- FILTER_OP_DIV = 3,
- FILTER_OP_MOD = 4,
- FILTER_OP_PLUS = 5,
- FILTER_OP_MINUS = 6,
- FILTER_OP_BIT_RSHIFT = 7,
- FILTER_OP_BIT_LSHIFT = 8,
- FILTER_OP_BIT_AND = 9,
- FILTER_OP_BIT_OR = 10,
- FILTER_OP_BIT_XOR = 11,
+ BYTECODE_OP_MUL = 2,
+ BYTECODE_OP_DIV = 3,
+ BYTECODE_OP_MOD = 4,
+ BYTECODE_OP_PLUS = 5,
+ BYTECODE_OP_MINUS = 6,
+ BYTECODE_OP_BIT_RSHIFT = 7,
+ BYTECODE_OP_BIT_LSHIFT = 8,
+ BYTECODE_OP_BIT_AND = 9,
+ BYTECODE_OP_BIT_OR = 10,
+ BYTECODE_OP_BIT_XOR = 11,
/* binary comparators */
- FILTER_OP_EQ = 12,
- FILTER_OP_NE = 13,
- FILTER_OP_GT = 14,
- FILTER_OP_LT = 15,
- FILTER_OP_GE = 16,
- FILTER_OP_LE = 17,
+ BYTECODE_OP_EQ = 12,
+ BYTECODE_OP_NE = 13,
+ BYTECODE_OP_GT = 14,
+ BYTECODE_OP_LT = 15,
+ BYTECODE_OP_GE = 16,
+ BYTECODE_OP_LE = 17,
/* string binary comparator: apply to */
- FILTER_OP_EQ_STRING = 18,
- FILTER_OP_NE_STRING = 19,
- FILTER_OP_GT_STRING = 20,
- FILTER_OP_LT_STRING = 21,
- FILTER_OP_GE_STRING = 22,
- FILTER_OP_LE_STRING = 23,
+ BYTECODE_OP_EQ_STRING = 18,
+ BYTECODE_OP_NE_STRING = 19,
+ BYTECODE_OP_GT_STRING = 20,
+ BYTECODE_OP_LT_STRING = 21,
+ BYTECODE_OP_GE_STRING = 22,
+ BYTECODE_OP_LE_STRING = 23,
/* s64 binary comparator */
- FILTER_OP_EQ_S64 = 24,
- FILTER_OP_NE_S64 = 25,
- FILTER_OP_GT_S64 = 26,
- FILTER_OP_LT_S64 = 27,
- FILTER_OP_GE_S64 = 28,
- FILTER_OP_LE_S64 = 29,
+ BYTECODE_OP_EQ_S64 = 24,
+ BYTECODE_OP_NE_S64 = 25,
+ BYTECODE_OP_GT_S64 = 26,
+ BYTECODE_OP_LT_S64 = 27,
+ BYTECODE_OP_GE_S64 = 28,
+ BYTECODE_OP_LE_S64 = 29,
/* double binary comparator */
- FILTER_OP_EQ_DOUBLE = 30,
- FILTER_OP_NE_DOUBLE = 31,
- FILTER_OP_GT_DOUBLE = 32,
- FILTER_OP_LT_DOUBLE = 33,
- FILTER_OP_GE_DOUBLE = 34,
- FILTER_OP_LE_DOUBLE = 35,
+ BYTECODE_OP_EQ_DOUBLE = 30,
+ BYTECODE_OP_NE_DOUBLE = 31,
+ BYTECODE_OP_GT_DOUBLE = 32,
+ BYTECODE_OP_LT_DOUBLE = 33,
+ BYTECODE_OP_GE_DOUBLE = 34,
+ BYTECODE_OP_LE_DOUBLE = 35,
/* Mixed S64-double binary comparators */
- FILTER_OP_EQ_DOUBLE_S64 = 36,
- FILTER_OP_NE_DOUBLE_S64 = 37,
- FILTER_OP_GT_DOUBLE_S64 = 38,
- FILTER_OP_LT_DOUBLE_S64 = 39,
- FILTER_OP_GE_DOUBLE_S64 = 40,
- FILTER_OP_LE_DOUBLE_S64 = 41,
-
- FILTER_OP_EQ_S64_DOUBLE = 42,
- FILTER_OP_NE_S64_DOUBLE = 43,
- FILTER_OP_GT_S64_DOUBLE = 44,
- FILTER_OP_LT_S64_DOUBLE = 45,
- FILTER_OP_GE_S64_DOUBLE = 46,
- FILTER_OP_LE_S64_DOUBLE = 47,
+ BYTECODE_OP_EQ_DOUBLE_S64 = 36,
+ BYTECODE_OP_NE_DOUBLE_S64 = 37,
+ BYTECODE_OP_GT_DOUBLE_S64 = 38,
+ BYTECODE_OP_LT_DOUBLE_S64 = 39,
+ BYTECODE_OP_GE_DOUBLE_S64 = 40,
+ BYTECODE_OP_LE_DOUBLE_S64 = 41,
+
+ BYTECODE_OP_EQ_S64_DOUBLE = 42,
+ BYTECODE_OP_NE_S64_DOUBLE = 43,
+ BYTECODE_OP_GT_S64_DOUBLE = 44,
+ BYTECODE_OP_LT_S64_DOUBLE = 45,
+ BYTECODE_OP_GE_S64_DOUBLE = 46,
+ BYTECODE_OP_LE_S64_DOUBLE = 47,
/* unary */
- FILTER_OP_UNARY_PLUS = 48,
- FILTER_OP_UNARY_MINUS = 49,
- FILTER_OP_UNARY_NOT = 50,
- FILTER_OP_UNARY_PLUS_S64 = 51,
- FILTER_OP_UNARY_MINUS_S64 = 52,
- FILTER_OP_UNARY_NOT_S64 = 53,
- FILTER_OP_UNARY_PLUS_DOUBLE = 54,
- FILTER_OP_UNARY_MINUS_DOUBLE = 55,
- FILTER_OP_UNARY_NOT_DOUBLE = 56,
+ BYTECODE_OP_UNARY_PLUS = 48,
+ BYTECODE_OP_UNARY_MINUS = 49,
+ BYTECODE_OP_UNARY_NOT = 50,
+ BYTECODE_OP_UNARY_PLUS_S64 = 51,
+ BYTECODE_OP_UNARY_MINUS_S64 = 52,
+ BYTECODE_OP_UNARY_NOT_S64 = 53,
+ BYTECODE_OP_UNARY_PLUS_DOUBLE = 54,
+ BYTECODE_OP_UNARY_MINUS_DOUBLE = 55,
+ BYTECODE_OP_UNARY_NOT_DOUBLE = 56,
/* logical */
- FILTER_OP_AND = 57,
- FILTER_OP_OR = 58,
+ BYTECODE_OP_AND = 57,
+ BYTECODE_OP_OR = 58,
/* load field ref */
- FILTER_OP_LOAD_FIELD_REF = 59,
- FILTER_OP_LOAD_FIELD_REF_STRING = 60,
- FILTER_OP_LOAD_FIELD_REF_SEQUENCE = 61,
- FILTER_OP_LOAD_FIELD_REF_S64 = 62,
- FILTER_OP_LOAD_FIELD_REF_DOUBLE = 63,
+ BYTECODE_OP_LOAD_FIELD_REF = 59,
+ BYTECODE_OP_LOAD_FIELD_REF_STRING = 60,
+ BYTECODE_OP_LOAD_FIELD_REF_SEQUENCE = 61,
+ BYTECODE_OP_LOAD_FIELD_REF_S64 = 62,
+ BYTECODE_OP_LOAD_FIELD_REF_DOUBLE = 63,
/* load immediate from operand */
- FILTER_OP_LOAD_STRING = 64,
- FILTER_OP_LOAD_S64 = 65,
- FILTER_OP_LOAD_DOUBLE = 66,
+ BYTECODE_OP_LOAD_STRING = 64,
+ BYTECODE_OP_LOAD_S64 = 65,
+ BYTECODE_OP_LOAD_DOUBLE = 66,
/* cast */
- FILTER_OP_CAST_TO_S64 = 67,
- FILTER_OP_CAST_DOUBLE_TO_S64 = 68,
- FILTER_OP_CAST_NOP = 69,
+ BYTECODE_OP_CAST_TO_S64 = 67,
+ BYTECODE_OP_CAST_DOUBLE_TO_S64 = 68,
+ BYTECODE_OP_CAST_NOP = 69,
/* get context ref */
- FILTER_OP_GET_CONTEXT_REF = 70,
- FILTER_OP_GET_CONTEXT_REF_STRING = 71,
- FILTER_OP_GET_CONTEXT_REF_S64 = 72,
- FILTER_OP_GET_CONTEXT_REF_DOUBLE = 73,
+ BYTECODE_OP_GET_CONTEXT_REF = 70,
+ BYTECODE_OP_GET_CONTEXT_REF_STRING = 71,
+ BYTECODE_OP_GET_CONTEXT_REF_S64 = 72,
+ BYTECODE_OP_GET_CONTEXT_REF_DOUBLE = 73,
/* load userspace field ref */
- FILTER_OP_LOAD_FIELD_REF_USER_STRING = 74,
- FILTER_OP_LOAD_FIELD_REF_USER_SEQUENCE = 75,
+ BYTECODE_OP_LOAD_FIELD_REF_USER_STRING = 74,
+ BYTECODE_OP_LOAD_FIELD_REF_USER_SEQUENCE = 75,
/*
* load immediate star globbing pattern (literal string)
* from immediate
*/
- FILTER_OP_LOAD_STAR_GLOB_STRING = 76,
+ BYTECODE_OP_LOAD_STAR_GLOB_STRING = 76,
/* globbing pattern binary operator: apply to */
- FILTER_OP_EQ_STAR_GLOB_STRING = 77,
- FILTER_OP_NE_STAR_GLOB_STRING = 78,
+ BYTECODE_OP_EQ_STAR_GLOB_STRING = 77,
+ BYTECODE_OP_NE_STAR_GLOB_STRING = 78,
/*
* Instructions for recursive traversal through composed types.
*/
- FILTER_OP_GET_CONTEXT_ROOT = 79,
- FILTER_OP_GET_APP_CONTEXT_ROOT = 80,
- FILTER_OP_GET_PAYLOAD_ROOT = 81,
-
- FILTER_OP_GET_SYMBOL = 82,
- FILTER_OP_GET_SYMBOL_FIELD = 83,
- FILTER_OP_GET_INDEX_U16 = 84,
- FILTER_OP_GET_INDEX_U64 = 85,
-
- FILTER_OP_LOAD_FIELD = 86,
- FILTER_OP_LOAD_FIELD_S8 = 87,
- FILTER_OP_LOAD_FIELD_S16 = 88,
- FILTER_OP_LOAD_FIELD_S32 = 89,
- FILTER_OP_LOAD_FIELD_S64 = 90,
- FILTER_OP_LOAD_FIELD_U8 = 91,
- FILTER_OP_LOAD_FIELD_U16 = 92,
- FILTER_OP_LOAD_FIELD_U32 = 93,
- FILTER_OP_LOAD_FIELD_U64 = 94,
- FILTER_OP_LOAD_FIELD_STRING = 95,
- FILTER_OP_LOAD_FIELD_SEQUENCE = 96,
- FILTER_OP_LOAD_FIELD_DOUBLE = 97,
-
- FILTER_OP_UNARY_BIT_NOT = 98,
-
- FILTER_OP_RETURN_S64 = 99,
-
- NR_FILTER_OPS,
+ BYTECODE_OP_GET_CONTEXT_ROOT = 79,
+ BYTECODE_OP_GET_APP_CONTEXT_ROOT = 80,
+ BYTECODE_OP_GET_PAYLOAD_ROOT = 81,
+
+ BYTECODE_OP_GET_SYMBOL = 82,
+ BYTECODE_OP_GET_SYMBOL_FIELD = 83,
+ BYTECODE_OP_GET_INDEX_U16 = 84,
+ BYTECODE_OP_GET_INDEX_U64 = 85,
+
+ BYTECODE_OP_LOAD_FIELD = 86,
+ BYTECODE_OP_LOAD_FIELD_S8 = 87,
+ BYTECODE_OP_LOAD_FIELD_S16 = 88,
+ BYTECODE_OP_LOAD_FIELD_S32 = 89,
+ BYTECODE_OP_LOAD_FIELD_S64 = 90,
+ BYTECODE_OP_LOAD_FIELD_U8 = 91,
+ BYTECODE_OP_LOAD_FIELD_U16 = 92,
+ BYTECODE_OP_LOAD_FIELD_U32 = 93,
+ BYTECODE_OP_LOAD_FIELD_U64 = 94,
+ BYTECODE_OP_LOAD_FIELD_STRING = 95,
+ BYTECODE_OP_LOAD_FIELD_SEQUENCE = 96,
+ BYTECODE_OP_LOAD_FIELD_DOUBLE = 97,
+
+ BYTECODE_OP_UNARY_BIT_NOT = 98,
+
+ BYTECODE_OP_RETURN_S64 = 99,
+
+ NR_BYTECODE_OPS,
};
-typedef uint8_t filter_opcode_t;
+typedef uint8_t bytecode_opcode_t;
struct load_op {
- filter_opcode_t op;
+ bytecode_opcode_t op;
+
+ /*
+ * data to load. Size known by enum bytecode_opcode_t and null-term
+ * char.
+ */
char data[0];
- /* data to load. Size known by enum filter_opcode and null-term char. */
} LTTNG_PACKED;
struct binary_op {
- filter_opcode_t op;
+ bytecode_opcode_t op;
} LTTNG_PACKED;
struct unary_op {
- filter_opcode_t op;
+ bytecode_opcode_t op;
} LTTNG_PACKED;
/* skip_offset is absolute from start of bytecode */
struct logical_op {
- filter_opcode_t op;
+ bytecode_opcode_t op;
uint16_t skip_offset; /* bytecode insn, if skip second test */
} LTTNG_PACKED;
struct cast_op {
- filter_opcode_t op;
+ bytecode_opcode_t op;
} LTTNG_PACKED;
struct return_op {
- filter_opcode_t op;
+ bytecode_opcode_t op;
} LTTNG_PACKED;
-struct lttng_filter_bytecode_alloc {
+struct lttng_bytecode_alloc {
uint32_t alloc_len;
- struct lttng_filter_bytecode b;
+ struct lttng_bytecode b;
};
-LTTNG_HIDDEN int bytecode_init(struct lttng_filter_bytecode_alloc **fb);
-LTTNG_HIDDEN int32_t bytecode_reserve(struct lttng_filter_bytecode_alloc **fb,
+LTTNG_HIDDEN int bytecode_init(struct lttng_bytecode_alloc **fb);
+LTTNG_HIDDEN int32_t bytecode_reserve(struct lttng_bytecode_alloc **fb,
uint32_t align, uint32_t len);
-LTTNG_HIDDEN int bytecode_push(struct lttng_filter_bytecode_alloc **fb,
+LTTNG_HIDDEN int bytecode_push(struct lttng_bytecode_alloc **fb,
const void *data, uint32_t align, uint32_t len);
-LTTNG_HIDDEN int bytecode_push_logical(struct lttng_filter_bytecode_alloc **fb,
+LTTNG_HIDDEN int bytecode_push_logical(struct lttng_bytecode_alloc **fb,
struct logical_op *data, uint32_t align, uint32_t len,
uint16_t *skip_offset);
-LTTNG_HIDDEN struct lttng_filter_bytecode *lttng_filter_bytecode_copy(
- const struct lttng_filter_bytecode *orig_f);
+LTTNG_HIDDEN struct lttng_bytecode *lttng_bytecode_copy(
+ const struct lttng_bytecode *orig_f);
static inline
-unsigned int bytecode_get_len(struct lttng_filter_bytecode *bytecode)
+unsigned int bytecode_get_len(struct lttng_bytecode *bytecode)
{
return bytecode->len;
}
}
LTTNG_HIDDEN
-const struct lttng_filter_bytecode *lttng_event_rule_get_filter_bytecode(
+const struct lttng_bytecode *lttng_event_rule_get_filter_bytecode(
const struct lttng_event_rule *rule)
{
assert(rule->get_filter_bytecode);
return NULL;
}
-static const struct lttng_filter_bytecode *
+static const struct lttng_bytecode *
lttng_event_rule_kprobe_get_filter_bytecode(const struct lttng_event_rule *rule)
{
/* Not supported. */
struct lttng_event_rule_syscall *syscall;
enum lttng_event_rule_status status;
const char *filter;
- struct lttng_filter_bytecode *bytecode = NULL;
+ struct lttng_bytecode *bytecode = NULL;
assert(rule);
return syscall->internal_filter.filter;
}
-static const struct lttng_filter_bytecode *
+static const struct lttng_bytecode *
lttng_event_rule_syscall_get_internal_filter_bytecode(
const struct lttng_event_rule *rule)
{
enum lttng_domain_type domain_type;
enum lttng_event_rule_status status;
const char *filter;
- struct lttng_filter_bytecode *bytecode = NULL;
+ struct lttng_bytecode *bytecode = NULL;
assert(rule);
return tracepoint->internal_filter.filter;
}
-static const struct lttng_filter_bytecode *
+static const struct lttng_bytecode *
lttng_event_rule_tracepoint_get_internal_filter_bytecode(
const struct lttng_event_rule *rule)
{
return NULL;
}
-static const struct lttng_filter_bytecode *
+static const struct lttng_bytecode *
lttng_event_rule_uprobe_get_filter_bytecode(const struct lttng_event_rule *rule)
{
/* Unsupported. */
LTTNG_HIDDEN
struct bytecode_symbol_iterator *bytecode_symbol_iterator_create(
- struct lttng_filter_bytecode *bytecode)
+ struct lttng_bytecode *bytecode)
{
struct bytecode_symbol_iterator *it = NULL;
*/
LTTNG_HIDDEN
struct bytecode_symbol_iterator *bytecode_symbol_iterator_create(
- struct lttng_filter_bytecode *bytecode);
+ struct lttng_bytecode *bytecode);
/*
* Advance iterator of one element.
struct filter_ast *ast;
struct cds_list_head allocated_strings;
struct ir_op *ir_root;
- struct lttng_filter_bytecode_alloc *bytecode;
- struct lttng_filter_bytecode_alloc *bytecode_reloc;
+ struct lttng_bytecode_alloc *bytecode;
+ struct lttng_bytecode_alloc *bytecode_reloc;
};
struct filter_parser_ctx *filter_parser_ctx_alloc(FILE *input);
struct ir_op *node);
static
-int bytecode_patch(struct lttng_filter_bytecode_alloc **fb,
+int bytecode_patch(struct lttng_bytecode_alloc **fb,
const void *data,
uint16_t offset,
uint32_t len)
return ret;
/* Generate end of bytecode instruction */
- insn.op = FILTER_OP_RETURN;
+ insn.op = BYTECODE_OP_RETURN;
return bytecode_push(&ctx->bytecode, &insn, 1, sizeof(insn));
}
*/
static
int load_expression_legacy_match(const struct ir_load_expression *exp,
- enum filter_op *op_type,
+ enum bytecode_op *op_type,
char **symbol)
{
const struct ir_load_expression_op *op;
op = exp->child;
switch (op->type) {
case IR_LOAD_EXPRESSION_GET_CONTEXT_ROOT:
- *op_type = FILTER_OP_GET_CONTEXT_REF;
+ *op_type = BYTECODE_OP_GET_CONTEXT_REF;
if (append_str(symbol, "$ctx.")) {
return -ENOMEM;
}
need_dot = false;
break;
case IR_LOAD_EXPRESSION_GET_APP_CONTEXT_ROOT:
- *op_type = FILTER_OP_GET_CONTEXT_REF;
+ *op_type = BYTECODE_OP_GET_CONTEXT_REF;
if (append_str(symbol, "$app.")) {
return -ENOMEM;
}
need_dot = false;
break;
case IR_LOAD_EXPRESSION_GET_PAYLOAD_ROOT:
- *op_type = FILTER_OP_LOAD_FIELD_REF;
+ *op_type = BYTECODE_OP_LOAD_FIELD_REF;
need_dot = false;
break;
struct field_ref ref_offset;
uint32_t reloc_offset_u32;
uint16_t reloc_offset;
- enum filter_op op_type;
+ enum bytecode_op op_type;
char *symbol = NULL;
int ret;
insn = calloc(insn_len, 1);
if (!insn)
return -ENOMEM;
- insn->op = FILTER_OP_GET_CONTEXT_ROOT;
+ insn->op = BYTECODE_OP_GET_CONTEXT_ROOT;
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
free(insn);
if (ret) {
insn = calloc(insn_len, 1);
if (!insn)
return -ENOMEM;
- insn->op = FILTER_OP_GET_APP_CONTEXT_ROOT;
+ insn->op = BYTECODE_OP_GET_APP_CONTEXT_ROOT;
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
free(insn);
if (ret) {
insn = calloc(insn_len, 1);
if (!insn)
return -ENOMEM;
- insn->op = FILTER_OP_GET_PAYLOAD_ROOT;
+ insn->op = BYTECODE_OP_GET_PAYLOAD_ROOT;
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
free(insn);
if (ret) {
insn = calloc(insn_len, 1);
if (!insn)
return -ENOMEM;
- insn->op = FILTER_OP_GET_SYMBOL;
+ insn->op = BYTECODE_OP_GET_SYMBOL;
bytecode_reloc_offset_u32 =
bytecode_get_len(&ctx->bytecode_reloc->b)
+ sizeof(reloc_offset);
insn = calloc(insn_len, 1);
if (!insn)
return -ENOMEM;
- insn->op = FILTER_OP_GET_INDEX_U64;
+ insn->op = BYTECODE_OP_GET_INDEX_U64;
index.index = op->u.index;
memcpy(insn->data, &index, sizeof(index));
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
insn = calloc(insn_len, 1);
if (!insn)
return -ENOMEM;
- insn->op = FILTER_OP_LOAD_FIELD;
+ insn->op = BYTECODE_OP_LOAD_FIELD;
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
free(insn);
if (ret) {
* that the appropriate matching function can be
* called. Also, see comment below.
*/
- insn->op = FILTER_OP_LOAD_STAR_GLOB_STRING;
+ insn->op = BYTECODE_OP_LOAD_STAR_GLOB_STRING;
break;
default:
/*
* can be anywhere in the string) is a special
* case.
*/
- insn->op = FILTER_OP_LOAD_STRING;
+ insn->op = BYTECODE_OP_LOAD_STRING;
break;
}
insn = calloc(insn_len, 1);
if (!insn)
return -ENOMEM;
- insn->op = FILTER_OP_LOAD_S64;
+ insn->op = BYTECODE_OP_LOAD_S64;
memcpy(insn->data, &node->u.load.u.num, sizeof(int64_t));
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
free(insn);
insn = calloc(insn_len, 1);
if (!insn)
return -ENOMEM;
- insn->op = FILTER_OP_LOAD_DOUBLE;
+ insn->op = BYTECODE_OP_LOAD_DOUBLE;
memcpy(insn->data, &node->u.load.u.flt, sizeof(double));
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
free(insn);
/* Nothing to do. */
return 0;
case AST_UNARY_MINUS:
- insn.op = FILTER_OP_UNARY_MINUS;
+ insn.op = BYTECODE_OP_UNARY_MINUS;
return bytecode_push(&ctx->bytecode, &insn, 1, sizeof(insn));
case AST_UNARY_NOT:
- insn.op = FILTER_OP_UNARY_NOT;
+ insn.op = BYTECODE_OP_UNARY_NOT;
return bytecode_push(&ctx->bytecode, &insn, 1, sizeof(insn));
case AST_UNARY_BIT_NOT:
- insn.op = FILTER_OP_UNARY_BIT_NOT;
+ insn.op = BYTECODE_OP_UNARY_BIT_NOT;
return bytecode_push(&ctx->bytecode, &insn, 1, sizeof(insn));
}
}
return -EINVAL;
case AST_OP_MUL:
- insn.op = FILTER_OP_MUL;
+ insn.op = BYTECODE_OP_MUL;
break;
case AST_OP_DIV:
- insn.op = FILTER_OP_DIV;
+ insn.op = BYTECODE_OP_DIV;
break;
case AST_OP_MOD:
- insn.op = FILTER_OP_MOD;
+ insn.op = BYTECODE_OP_MOD;
break;
case AST_OP_PLUS:
- insn.op = FILTER_OP_PLUS;
+ insn.op = BYTECODE_OP_PLUS;
break;
case AST_OP_MINUS:
- insn.op = FILTER_OP_MINUS;
+ insn.op = BYTECODE_OP_MINUS;
break;
case AST_OP_BIT_RSHIFT:
- insn.op = FILTER_OP_BIT_RSHIFT;
+ insn.op = BYTECODE_OP_BIT_RSHIFT;
break;
case AST_OP_BIT_LSHIFT:
- insn.op = FILTER_OP_BIT_LSHIFT;
+ insn.op = BYTECODE_OP_BIT_LSHIFT;
break;
case AST_OP_BIT_AND:
- insn.op = FILTER_OP_BIT_AND;
+ insn.op = BYTECODE_OP_BIT_AND;
break;
case AST_OP_BIT_OR:
- insn.op = FILTER_OP_BIT_OR;
+ insn.op = BYTECODE_OP_BIT_OR;
break;
case AST_OP_BIT_XOR:
- insn.op = FILTER_OP_BIT_XOR;
+ insn.op = BYTECODE_OP_BIT_XOR;
break;
case AST_OP_EQ:
- insn.op = FILTER_OP_EQ;
+ insn.op = BYTECODE_OP_EQ;
break;
case AST_OP_NE:
- insn.op = FILTER_OP_NE;
+ insn.op = BYTECODE_OP_NE;
break;
case AST_OP_GT:
- insn.op = FILTER_OP_GT;
+ insn.op = BYTECODE_OP_GT;
break;
case AST_OP_LT:
- insn.op = FILTER_OP_LT;
+ insn.op = BYTECODE_OP_LT;
break;
case AST_OP_GE:
- insn.op = FILTER_OP_GE;
+ insn.op = BYTECODE_OP_GE;
break;
case AST_OP_LE:
- insn.op = FILTER_OP_LE;
+ insn.op = BYTECODE_OP_LE;
break;
}
return bytecode_push(&ctx->bytecode, &insn, 1, sizeof(insn));
if (node->u.binary.left->data_type == IR_DATA_FIELD_REF
|| node->u.binary.left->data_type == IR_DATA_GET_CONTEXT_REF
|| node->u.binary.left->data_type == IR_DATA_EXPRESSION) {
- cast_insn.op = FILTER_OP_CAST_TO_S64;
+ cast_insn.op = BYTECODE_OP_CAST_TO_S64;
} else {
- cast_insn.op = FILTER_OP_CAST_DOUBLE_TO_S64;
+ cast_insn.op = BYTECODE_OP_CAST_DOUBLE_TO_S64;
}
ret = bytecode_push(&ctx->bytecode, &cast_insn,
1, sizeof(cast_insn));
return -EINVAL;
case AST_OP_AND:
- insn.op = FILTER_OP_AND;
+ insn.op = BYTECODE_OP_AND;
break;
case AST_OP_OR:
- insn.op = FILTER_OP_OR;
+ insn.op = BYTECODE_OP_OR;
break;
}
insn.skip_offset = (uint16_t) -1UL; /* Temporary */
if (node->u.binary.right->data_type == IR_DATA_FIELD_REF
|| node->u.binary.right->data_type == IR_DATA_GET_CONTEXT_REF
|| node->u.binary.right->data_type == IR_DATA_EXPRESSION) {
- cast_insn.op = FILTER_OP_CAST_TO_S64;
+ cast_insn.op = BYTECODE_OP_CAST_TO_S64;
} else {
- cast_insn.op = FILTER_OP_CAST_DOUBLE_TO_S64;
+ cast_insn.op = BYTECODE_OP_CAST_DOUBLE_TO_S64;
}
ret = bytecode_push(&ctx->bytecode, &cast_insn,
1, sizeof(cast_insn));
LTTNG_KERNEL_EVENT_NOTIFIER_CREATE, event_notifier);
}
-int kernctl_filter(int fd, const struct lttng_filter_bytecode *filter)
+int kernctl_filter(int fd, const struct lttng_bytecode *filter)
{
struct lttng_kernel_filter_bytecode *kb;
uint32_t len;
const struct lttng_kernel_event_notifier *event_notifier);
/* Apply on event file descriptor. */
-int kernctl_filter(int fd, const struct lttng_filter_bytecode *filter);
+int kernctl_filter(int fd, const struct lttng_bytecode *filter);
int kernctl_add_callsite(int fd, struct lttng_kernel_event_callsite *callsite);
int kernctl_tracepoint_list(int fd);
LTTNG_HIDDEN
int run_as_generate_filter_bytecode(const char *filter_expression,
const struct lttng_credentials *creds,
- struct lttng_filter_bytecode **bytecode)
+ struct lttng_bytecode **bytecode)
{
int ret;
struct run_as_data data = {};
struct run_as_ret run_as_ret = {};
- const struct lttng_filter_bytecode *view_bytecode = NULL;
- struct lttng_filter_bytecode *local_bytecode = NULL;
+ const struct lttng_bytecode *view_bytecode = NULL;
+ struct lttng_bytecode *local_bytecode = NULL;
const uid_t uid = lttng_credentials_get_uid(creds);
const gid_t gid = lttng_credentials_get_gid(creds);
goto error;
}
- view_bytecode = (const struct lttng_filter_bytecode *) run_as_ret.u.generate_filter_bytecode.bytecode;
+ view_bytecode = (const struct lttng_bytecode *) run_as_ret.u.generate_filter_bytecode.bytecode;
local_bytecode = zmalloc(sizeof(*local_bytecode) + view_bytecode->len);
if (!local_bytecode) {
LTTNG_HIDDEN
int run_as_generate_filter_bytecode(const char *filter_expression,
const struct lttng_credentials *creds,
- struct lttng_filter_bytecode **bytecode);
+ struct lttng_bytecode **bytecode);
LTTNG_HIDDEN
int run_as_create_worker(const char *procname,
post_fork_cleanup_cb clean_up_func, void *clean_up_user_data);
* starts at reloc_table_offset.
*/
#define LTTNG_FILTER_PADDING 32
-struct lttng_filter_bytecode {
+struct lttng_bytecode {
uint32_t len; /* len of data */
uint32_t reloc_table_offset;
uint64_t seqnum;