Add Debug output on errors
[lttv.git] / ltt / marker.c
index 8e07b326311b2b348edd3d95694808017b168057..ade05e16a0a256a02e2688f2f01da55f03a4d17a 100644 (file)
@@ -250,30 +250,31 @@ static inline long add_type(struct marker_info *info,
     field->name = g_quark_from_string(tmpname);
   }
   field->type = trace_type;
+  field->index = info->fields->len-1;
   field->fmt = g_string_new(field_fmt->str);
 
   switch (trace_type) {
   case LTT_TYPE_SIGNED_INT:
   case LTT_TYPE_UNSIGNED_INT:
   case LTT_TYPE_POINTER:
-    field->size = trace_size;
+    field->_size = trace_size;
     field->alignment = trace_size;
     info->largest_align = max((guint8)field->alignment,
                               (guint8)info->largest_align);
     field->attributes = attributes;
     if (offset == -1) {
-      field->offset = -1;
+      field->_offset = -1;
       field->static_offset = 0;
       return -1;
     } else {
-      field->offset = offset + ltt_align(offset, field->alignment,
+      field->_offset = offset + ltt_align(offset, field->alignment,
                                          info->alignment);
       field->static_offset = 1;
-      return field->offset + trace_size;
+      return field->_offset + trace_size;
     }
   case LTT_TYPE_STRING:
-    field->offset = offset;
-    field->size = 0;  /* Variable length, size is 0 */
+    field->_offset = offset;
+    field->_size = 0;  /* Variable length, size is 0 */
     field->alignment = 1;
     if (offset == -1)
       field->static_offset = 0;
@@ -296,7 +297,7 @@ long marker_update_fields_offsets(struct marker_info *info, const char *data)
   for (i = info->fields->len - 1; i >= 0; i--) {
     field = &g_array_index(info->fields, struct marker_field, i);
     if (field->static_offset) {
-      offset = field->offset;
+      offset = field->_offset;
       break;
     }
   }
@@ -308,12 +309,12 @@ long marker_update_fields_offsets(struct marker_info *info, const char *data)
     case LTT_TYPE_SIGNED_INT:
     case LTT_TYPE_UNSIGNED_INT:
     case LTT_TYPE_POINTER:
-      field->offset = offset + ltt_align(offset, field->alignment,
+      field->_offset = offset + ltt_align(offset, field->alignment,
                                           info->alignment);
-      offset = field->offset + field->size;
+      offset = field->_offset + field->_size;
       break;
     case LTT_TYPE_STRING:
-      field->offset = offset;
+      field->_offset = offset;
       offset = offset + strlen(&data[offset]) + 1;
       // not aligning on pointer size, breaking genevent backward compatibility.
       break;
@@ -325,6 +326,24 @@ long marker_update_fields_offsets(struct marker_info *info, const char *data)
   return offset;
 }
 
+void marker_update_event_fields_offsets(GArray *fields_offsets,
+                                       struct marker_info *info)
+{
+  unsigned int i;
+
+  g_array_set_size(fields_offsets, info->fields->len);
+  for (i = 0; i < info->fields->len; i++) {
+    struct marker_field *mfield =
+      &g_array_index(info->fields, struct marker_field, i);
+    struct LttField *eventfield =
+      &g_array_index(fields_offsets, struct LttField, i);
+    eventfield->offset = mfield->_offset;
+    eventfield->size = mfield->_size;
+    g_assert(eventfield->offset != -1);
+    g_assert(eventfield->size != -1);
+  }
+}
+
 static void format_parse(const char *fmt, struct marker_info *info)
 {
   char trace_size = 0, c_size = 0;  /*
@@ -421,16 +440,21 @@ int marker_parse_format(const char *format, struct marker_info *info)
   return 0;
 }
 
-static
-int marker_format_tf_event(LttTrace *trace, LttTracefile *tf,
-  GQuark channel, GQuark name, const char *format)
+int marker_format_event(LttTrace *trace, GQuark channel, GQuark name,
+  const char *format)
 {
   struct marker_info *info;
   struct marker_data *mdata;
   char *fquery;
   char *fcopy;
+  GArray *group;
+
+  group = g_datalist_id_get_data(&trace->tracefiles, channel);
+  if (!group)
+    return -ENOENT;
+  g_assert(group->len > 0);
+  mdata = g_array_index (group, LttTracefile, 0).mdata;
 
-  mdata = tf->mdata;
   fquery = marker_get_format_from_name(mdata, name);
   if (fquery) {
     if (strcmp(fquery, format) != 0)
@@ -455,36 +479,23 @@ int marker_format_tf_event(LttTrace *trace, LttTracefile *tf,
   return 0;
 }
 
-int marker_format_event(LttTrace *trace, GQuark channel, GQuark name,
-  const char *format)
-{
-  GArray *group;
-  int i, ret;
-  LttTracefile *tf;
-
-  group = g_datalist_id_get_data(&trace->tracefiles, channel);
-  if (!group)
-    return -ENOENT;
-  g_assert(group->len > 0);
-  for (i = 0; i < group->len; i++) {
-    tf = &g_array_index (group, LttTracefile, i);
-    ret = marker_format_tf_event(trace, tf, channel, name, format);
-    if (ret)
-      g_error("Error in marker_format_event");
-  }
-  return 0;
-}
-
-int marker_id_tf_event(LttTrace *trace, LttTracefile *tf,
-  GQuark channel, GQuark name, guint16 id,
+int marker_id_event(LttTrace *trace, GQuark channel, GQuark name, guint16 id,
   uint8_t int_size, uint8_t long_size, uint8_t pointer_size,
   uint8_t size_t_size, uint8_t alignment)
 {
   struct marker_data *mdata;
   struct marker_info *info, *head;
   int found = 0;
+  GArray *group;
 
-  mdata = tf->mdata;
+  g_debug("Add channel %s event %s %hu\n", g_quark_to_string(channel),
+    g_quark_to_string(name), id);
+
+  group = g_datalist_id_get_data(&trace->tracefiles, channel);
+  if (!group)
+    return -ENOENT;
+  g_assert(group->len > 0);
+  mdata = g_array_index (group, LttTracefile, 0).mdata;
 
   if (mdata->markers->len <= id)
     mdata->markers = g_array_set_size(mdata->markers,
@@ -521,31 +532,6 @@ int marker_id_tf_event(LttTrace *trace, LttTracefile *tf,
   return 0;
 }
 
-int marker_id_event(LttTrace *trace, GQuark channel, GQuark name, guint16 id,
-  uint8_t int_size, uint8_t long_size, uint8_t pointer_size,
-  uint8_t size_t_size, uint8_t alignment)
-{
-  GArray *group;
-  int i, ret;
-  LttTracefile *tf;
-
-  g_debug("Add channel %s event %s %hu\n", g_quark_to_string(channel),
-    g_quark_to_string(name), id);
-
-  group = g_datalist_id_get_data(&trace->tracefiles, channel);
-  if (!group)
-    return -ENOENT;
-  g_assert(group->len > 0);
-  for (i = 0; i < group->len; i++) {
-    tf = &g_array_index (group, LttTracefile, i);
-    ret = marker_id_tf_event(trace, tf, channel, name, id, int_size, long_size,
-                             pointer_size, size_t_size, alignment);
-    if (ret)
-      g_error("Error in marker_id_event");
-  }
-  return 0;
-}
-
 struct marker_data *allocate_marker_data(void)
 {
   struct marker_data *data;
This page took 0.024897 seconds and 4 git commands to generate.