add debug
[lttv.git] / ltt / branches / poly / ltt / tracefile.c
index d58ef3eb8e34fa01c837b92b1dd70727f8053684..9ddfaf29c5e8d0e1e1bf83343e4d1388f2e0b86c 100644 (file)
 #include <ltt/ltt.h>
 #include "ltt-private.h"
 #include <ltt/trace.h>
-#include <ltt/facility.h>
 #include <ltt/event.h>
-#include <ltt/type.h>
+//#include <ltt/type.h>
 #include <ltt/ltt-types.h>
-#include <ltt/markers.h>
+#include <ltt/marker.h>
 
 /* Facility names used in this file */
 
@@ -232,7 +231,7 @@ int parse_trace_header(void *header, LttTracefile *tf, LttTrace *t)
   /* Get float byte order : might be different from int byte order
    * (or is set to 0 if the trace has no float (kernel trace)) */
   tf->float_word_order = any->float_word_order;
-       tf->has_alignment = any->has_alignment;
+       tf->alignment = any->alignment;
   tf->has_heartbeat = any->has_heartbeat;
 
   if(t) {
@@ -247,7 +246,6 @@ int parse_trace_header(void *header, LttTracefile *tf, LttTrace *t)
    // t->compact_facilities = NULL;
   }
  
-
   switch(any->major_version) {
 
   case 0:
@@ -1058,10 +1056,10 @@ static void ltt_fac_ids_destroy(gpointer data)
 int ltt_process_facility_tracefile(LttTracefile *tf)
 {
   int err;
-  LttFacility *fac;
-  GArray *fac_ids;
+  //LttFacility *fac;
+  //GArray *fac_ids;
   guint i;
-  LttEventType *et;
+  //LttEventType *et;
   
   while(1) {
     err = ltt_tracefile_read_seek(tf);
@@ -1091,7 +1089,7 @@ int ltt_process_facility_tracefile(LttTracefile *tf)
       goto event_id_error;
     } else {
     
-      void *pos;
+      char *pos;
       const char *marker_name, *format;
       uint16_t id;
       guint8 int_size, long_size, pointer_size, size_t_size, alignment;
@@ -1099,12 +1097,15 @@ int ltt_process_facility_tracefile(LttTracefile *tf)
       // FIXME align
       switch((enum marker_id)tf->event.event_id) {
         case MARKER_ID_SET_MARKER_ID:
-          marker_name = (char*)(tf->event.data);
+          marker_name = pos = tf->event.data;
           g_debug("Doing MARKER_ID_SET_MARKER_ID of marker %s", marker_name);
-          pos = (tf->event.data + strlen(marker_name) + 1);
-          pos += ltt_align((size_t)pos, tf->trace->arch_size, tf->has_alignment);
-          pos += ltt_align((size_t)pos, sizeof(uint16_t), tf->has_alignment);
+          pos += strlen(marker_name) + 1;
+          //remove genevent compatibility
+         //pos += ltt_align((size_t)pos, tf->trace->arch_size, tf->alignment);
+          pos += ltt_align((size_t)pos, sizeof(uint16_t), tf->alignment);
           id = ltt_get_uint16(LTT_GET_BO(tf), pos);
+          g_debug("In MARKER_ID_SET_MARKER_ID of marker %s id %hu",
+               marker_name, id);
           pos += sizeof(guint16);
           int_size = *(guint8*)pos;
           pos += sizeof(guint8);
@@ -1121,14 +1122,16 @@ int ltt_process_facility_tracefile(LttTracefile *tf)
                           pointer_size, size_t_size, alignment);
           break;
         case MARKER_ID_SET_MARKER_FORMAT:
-          marker_name = (char*)(tf->event.data);
+          marker_name = pos = tf->event.data;
           g_debug("Doing MARKER_ID_SET_MARKER_FORMAT of marker %s",
                   marker_name);
-          pos = (tf->event.data + strlen(marker_name) + 1);
-          pos += ltt_align((size_t)pos, tf->trace->arch_size, tf->has_alignment);
-          format = (const char*)pos;
+          pos += strlen(marker_name) + 1;
+          //break genevent.
+         //pos += ltt_align((size_t)pos, tf->trace->arch_size, tf->alignment);
+          format = pos;
           pos += strlen(format) + 1;
-          pos += ltt_align((size_t)pos, tf->trace->arch_size, tf->has_alignment);
+          //break genevent
+         //pos += ltt_align((size_t)pos, tf->trace->arch_size, tf->alignment);
           marker_format_event(tf->trace, g_quark_from_string(marker_name),
                               format);
           /* get information from dictionnary TODO */
@@ -1231,6 +1234,10 @@ LttTrace *ltt_trace_open(const gchar *pathname)
 
   t->num_cpu = group->len;
   
+  ret = allocate_marker_data(t);
+  if (ret)
+    g_error("Error in allocating marker data");
+
   for(i=0; i<group->len; i++) {
     tf = &g_array_index (group, LttTracefile, i);
     if(ltt_process_facility_tracefile(tf))
@@ -1241,8 +1248,7 @@ LttTrace *ltt_trace_open(const gchar *pathname)
 
   /* Error handling */
 facilities_error:
-  g_datalist_clear(&t->facilities_by_name);
-  g_array_free(t->facilities_by_num, TRUE);
+  destroy_marker_data(t);
 find_error:
   g_datalist_clear(&t->tracefiles);
 open_error:
@@ -1749,10 +1755,10 @@ int ltt_tracefile_read_update_event(LttTracefile *tf)
   
   /* Align the head */
   if(!tf->compact)
-    pos += ltt_align((size_t)pos, tf->trace->arch_size, tf->has_alignment);
+    pos += ltt_align((size_t)pos, tf->trace->arch_size, tf->alignment);
   else {
     g_assert(tf->has_heartbeat);
-    pos += ltt_align((size_t)pos, sizeof(uint32_t), tf->has_alignment);
+    pos += ltt_align((size_t)pos, sizeof(uint32_t), tf->alignment);
   }
   
   if(tf->has_heartbeat) {
@@ -1831,7 +1837,7 @@ int ltt_tracefile_read_update_event(LttTracefile *tf)
   }
   /* Align the head */
   if(!tf->compact)
-    pos += ltt_align((size_t)pos, tf->trace->arch_size, tf->has_alignment);
+    pos += ltt_align((size_t)pos, tf->trace->arch_size, tf->alignment);
 
   event->data = pos;
 
@@ -1986,8 +1992,8 @@ void ltt_update_event_size(LttTracefile *tf)
   switch((enum marker_id)tf->event.event_id) {
     case MARKER_ID_SET_MARKER_ID:
       size = strlen((char*)tf->event.data) + 1;
-      //g_debug("marker %s id set", (char*)tf->event.data);
-      size += ltt_align(size, sizeof(guint16), tf->has_alignment);
+      g_debug("marker %s id set", (char*)tf->event.data);
+      size += ltt_align(size, sizeof(guint16), tf->alignment);
       size += sizeof(guint16);
       size += sizeof(guint8);
       size += sizeof(guint8);
@@ -1996,33 +2002,37 @@ void ltt_update_event_size(LttTracefile *tf)
       size += sizeof(guint8);
       break;
     case MARKER_ID_SET_MARKER_FORMAT:
-      //g_debug("marker %s format set", (char*)tf->event.data);
+      g_debug("marker %s format set", (char*)tf->event.data);
       size = strlen((char*)tf->event.data) + 1;
-      size += strlen((char*)tf->event.data) + 1;
+      size += strlen((char*)tf->event.data + size) + 1;
       break;
     case MARKER_ID_HEARTBEAT_32:
-      //g_debug("Update Event heartbeat 32 bits");
-      size = ltt_align(size, sizeof(guint32), tf->has_alignment);
-      size += sizeof(guint32);
+      g_debug("Update Event heartbeat 32 bits");
       break;
     case MARKER_ID_HEARTBEAT_64:
-      //g_debug("Update Event heartbeat 64 bits");
+      g_debug("Update Event heartbeat 64 bits");
       tscdata = (char*)(tf->event.data);
       tf->event.tsc = ltt_get_uint64(LTT_GET_BO(tf), tscdata);
       tf->buffer.tsc = tf->event.tsc;
       tf->event.event_time = ltt_interpolate_time(tf, &tf->event);
-      size = ltt_align(size, sizeof(guint64), tf->has_alignment);
+      size = ltt_align(size, sizeof(guint64), tf->alignment);
       size += sizeof(guint64);
       break;
-    default:
-      info = marker_get_info_from_id(tf->trace, tf->event.event_id);
-      g_assert(info != NULL);
-      if (info->size != -1) {
-        size = info->size;
-      } else {
-        size = marker_update_fields_offsets(marker_get_info_from_id(tf->trace,
-                                     tf->event.event_id), tf->event.data);
-      }
+  }
+
+  info = marker_get_info_from_id(tf->trace, tf->event.event_id);
+  if (tf->event.event_id >= MARKER_CORE_IDS)
+    g_assert(info != NULL);
+
+  /* Do not update field offsets of core markers when initially reading the
+   * facility tracefile when the infos about these markers do not exist yet.
+   */
+  if (likely(info && info->fields)) {
+    if (info->size != -1)
+      size = info->size;
+    else
+      size = marker_update_fields_offsets(marker_get_info_from_id(tf->trace,
+                                   tf->event.event_id), tf->event.data);
   }
 
   tf->event.data_size = size;
This page took 0.030028 seconds and 4 git commands to generate.