buffer = g_new(char, 4000);
readFile(fd,(void*)buffer, 3500, "Unable to read block header");
- cur_pos = buffer;
+ cur_pos= buffer;
evId = *(uint8_t *)cur_pos;
cur_pos += sizeof(uint8_t);
newId = evId;
beat_count = 0;
for(j=0;j<cpu;j++) write_pos[j] = buf_out[j];
+ write_pos_intr = buf_intr;
+ write_pos_fac = buf_fac;
+ write_pos_proc = buf_proc;
readFile(fd,(void*)buffer, block_size, "Unable to read block header");
size_lost = *(uint32_t*)(end_pos - sizeof(uint32_t));
end_pos = buffer + block_size - size_lost ; //buffer_end event
- tBufEnd = (trace_buffer_end*)end_pos;
+ tBufEnd = (trace_buffer_end*)(end_pos+sizeof(uint8_t)+sizeof(uint32_t));
end.seconds = tBufEnd->Time.tv_sec;
end.nanoseconds = tBufEnd->Time.tv_usec;
end.cycle_count = tBufEnd->TSC;
}
break;
case TRACE_FILE_SYSTEM:
- event_size = sizeof(trace_file_system);
+ event_size = sizeof(trace_file_system)- sizeof(char*);
break;
case TRACE_TIMER:
event_size = sizeof(trace_timer);
if(evId == TRACE_HEARTBEAT){
if(ltt_log_cpu){
- write_to_buffer(write_pos[cpu_id], cur_pos, sizeof(heartbeat));
+ size_count[cpu_id] += sizeof(heartbeat);
+ write_to_buffer(write_pos[cpu_id],(void*)&beat , sizeof(heartbeat));
}else{
- write_to_buffer(write_pos[0], cur_pos, sizeof(heartbeat));
+ size_count[0] += sizeof(heartbeat);
+ write_to_buffer(write_pos[0], (void*)&beat, sizeof(heartbeat));
}
}
cur_pos += event_size + sizeof(uint16_t); //skip data_size
}else if(evId == TRACE_FILE_SYSTEM){
size_t nbBytes;
+ char c = '\0';
tFileSys = (trace_file_system*)cur_pos;
subId = tFileSys->event_sub_id;
if(subId == TRACE_FILE_SYSTEM_OPEN || subId == TRACE_FILE_SYSTEM_EXEC){
nbBytes = tFileSys->event_data2 +1;
}else nbBytes = 0;
- nbBytes += event_size;
-
- // printf("bytes : %d\n", nbBytes);
if(ltt_log_cpu){
size_count[cpu_id] += nbBytes + sizeof(uint16_t) + sizeof(uint32_t);
printf("size count exceeds the limit of the buffer\n");
exit(1);
}
- write_to_buffer(write_pos[cpu_id], cur_pos, nbBytes);
+ write_to_buffer(write_pos[cpu_id], cur_pos, event_size);
+ cur_pos += event_size + sizeof(char*);
+ if(nbBytes){
+ write_to_buffer(write_pos[cpu_id], cur_pos, nbBytes);
+ }else{
+ write_to_buffer(write_pos[cpu_id], (void*)&c, 1);
+ }
}else{
size_count[0] += nbBytes + sizeof(uint16_t) + sizeof(uint32_t);
if(size_count[0] > block_size - reserve_size){
printf("size count exceeds the limit of the buffer\n");
exit(1);
}
- write_to_buffer(write_pos[0], cur_pos, nbBytes);
+ write_to_buffer(write_pos[0], cur_pos, event_size);
+ cur_pos += event_size + sizeof(char*);
+ if(nbBytes){
+ write_to_buffer(write_pos[0], cur_pos, nbBytes);
+ }else{
+ write_to_buffer(write_pos[0], (void*)&c, 1);
+ }
}
cur_pos += nbBytes + sizeof(uint16_t); //skip data_size
}else if(event_size == -1){