From: Mathieu Desnoyers Date: Thu, 13 Dec 2012 22:01:05 +0000 (-0500) Subject: Pack structures in comm protocol between UST and sessiond X-Git-Tag: v2.1.0~13 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=b3f60bbfff0d8b4ead55c0dc7f21985ffb70997e;p=lttng-ust.git Pack structures in comm protocol between UST and sessiond Ensure robustness with respect to 32-bit vs 64-bit apps vs sessiond. Since we are updating the ABI, change the order of overwrite field in channel and channel attributes, to remove some unneeded padding. This breaks compatibility between sessiond 2.1 and ust 2.0 (and vice-versa), but sessiond refuses applications with version number that does not match. Signed-off-by: Mathieu Desnoyers --- diff --git a/include/lttng/ust-abi.h b/include/lttng/ust-abi.h index a4dc10d1..c36410b9 100644 --- a/include/lttng/ust-abi.h +++ b/include/lttng/ust-abi.h @@ -28,6 +28,7 @@ */ #include +#include #define LTTNG_UST_SYM_NAME_LEN 256 @@ -60,18 +61,18 @@ struct lttng_ust_tracer_version { uint32_t major; uint32_t minor; uint32_t patchlevel; -}; +} LTTNG_PACKED; #define LTTNG_UST_CHANNEL_PADDING LTTNG_UST_SYM_NAME_LEN + 32 struct lttng_ust_channel { - int overwrite; /* 1: overwrite, 0: discard */ uint64_t subbuf_size; /* in bytes */ uint64_t num_subbuf; + int overwrite; /* 1: overwrite, 0: discard */ unsigned int switch_timer_interval; /* usecs */ unsigned int read_timer_interval; /* usecs */ enum lttng_ust_output output; /* output mode */ char padding[LTTNG_UST_CHANNEL_PADDING]; -}; +} LTTNG_PACKED; #define LTTNG_UST_STREAM_PADDING1 16 #define LTTNG_UST_STREAM_PADDING2 LTTNG_UST_SYM_NAME_LEN + 32 @@ -81,7 +82,7 @@ struct lttng_ust_stream { union { char padding[LTTNG_UST_STREAM_PADDING2]; } u; -}; +} LTTNG_PACKED; #define LTTNG_UST_EVENT_PADDING1 16 #define LTTNG_UST_EVENT_PADDING2 LTTNG_UST_SYM_NAME_LEN + 32 @@ -97,7 +98,7 @@ struct lttng_ust_event { union { char padding[LTTNG_UST_EVENT_PADDING2]; } u; -}; +} LTTNG_PACKED; enum lttng_ust_field_type { LTTNG_UST_FIELD_OTHER = 0, @@ -115,7 +116,7 @@ struct lttng_ust_field_iter { int loglevel; /* event loglevel */ int nowrite; char padding[LTTNG_UST_FIELD_ITER_PADDING]; -}; +} LTTNG_PACKED; enum lttng_ust_context_type { LTTNG_UST_CONTEXT_VTID = 0, @@ -133,37 +134,37 @@ struct lttng_ust_context { union { char padding[LTTNG_UST_CONTEXT_PADDING2]; } u; -}; +} LTTNG_PACKED; /* * Tracer channel attributes. */ #define LTTNG_UST_CHANNEL_ATTR_PADDING LTTNG_UST_SYM_NAME_LEN + 32 struct lttng_ust_channel_attr { - int overwrite; /* 1: overwrite, 0: discard */ uint64_t subbuf_size; /* bytes */ uint64_t num_subbuf; /* power of 2 */ + int overwrite; /* 1: overwrite, 0: discard */ unsigned int switch_timer_interval; /* usec */ unsigned int read_timer_interval; /* usec */ enum lttng_ust_output output; /* splice, mmap */ char padding[LTTNG_UST_CHANNEL_ATTR_PADDING]; -}; +} LTTNG_PACKED; #define LTTNG_UST_TRACEPOINT_ITER_PADDING 16 struct lttng_ust_tracepoint_iter { char name[LTTNG_UST_SYM_NAME_LEN]; /* provider:name */ int loglevel; char padding[LTTNG_UST_TRACEPOINT_ITER_PADDING]; -}; +} LTTNG_PACKED; #define LTTNG_UST_OBJECT_DATA_PADDING LTTNG_UST_SYM_NAME_LEN + 32 struct lttng_ust_object_data { + uint64_t memory_map_size; int handle; int shm_fd; int wait_fd; - uint64_t memory_map_size; char padding[LTTNG_UST_OBJECT_DATA_PADDING]; -}; +} LTTNG_PACKED; enum lttng_ust_calibrate_type { LTTNG_UST_CALIBRATE_TRACEPOINT, @@ -178,7 +179,7 @@ struct lttng_ust_calibrate { union { char padding[LTTNG_UST_CALIBRATE_PADDING2]; } u; -}; +} LTTNG_PACKED; #define FILTER_BYTECODE_MAX_LEN 65536 #define LTTNG_UST_FILTER_PADDING 32 @@ -188,7 +189,7 @@ struct lttng_ust_filter_bytecode { uint64_t seqnum; char padding[LTTNG_UST_FILTER_PADDING]; char data[0]; -}; +} LTTNG_PACKED; #define _UST_CMD(minor) (minor) #define _UST_CMDR(minor, type) (minor) diff --git a/include/lttng/ust-compiler.h b/include/lttng/ust-compiler.h index d93db35e..1d04da1a 100644 --- a/include/lttng/ust-compiler.h +++ b/include/lttng/ust-compiler.h @@ -25,5 +25,6 @@ */ #define lttng_ust_notrace __attribute__((no_instrument_function)) +#define LTTNG_PACKED __attribute__((__packed__)) #endif /* _LTTNG_UST_COMPILER_H */ diff --git a/include/ust-comm.h b/include/ust-comm.h index b9c4cebe..0034f2aa 100644 --- a/include/ust-comm.h +++ b/include/ust-comm.h @@ -30,6 +30,7 @@ #include #include #include +#include /* * Default timeout the application waits for the sessiond to send its @@ -71,9 +72,9 @@ struct ustcomm_ust_msg { uint32_t data_size; /* following filter data */ uint32_t reloc_offset; uint64_t seqnum; - } filter; + } LTTNG_PACKED filter; } u; -}; +} LTTNG_PACKED; /* * Data structure for the response from UST to the session daemon. @@ -87,14 +88,14 @@ struct ustcomm_ust_reply { union { struct { uint64_t memory_map_size; - } channel; + } LTTNG_PACKED channel; struct { uint64_t memory_map_size; - } stream; + } LTTNG_PACKED stream; struct lttng_ust_tracer_version version; struct lttng_ust_tracepoint_iter tracepoint; } u; -}; +} LTTNG_PACKED; /* * LTTNG_UST_TRACEPOINT_FIELD_LIST reply is followed by a