1 #ifndef _LTT_TYPE_SERIALIZER_H
2 #define _LTT_TYPE_SERIALIZER_H
4 #include <linux/if.h> /* For IFNAMSIZ */
6 #include "ltt-tracer.h"
9 * largest_align must be non-zero, equal to the minimum between the largest type
12 extern void _ltt_specialized_trace(void *probe_data
,
13 void *serialize_private
, unsigned int data_size
,
14 unsigned int largest_align
);
17 * Statically check that 0 < largest_align < sizeof(void *) to make sure it is
18 * dumb-proof. It will make sure 0 is changed into 1 and unsigned long long is
19 * changed into sizeof(void *) on 32-bit architectures.
21 static inline void ltt_specialized_trace(void *probe_data
,
22 void *serialize_private
, unsigned int data_size
,
23 unsigned int largest_align
)
25 largest_align
= min_t(unsigned int, largest_align
, sizeof(void *));
26 largest_align
= max_t(unsigned int, largest_align
, 1);
27 _ltt_specialized_trace(probe_data
, serialize_private
, data_size
,
32 * Type serializer definitions.
36 * Return size of structure without end-of-structure padding.
38 #define serialize_sizeof(type) offsetof(typeof(type), end_field)
40 struct serialize_long_int
{
43 unsigned char end_field
[0];
44 } RING_BUFFER_ALIGN_ATTR
;
46 struct serialize_int_int_long
{
50 unsigned char end_field
[0];
51 } RING_BUFFER_ALIGN_ATTR
;
53 struct serialize_int_int_short
{
57 unsigned char end_field
[0];
58 } RING_BUFFER_ALIGN_ATTR
;
60 struct serialize_long_long_long
{
64 unsigned char end_field
[0];
65 } RING_BUFFER_ALIGN_ATTR
;
67 struct serialize_long_long_int
{
71 unsigned char end_field
[0];
72 } RING_BUFFER_ALIGN_ATTR
;
74 struct serialize_long_long_short_char
{
79 unsigned char end_field
[0];
80 } RING_BUFFER_ALIGN_ATTR
;
82 struct serialize_long_long_short
{
86 unsigned char end_field
[0];
87 } RING_BUFFER_ALIGN_ATTR
;
89 struct serialize_long_short_char
{
93 unsigned char end_field
[0];
94 } RING_BUFFER_ALIGN_ATTR
;
96 struct serialize_long_short
{
99 unsigned char end_field
[0];
100 } RING_BUFFER_ALIGN_ATTR
;
102 struct serialize_long_char
{
105 unsigned char end_field
[0];
106 } RING_BUFFER_ALIGN_ATTR
;
108 struct serialize_long_ifname
{
110 unsigned char f2
[IFNAMSIZ
];
111 unsigned char end_field
[0];
112 } RING_BUFFER_ALIGN_ATTR
;
114 struct serialize_sizet_int
{
117 unsigned char end_field
[0];
118 } RING_BUFFER_ALIGN_ATTR
;
120 struct serialize_long_long_sizet_int
{
125 unsigned char end_field
[0];
126 } RING_BUFFER_ALIGN_ATTR
;
128 struct serialize_long_long_sizet_int_int
{
134 unsigned char end_field
[0];
135 } RING_BUFFER_ALIGN_ATTR
;
137 struct serialize_l4421224411111
{
152 unsigned char end_field
[0];
153 } RING_BUFFER_ALIGN_ATTR
;
155 struct serialize_l214421224411111
{
172 uint8_t end_field
[0];
173 } RING_BUFFER_ALIGN_ATTR
;
175 struct serialize_l4412228
{
184 unsigned char end_field
[0];
185 } RING_BUFFER_ALIGN_ATTR
;
186 #endif /* _LTT_TYPE_SERIALIZER_H */