tracepoint: Refactor representation of nested types
[lttng-ust.git] / liblttng-ust / lttng-filter.c
index d52658ae14dd7f4e135a5e6e0df306069bd94f4b..1967d540bd99b4f9f46f8140042d35e004d10667 100644 (file)
  */
 
 #define _LGPL_SOURCE
+#include <stddef.h>
+#include <stdint.h>
+
 #include <urcu/rculist.h>
+
 #include "lttng-filter.h"
 
 static const char *opnames[] = {
@@ -207,6 +211,9 @@ int apply_field_reloc(struct lttng_event *event,
                return -EINVAL;
        nr_fields = desc->nr_fields;
        for (i = 0; i < nr_fields; i++) {
+               if (fields[i].u.ext.nofilter) {
+                       continue;
+               }
                if (!strcmp(fields[i].name, field_name)) {
                        field = &fields[i];
                        break;
@@ -215,10 +222,13 @@ int apply_field_reloc(struct lttng_event *event,
                switch (fields[i].type.atype) {
                case atype_integer:
                case atype_enum:
+               case atype_enum_nestable:
                        field_offset += sizeof(int64_t);
                        break;
                case atype_array:
+               case atype_array_nestable:
                case atype_sequence:
+               case atype_sequence_nestable:
                        field_offset += sizeof(unsigned long);
                        field_offset += sizeof(void *);
                        break;
@@ -251,10 +261,13 @@ int apply_field_reloc(struct lttng_event *event,
                switch (field->type.atype) {
                case atype_integer:
                case atype_enum:
+               case atype_enum_nestable:
                        op->op = FILTER_OP_LOAD_FIELD_REF_S64;
                        break;
                case atype_array:
+               case atype_array_nestable:
                case atype_sequence:
+               case atype_sequence_nestable:
                        op->op = FILTER_OP_LOAD_FIELD_REF_SEQUENCE;
                        break;
                case atype_string:
@@ -326,12 +339,15 @@ int apply_context_reloc(struct lttng_event *event,
                switch (ctx_field->event_field.type.atype) {
                case atype_integer:
                case atype_enum:
+               case atype_enum_nestable:
                        op->op = FILTER_OP_GET_CONTEXT_REF_S64;
                        break;
                        /* Sequence and array supported as string */
                case atype_string:
                case atype_array:
+               case atype_array_nestable:
                case atype_sequence:
+               case atype_sequence_nestable:
                        op->op = FILTER_OP_GET_CONTEXT_REF_STRING;
                        break;
                case atype_float:
@@ -434,7 +450,6 @@ int _lttng_filter_event_link_bytecode(struct lttng_event *event,
        }
        runtime->p.bc = filter_bytecode;
        runtime->p.session = event->chan->session;
-       runtime->p.event = event;
        runtime->len = filter_bytecode->bc.reloc_offset;
        /* copy original bytecode */
        memcpy(runtime->code, filter_bytecode->bc.data, runtime->len);
@@ -553,16 +568,6 @@ int lttng_filter_enabler_attach_bytecode(struct lttng_enabler *enabler,
        return 0;
 }
 
-void lttng_free_enabler_filter_bytecode(struct lttng_enabler *enabler)
-{
-       struct lttng_ust_filter_bytecode_node *filter_bytecode, *tmp;
-
-       cds_list_for_each_entry_safe(filter_bytecode, tmp,
-                       &enabler->filter_bytecode_head, node) {
-               free(filter_bytecode);
-       }
-}
-
 void lttng_free_event_filter_runtime(struct lttng_event *event)
 {
        struct bytecode_runtime *runtime, *tmp;
This page took 0.024613 seconds and 4 git commands to generate.