#include <ltt/ltt.h>
#include <endian.h>
-
#ifndef max
#define max(a,b) ((a)>(b)?(a):(b))
#endif
LTT_EVENT_FACILITY_LOAD,
LTT_EVENT_FACILITY_UNLOAD,
LTT_EVENT_HEARTBEAT,
+ LTT_EVENT_HEARTBEAT_FULL,
LTT_EVENT_STATE_DUMP_FACILITY_LOAD
};
typedef struct _TimeHeartbeat {
} LTT_PACKED_STRUCT TimeHeartbeat;
+typedef struct _TimeHeartbeatFull {
+ guint64 tsc;
+} LTT_PACKED_STRUCT TimeHeartbeatFull;
+
struct ltt_event_header_hb {
uint32_t timestamp;
- unsigned char facility_id;
- unsigned char event_id;
+ uint16_t event_id;
uint16_t event_size;
} LTT_PACKED_STRUCT;
struct ltt_event_header_nohb {
uint64_t timestamp;
- unsigned char facility_id;
- unsigned char event_id;
+ uint16_t event_id;
uint16_t event_size;
} LTT_PACKED_STRUCT;
uint32_t freq_scale;
} LTT_PACKED_STRUCT;
-
-/* For version 0.3 */
-
-struct ltt_trace_header_0_3 {
- 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 has_alignment; /* Event header alignment */
- uint32_t freq_scale;
-} LTT_PACKED_STRUCT;
-
-/* For version 0.7 */
-
-struct ltt_trace_header_0_7 {
+struct ltt_trace_header_1_0 {
uint32_t magic_number;
uint32_t arch_type;
uint32_t arch_variant;
uint8_t flight_recorder;
uint8_t has_heartbeat;
uint8_t has_alignment; /* Event header alignment */
+ uint8_t tsc_lsb_truncate;
+ uint8_t tscbits;
uint32_t freq_scale;
uint64_t start_freq;
uint64_t start_tsc;
guint size;
LttTypeEnum type_class; //which type
GHashTable *enum_map; //maps enum labels to numbers.
+ gint32 highest_value; //For enum
+ gint32 lowest_value; //For enum
GArray *fields; // Array of LttFields, for array, sequence, union, struct.
GData *fields_by_name;
guint network; // Is the type in network byte order ?
+ //part added by gaby for fmt:
+ char *header;
+ char *separator;
+ char *footer;
};
struct _LttEventType{
GQuark name;
gchar * description;
guint index; //id of the event type within the facility
- LttFacility * facility; //the facility that contains the event type
+ struct marker_info *info;
GArray * fields; //event's fields (LttField)
GData *fields_by_name;
+ int has_compact_data; //event header contains compact data (first field)
};
/* Structure LttEvent and LttEventPosition must begin with the _exact_ same
guint32 timestamp; /* truncated timestamp */
- unsigned char facility_id; /* facility ID are never reused. */
- unsigned char event_id;
+ guint16 event_id;
LttTime event_time;
guint data_size;
guint event_size; //event_size field of the header :
//used to verify data_size from facility.
+ uint32_t compact_data;
int count; //the number of overflow of cycle count
gint64 overflow_nsec; //precalculated nsec for overflows
// (it's variable), then the field_size should be
// dynamically calculated while reading the trace
// and put here. Otherwise, the field_size always
- // equels the type size.
+ // equals the type size.
off_t array_offset; // offset of the beginning of the array (for array
// and sequences)
GArray * dynamic_offsets; // array of offsets calculated dynamically at
// contain variable length fields.
};
+#if 0
struct _LttFacility{
LttTrace *trace;
GQuark name;
unsigned char exists; /* 0 does not exist, 1 exists */
};
+#endif //0
typedef struct _LttBuffer {
void * head;
size_t has_alignment; //alignment of events in the tracefile.
// 0 or the architecture size in bytes.
+ guint8 has_heartbeat;
size_t buffer_header_size;
+ int compact; //compact tracefile ?
+ uint8_t tsc_lsb_truncate;
+ uint8_t tscbits;
+ uint8_t tsc_msb_cutoff;
+ uint64_t tsc_mask;
+ uint64_t tsc_mask_next_bit; //next MSB after the mask
/* Current event */
LttEvent event; //Event currently accessible in the trace
guint8 ltt_major_version;
guint8 ltt_minor_version;
guint8 flight_recorder;
- guint8 has_heartbeat;
guint32 freq_scale;
uint64_t start_freq;
uint64_t start_tsc;
uint64_t start_monotonic;
LttTime start_time;
LttTime start_time_from_tsc;
+ uint8_t compact_event_bits;
GData *tracefiles; //tracefiles groups
+ /* Support for markers */
+ GArray *markers; //indexed by marker ID
+ GHashTable *markers_hash; //indexed by name hash
};
/* The characteristics of the system on which the trace was obtained