Pack structures in comm protocol between UST and sessiond
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 13 Dec 2012 22:01:05 +0000 (17:01 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 13 Dec 2012 22:01:05 +0000 (17:01 -0500)
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 <mathieu.desnoyers@efficios.com>
include/lttng/ust-abi.h
include/lttng/ust-compiler.h
include/ust-comm.h

index a4dc10d193459df9047b1443ecb40d347e4d4386..c36410b9acb0fe8fe8e4031e102b4b32c52bf06b 100644 (file)
@@ -28,6 +28,7 @@
  */
 
 #include <stdint.h>
+#include <lttng/ust-compiler.h>
 
 #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)
index d93db35e39419c335674ffe4d9d768b3e2aade69..1d04da1ac39857a6d35533794e7341fefb99ce4d 100644 (file)
@@ -25,5 +25,6 @@
  */
 
 #define lttng_ust_notrace __attribute__((no_instrument_function))
+#define LTTNG_PACKED   __attribute__((__packed__))
 
 #endif /* _LTTNG_UST_COMPILER_H */
index b9c4cebe5bb9344600099f79902856d976e5111d..0034f2aa864cc9d1a5fbdd5ec537e4d0dc497eec 100644 (file)
@@ -30,6 +30,7 @@
 #include <unistd.h>
 #include <lttng/ust-abi.h>
 #include <lttng/ust-error.h>
+#include <lttng/ust-compiler.h>
 
 /*
  * 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
This page took 0.030944 seconds and 4 git commands to generate.