#ifndef _LTTNG_PROBES_LTTNG_TYPES_H
#define _LTTNG_PROBES_LTTNG_TYPES_H
-#include <lttng.h>
-
-enum abstract_types {
- atype_integer,
- atype_enum,
- atype_array,
- NR_ABSTRACT_TYPES,
-};
-
-struct lttng_enum_entry {
- unsigned long long start, end; /* start and end are inclusive */
- const char *string;
-};
-
-struct lttng_enum {
- const struct lttng_enum_entry *entries;
- unsigned int len;
-};
-
-struct lttng_type {
- enum abstract_types atype;
- const char *name;
- union {
- struct {
- unsigned int size; /* in bits */
- unsigned short alignment; /* in bits */
- unsigned int signedness:1;
- } integer;
- struct {
- const char *parent_type;
- const struct lttng_enum def;
- } enumeration;
- struct {
- const char *elem_type;
- unsigned int length; /* num. elems. */
- } array;
- } u;
-} __attribute__((packed));
+#include <linux/seq_file.h>
+#include "lttng.h"
+#include "../ltt-events.h"
+
+#ifdef __KERNEL__
+# include <asm/byteorder.h>
+# ifdef __BIG_ENDIAN
+# define __BYTE_ORDER __BIG_ENDIAN
+# elif defined(__LITTLE_ENDIAN)
+# define __BYTE_ORDER __LITTLE_ENDIAN
+# else
+# error "unknown endianness"
+# endif
+#ifndef __BIG_ENDIAN
+# define __BIG_ENDIAN 4321
+#endif
+#ifndef __LITTLE_ENDIAN
+# define __LITTLE_ENDIAN 1234
+#endif
+#else
+# include <endian.h>
+#endif
+
+void lttng_print_event_type(struct seq_file *m, unsigned int indent,
+ const struct lttng_type *type);
#endif /* _LTTNG_PROBES_LTTNG_TYPES_H */
#ifdef STAGE_EXPORT_TYPES
-#undef TRACE_EVENT_TYPE___integer
-#define TRACE_EVENT_TYPE___integer(_name, _unused) \
+#undef TRACE_EVENT_TYPE___integer_ext
+#define TRACE_EVENT_TYPE___integer_ext(_name, _byte_order) \
{ \
.atype = atype_integer, \
.name = #_name, \
.u.integer.size = sizeof(_name) * 8, \
.u.integer.alignment = __alignof__(_name) * 8,\
.u.integer.signedness = is_signed_type(_name),\
+ .u.integer.reverse_byte_order = ((_byte_order) != __BYTE_ORDER),\
},
+#undef TRACE_EVENT_TYPE___integer
+#define TRACE_EVENT_TYPE___integer(_name, _unused) \
+ TRACE_EVENT_TYPE___integer_ext(_name, __BYTE_ORDER)
+
#undef TRACE_EVENT_TYPE___enum
#define TRACE_EVENT_TYPE___enum(_name, _parent_type) \
{ \
.u.array.length = _length, \
},
+#undef TRACE_EVENT_TYPE___sequence
+#define TRACE_EVENT_TYPE___sequence(_name, _elem_type, _length_type) \
+ { \
+ .atype = atype_sequence, \
+ .name = #_name, \
+ .u.sequence.elem_type = #_elem_type, \
+ .u.sequence.length_type = #_length_type, \
+ },
+
+#undef TRACE_EVENT_TYPE___string
+#define TRACE_EVENT_TYPE___string(_name, _encoding) \
+ { \
+ .atype = atype_string, \
+ .name = #_name, \
+ .u.string.encoding = lttng_encode_##_encoding,\
+ },
+
+
/* Local declaration */
#undef TRACE_EVENT_TYPE
#define TRACE_EVENT_TYPE(_name, _abstract_type, args...) \