X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=trunk%2Flttv%2Fltt%2Ftracefile.c;h=1d411e3e3f2ad94cc31e60e1bdbc53c35956534d;hb=e0c7c4004c56c9ad749889225f9b53aedc01fb30;hp=64830859cfdf4d6df870c9742d4b86cb18ab63bb;hpb=196085f2708a2286c1ddce189e3a793b54d862a6;p=lttv.git diff --git a/trunk/lttv/ltt/tracefile.c b/trunk/lttv/ltt/tracefile.c index 64830859..1d411e3e 100644 --- a/trunk/lttv/ltt/tracefile.c +++ b/trunk/lttv/ltt/tracefile.c @@ -152,10 +152,10 @@ static int parse_trace_header(ltt_subbuffer_header_t *header, break; case 2: switch(header->minor_version) { - case 0: + case 1: { - struct ltt_subbuffer_header_2_0 *vheader = header; - tf->buffer_header_size = sizeof(struct ltt_subbuffer_header_2_0) ; + struct ltt_subbuffer_header_2_1 *vheader = header; + tf->buffer_header_size = ltt_subbuffer_header_size(); tf->tscbits = 27; tf->eventbits = 5; tf->tsc_mask = ((1ULL << tf->tscbits) - 1); @@ -238,7 +238,7 @@ static gint ltt_tracefile_open(LttTrace *t, gchar * fileName, LttTracefile *tf) // Is the file large enough to contain a trace if(lTDFStat.st_size < - (off_t)(sizeof(ltt_subbuffer_header_t))){ + (off_t)(ltt_subbuffer_header_size())){ g_print("The input data file %s does not contain a trace\n", fileName); goto close_file; } @@ -246,7 +246,7 @@ static gint ltt_tracefile_open(LttTrace *t, gchar * fileName, LttTracefile *tf) /* Temporarily map the buffer start header to get trace information */ /* Multiple of pages aligned head */ tf->buffer.head = mmap(0, - PAGE_ALIGN(sizeof(ltt_subbuffer_header_t)), PROT_READ, + PAGE_ALIGN(ltt_subbuffer_header_size()), PROT_READ, MAP_PRIVATE, tf->fd, 0); if(tf->buffer.head == MAP_FAILED) { perror("Error in allocating memory for buffer of tracefile"); @@ -267,9 +267,9 @@ static gint ltt_tracefile_open(LttTrace *t, gchar * fileName, LttTracefile *tf) tf->num_blocks = tf->file_size / tf->buf_size; if(munmap(tf->buffer.head, - PAGE_ALIGN(sizeof(ltt_subbuffer_header_t)))) { + PAGE_ALIGN(ltt_subbuffer_header_size()))) { g_warning("unmap size : %u\n", - PAGE_ALIGN(sizeof(ltt_subbuffer_header_t))); + PAGE_ALIGN(ltt_subbuffer_header_size())); perror("munmap error"); g_assert(0); } @@ -286,9 +286,9 @@ static gint ltt_tracefile_open(LttTrace *t, gchar * fileName, LttTracefile *tf) /* Error */ unmap_file: if(munmap(tf->buffer.head, - PAGE_ALIGN(sizeof(ltt_subbuffer_header_t)))) { + PAGE_ALIGN(ltt_subbuffer_header_size()))) { g_warning("unmap size : %u\n", - PAGE_ALIGN(sizeof(ltt_subbuffer_header_t))); + PAGE_ALIGN(ltt_subbuffer_header_size())); perror("munmap error"); g_assert(0); } @@ -772,11 +772,18 @@ LttTrace *ltt_trace_open(const gchar *pathname) goto metadata_error; } - /* Get the trace information for the control/metadata_0 tracefile */ + /* + * Get the trace information for the control/metadata_0 tracefile. + * Getting a correct trace start_time and start_tsc is insured by the fact + * that no subbuffers are supposed to be lost in the metadata channel. + * Therefore, the first subbuffer contains the start_tsc timestamp in its + * buffer header. + */ g_assert(group->len > 0); tf = &g_array_index (group, LttTracefile, 0); header = (ltt_subbuffer_header_t *)tf->buffer.head; - g_assert(parse_trace_header(header, tf, t) == 0); + ret = parse_trace_header(header, tf, t); + g_assert(!ret); t->num_cpu = group->len;