X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=trunk%2Flttv%2Fltt%2Fltt-private.h;h=24e82f291e25949da8a6ae7b3dd76fb1e6157b3b;hb=1550fba68437fc32b4f0ee82d82553c0fddb6d8a;hp=1233b8fe8afa9d06e6602206e0ea682c40042506;hpb=64dd41a5e4653a36bd966e1badbe2c3d78b66ef1;p=lttv.git diff --git a/trunk/lttv/ltt/ltt-private.h b/trunk/lttv/ltt/ltt-private.h index 1233b8fe..24e82f29 100644 --- a/trunk/lttv/ltt/ltt-private.h +++ b/trunk/lttv/ltt/ltt-private.h @@ -49,17 +49,28 @@ (((t)->float_word_order == __BYTE_ORDER) ? 0 : 1) #define SEQUENCE_AVG_ELEMENTS 1000 - + +/* + * offsetof taken from Linux kernel. + */ +#undef offsetof +#ifdef __compiler_offsetof +#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER) +#else +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#endif + typedef guint8 uint8_t; typedef guint16 uint16_t; typedef guint32 uint32_t; typedef guint64 uint64_t; /* Subbuffer header */ -struct ltt_subbuffer_header_2_0 { +struct ltt_subbuffer_header_2_1 { uint64_t cycle_count_begin; /* Cycle count at subbuffer start */ uint64_t cycle_count_end; /* Cycle count at subbuffer end */ - uint32_t magic_number; /* Trace magic number. + uint32_t magic_number; /* + * Trace magic number. * contains endianness information. */ uint8_t major_version; @@ -75,9 +86,20 @@ struct ltt_subbuffer_header_2_0 { uint32_t freq_scale; /* Frequency scaling */ uint32_t lost_size; /* Size unused at end of subbuffer */ uint32_t buf_size; /* Size of this subbuffer */ + char header_end[0]; /* End of header */ }; -typedef struct ltt_subbuffer_header_2_0 ltt_subbuffer_header_t; +typedef struct ltt_subbuffer_header_2_1 ltt_subbuffer_header_t; + +/* + * Return header size without padding after the structure. Don't use packed + * structure because gcc generates inefficient code on some architectures + * (powerpc, mips..) + */ +static inline size_t ltt_subbuffer_header_size(void) +{ + return offsetof(ltt_subbuffer_header_t, header_end); +} enum field_status { FIELD_UNKNOWN, FIELD_VARIABLE, FIELD_FIXED };