guint32 has_alignment;
} LTT_PACKED_STRUCT;
+/* Empty event */
typedef struct _TimeHeartbeat {
- LttTime time; //Time stamp of this block
- uint64_t cycle_count; //cycle count of the event
} LTT_PACKED_STRUCT TimeHeartbeat;
struct ltt_event_header_hb {
uint8_t flight_recorder;
uint8_t has_heartbeat;
uint8_t has_alignment; /* Event header alignment */
- uint8_t has_tsc;
+ uint32_t freq_scale;
} LTT_PACKED_STRUCT;
uint8_t flight_recorder;
uint8_t has_heartbeat;
uint8_t has_alignment; /* Event header alignment */
- uint8_t has_tsc;
+ uint32_t freq_scale;
} LTT_PACKED_STRUCT;
-/* For version 0.6 */
+/* For version 0.7 */
-struct ltt_trace_header_0_6 {
+struct ltt_trace_header_0_7 {
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 has_tsc;
+ uint32_t freq_scale;
uint64_t start_freq;
uint64_t start_tsc;
uint64_t start_monotonic;
- //struct timespec start_time; // not portable
uint64_t start_time_sec;
uint64_t start_time_usec;
} LTT_PACKED_STRUCT;
struct ltt_block_start_header {
struct {
- //struct timeval timestamp;
- uint64_t timestamp_sec;
- uint64_t timestamp_usec;
uint64_t cycle_count;
uint64_t freq;
} begin;
struct {
- //struct timeval timestamp;
- uint64_t timestamp_sec;
- uint64_t timestamp_usec;
uint64_t cycle_count;
uint64_t freq;
} end;
GHashTable *enum_map; //maps enum labels to numbers.
GArray *fields; // Array of LttFields, for array, sequence, union, struct.
GData *fields_by_name;
+ guint network; // Is the type in network byte order ?
};
struct _LttEventType{
/* End of LttEventPosition fields */
- union { /* choice by trace has_tsc */
- guint32 timestamp; /* truncated timestamp */
- LttTime delta;
- } time;
+ guint32 timestamp; /* truncated timestamp */
unsigned char facility_id; /* facility ID are never reused. */
unsigned char event_id;
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
LttTrace * trace; //trace containing the tracefile
int fd; //file descriptor
off_t file_size; //file size
guint8 ltt_minor_version;
guint8 flight_recorder;
guint8 has_heartbeat;
- guint8 has_tsc;
+ guint32 freq_scale;
uint64_t start_freq;
uint64_t start_tsc;
uint64_t start_monotonic;
//#define EVENT_HEADER_SIZE (TIMESTAMP_SIZE + EVENT_ID_SIZE)
+off_t get_alignment(LttField *field);
+
/* Calculate the offset needed to align the type.
* If has_alignment is 0, alignment is disactivated.
* else, the function returns the offset needed to
* align align_drift on the has_alignment value (should be
* the size of the architecture). */
static inline unsigned int ltt_align(size_t align_drift,
- size_t size_of_type,
- size_t has_alignment)
+ size_t size_of_type,
+ size_t has_alignment)
{
size_t alignment = min(has_alignment, size_of_type);
if(!has_alignment) return 0;
+ g_assert(size_of_type != 0);
return ((alignment - align_drift) & (alignment-1));
}