Merge branch 'master' into dev
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 1 Mar 2012 22:23:47 +0000 (17:23 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 1 Mar 2012 22:23:47 +0000 (17:23 -0500)
Conflicts:
liblttng-ust/ltt-events.c
liblttng-ust/lttng-context-vtid.c
liblttng-ust/lttng-ust-comm.c
libringbuffer/ring_buffer_frontend.c

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
1  2 
include/lttng/ust-events.h
liblttng-ust/ltt-events.c

index 96435c481c7b5aa117ed04b893a057bd531dfdfd,92e8bf291152932df5e5f88e7216f4ef24d41ae2..f1ef8c91ee7f6f52cf6e7105147e0317c2dbc7a2
  
  #include <urcu/list.h>
  #include <urcu/hlist.h>
 -#include <uuid/uuid.h>
  #include <stdint.h>
  #include <lttng/ust-abi.h>
  #include <lttng/ust-tracer.h>
 -#include <endian.h>
 +#include <lttng/ust-endian.h>
  #include <float.h>
  
 +#define LTTNG_UST_UUID_LEN            16
 +
  struct ltt_channel;
  struct ltt_session;
  struct lttng_ust_lib_ring_buffer_ctx;
  
+ /*
+  * Data structures used by tracepoint event declarations, and by the
+  * tracer. Those structures have padding for future extension.
+  */
  /*
   * LTTng client type enumeration. Used by the consumer to map the
   * callbacks from its own address space.
@@@ -64,9 -68,11 +69,11 @@@ enum lttng_string_encodings 
        NR_STRING_ENCODINGS,
  };
  
+ #define LTTNG_UST_ENUM_ENTRY_PADDING  16
  struct lttng_enum_entry {
        unsigned long long start, end;  /* start and end are inclusive */
        const char *string;
+       char padding[LTTNG_UST_ENUM_ENTRY_PADDING];
  };
  
  #define __type_integer(_type, _byte_order, _base, _encoding)  \
                  .size = sizeof(_type) * CHAR_BIT,             \
                  .alignment = lttng_alignof(_type) * CHAR_BIT, \
                  .signedness = lttng_is_signed_type(_type),    \
 -                .reverse_byte_order = _byte_order != __BYTE_ORDER,    \
 +                .reverse_byte_order = _byte_order != BYTE_ORDER,      \
                  .base = _base,                                \
                  .encoding = lttng_encode_##_encoding,         \
                },                                              \
        }                                                       \
  
+ #define LTTNG_UST_INTEGER_TYPE_PADDING        24
  struct lttng_integer_type {
        unsigned int size;              /* in bits */
        unsigned short alignment;       /* in bits */
@@@ -90,6 -97,7 +98,7 @@@
        unsigned int reverse_byte_order:1;
        unsigned int base;              /* 2, 8, 10, 16, for pretty print */
        enum lttng_string_encodings encoding;
+       char padding[LTTNG_UST_INTEGER_TYPE_PADDING];
  };
  
  /*
                                - _float_mant_dig(_type),       \
                  .mant_dig = _float_mant_dig(_type),           \
                  .alignment = lttng_alignof(_type) * CHAR_BIT, \
 -                .reverse_byte_order = __BYTE_ORDER != __FLOAT_WORD_ORDER, \
 +                .reverse_byte_order = BYTE_ORDER != FLOAT_WORD_ORDER, \
                },                                              \
        }                                                       \
  
+ #define LTTNG_UST_FLOAT_TYPE_PADDING  24
  struct lttng_float_type {
        unsigned int exp_dig;           /* exponent digits, in bits */
        unsigned int mant_dig;          /* mantissa digits, in bits */
        unsigned short alignment;       /* in bits */
        unsigned int reverse_byte_order:1;
+       char padding[LTTNG_UST_FLOAT_TYPE_PADDING];
  };
  
+ #define LTTNG_UST_BASIC_TYPE_PADDING  128
  union _lttng_basic_type {
        struct lttng_integer_type integer;
        struct {
                enum lttng_string_encodings encoding;
        } string;
        struct lttng_float_type _float;
+       char padding[LTTNG_UST_BASIC_TYPE_PADDING];
  };
  
  struct lttng_basic_type {
        } u;
  };
  
+ #define LTTNG_UST_TYPE_PADDING        128
  struct lttng_type {
        enum abstract_types atype;
        union {
                        struct lttng_basic_type length_type;
                        struct lttng_basic_type elem_type;
                } sequence;
+               char padding[LTTNG_UST_TYPE_PADDING];
        } u;
  };
  
+ #define LTTNG_UST_ENUM_TYPE_PADDING   24
  struct lttng_enum {
        const char *name;
        struct lttng_type container_type;
        const struct lttng_enum_entry *entries;
        unsigned int len;
+       char padding[LTTNG_UST_ENUM_TYPE_PADDING];
  };
  
  /* Event field description */
  
+ #define LTTNG_UST_EVENT_FIELD_PADDING 32
  struct lttng_event_field {
        const char *name;
        struct lttng_type type;
+       char padding[LTTNG_UST_EVENT_FIELD_PADDING];
  };
  
+ #define LTTNG_UST_CTX_FIELD_PADDING   40
  struct lttng_ctx_field {
        struct lttng_event_field event_field;
        size_t (*get_size)(size_t offset);
                       struct lttng_ust_lib_ring_buffer_ctx *ctx,
                       struct ltt_channel *chan);
        union {
+               char padding[LTTNG_UST_CTX_FIELD_PADDING];
        } u;
        void (*destroy)(struct lttng_ctx_field *field);
  };
  
+ #define LTTNG_UST_CTX_PADDING 24
  struct lttng_ctx {
        struct lttng_ctx_field *fields;
        unsigned int nr_fields;
        unsigned int allocated_fields;
+       char padding[LTTNG_UST_CTX_PADDING];
+ };
+ #define LTTNG_UST_EVENT_DESC_PADDING  40
+ struct lttng_event_desc {
+       const char *name;
+       void *probe_callback;
+       const struct lttng_event_ctx *ctx;      /* context */
+       const struct lttng_event_field *fields; /* event payload */
+       unsigned int nr_fields;
+       const int **loglevel;
+       const char *signature;  /* Argument types/names received */
+       char padding[LTTNG_UST_EVENT_DESC_PADDING];
+ };
+ #define LTTNG_UST_PROBE_DESC_PADDING  40
+ struct lttng_probe_desc {
+       const char *provider;
+       const struct lttng_event_desc **event_desc;
+       unsigned int nr_events;
+       struct cds_list_head head;              /* chain registered probes */
+       char padding[LTTNG_UST_PROBE_DESC_PADDING];
  };
  
+ /* Data structures used by the tracer. */
  /*
   * Entry describing a per-session active wildcard, along with the event
   * attribute and channel information configuring the events that need to
@@@ -214,22 -259,6 +260,6 @@@ struct wildcard_entry 
        char name[0];
  };
  
- struct lttng_event_desc {
-       const char *name;
-       void *probe_callback;
-       const struct lttng_event_ctx *ctx;      /* context */
-       const struct lttng_event_field *fields; /* event payload */
-       unsigned int nr_fields;
-       const int **loglevel;
- };
- struct lttng_probe_desc {
-       const char *provider;
-       const struct lttng_event_desc **event_desc;
-       unsigned int nr_events;
-       struct cds_list_head head;              /* chain registered probes */
- };
  struct tp_list_entry {
        struct lttng_ust_tracepoint_iter tp;
        struct cds_list_head head;
@@@ -324,7 -353,7 +354,7 @@@ struct ltt_channel 
        /* Channel ID, available for consumer too */
        unsigned int id;
        /* Copy of session UUID for consumer (availability through shm) */
 -      uuid_t uuid;                    /* Trace session unique ID */
 +      unsigned char uuid[LTTNG_UST_UUID_LEN]; /* Trace session unique ID */
  };
  
  struct ltt_session {
        struct cds_list_head wildcards; /* Wildcard list head */
        struct cds_list_head list;      /* Session list */
        unsigned int free_chan_id;      /* Next chan ID to allocate */
 -      uuid_t uuid;                    /* Trace session unique ID */
 +      unsigned char uuid[LTTNG_UST_UUID_LEN]; /* Trace session unique ID */
        unsigned int metadata_dumped:1;
  };
  
index d6f569e8a28bcdfc546dca4008dcf727e1226f53,ce4c2bb01719baab3b8bbf0f52fded018881bfef..dcc64a55044d6edadc9aacedec273fabe4545e81
  
  #define _GNU_SOURCE
  #include <stdio.h>
 -#include <endian.h>
  #include <urcu/list.h>
  #include <urcu/hlist.h>
  #include <pthread.h>
 -#include <uuid/uuid.h>
  #include <errno.h>
  #include <sys/shm.h>
  #include <sys/ipc.h>
@@@ -20,7 -22,7 +20,7 @@@
  #include <stddef.h>
  #include <inttypes.h>
  #include <time.h>
 -#include <sys/prctl.h>
 +#include <lttng/ust-endian.h>
  #include "clock.h"
  
  #include <urcu-bp.h>
@@@ -34,8 -36,6 +34,8 @@@
  #include <usterr-signal-safe.h>
  #include <helper.h>
  #include "error.h"
 +#include "compat.h"
 +#include "lttng-ust-uuid.h"
  
  #include "tracepoint-internal.h"
  #include "ltt-tracer.h"
@@@ -44,6 -44,8 +44,6 @@@
  #include "../libringbuffer/shm.h"
  #include "jhash.h"
  
 -#define PROCNAME_LEN 17
 -
  /*
   * The sessions mutex is the centralized mutex across UST tracing
   * control and probe registration. All operations within this file are
@@@ -277,7 -279,7 +277,7 @@@ int pending_probe_fix_events(const stru
                remove_pending_probe(e);
                ret |= __tracepoint_probe_register(name,
                                event->desc->probe_callback,
-                               event);
+                               event, event->desc->signature);
                if (ret)
                        continue;
                event->id = chan->free_event_id++;
@@@ -295,7 -297,6 +295,7 @@@ void synchronize_trace(void
  struct ltt_session *ltt_session_create(void)
  {
        struct ltt_session *session;
 +      int ret;
  
        session = zmalloc(sizeof(struct ltt_session));
        if (!session)
        CDS_INIT_LIST_HEAD(&session->chan);
        CDS_INIT_LIST_HEAD(&session->events);
        CDS_INIT_LIST_HEAD(&session->wildcards);
 -      uuid_generate(session->uuid);
 +      ret = lttng_ust_uuid_generate(session->uuid);
 +      if (ret != 0) {
 +              session->uuid[0] = '\0';
 +      }
        cds_list_add(&session->list, &sessions);
        return session;
  }
@@@ -552,7 -550,7 +552,7 @@@ int ltt_event_create(struct ltt_channe
                if (event->desc) {
                        ret = __tracepoint_probe_register(event_param->name,
                                        event->desc->probe_callback,
-                                       event);
+                                       event, event->desc->signature);
                        if (ret)
                                goto register_error;
                        event->id = chan->free_event_id++;
@@@ -1091,12 -1089,11 +1091,12 @@@ stati
  int _ltt_session_metadata_statedump(struct ltt_session *session)
  {
        unsigned char *uuid_c = session->uuid;
 -      char uuid_s[37], clock_uuid_s[CLOCK_UUID_LEN];
 +      char uuid_s[LTTNG_UST_UUID_STR_LEN],
 +              clock_uuid_s[LTTNG_UST_UUID_STR_LEN];
        struct ltt_channel *chan;
        struct ltt_event *event;
        int ret = 0;
 -      char procname[PROCNAME_LEN] = "";
 +      char procname[LTTNG_UST_PROCNAME_LEN] = "";
  
        if (!CMM_ACCESS_ONCE(session->active))
                return 0;
                goto end;
  
        /* ignore error, just use empty string if error. */
 -      (void) prctl(PR_GET_NAME, (unsigned long) procname, 0, 0, 0);
 -      procname[PROCNAME_LEN - 1] = '\0';
 +      lttng_ust_getprocname(procname);
 +      procname[LTTNG_UST_PROCNAME_LEN - 1] = '\0';
        ret = lttng_metadata_printf(session,
                "env {\n"
                "       vpid = %d;\n"
@@@ -1467,7 -1464,7 +1467,7 @@@ int ltt_wildcard_disable(struct session
   */
  void lttng_fixup_event_tls(void)
  {
 -      unsigned char uuid[37];
 +      unsigned char uuid[LTTNG_UST_UUID_STR_LEN];
  
 -      (void) uuid_generate(uuid);
 +      (void) lttng_ust_uuid_generate(uuid);
  }
This page took 0.030618 seconds and 4 git commands to generate.