filter: add seqnum field to filter command
[lttng-ust.git] / liblttng-ust / ltt-probes.c
index 3d6b1414b97c6baf2a0615592288cb9e67bb0225..aeb6db65224340a311ca320142b841800b9e9772 100644 (file)
@@ -244,6 +244,28 @@ int ltt_probes_get_field_list(struct lttng_ust_field_list *list)
                                probe_desc->event_desc[i];
                        int j;
 
+                       if (event_desc->nr_fields == 0) {
+                               /* Events without fields. */
+                               struct tp_field_list_entry *list_entry;
+
+                               list_entry = zmalloc(sizeof(*list_entry));
+                               if (!list_entry)
+                                       goto err_nomem;
+                               cds_list_add(&list_entry->head, &list->head);
+                               strncpy(list_entry->field.event_name,
+                                       event_desc->name,
+                                       LTTNG_UST_SYM_NAME_LEN);
+                               list_entry->field.event_name[LTTNG_UST_SYM_NAME_LEN - 1] = '\0';
+                               list_entry->field.field_name[0] = '\0';
+                               list_entry->field.type = LTTNG_UST_FIELD_OTHER;
+                               if (!event_desc->loglevel) {
+                                       list_entry->field.loglevel = TRACE_DEFAULT;
+                               } else {
+                                       list_entry->field.loglevel = *(*event_desc->loglevel);
+                               }
+                               list_entry->field.nowrite = 1;
+                       }
+
                        for (j = 0; j < event_desc->nr_fields; j++) {
                                const struct lttng_event_field *event_field =
                                        &event_desc->fields[j];
@@ -261,11 +283,42 @@ int ltt_probes_get_field_list(struct lttng_ust_field_list *list)
                                        event_field->name,
                                        LTTNG_UST_SYM_NAME_LEN);
                                list_entry->field.field_name[LTTNG_UST_SYM_NAME_LEN - 1] = '\0';
+                               switch (event_field->type.atype) {
+                               case atype_integer:
+                                       list_entry->field.type = LTTNG_UST_FIELD_INTEGER;
+                                       break;
+                               case atype_string:
+                                       list_entry->field.type = LTTNG_UST_FIELD_STRING;
+                                       break;
+                               case atype_array:
+                                       if (event_field->type.u.array.elem_type.atype != atype_integer
+                                               || event_field->type.u.array.elem_type.u.basic.integer.encoding == lttng_encode_none)
+                                               list_entry->field.type = LTTNG_UST_FIELD_OTHER;
+                                       else
+                                               list_entry->field.type = LTTNG_UST_FIELD_STRING;
+                                       break;
+                               case atype_sequence:
+                                       if (event_field->type.u.sequence.elem_type.atype != atype_integer
+                                               || event_field->type.u.sequence.elem_type.u.basic.integer.encoding == lttng_encode_none)
+                                               list_entry->field.type = LTTNG_UST_FIELD_OTHER;
+                                       else
+                                               list_entry->field.type = LTTNG_UST_FIELD_STRING;
+                                       break;
+                               case atype_float:
+                                       list_entry->field.type = LTTNG_UST_FIELD_FLOAT;
+                                       break;
+                               case atype_enum:
+                                       list_entry->field.type = LTTNG_UST_FIELD_ENUM;
+                                       break;
+                               default:
+                                       list_entry->field.type = LTTNG_UST_FIELD_OTHER;
+                               }
                                if (!event_desc->loglevel) {
                                        list_entry->field.loglevel = TRACE_DEFAULT;
                                } else {
                                        list_entry->field.loglevel = *(*event_desc->loglevel);
                                }
+                               list_entry->field.nowrite = event_field->nowrite;
                        }
                }
        }
@@ -337,13 +390,13 @@ void ltt_probes_create_wildcard_events(struct wildcard_entry *entry,
 
                                memcpy(&event_param, &wildcard->event_param,
                                                sizeof(event_param));
-                               memcpy(event_param.name,
+                               strncpy(event_param.name,
                                        event_desc->name,
                                        sizeof(event_param.name));
+                               event_param.name[sizeof(event_param.name) - 1] = '\0';
                                /* create event */
                                ret = ltt_event_create(wildcard->chan,
-                                       &event_param, NULL,
-                                       &ev);
+                                       &event_param, &ev);
                                if (ret) {
                                        DBG("Error creating event");
                                        continue;
@@ -353,5 +406,6 @@ void ltt_probes_create_wildcard_events(struct wildcard_entry *entry,
                        }
                }
        }
+       lttng_filter_wildcard_link_bytecode(wildcard);
 }
 
This page took 0.02405 seconds and 4 git commands to generate.