#define LTT_GET_FLOAT_BO(t) \
(((t)->float_word_order==__BYTE_ORDER)?0:1)
-
/* Hardcoded core events */
enum ltt_core_events {
LTT_EVENT_FACILITY_LOAD,
} LTT_PACKED_STRUCT;
-
-
-
-
struct _LttType{
GQuark type_name; //type name if it is a named type
GQuark element_name; //elements name of the struct
gboolean reverse_bo; //must we reverse byte order ?
gboolean float_word_order; //what is the byte order of floats ?
+ size_t buffer_header_size;
+
/* Current event */
LttEvent event; //Event currently accessible in the trace
{
struct ltt_trace_header_0_3 *header_0_3 =
(struct ltt_trace_header_0_3 *)header;
-
+ tf->buffer_header_size =
+ sizeof(struct ltt_block_start_header)
+ + sizeof(struct ltt_trace_header_0_3);
}
break;
default:
}
// Is the file large enough to contain a trace
- if(lTDFStat.st_size < (off_t)(sizeof(struct ltt_block_start_header))){
+ if(lTDFStat.st_size <
+ (off_t)(sizeof(struct ltt_block_start_header
+ + sizeof(ltt_trace_header_any)))){
g_print("The input data file %s does not contain a trace\n", fileName);
goto close_file;
}
/* Temporarily map the buffer start header to get trace information */
/* Multiple of pages aligned head */
tf->buffer.head = mmap(0,
- PAGE_ALIGN(sizeof(struct ltt_block_start_header)), PROT_READ,
+ PAGE_ALIGN(sizeof(struct ltt_block_start_header
+ + sizeof(struct ltt_trace_header_any))), PROT_READ,
MAP_PRIVATE, tf->fd, 0);
if(tf->buffer.head == MAP_FAILED) {
perror("Error in allocating memory for buffer of tracefile");
tf->num_blocks = tf->file_size / tf->buf_size;
if(munmap(tf->buffer.head,
- PAGE_ALIGN(sizeof(struct ltt_block_start_header)))) {
+ PAGE_ALIGN(sizeof(struct ltt_block_start_header
+ + sizeof(struct ltt_trace_header_any))))) {
g_warning("unmap size : %u\n",
- PAGE_ALIGN(sizeof(struct ltt_block_start_header)));
+ PAGE_ALIGN(sizeof(struct ltt_block_start_header
+ + sizeof(struct ltt_trace_header_any))));
perror("munmap error");
g_assert(0);
}
/* Error */
unmap_file:
if(munmap(tf->buffer.head,
- PAGE_ALIGN(sizeof(struct ltt_block_start_header)))) {
+ PAGE_ALIGN(sizeof(struct ltt_block_start_header
+ + sizeof(struct ltt_trace_header_any))))) {
g_warning("unmap size : %u\n",
- PAGE_ALIGN(sizeof(struct ltt_block_start_header)));
+ PAGE_ALIGN(sizeof(struct ltt_block_start_header
+ + sizeof(struct ltt_trace_header_any))));
perror("munmap error");
g_assert(0);
}
/* seek over the buffer header if we are at the buffer start */
if(tf->event.offset == 0) {
- tf->event.offset += sizeof(struct ltt_block_start_header);
+ tf->event.offset += sizeof(struct ltt_block_start_header
+ + tf->buffer_header_size);
if(tf->event.offset == tf->buf_size - tf->buffer.lost_size) {
ret = ERANGE;