uint8_t minor_version;
uint8_t flight_recorder;
uint8_t has_heartbeat;
- uint8_t has_alignment; /* Event header alignment */
+ uint8_t alignment; /* Event header alignment */
uint32_t freq_scale;
} LTT_PACKED_STRUCT;
uint8_t minor_version;
uint8_t flight_recorder;
uint8_t has_heartbeat;
- uint8_t has_alignment; /* Event header alignment */
+ uint8_t alignment; /* Event header alignment */
uint8_t tsc_lsb_truncate;
uint8_t tscbits;
uint32_t freq_scale;
guint num_blocks; //number of blocks in the file
gboolean reverse_bo; //must we reverse byte order ?
gboolean float_word_order; //what is the byte order of floats ?
- size_t has_alignment; //alignment of events in the tracefile.
+ size_t alignment; //alignment of events in the tracefile.
// 0 or the architecture size in bytes.
guint8 has_heartbeat;
//off_t get_alignment(LttField *field);
/* Calculate the offset needed to align the type.
- * If has_alignment is 0, alignment is disactivated.
+ * If alignment is 0, alignment is disactivated.
* else, the function returns the offset needed to
- * align align_drift on the has_alignment value (should be
+ * align align_drift on the alignment value (should be
* the size of the architecture). */
static inline unsigned int ltt_align(size_t align_drift,
size_t size_of_type,
- size_t has_alignment)
+ size_t alignment)
{
- size_t alignment = min(has_alignment, size_of_type);
+ size_t align_offset = min(alignment, size_of_type);
- if(!has_alignment) return 0;
+ if(!alignment)
+ return 0;
g_assert(size_of_type != 0);
- return ((alignment - align_drift) & (alignment-1));
+ return ((align_offset - align_drift) & (align_offset-1));
}
/* 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) {
g_debug("Doing MARKER_ID_SET_MARKER_ID of marker %s", marker_name);
pos += strlen(marker_name) + 1;
//remove genevent compatibility
- //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 += 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);
pos += sizeof(guint16);
int_size = *(guint8*)pos;
marker_name);
pos += strlen(marker_name) + 1;
//break genevent.
- //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);
format = pos;
pos += strlen(format) + 1;
//break genevent
- //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);
marker_format_event(tf->trace, g_quark_from_string(marker_name),
format);
/* get information from dictionnary TODO */
/* 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);
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;