tf->tsc_lsb_truncate = vheader->tsc_lsb_truncate;
tf->tscbits = vheader->tscbits;
tf->tsc_msb_cutoff = 32 - tf->tsc_lsb_truncate - tf->tscbits;
+ tf->compact_event_bits = 32 - vheader->compact_data_shift;
tf->tsc_mask = ((1ULL << (tf->tscbits))-1);
tf->tsc_mask = tf->tsc_mask << tf->tsc_lsb_truncate;
tf->tsc_mask_next_bit = (1ULL<<(tf->tscbits));
(double)t->start_tsc
* (1000000000.0 / tf->trace->freq_scale)
/ (double)t->start_freq);
- t->compact_event_bits = 0;
}
}
break;
g_debug("Tracefile file or directory : %s\n", path);
- if(strcmp(rel_path, "/eventdefs") == 0) continue;
+ // if(strcmp(rel_path, "/eventdefs") == 0) continue;
if(S_ISDIR(stat_buf.st_mode)) {
if(num+1 > old_len)
group = g_array_set_size(group, num+1);
g_array_index (group, LttTracefile, num) = tmp_tf;
-
+ g_array_index (group, LttTracefile, num).event.tracefile =
+ &g_array_index (group, LttTracefile, num);
}
}
DIR *dir;
struct dirent *entry;
guint control_found = 0;
- guint eventdefs_found = 0;
struct stat stat_buf;
gchar path[PATH_MAX];
if(strcmp(entry->d_name, "control") == 0) {
control_found = 1;
}
- if(strcmp(entry->d_name, "eventdefs") == 0) {
- eventdefs_found = 1;
- }
}
}
closedir(dir);
- if(!control_found || !eventdefs_found) goto find_error;
+ if(!control_found) goto find_error;
/* Open all the tracefiles */
if(open_tracefiles(t, abs_path, "")) {
int i, j;
g_printf("Event header (tracefile %s offset %llx):\n",
- g_quark_to_string(ev->tracefile->name),
+ g_quark_to_string(ev->tracefile->long_name),
((uint64_t)ev->tracefile->buffer.index * ev->tracefile->buf_size)
+ (long)start_pos - (long)ev->tracefile->buffer.head);
if (offset + ((i * 4) + j) <
(long)end_pos - (long)start_pos)
g_printf("%02hhX",
- ((char*)ev->tracefile->buffer.head)[ev->offset + offset + ((i * 4) + j)]);
+ ((char*)start_pos)[offset + ((i * 4) + j)]);
else
g_printf(" ");
g_printf(" ");
/* We keep the LSB of the previous timestamp, to make sure
* we never go back */
event->event_id = event->timestamp >> tf->tscbits;
- event->event_id = event->event_id & ((1 << tf->trace->compact_event_bits) - 1);
+ event->event_id = event->event_id & ((1 << tf->compact_event_bits) - 1);
event->compact_data = event->timestamp >>
- (tf->trace->compact_event_bits + tf->tscbits);
+ (tf->compact_event_bits + tf->tscbits);
//printf("tsc bits %u, ev bits %u init data %u\n",
// tf->tscbits, tf->trace->compact_event_bits, event->compact_data);
/* Put the compact data back in original endianness */
pos += sizeof(guint16);
} else {
/* Compact event */
+ event->event_size = 0xFFFF;
}
if (a_event_debug)
return;
g_printf("Event data (tracefile %s offset %llx):\n",
- g_quark_to_string(ev->tracefile->name),
+ g_quark_to_string(ev->tracefile->long_name),
((uint64_t)ev->tracefile->buffer.index * ev->tracefile->buf_size)
+ (long)ev->data - (long)ev->tracefile->buffer.head);
}
info = marker_get_info_from_id(tf->trace, tf->event.event_id);
+
if (tf->event.event_id >= MARKER_CORE_IDS)
g_assert(info != NULL);
if (a_event_debug)
print_debug_event_data(&tf->event);
+ /* Having a marker load or marker format event out of the facilities
+ * tracefiles is a serious bug. */
+ switch((enum marker_id)tf->event.event_id) {
+ case MARKER_ID_SET_MARKER_ID:
+ case MARKER_ID_SET_MARKER_FORMAT:
+ if (tf->name != g_quark_from_string("/control/facilities"))
+ g_error("Trace inconsistency : metadata event found in data "
+ "tracefile %s", g_quark_to_string(tf->long_name));
+ }
+
if (tf->event.data_size != tf->event.event_size) {
struct marker_info *info = marker_get_info_from_id(tf->trace,
tf->event.event_id);
LttTracefile *ltt_tracefile_new()
{
- return g_new(LttTracefile, 1);
+ LttTracefile *tf;
+ tf = g_new(LttTracefile, 1);
+ tf->event.tracefile = tf;
+ return tf;
}
void ltt_tracefile_destroy(LttTracefile *tf)