#include <sys/types.h>
#include <ltt/ltt.h>
+
+#ifndef max
+#define max(a,b) ((a)>(b)?(a):(b))
+#endif
+
+
#define LTT_MAGIC_NUMBER 0x00D6B7ED
#define LTT_REV_MAGIC_NUMBER 0xEDB7D600
#define LTT_PACKED_STRUCT __attribute__ ((packed))
-#define NUM_FACILITIES 256
-
/* Hardcoded facilities */
#define LTT_FACILITY_CORE 0
enum ltt_core_events {
LTT_EVENT_FACILITY_LOAD,
LTT_EVENT_FACILITY_UNLOAD,
- LTT_EVENT_STATE_DUMP_FACILITY_LOAD,
- LTT_EVENT_HEARTBEAT
+ LTT_EVENT_HEARTBEAT,
+ LTT_EVENT_STATE_DUMP_FACILITY_LOAD
};
typedef guint32 uint32_t;
typedef guint64 uint64_t;
-/* Hardcoded facility load event : this plus an following "name" string */
+/* Hardcoded facility load event : this plus an preceding "name" string */
struct LttFacilityLoad {
guint32 checksum;
guint32 id;
guint32 pointer_size;
guint32 size_t_size;
guint32 alignment;
-};
+} LTT_PACKED_STRUCT;
struct LttFacilityUnload {
guint32 id;
-};
+} LTT_PACKED_STRUCT;
struct LttStateDumpFacilityLoad {
guint32 checksum;
guint32 pointer_size;
guint32 size_t_size;
guint32 alignment;
-};
-
-
+} LTT_PACKED_STRUCT;
typedef struct _TimeHeartbeat {
LttTime time; //Time stamp of this block
unsigned char facility_id;
unsigned char event_id;
uint16_t event_size;
-} __attribute((aligned(8)));
+} LTT_PACKED_STRUCT;
struct ltt_event_header_nohb {
uint64_t timestamp;
unsigned char facility_id;
unsigned char event_id;
uint16_t event_size;
-} __attribute((aligned(8)));
+} LTT_PACKED_STRUCT;
struct ltt_trace_header {
uint32_t magic_number;
uint8_t has_heartbeat;
uint8_t has_alignment; /* Event header alignment */
uint8_t has_tsc;
-} __attribute((aligned(8)));
+} LTT_PACKED_STRUCT;
struct ltt_block_start_header {
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 trace;
-} __attribute((aligned(8)));
+} LTT_PACKED_STRUCT;
struct _LttType{
/* Begin of LttEventPosition fields */
LttTracefile *tracefile;
unsigned int block;
- void *offset;
+ unsigned int offset;
/* Timekeeping */
uint64_t tsc; /* Current timestamp counter */
LttTime event_time;
void * data; //event data
+ guint data_size;
+ guint event_size; //event_size field of the header :
+ //used to verify data_size from facility.
int count; //the number of overflow of cycle count
gint64 overflow_nsec; //precalculated nsec for overflows
struct _LttEventPosition{
LttTracefile *tracefile;
unsigned int block;
- void *offset;
+ unsigned int offset;
/* Timekeeping */
uint64_t tsc; /* Current timestamp counter */
guint32 id; //id of the facility
guint32 pointer_size;
+ guint32 long_size;
guint32 size_t_size;
guint32 alignment;
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
LttTrace * trace; //trace containing the tracefile
/* Points to array of fac_id of all the
* facilities that has this name. */
+ guint32 arch_type;
+ guint32 arch_variant;
+ guint8 arch_size;
guint8 ltt_major_version;
guint8 ltt_minor_version;
guint8 flight_recorder;
guint8 has_heartbeat;
- // guint8 alignment;
+ guint8 has_alignment;
guint8 has_tsc;
GData *tracefiles; //tracefiles groups