X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Fltt%2Ftracefile.c;h=2bb0162969c042bf562f4f54e7622ca9eaabf827;hb=9c731a505cf0d0ded02f8e90a823fa90084c7740;hp=d37c694d6b0349af5120a89ebf1dc27724a2bcdd;hpb=08a986f1cdbafcf23ef4eb6665f59860d044914a;p=lttv.git diff --git a/ltt/branches/poly/ltt/tracefile.c b/ltt/branches/poly/ltt/tracefile.c index d37c694d..2bb01629 100644 --- a/ltt/branches/poly/ltt/tracefile.c +++ b/ltt/branches/poly/ltt/tracefile.c @@ -41,7 +41,6 @@ #include -#include "parser.h" #include #include "ltt-private.h" #include @@ -77,6 +76,8 @@ GQuark LTT_TRACEFILE_NAME_FACILITIES; #define PAGE_MASK (~(page_size-1)) #define PAGE_ALIGN(addr) (((addr)+page_size-1)&PAGE_MASK) +LttTrace *father_trace = NULL; + /* set the offset of the fields belonging to the event, need the information of the archecture */ //void set_fields_offsets(LttTracefile *tf, LttEventType *event_type); @@ -284,6 +285,13 @@ int parse_trace_header(void *header, LttTracefile *tf, LttTrace *t) &vheader->start_freq); t->freq_scale = ltt_get_uint32(LTT_GET_BO(tf), &vheader->freq_scale); + if(father_trace) { + t->start_freq = father_trace->start_freq; + t->freq_scale = father_trace->freq_scale; + } + else { + father_trace = t; + } t->start_tsc = ltt_get_uint64(LTT_GET_BO(tf), &vheader->start_tsc); t->start_monotonic = ltt_get_uint64(LTT_GET_BO(tf), @@ -369,7 +377,7 @@ gint ltt_tracefile_open(LttTrace *t, gchar * fileName, LttTracefile *tf) perror("Error in allocating memory for buffer of tracefile"); goto close_file; } - g_assert( ( (guint)tf->buffer.head&(8-1) ) == 0); // make sure it's aligned. + g_assert( ( (gulong)tf->buffer.head&(8-1) ) == 0); // make sure it's aligned. header = (struct ltt_block_start_header*)tf->buffer.head; @@ -670,8 +678,8 @@ void get_absolute_pathname(const gchar *pathname, gchar * abs_pathname) int get_tracefile_name_number(gchar *raw_name, GQuark *name, guint *num, - guint *tid, - guint *pgid, + gulong *tid, + gulong *pgid, guint64 *creation) { guint raw_name_len = strlen(raw_name); @@ -873,7 +881,7 @@ int open_tracefiles(LttTrace *trace, gchar *root_path, gchar *relative_path) 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)) { @@ -882,10 +890,12 @@ int open_tracefiles(LttTrace *trace, gchar *root_path, gchar *relative_path) if(ret < 0) continue; } else if(S_ISREG(stat_buf.st_mode)) { GQuark name; - guint num, tid, pgid; + guint num; + gulong tid, pgid; guint64 creation; GArray *group; - num = tid = pgid = 0; + num = 0; + tid = pgid = 0; creation = 0; if(get_tracefile_name_number(rel_path, &name, &num, &tid, &pgid, &creation)) continue; /* invalid name */ @@ -1181,7 +1191,6 @@ LttTrace *ltt_trace_open(const gchar *pathname) DIR *dir; struct dirent *entry; guint control_found = 0; - guint eventdefs_found = 0; struct stat stat_buf; gchar path[PATH_MAX]; @@ -1212,14 +1221,11 @@ LttTrace *ltt_trace_open(const gchar *pathname) 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, "")) { @@ -1769,7 +1775,7 @@ static void print_debug_event_header(LttEvent *ev, void *start_pos, void *end_po 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(" "); @@ -1828,9 +1834,9 @@ int ltt_tracefile_read_update_event(LttTracefile *tf) /* 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 */ @@ -1878,6 +1884,7 @@ int ltt_tracefile_read_update_event(LttTracefile *tf) pos += sizeof(guint16); } else { /* Compact event */ + event->event_size = 0xFFFF; } if (a_event_debug) @@ -1937,7 +1944,7 @@ gint map_block(LttTracefile * tf, guint block_num) g_assert(0); goto map_error; } - g_assert( ( (guint)tf->buffer.head&(8-1) ) == 0); // make sure it's aligned. + g_assert( ( (gulong)tf->buffer.head&(8-1) ) == 0); // make sure it's aligned. tf->buffer.index = block_num; @@ -2117,6 +2124,7 @@ void ltt_update_event_size(LttTracefile *tf) } info = marker_get_info_from_id(tf->trace, tf->event.event_id); + if (tf->event.event_id >= MARKER_CORE_IDS) g_assert(info != NULL);