+#undef __array_enc_ext
+#define __array_enc_ext(_type, _item, _length, _order, _base, _encoding)\
+ goto __assign_##_item; \
+__end_field_##_item:
+
+#undef __dynamic_array_enc_ext
+#define __dynamic_array_enc_ext(_type, _item, _length, _order, _base, _encoding)\
+ goto __assign_##_item##_1; \
+__end_field_##_item##_1: \
+ goto __assign_##_item##_2; \
+__end_field_##_item##_2:
+
+#undef __string
+#define __string(_item, _src) \
+ goto __assign_##_item; \
+__end_field_##_item:
+
+/*
+ * Macros mapping tp_assign() to "=", tp_memcpy() to memcpy() and tp_strcpy() to
+ * strcpy().
+ */
+#undef tp_assign
+#define tp_assign(dest, src) \
+__assign_##dest: \
+ { \
+ __typeof__(__typemap.dest) __tmp = (src); \
+ lib_ring_buffer_align_ctx(&__ctx, ltt_alignof(__tmp)); \
+ __chan->ops->event_write(&__ctx, &__tmp, sizeof(__tmp));\
+ } \
+ goto __end_field_##dest;
+
+#undef tp_memcpy
+#define tp_memcpy(dest, src, len) \
+__assign_##dest: \
+ if (0) \
+ (void) __typemap.dest; \
+ lib_ring_buffer_align_ctx(&__ctx, ltt_alignof(__typemap.dest)); \
+ __chan->ops->event_write(&__ctx, src, len); \
+ goto __end_field_##dest;
+
+#undef tp_memcpy_dyn
+#define tp_memcpy_dyn(dest, src) \
+__assign_##dest##_1: \
+ { \
+ u32 __tmpl = __dynamic_len[__dynamic_len_idx]; \
+ lib_ring_buffer_align_ctx(&__ctx, ltt_alignof(u32)); \
+ __chan->ops->event_write(&__ctx, &__tmpl, sizeof(u32)); \
+ } \
+ goto __end_field_##dest##_1; \
+__assign_##dest##_2: \
+ lib_ring_buffer_align_ctx(&__ctx, ltt_alignof(__typemap.dest)); \
+ __chan->ops->event_write(&__ctx, src, \
+ sizeof(__typemap.dest) * __get_dynamic_array_len(dest));\
+ goto __end_field_##dest##_2;
+
+#undef tp_memcpy_from_user
+#define tp_memcpy_from_user(dest, src, len) \
+ __assign_##dest: \
+ if (0) \
+ (void) __typemap.dest; \
+ lib_ring_buffer_align_ctx(&__ctx, ltt_alignof(__typemap.dest)); \
+ __chan->ops->event_write_from_user(&__ctx, src, len); \
+ goto __end_field_##dest;
+
+#undef tp_copy_string_from_user
+#define tp_copy_string_from_user(dest, src) \
+ __assign_##dest: \
+ if (0) \
+ (void) __typemap.dest; \
+ lib_ring_buffer_align_ctx(&__ctx, ltt_alignof(__typemap.dest)); \
+ __chan->ops->event_write_from_user(&__ctx, src, \
+ __get_dynamic_array_len(dest) - 1); \
+ __chan->ops->event_memset(&__ctx, 0, 1); \
+ goto __end_field_##dest;
+
+#undef tp_strcpy
+#define tp_strcpy(dest, src) \
+ tp_memcpy(dest, src, __get_dynamic_array_len(dest))
+
+/* Named field types must be defined in lttng-types.h */