[ltt-dev] [UST commit] Privatize headers
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Thu May 19 17:05:12 EDT 2011
commit 9edd34bd25f52dd39b354a84f02697254121aefd
Author: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
Date: Thu May 19 17:03:11 2011 -0400
Privatize headers
Remove most installed headers, which should be internal. The header
kcompat (kernel-style compatibility header) only makes sense within the
UST package: this should never be exported, nor be included into
instrumented applications.
Move the type-serializer header back into libust/. It is so internal it
does not even belong to include/ust/.
Standardize all the installed headers on non-kcompat style: use uint64_t
instead of u64 for types, open-code likely/unlikely.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
diff --git a/include/Makefile.am b/include/Makefile.am
index 9014627..9fd7dee 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -3,22 +3,25 @@ nobase_include_HEADERS = \
ust/tracepoint.h \
ust/define_trace.h \
ust/ust_trace.h \
- ust/processor.h \
- ust/probe.h \
- ust/ust.h \
ust/tracectl.h \
ust/config.h \
+ ust/stringify.h \
+ ust/ustctl.h \
+ ust/ustconsumer.h
+
+noinst_HEADERS = \
+ share.h \
+ usterr.h \
+ ust_snprintf.h \
+ usterr_signal_safe.h \
ust/core.h \
+ ust/marker-internal.h \
+ ust/tracepoint-internal.h \
ust/clock.h \
+ ust/probe.h \
+ ust/processor.h \
ust/kcompat/kcompat.h \
- ust/kcompat/compiler.h \
ust/kcompat/jhash.h \
+ ust/kcompat/compiler.h \
ust/kcompat/simple.h \
- ust/kcompat/types.h \
- ust/kcompat/stringify.h \
- ust/ustctl.h \
- ust/ustconsumer.h
-
-noinst_HEADERS = share.h usterr.h ust_snprintf.h usterr_signal_safe.h \
- ust/marker-internal.h ust/tracepoint-internal.h \
- ust/type-serializer.h
+ ust/kcompat/types.h
diff --git a/include/ust/clock.h b/include/ust/clock.h
index 22d2efc..5e8f755 100644
--- a/include/ust/clock.h
+++ b/include/ust/clock.h
@@ -20,7 +20,9 @@
#include <time.h>
#include <sys/time.h>
-#include <ust/kcompat/kcompat.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <ust/core.h>
/* TRACE CLOCK */
@@ -44,17 +46,17 @@
#define CLOCK_TRACE 15
union lttng_timespec {
struct timespec ts;
- u64 lttng_ts;
+ uint64_t lttng_ts;
};
extern int ust_clock_source;
/* Choosing correct trace clock */
-static __inline__ u64 trace_clock_read64(void)
+static __inline__ uint64_t trace_clock_read64(void)
{
struct timespec ts;
- u64 retval;
+ uint64_t retval;
union lttng_timespec *lts = (union lttng_timespec *) &ts;
clock_gettime(ust_clock_source, &ts);
@@ -75,7 +77,7 @@ static __inline__ u64 trace_clock_read64(void)
}
#if __i386__ || __x86_64__
-static __inline__ u64 trace_clock_frequency(void)
+static __inline__ uint64_t trace_clock_frequency(void)
{
struct timespec ts;
union lttng_timespec *lts = (union lttng_timespec *) &ts;
@@ -87,13 +89,13 @@ static __inline__ u64 trace_clock_frequency(void)
return 1000000000LL;
}
#else /* #if __i386__ || __x86_64__ */
-static __inline__ u64 trace_clock_frequency(void)
+static __inline__ uint64_t trace_clock_frequency(void)
{
return 1000000000LL;
}
#endif /* #else #if __i386__ || __x86_64__ */
-static __inline__ u32 trace_clock_freq_scale(void)
+static __inline__ uint32_t trace_clock_freq_scale(void)
{
return 1;
}
diff --git a/include/ust/core.h b/include/ust/core.h
index d0e2750..eee405d 100644
--- a/include/ust/core.h
+++ b/include/ust/core.h
@@ -24,42 +24,6 @@
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
-#ifndef HAVE_EFFICIENT_UNALIGNED_ACCESS
-
-/*
- * Calculate the offset needed to align the type.
- * size_of_type must be non-zero.
- */
-static inline unsigned int ltt_align(size_t align_drift, size_t size_of_type)
-{
- size_t alignment = min(sizeof(void *), size_of_type);
- return (alignment - align_drift) & (alignment - 1);
-}
-/* Default arch alignment */
-#define LTT_ALIGN
-
-static inline int ltt_get_alignment(void)
-{
- return sizeof(void *);
-}
-
-#else /* HAVE_EFFICIENT_UNALIGNED_ACCESS */
-
-static inline unsigned int ltt_align(size_t align_drift,
- size_t size_of_type)
-{
- return 0;
-}
-
-#define LTT_ALIGN __attribute__((packed))
-
-static inline int ltt_get_alignment(void)
-{
- return 0;
-}
-#endif /* HAVE_EFFICIENT_UNALIGNED_ACCESS */
-
-
/* ARRAYS */
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
diff --git a/include/ust/define_trace.h b/include/ust/define_trace.h
index f377ddb..14543f9 100644
--- a/include/ust/define_trace.h
+++ b/include/ust/define_trace.h
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2009 Steven Rostedt <srostedt at redhat.com>
+ * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -37,7 +38,7 @@
/* Prevent recursion */
#undef TRACEPOINT_CREATE_PROBES
-#include <ust/kcompat/stringify.h>
+#include <ust/stringify.h>
#undef TRACEPOINT_EVENT
#define TRACEPOINT_EVENT(name, proto, args, fields) \
diff --git a/include/ust/kcompat/stringify.h b/include/ust/kcompat/stringify.h
deleted file mode 100644
index 4ae13d0..0000000
--- a/include/ust/kcompat/stringify.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef __LINUX_STRINGIFY_H
-#define __LINUX_STRINGIFY_H
-/*
- * Copyright (C) 2009 Zhaolei <zhaolei at cn.fujitsu.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
- */
-
-/* Indirect stringification. Doing two levels allows the parameter to be a
- * macro itself. For example, compile with -DFOO=bar, __stringify(FOO)
- * converts to "bar".
- */
-
-#define __stringify_1(x...) #x
-#define __stringify(x...) __stringify_1(x)
-
-#endif /* !__LINUX_STRINGIFY_H */
diff --git a/include/ust/marker.h b/include/ust/marker.h
index 41ae10a..af15ad4 100644
--- a/include/ust/marker.h
+++ b/include/ust/marker.h
@@ -26,10 +26,10 @@
*/
#include <stdarg.h>
+#include <stdint.h>
+#include <stddef.h>
#include <bits/wordsize.h>
#include <urcu/list.h>
-#include <ust/core.h>
-#include <ust/kcompat/kcompat.h>
struct ust_marker;
@@ -64,8 +64,8 @@ struct ust_marker {
char state; /* State. */
char ptype; /* probe type : 0 : single, 1 : multi */
/* Probe wrapper */
- u16 channel_id; /* Numeric channel identifier, dynamic */
- u16 event_id; /* Numeric event identifier, dynamic */
+ uint16_t channel_id; /* Numeric channel identifier, dynamic */
+ uint16_t event_id; /* Numeric event identifier, dynamic */
void (*call)(const struct ust_marker *mdata, void *call_private, ...);
struct ust_marker_probe_closure single;
struct ust_marker_probe_closure *multi;
@@ -109,7 +109,7 @@ struct ust_marker {
do { \
_DEFINE_UST_MARKER(channel, name, NULL, NULL, format); \
__ust_marker_check_format(format, ## args); \
- if (unlikely(__ust_marker_def_##name.state)) \
+ if (__builtin_expect(!!(__ust_marker_def_##name.state), 0)) \
(__ust_marker_def_##name.call) \
(&__ust_marker_def_##name, call_private,\
## args); \
@@ -138,7 +138,8 @@ void __trace_mark_is_deprecated()
/* To be used for string format validity checking with gcc */
static inline
-void __printf(1, 2) ___ust_marker_check_format(const char *fmt, ...)
+void __attribute__((format(printf, 1, 2)))
+ ___ust_marker_check_format(const char *fmt, ...)
{
}
diff --git a/include/ust/stringify.h b/include/ust/stringify.h
new file mode 100644
index 0000000..b8dfd90
--- /dev/null
+++ b/include/ust/stringify.h
@@ -0,0 +1,29 @@
+#ifndef __LINUX_STRINGIFY_H
+#define __LINUX_STRINGIFY_H
+/*
+ * Copyright (C) 2009 Zhaolei <zhaolei at cn.fujitsu.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/* Indirect stringification. Doing two levels allows the parameter to be a
+ * macro itself. For example, compile with -DFOO=bar, __stringify(FOO)
+ * converts to "bar".
+ */
+
+#define __stringify_1(x...) #x
+#define __stringify(x...) __stringify_1(x)
+
+#endif /* !__LINUX_STRINGIFY_H */
diff --git a/include/ust/tracepoint.h b/include/ust/tracepoint.h
index 4d84ead..3d61f72 100644
--- a/include/ust/tracepoint.h
+++ b/include/ust/tracepoint.h
@@ -26,7 +26,6 @@
*/
#include <urcu-bp.h>
-#include <ust/core.h>
#include <urcu/list.h>
struct tracepoint_probe {
diff --git a/include/ust/type-serializer.h b/include/ust/type-serializer.h
deleted file mode 100644
index d4e2a1e..0000000
--- a/include/ust/type-serializer.h
+++ /dev/null
@@ -1,182 +0,0 @@
-#ifndef _LTT_TYPE_SERIALIZER_H
-#define _LTT_TYPE_SERIALIZER_H
-
-#include <ust/marker.h>
-#include <ust/marker-internal.h>
-#include <ust/core.h>
-
-/*
- * largest_align must be non-zero, equal to the minimum between the largest type
- * and sizeof(void *).
- */
-extern void _ltt_specialized_trace(const struct ust_marker *mdata, void *probe_data,
- void *serialize_private, unsigned int data_size,
- unsigned int largest_align);
-
-/*
- * Statically check that 0 < largest_align < sizeof(void *) to make sure it is
- * dumb-proof. It will make sure 0 is changed into 1 and unsigned long long is
- * changed into sizeof(void *) on 32-bit architectures.
- */
-static inline void ltt_specialized_trace(const struct ust_marker *mdata,
- void *probe_data,
- void *serialize_private, unsigned int data_size,
- unsigned int largest_align)
-{
- largest_align = min_t(unsigned int, largest_align, sizeof(void *));
- largest_align = max_t(unsigned int, largest_align, 1);
- _ltt_specialized_trace(mdata, probe_data, serialize_private, data_size,
- largest_align);
-}
-
-/*
- * Type serializer definitions.
- */
-
-/*
- * Return size of structure without end-of-structure padding.
- */
-#define serialize_sizeof(type) offsetof(typeof(type), end_field)
-
-struct serialize_long_int {
- unsigned long f1;
- unsigned int f2;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_int_int_long {
- unsigned int f1;
- unsigned int f2;
- unsigned long f3;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_int_int_short {
- unsigned int f1;
- unsigned int f2;
- unsigned short f3;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_long_long_long {
- unsigned long f1;
- unsigned long f2;
- unsigned long f3;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_long_long_int {
- unsigned long f1;
- unsigned long f2;
- unsigned int f3;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_long_long_short_char {
- unsigned long f1;
- unsigned long f2;
- unsigned short f3;
- unsigned char f4;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_long_long_short {
- unsigned long f1;
- unsigned long f2;
- unsigned short f3;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_long_short_char {
- unsigned long f1;
- unsigned short f2;
- unsigned char f3;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_long_short {
- unsigned long f1;
- unsigned short f2;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_long_char {
- unsigned long f1;
- unsigned char f2;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_sizet_int {
- size_t f1;
- unsigned int f2;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_long_long_sizet_int {
- unsigned long f1;
- unsigned long f2;
- size_t f3;
- unsigned int f4;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_long_long_sizet_int_int {
- unsigned long f1;
- unsigned long f2;
- size_t f3;
- unsigned int f4;
- unsigned int f5;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_l4421224411111 {
- unsigned long f1;
- uint32_t f2;
- uint32_t f3;
- uint16_t f4;
- uint8_t f5;
- uint16_t f6;
- uint16_t f7;
- uint32_t f8;
- uint32_t f9;
- uint8_t f10;
- uint8_t f11;
- uint8_t f12;
- uint8_t f13;
- uint8_t f14;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-struct serialize_l214421224411111 {
- unsigned long f1;
- uint16_t f2;
- uint8_t f3;
- uint32_t f4;
- uint32_t f5;
- uint16_t f6;
- uint8_t f7;
- uint16_t f8;
- uint16_t f9;
- uint32_t f10;
- uint32_t f11;
- uint8_t f12;
- uint8_t f13;
- uint8_t f14;
- uint8_t f15;
- uint8_t f16;
- uint8_t end_field[0];
-} LTT_ALIGN;
-
-struct serialize_l4412228 {
- unsigned long f1;
- uint32_t f2;
- uint32_t f3;
- uint8_t f4;
- uint16_t f5;
- uint16_t f6;
- uint16_t f7;
- uint64_t f8;
- unsigned char end_field[0];
-} LTT_ALIGN;
-
-#endif /* _LTT_TYPE_SERIALIZER_H */
diff --git a/include/ust/ust.h b/include/ust/ust.h
deleted file mode 100644
index a7da4b3..0000000
--- a/include/ust/ust.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright (C) 2009 Pierre-Marc Fournier
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef UST_H
-#define UST_H
-
-#include <ust/marker.h>
-#include <ust/processor.h>
-#include <ust/tracepoint.h>
-#include <ust/probe.h>
-#include <ust/core.h>
-
-#endif /* UST_H */
diff --git a/include/ust/ustconsumer.h b/include/ust/ustconsumer.h
index cde8440..8c53488 100644
--- a/include/ust/ustconsumer.h
+++ b/include/ust/ustconsumer.h
@@ -28,7 +28,7 @@
#include <pthread.h>
#include <dirent.h>
-#include <ust/kcompat/kcompat.h>
+#include <unistd.h>
#include <urcu/list.h>
#define USTCONSUMER_DEFAULT_TRACE_PATH "/tmp/usttrace"
@@ -67,7 +67,7 @@ struct buffer_info {
long consumed_old;
- s64 pidunique;
+ int64_t pidunique;
void *user_data;
};
diff --git a/libust/Makefile.am b/libust/Makefile.am
index 697b469..44addf0 100644
--- a/libust/Makefile.am
+++ b/libust/Makefile.am
@@ -20,7 +20,7 @@ libust_la_SOURCES = \
serialize.c \
tracectl.c \
tracerconst.h \
- header-inline.h \
+ type-serializer.h \
type-serializer.c
libust_la_LDFLAGS = -no-undefined -version-info 0:0:0
diff --git a/libust/buffers.h b/libust/buffers.h
index 4017964..afeaef3 100644
--- a/libust/buffers.h
+++ b/libust/buffers.h
@@ -32,7 +32,6 @@
#include "channels.h"
#include "tracerconst.h"
#include "tracercore.h"
-#include "header-inline.h"
/***** FIXME: SHOULD BE REMOVED ***** */
@@ -122,6 +121,40 @@ extern int ltt_reserve_slot_lockless_slow(struct ust_channel *chan,
extern void ltt_force_switch_lockless_slow(struct ust_buffer *buf,
enum force_switch_mode mode);
+#ifndef HAVE_EFFICIENT_UNALIGNED_ACCESS
+
+/*
+ * Calculate the offset needed to align the type.
+ * size_of_type must be non-zero.
+ */
+static inline unsigned int ltt_align(size_t align_drift, size_t size_of_type)
+{
+ size_t alignment = min(sizeof(void *), size_of_type);
+ return (alignment - align_drift) & (alignment - 1);
+}
+/* Default arch alignment */
+#define LTT_ALIGN
+
+static inline int ltt_get_alignment(void)
+{
+ return sizeof(void *);
+}
+
+#else /* HAVE_EFFICIENT_UNALIGNED_ACCESS */
+
+static inline unsigned int ltt_align(size_t align_drift,
+ size_t size_of_type)
+{
+ return 0;
+}
+
+#define LTT_ALIGN __attribute__((packed))
+
+static inline int ltt_get_alignment(void)
+{
+ return 0;
+}
+#endif /* HAVE_EFFICIENT_UNALIGNED_ACCESS */
static __inline__ void ust_buffers_do_copy(void *dest, const void *src, size_t len)
{
@@ -194,6 +227,63 @@ static __inline__ int last_tsc_overflow(struct ust_buffer *ltt_buf,
}
#endif
+/*
+ * ust_get_header_size
+ *
+ * Calculate alignment offset to 32-bits. This is the alignment offset of the
+ * event header.
+ *
+ * Important note :
+ * The event header must be 32-bits. The total offset calculated here :
+ *
+ * Alignment of header struct on 32 bits (min arch size, header size)
+ * + sizeof(header struct) (32-bits)
+ * + (opt) u16 (ext. event id)
+ * + (opt) u16 (event_size) (if event_size == 0xFFFFUL, has ext. event size)
+ * + (opt) u32 (ext. event size)
+ * + (opt) u64 full TSC (aligned on min(64-bits, arch size))
+ *
+ * The payload must itself determine its own alignment from the biggest type it
+ * contains.
+ * */
+static __inline__ unsigned char ust_get_header_size(
+ struct ust_channel *channel,
+ size_t offset,
+ size_t data_size,
+ size_t *before_hdr_pad,
+ unsigned int rflags)
+{
+ size_t orig_offset = offset;
+ size_t padding;
+
+ padding = ltt_align(offset, sizeof(struct ltt_event_header));
+ offset += padding;
+ offset += sizeof(struct ltt_event_header);
+
+ if(unlikely(rflags)) {
+ switch (rflags) {
+ case LTT_RFLAG_ID_SIZE_TSC:
+ offset += sizeof(u16) + sizeof(u16);
+ if (data_size >= 0xFFFFU)
+ offset += sizeof(u32);
+ offset += ltt_align(offset, sizeof(u64));
+ offset += sizeof(u64);
+ break;
+ case LTT_RFLAG_ID_SIZE:
+ offset += sizeof(u16) + sizeof(u16);
+ if (data_size >= 0xFFFFU)
+ offset += sizeof(u32);
+ break;
+ case LTT_RFLAG_ID:
+ offset += sizeof(u16);
+ break;
+ }
+ }
+
+ *before_hdr_pad = padding;
+ return offset - orig_offset;
+}
+
static __inline__ void ltt_reserve_push_reader(
struct ust_channel *rchan,
struct ust_buffer *buf,
diff --git a/libust/header-inline.h b/libust/header-inline.h
deleted file mode 100644
index 04abaa9..0000000
--- a/libust/header-inline.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2008 - Mathieu Desnoyers (mathieu.desnoyers at polymtl.ca)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef UST_HEADER_INLINE_H
-#define UST_HEADER_INLINE_H
-
-#include <ust/core.h>
-
-/*
- * ust_get_header_size
- *
- * Calculate alignment offset to 32-bits. This is the alignment offset of the
- * event header.
- *
- * Important note :
- * The event header must be 32-bits. The total offset calculated here :
- *
- * Alignment of header struct on 32 bits (min arch size, header size)
- * + sizeof(header struct) (32-bits)
- * + (opt) u16 (ext. event id)
- * + (opt) u16 (event_size) (if event_size == 0xFFFFUL, has ext. event size)
- * + (opt) u32 (ext. event size)
- * + (opt) u64 full TSC (aligned on min(64-bits, arch size))
- *
- * The payload must itself determine its own alignment from the biggest type it
- * contains.
- * */
-static __inline__ unsigned char ust_get_header_size(
- struct ust_channel *channel,
- size_t offset,
- size_t data_size,
- size_t *before_hdr_pad,
- unsigned int rflags)
-{
- size_t orig_offset = offset;
- size_t padding;
-
- padding = ltt_align(offset, sizeof(struct ltt_event_header));
- offset += padding;
- offset += sizeof(struct ltt_event_header);
-
- if(unlikely(rflags)) {
- switch (rflags) {
- case LTT_RFLAG_ID_SIZE_TSC:
- offset += sizeof(u16) + sizeof(u16);
- if (data_size >= 0xFFFFU)
- offset += sizeof(u32);
- offset += ltt_align(offset, sizeof(u64));
- offset += sizeof(u64);
- break;
- case LTT_RFLAG_ID_SIZE:
- offset += sizeof(u16) + sizeof(u16);
- if (data_size >= 0xFFFFU)
- offset += sizeof(u32);
- break;
- case LTT_RFLAG_ID:
- offset += sizeof(u16);
- break;
- }
- }
-
- *before_hdr_pad = padding;
- return offset - orig_offset;
-}
-
-#endif /* UST_HEADER_INLINE_H */
diff --git a/libust/type-serializer.c b/libust/type-serializer.c
index 611f91f..070542c 100644
--- a/libust/type-serializer.c
+++ b/libust/type-serializer.c
@@ -13,11 +13,11 @@
#define _GNU_SOURCE
#define _LGPL_SOURCE
#include <urcu/rculist.h>
-#include <ust/type-serializer.h>
#include <ust/core.h>
#include <ust/clock.h>
#include <urcu-bp.h>
#include "tracer.h"
+#include "type-serializer.h"
notrace
void _ltt_specialized_trace(const struct ust_marker *mdata, void *probe_data,
diff --git a/libust/type-serializer.h b/libust/type-serializer.h
new file mode 100644
index 0000000..3b1a23a
--- /dev/null
+++ b/libust/type-serializer.h
@@ -0,0 +1,183 @@
+#ifndef _LTT_TYPE_SERIALIZER_H
+#define _LTT_TYPE_SERIALIZER_H
+
+#include <ust/marker.h>
+#include <ust/marker-internal.h>
+#include <ust/core.h>
+#include "buffers.h"
+
+/*
+ * largest_align must be non-zero, equal to the minimum between the largest type
+ * and sizeof(void *).
+ */
+extern void _ltt_specialized_trace(const struct ust_marker *mdata, void *probe_data,
+ void *serialize_private, unsigned int data_size,
+ unsigned int largest_align);
+
+/*
+ * Statically check that 0 < largest_align < sizeof(void *) to make sure it is
+ * dumb-proof. It will make sure 0 is changed into 1 and unsigned long long is
+ * changed into sizeof(void *) on 32-bit architectures.
+ */
+static inline void ltt_specialized_trace(const struct ust_marker *mdata,
+ void *probe_data,
+ void *serialize_private, unsigned int data_size,
+ unsigned int largest_align)
+{
+ largest_align = min_t(unsigned int, largest_align, sizeof(void *));
+ largest_align = max_t(unsigned int, largest_align, 1);
+ _ltt_specialized_trace(mdata, probe_data, serialize_private, data_size,
+ largest_align);
+}
+
+/*
+ * Type serializer definitions.
+ */
+
+/*
+ * Return size of structure without end-of-structure padding.
+ */
+#define serialize_sizeof(type) offsetof(typeof(type), end_field)
+
+struct serialize_long_int {
+ unsigned long f1;
+ unsigned int f2;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_int_int_long {
+ unsigned int f1;
+ unsigned int f2;
+ unsigned long f3;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_int_int_short {
+ unsigned int f1;
+ unsigned int f2;
+ unsigned short f3;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_long_long_long {
+ unsigned long f1;
+ unsigned long f2;
+ unsigned long f3;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_long_long_int {
+ unsigned long f1;
+ unsigned long f2;
+ unsigned int f3;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_long_long_short_char {
+ unsigned long f1;
+ unsigned long f2;
+ unsigned short f3;
+ unsigned char f4;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_long_long_short {
+ unsigned long f1;
+ unsigned long f2;
+ unsigned short f3;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_long_short_char {
+ unsigned long f1;
+ unsigned short f2;
+ unsigned char f3;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_long_short {
+ unsigned long f1;
+ unsigned short f2;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_long_char {
+ unsigned long f1;
+ unsigned char f2;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_sizet_int {
+ size_t f1;
+ unsigned int f2;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_long_long_sizet_int {
+ unsigned long f1;
+ unsigned long f2;
+ size_t f3;
+ unsigned int f4;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_long_long_sizet_int_int {
+ unsigned long f1;
+ unsigned long f2;
+ size_t f3;
+ unsigned int f4;
+ unsigned int f5;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_l4421224411111 {
+ unsigned long f1;
+ uint32_t f2;
+ uint32_t f3;
+ uint16_t f4;
+ uint8_t f5;
+ uint16_t f6;
+ uint16_t f7;
+ uint32_t f8;
+ uint32_t f9;
+ uint8_t f10;
+ uint8_t f11;
+ uint8_t f12;
+ uint8_t f13;
+ uint8_t f14;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+struct serialize_l214421224411111 {
+ unsigned long f1;
+ uint16_t f2;
+ uint8_t f3;
+ uint32_t f4;
+ uint32_t f5;
+ uint16_t f6;
+ uint8_t f7;
+ uint16_t f8;
+ uint16_t f9;
+ uint32_t f10;
+ uint32_t f11;
+ uint8_t f12;
+ uint8_t f13;
+ uint8_t f14;
+ uint8_t f15;
+ uint8_t f16;
+ uint8_t end_field[0];
+} LTT_ALIGN;
+
+struct serialize_l4412228 {
+ unsigned long f1;
+ uint32_t f2;
+ uint32_t f3;
+ uint8_t f4;
+ uint16_t f5;
+ uint16_t f6;
+ uint16_t f7;
+ uint64_t f8;
+ unsigned char end_field[0];
+} LTT_ALIGN;
+
+#endif /* _LTT_TYPE_SERIALIZER_H */
diff --git a/libustconsumer/libustconsumer.c b/libustconsumer/libustconsumer.c
index b47f04a..c6dd20c 100644
--- a/libustconsumer/libustconsumer.c
+++ b/libustconsumer/libustconsumer.c
@@ -146,7 +146,7 @@ void decrement_active_buffers(void *arg)
pthread_mutex_unlock(&instance->mutex);
}
-static int get_pidunique(int sock, s64 *pidunique)
+static int get_pidunique(int sock, int64_t *pidunique)
{
struct ustcomm_header _send_hdr, *send_hdr;
struct ustcomm_header _recv_hdr, *recv_hdr;
diff --git a/libustfork/ustfork.c b/libustfork/ustfork.c
index ecc39e3..c88805f 100644
--- a/libustfork/ustfork.c
+++ b/libustfork/ustfork.c
@@ -20,7 +20,6 @@
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
-#include <ust/ust.h>
#include <sched.h>
#include <stdarg.h>
#include <ust/tracectl.h>
diff --git a/tests/exit-fast/exit-fast.c b/tests/exit-fast/exit-fast.c
index 84bb0c5..ee987f2 100644
--- a/tests/exit-fast/exit-fast.c
+++ b/tests/exit-fast/exit-fast.c
@@ -20,7 +20,9 @@
#include <signal.h>
#include <string.h>
-#include <ust/ust.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <ust/marker.h>
int main(int argc, char *argv[])
{
diff --git a/tests/test-nevents/prog.c b/tests/test-nevents/prog.c
index 21e01f0..6d6ba96 100644
--- a/tests/test-nevents/prog.c
+++ b/tests/test-nevents/prog.c
@@ -21,7 +21,7 @@
#include <string.h>
#include <stdlib.h>
-#include <ust/ust.h>
+#include <ust/marker.h>
#define N_ITER 100000
diff --git a/tests/tracepoint/benchmark/tracepoint_benchmark.c b/tests/tracepoint/benchmark/tracepoint_benchmark.c
index 45f7d3c..c1208b0 100644
--- a/tests/tracepoint/benchmark/tracepoint_benchmark.c
+++ b/tests/tracepoint/benchmark/tracepoint_benchmark.c
@@ -28,7 +28,9 @@
#define TRACEPOINT_CREATE_PROBES
#include "tracepoint_benchmark.h"
-#include <ust/type-serializer.h>
+
+/* Yes, this is now internal. */
+#include "../../../libust/type-serializer.h"
#define NR_EVENTS 10000000
diff --git a/ust-consumerd/ust-consumerd.c b/ust-consumerd/ust-consumerd.c
index c961394..0761253 100644
--- a/ust-consumerd/ust-consumerd.c
+++ b/ust-consumerd/ust-consumerd.c
@@ -24,6 +24,7 @@
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
+#include <inttypes.h>
#include <stdlib.h>
#include <stdio.h>
@@ -192,8 +193,8 @@ int on_open_buffer(struct ustconsumer_callbacks *data, struct buffer_info *buf)
trace_path = USTCONSUMER_DEFAULT_TRACE_PATH;
}
- if (asprintf(&tmp, "%s/%u_%lld", trace_path, buf->pid, buf->pidunique) < 0) {
- ERR("on_open_buffer : asprintf failed (%s/%u_%lld)",
+ if (asprintf(&tmp, "%s/%u_%" PRId64 "", trace_path, buf->pid, buf->pidunique) < 0) {
+ ERR("on_open_buffer : asprintf failed (%s/%u_%" PRId64 ")",
trace_path, buf->pid, buf->pidunique);
return 1;
}
@@ -205,8 +206,8 @@ int on_open_buffer(struct ustconsumer_callbacks *data, struct buffer_info *buf)
}
free(tmp);
- if (asprintf(&tmp, "%s/%u_%lld/%s", trace_path, buf->pid, buf->pidunique, buf->name) < 0) {
- ERR("on_open_buffer : asprintf failed (%s/%u_%lld/%s)",
+ if (asprintf(&tmp, "%s/%u_%" PRId64 "/%s", trace_path, buf->pid, buf->pidunique, buf->name) < 0) {
+ ERR("on_open_buffer : asprintf failed (%s/%u_%" PRId64 "/%s)",
trace_path, buf->pid, buf->pidunique, buf->name);
return 1;
}
--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com
More information about the lttng-dev
mailing list