/* 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) {
// t->compact_facilities = NULL;
}
-
switch(any->major_version) {
case 0:
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;
// 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);
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 */
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))
/* Error handling */
facilities_error:
+ destroy_marker_data(t);
find_error:
g_datalist_clear(&t->tracefiles);
open_error:
/* 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) {
}
/* 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;
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);
+ size += ltt_align(size, sizeof(guint16), tf->alignment);
size += sizeof(guint16);
size += sizeof(guint8);
size += sizeof(guint8);
case MARKER_ID_SET_MARKER_FORMAT:
//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);
break;
case MARKER_ID_HEARTBEAT_64:
//g_debug("Update Event heartbeat 64 bits");
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;