X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Fltt%2Ftracefile.c;h=9ddfaf29c5e8d0e1e1bf83343e4d1388f2e0b86c;hb=07effdbd39dbb9357f88db73f3a65e38bbb30879;hp=6ef5dca88b391408b69faaf79b46428d83c23f78;hpb=d79909d1d188c52b42984fded1ccc5263525a1c3;p=lttv.git diff --git a/ltt/branches/poly/ltt/tracefile.c b/ltt/branches/poly/ltt/tracefile.c index 6ef5dca8..9ddfaf29 100644 --- a/ltt/branches/poly/ltt/tracefile.c +++ b/ltt/branches/poly/ltt/tracefile.c @@ -231,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) { @@ -246,7 +246,6 @@ int parse_trace_header(void *header, LttTracefile *tf, LttTrace *t) // t->compact_facilities = NULL; } - switch(any->major_version) { case 0: @@ -1090,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; @@ -1098,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); @@ -1120,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,7 +1235,7 @@ LttTrace *ltt_trace_open(const gchar *pathname) t->num_cpu = group->len; ret = allocate_marker_data(t); - if (!ret) + if (ret) g_error("Error in allocating marker data"); for(i=0; ilen; i++) { @@ -1751,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) { @@ -1833,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; @@ -1988,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); @@ -1998,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;