+
+typedef guint8 uint8_t;
+typedef guint16 uint16_t;
+typedef guint32 uint32_t;
+typedef guint64 uint64_t;
+
+struct ltt_event_header_hb {
+ uint32_t timestamp;
+ uint16_t event_id;
+ uint16_t event_size;
+} LTT_PACKED_STRUCT;
+
+struct ltt_event_header_nohb {
+ uint64_t timestamp;
+ uint16_t event_id;
+ uint16_t event_size;
+} LTT_PACKED_STRUCT;
+
+
+/* Block and trace headers */
+
+struct ltt_trace_header_any {
+ uint32_t magic_number;
+ uint32_t arch_type;
+ uint32_t arch_variant;
+ uint32_t float_word_order;
+ uint8_t arch_size;
+ uint8_t major_version;
+ uint8_t minor_version;
+ uint8_t flight_recorder;
+ uint8_t has_heartbeat;
+ uint8_t alignment; /* Event header alignment */
+ uint32_t freq_scale;
+} LTT_PACKED_STRUCT;
+
+struct ltt_trace_header_1_0 {
+ uint32_t magic_number;
+ uint32_t arch_type;
+ uint32_t arch_variant;
+ uint32_t float_word_order;
+ uint8_t arch_size;
+ uint8_t major_version;
+ uint8_t minor_version;
+ uint8_t flight_recorder;
+ uint8_t has_heartbeat;
+ uint8_t alignment; /* Event header alignment */
+ uint8_t tsc_lsb_truncate;
+ uint8_t tscbits;
+ uint8_t compact_data_shift;
+ uint32_t freq_scale;
+ uint64_t start_freq;
+ uint64_t start_tsc;
+ uint64_t start_monotonic;
+ uint64_t start_time_sec;
+ uint64_t start_time_usec;
+} LTT_PACKED_STRUCT;
+
+
+struct ltt_block_start_header {
+ struct {
+ uint64_t cycle_count;
+ uint64_t freq;
+ } begin;
+ struct {
+ uint64_t cycle_count;
+ uint64_t freq;
+ } end;
+ uint32_t lost_size; /* Size unused at the end of the buffer */
+ uint32_t buf_size; /* The size of this sub-buffer */
+ struct ltt_trace_header_any trace[0];
+} LTT_PACKED_STRUCT;
+
+
+enum field_status { FIELD_UNKNOWN, FIELD_VARIABLE, FIELD_FIXED };
+
+typedef struct _LttBuffer {
+ void * head;
+ unsigned int index;
+
+ struct {
+ LttTime timestamp;
+ uint64_t cycle_count;
+ uint64_t freq; /* Frequency in khz */
+ } begin;
+ struct {
+ LttTime timestamp;
+ uint64_t cycle_count;
+ uint64_t freq; /* Frequency in khz */
+ } end;
+ uint32_t lost_size; /* Size unused at the end of the buffer */
+
+ /* Timekeeping */
+ uint64_t tsc; /* Current timestamp counter */
+ uint64_t freq; /* Frequency in khz */
+ //double nsecs_per_cycle; /* Precalculated from freq */
+ guint32 cyc2ns_scale;
+} LttBuffer;
+
+struct LttTracefile {
+ gboolean cpu_online; //is the cpu online ?
+ GQuark long_name; //tracefile complete filename
+ GQuark name; //tracefile name
+ guint cpu_num; //cpu number of the tracefile
+ guint tid; //Usertrace tid, else 0
+ guint pgid; //Usertrace pgid, else 0
+ guint64 creation; //Usertrace creation, else 0