void ltt_update_event_size(LttTracefile *tf);
+
+void precompute_offsets(LttTracefile *tf, LttEventType *event);
+
#if 0
/* Functions to parse system.xml file (using glib xml parser) */
static void parser_start_element (GMarkupParseContext __UNUSED__ *context,
}
}
break;
+ case 5:
+ {
+ struct ltt_trace_header_0_5 *vheader =
+ (struct ltt_trace_header_0_5 *)header;
+ tf->buffer_header_size =
+ sizeof(struct ltt_block_start_header)
+ + sizeof(struct ltt_trace_header_0_5);
+ if(t) {
+ t->start_freq = ltt_get_uint64(LTT_GET_BO(tf),
+ &vheader->start_freq);
+ t->start_tsc = ltt_get_uint64(LTT_GET_BO(tf),
+ &vheader->start_tsc);
+ t->start_monotonic = ltt_get_uint64(LTT_GET_BO(tf),
+ &vheader->start_monotonic);
+ t->start_time.tv_sec = ltt_get_uint64(LTT_GET_BO(tf),
+ &vheader->start_time_sec);
+ t->start_time.tv_nsec = ltt_get_uint64(LTT_GET_BO(tf),
+ &vheader->start_time_usec);
+ t->start_time.tv_nsec *= 1000; /* microsec to nanosec */
+
+ t->start_time_from_tsc = ltt_time_from_uint64(
+ (double)t->start_tsc * 1000000.0 / (double)t->start_freq);
+ }
+ }
+ break;
default:
g_warning("Unsupported trace version : %hhu.%hhu",
any->major_version, any->minor_version);
fac->size_t_size = ltt_get_uint32(LTT_GET_BO(tf),
&fac_load_data->size_t_size);
fac->alignment = ltt_get_uint32(LTT_GET_BO(tf),
- &fac_load_data->alignment);
+ &fac_load_data->has_alignment);
if(ltt_get_facility_description(fac, tf->trace, tf))
continue; /* error opening description */
fac->size_t_size = ltt_get_uint32(LTT_GET_BO(tf),
&fac_state_dump_load_data->size_t_size);
fac->alignment = ltt_get_uint32(LTT_GET_BO(tf),
- &fac_state_dump_load_data->alignment);
+ &fac_state_dump_load_data->has_alignment);
if(ltt_get_facility_description(fac, tf->trace, tf))
continue; /* error opening description */
/* Read event header */
/* Align the head */
- pos += ltt_align(pos, tf->trace->arch_size, tf->has_alignment);
+ pos += ltt_align((size_t)pos, tf->trace->arch_size, tf->has_alignment);
if(tf->trace->has_tsc) {
if(tf->trace->has_heartbeat) {
pos += sizeof(guint16);
/* Align the head */
- pos += ltt_align(pos, tf->trace->arch_size, tf->has_alignment);
+ pos += ltt_align((size_t)pos, tf->trace->arch_size, tf->has_alignment);
event->data = pos;
/* It will update the fields offsets too */
void ltt_update_event_size(LttTracefile *tf)
{
- size_t size = 0;
+ off_t size = 0;
/* Specific handling of core events : necessary to read the facility control
* tracefile. */
****************************************************************************/
off_t get_alignment(LttTracefile *tf, LttField *field)
{
- type = &field->field_type;
+ LttType *type = &field->field_type;
switch(type->type_class) {
case LTT_INT_FIXED:
void field_compute_static_size(LttTracefile *tf, LttField *field)
{
- type = &field->field_type;
+ LttType *type = &field->field_type;
switch(type->type_class) {
case LTT_INT_FIXED:
case LTT_SEQUENCE:
g_assert(type->fields->len == 2);
{
- local_offset = 0;
+ off_t local_offset = 0;
LttField *child = &g_array_index(type->fields, LttField, 1);
field_compute_static_size(tf, child);
field->field_size = 0;
break;
default:
g_error("field_static_size : unknown type");
+ }
}
gint precompute_fields_offsets(LttTracefile *tf, LttField *field, off_t *offset)
{
- type = &field->field_type;
+ LttType *type = &field->field_type;
switch(type->type_class) {
case LTT_INT_FIXED:
LttField *field1, LttField *field2)
{
guint different = 0;
+ LttType *type1;
+ LttType *type2;
if(field1 == NULL) {
if(field2 == NULL) goto end;
goto end;
}
- type1 = field1->field_type;
- type2 = field2->field_type;
+ type1 = &field1->field_type;
+ type2 = &field2->field_type;
if(type1->type_class != type2->type_class) {
different = 1;
goto end;
}
- if(type1->element_name != type2->element_name) {
- different = 1;
- goto end;
- }
switch(type1->type_class) {
case LTT_INT_FIXED:
}
for(i=0; i< type1->fields->len; i++) {
+ LttField *child1;
+ LttField *child2;
child1 = &g_array_index(type1->fields, LttField, i);
child2 = &g_array_index(type2->fields, LttField, i);
different = check_fields_compatibility(event_type1,