+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int ltt_major_version=0;
int ltt_minor_version=0;
int ltt_log_cpu;
- guint ltt_trace_start_size;
+ guint ltt_trace_start_size = 0;
char buf[BUFFER_SIZE];
int i, k;
cur_pos += sizeof(uint16_t); //Skip event size
evId = *(uint8_t *)cur_pos;
- cur_pos += sizeof(uint8_t);
- if(*(uint32_t*)cur_pos != TRACER_MAGIC_NUMBER)
- g_error("Trace magic number does not match : %lx, should be %lx",
- (uint32_t*)cur_pos, TRACER_MAGIC_NUMBER);
- cur_pos += sizeof(uint32_t);
+ g_assert(evId == TRACE_START);
+ cur_pos += sizeof(uint8_t); //skip EvId
+ cur_pos += sizeof(uint32_t); //skip time delta
tStart = (trace_start_any*)cur_pos;
+ if(tStart->MagicNumber != TRACER_MAGIC_NUMBER)
+ g_error("Trace magic number does not match : %lx, should be %lx",
+ tStart->MagicNumber, TRACER_MAGIC_NUMBER);
if(tStart->MajorVersion != TRACER_SUP_VERSION_MAJOR)
g_error("Trace Major number does match : %hu, should be %u",
tStart->MajorVersion, TRACER_SUP_VERSION_MAJOR);
start.block_id = tBufStart->ID;
end.block_id = start.block_id;
+
+ g_printf("Trace version %hu.%hu detected\n",
+ tStart->MajorVersion,
+ tStart->MinorVersion);
if(tStart->MinorVersion == 2) {
trace_start_2_2* tStart_2_2 = (trace_start_2_2*)tStart;
ltt_major_version = tStart_2_2->MajorVersion;
ltt_block_size = tStart_2_2->BufferSize;
ltt_log_cpu = tStart_2_2->LogCPUID;
ltt_trace_start_size = sizeof(trace_start_2_2);
- } else if(tStart->MinorVersion == 3) {
+ /* Verify if it's a broken 2.2 format */
+ if(*(uint8_t*)(cur_pos + sizeof(trace_start_2_2)) == 0) {
+ /* Cannot have two trace start events. We cannot detect the problem
+ * if the flight recording flag is set to 1, as it conflicts
+ * with TRACE_SYSCALL_ENTRY.
+ */
+ g_warning("This is a 2.3 trace format that has a 2.2 tag. Please upgrade your kernel");
+ g_printf("Processing the trace as a 2.3 format\n");
+
+ tStart->MinorVersion = 3;
+ }
+ }
+
+ if(tStart->MinorVersion == 3) {
trace_start_2_3* tStart_2_3 = (trace_start_2_3*)tStart;
ltt_major_version = tStart_2_3->MajorVersion;
ltt_minor_version = tStart_2_3->MinorVersion;
ltt_trace_start_size = sizeof(trace_start_2_3);
/* We do not use the flight recorder information for now, because we
* never use the .proc file anyway */
- } else {
- ltt_trace_start_size = 0;
+ }
+
+ if(ltt_trace_start_size == 0)
g_error("Minor version unknown : %hu. Supported minors : 2, 3",
tStart->MinorVersion);
- }
block_size = ltt_block_size;//FIXME
block_number = file_size/ltt_block_size;
close(fdProc);
fclose(fp);
+ g_printf("Conversion completed. Don't forget to copy core.xml to eventdefs directory\n");
+
return 0;
}