#include <lttng/ringbuffer-config.h>
#include <lttng/ust-compiler.h>
#include <lttng/tracepoint.h>
+#include <byteswap.h>
#include <string.h>
#undef tp_list_for_each_entry_rcu
},
#undef _ctf_sequence_encoded
-#define _ctf_sequence_encoded(_type, _item, _src, \
- _length_type, _src_length, _encoding, _nowrite) \
+#define _ctf_sequence_encoded(_type, _item, _src, \
+ _length_type, _src_length, _encoding, _nowrite, \
+ _elem_type_base) \
{ \
.name = #_item, \
.type = \
.sequence = \
{ \
.length_type = __type_integer(_length_type, BYTE_ORDER, 10, none), \
- .elem_type = __type_integer(_type, BYTE_ORDER, 10, _encoding), \
+ .elem_type = __type_integer(_type, BYTE_ORDER, _elem_type_base, _encoding), \
}, \
}, \
}, \
__event_len += sizeof(_type) * (_length);
#undef _ctf_sequence_encoded
-#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \
- _src_length, _encoding, _nowrite) \
+#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \
+ _src_length, _encoding, _nowrite, _elem_type_base) \
__event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_length_type)); \
__event_len += sizeof(_length_type); \
__event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); \
case 2: \
{ \
union { _type t; int16_t v; } __tmp = { (_type) (_src) }; \
+ if (_byte_order != BYTE_ORDER) \
+ __tmp.v = bswap_16(__tmp.v); \
__ctf_tmp_int64 = (int64_t) __tmp.v; \
break; \
} \
case 4: \
{ \
union { _type t; int32_t v; } __tmp = { (_type) (_src) }; \
+ if (_byte_order != BYTE_ORDER) \
+ __tmp.v = bswap_32(__tmp.v); \
__ctf_tmp_int64 = (int64_t) __tmp.v; \
break; \
} \
case 8: \
{ \
union { _type t; int64_t v; } __tmp = { (_type) (_src) }; \
+ if (_byte_order != BYTE_ORDER) \
+ __tmp.v = bswap_64(__tmp.v); \
__ctf_tmp_int64 = (int64_t) __tmp.v; \
break; \
} \
case 2: \
{ \
union { _type t; uint16_t v; } __tmp = { (_type) (_src) }; \
+ if (_byte_order != BYTE_ORDER) \
+ __tmp.v = bswap_16(__tmp.v); \
__ctf_tmp_uint64 = (uint64_t) __tmp.v; \
break; \
} \
case 4: \
{ \
union { _type t; uint32_t v; } __tmp = { (_type) (_src) }; \
+ if (_byte_order != BYTE_ORDER) \
+ __tmp.v = bswap_32(__tmp.v); \
__ctf_tmp_uint64 = (uint64_t) __tmp.v; \
break; \
} \
case 8: \
{ \
union { _type t; uint64_t v; } __tmp = { (_type) (_src) }; \
+ if (_byte_order != BYTE_ORDER) \
+ __tmp.v = bswap_64(__tmp.v); \
__ctf_tmp_uint64 = (uint64_t) __tmp.v; \
break; \
} \
#undef _ctf_sequence_encoded
#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \
- _src_length, _encoding, _nowrite) \
+ _src_length, _encoding, _nowrite, _elem_type_base) \
{ \
unsigned long __ctf_tmp_ulong = (unsigned long) (_src_length); \
const void *__ctf_tmp_ptr = (_src); \
__event_align = _tp_max_t(size_t, __event_align, lttng_alignof(_type));
#undef _ctf_sequence_encoded
-#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \
- _src_length, _encoding, _nowrite) \
+#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \
+ _src_length, _encoding, _nowrite, _elem_type_base) \
__event_align = _tp_max_t(size_t, __event_align, lttng_alignof(_length_type)); \
__event_align = _tp_max_t(size_t, __event_align, lttng_alignof(_type));
#undef _ctf_sequence_encoded
#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \
- _src_length, _encoding, _nowrite) \
+ _src_length, _encoding, _nowrite, _elem_type_base) \
{ \
_length_type __tmpl = __stackvar.__dynamic_len[__dynamic_len_idx]; \
lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_length_type));\
#define _TP_SESSION_CHECK(session, csession) 1
#endif /* TP_SESSION_CHECK */
+/*
+ * Use of __builtin_return_address(0) sometimes seems to cause stack
+ * corruption on 32-bit PowerPC. Disable this feature on that
+ * architecture for now by always using the NULL value for the ip
+ * context.
+ */
#undef _TP_IP_PARAM
#ifdef TP_IP_PARAM
#define _TP_IP_PARAM(x) (x)
#else /* TP_IP_PARAM */
+
+#if defined(__PPC__) && !defined(__PPC64__)
+#define _TP_IP_PARAM(x) NULL
+#else /* #if defined(__PPC__) && !defined(__PPC64__) */
#define _TP_IP_PARAM(x) __builtin_return_address(0)
+#endif /* #else #if defined(__PPC__) && !defined(__PPC64__) */
+
#endif /* TP_IP_PARAM */
/*