1 // SPDX-License-Identifier: MIT
3 * Copyright 2022 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 #include <side/trace.h>
15 /* User code example */
17 side_static_event(my_provider_event
, "myprovider", "myevent", SIDE_LOGLEVEL_DEBUG
,
19 side_field_u32("abc"),
20 side_field_s64("def"),
21 side_field_pointer("ptr"),
22 side_field_dynamic("dynamic"),
23 side_field_dynamic("dynamic_pointer"),
24 side_field_null("null"),
29 void test_fields(void)
34 side_event(my_provider_event
,
38 side_arg_pointer((void *) 0x1),
39 side_arg_dynamic_string("zzz"),
40 side_arg_dynamic_pointer((void *) 0x1),
46 side_hidden_event(my_provider_event_hidden
, "myprovider", "myeventhidden", SIDE_LOGLEVEL_DEBUG
,
48 side_field_u32("abc"),
53 void test_event_hidden(void)
55 side_event(my_provider_event_hidden
, side_arg_list(side_arg_u32(2)));
58 side_declare_event(my_provider_event_export
);
60 side_export_event(my_provider_event_export
, "myprovider", "myeventexport", SIDE_LOGLEVEL_DEBUG
,
62 side_field_u32("abc"),
67 void test_event_export(void)
69 side_event(my_provider_event_export
, side_arg_list(side_arg_u32(2)));
72 side_static_event(my_provider_event_struct_literal
, "myprovider", "myeventstructliteral", SIDE_LOGLEVEL_DEBUG
,
74 side_field_struct("structliteral",
87 void test_struct_literal(void)
89 side_event_cond(my_provider_event_struct_literal
) {
90 side_arg_define_vec(mystruct
, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
91 side_event_call(my_provider_event_struct_literal
, side_arg_list(side_arg_struct(&mystruct
), side_arg_u8(55)));
95 static side_define_struct(mystructdef
,
102 side_static_event(my_provider_event_struct
, "myprovider", "myeventstruct", SIDE_LOGLEVEL_DEBUG
,
104 side_field_struct("struct", &mystructdef
),
110 void test_struct(void)
112 side_event_cond(my_provider_event_struct
) {
113 side_arg_define_vec(mystruct
, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
114 side_event_call(my_provider_event_struct
, side_arg_list(side_arg_struct(&mystruct
), side_arg_u8(55)));
118 side_static_event(my_provider_event_array
, "myprovider", "myarray", SIDE_LOGLEVEL_DEBUG
,
120 side_field_array("arr", side_elem(side_type_u32()), 3),
126 void test_array(void)
128 side_event_cond(my_provider_event_array
) {
129 side_arg_define_vec(myarray
, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
130 side_event_call(my_provider_event_array
, side_arg_list(side_arg_array(&myarray
), side_arg_s64(42)));
134 side_static_event(my_provider_event_vla
, "myprovider", "myvla", SIDE_LOGLEVEL_DEBUG
,
136 side_field_vla("vla", side_elem(side_type_u32())),
144 side_event_cond(my_provider_event_vla
) {
145 side_arg_define_vec(myvla
, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
146 side_event_call(my_provider_event_vla
, side_arg_list(side_arg_vla(&myvla
), side_arg_s64(42)));
150 /* 1D array visitor */
152 struct app_visitor_ctx
{
158 enum side_visitor_status
test_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
160 struct app_visitor_ctx
*ctx
= (struct app_visitor_ctx
*) _ctx
;
161 uint32_t length
= ctx
->length
, i
;
163 for (i
= 0; i
< length
; i
++) {
164 const struct side_arg elem
= side_arg_u32(ctx
->ptr
[i
]);
166 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
167 return SIDE_VISITOR_STATUS_ERROR
;
169 return SIDE_VISITOR_STATUS_OK
;
172 static uint32_t testarray
[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
174 side_static_event(my_provider_event_vla_visitor
, "myprovider", "myvlavisit", SIDE_LOGLEVEL_DEBUG
,
176 side_field_vla_visitor("vlavisit", side_elem(side_type_u32()), test_visitor
),
182 void test_vla_visitor(void)
184 side_event_cond(my_provider_event_vla_visitor
) {
185 struct app_visitor_ctx ctx
= {
187 .length
= SIDE_ARRAY_SIZE(testarray
),
189 side_event_call(my_provider_event_vla_visitor
, side_arg_list(side_arg_vla_visitor(&ctx
), side_arg_s64(42)));
193 /* 2D array visitor */
195 struct app_visitor_2d_inner_ctx
{
201 enum side_visitor_status
test_inner_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
203 struct app_visitor_2d_inner_ctx
*ctx
= (struct app_visitor_2d_inner_ctx
*) _ctx
;
204 uint32_t length
= ctx
->length
, i
;
206 for (i
= 0; i
< length
; i
++) {
207 const struct side_arg elem
= side_arg_u32(ctx
->ptr
[i
]);
209 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
210 return SIDE_VISITOR_STATUS_ERROR
;
212 return SIDE_VISITOR_STATUS_OK
;
215 struct app_visitor_2d_outer_ctx
{
216 const uint32_t (*ptr
)[2];
221 enum side_visitor_status
test_outer_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
223 struct app_visitor_2d_outer_ctx
*ctx
= (struct app_visitor_2d_outer_ctx
*) _ctx
;
224 uint32_t length
= ctx
->length
, i
;
226 for (i
= 0; i
< length
; i
++) {
227 struct app_visitor_2d_inner_ctx inner_ctx
= {
231 const struct side_arg elem
= side_arg_vla_visitor(&inner_ctx
);
232 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
233 return SIDE_VISITOR_STATUS_ERROR
;
235 return SIDE_VISITOR_STATUS_OK
;
238 static uint32_t testarray2d
[][2] = {
244 side_static_event(my_provider_event_vla_visitor2d
, "myprovider", "myvlavisit2d", SIDE_LOGLEVEL_DEBUG
,
246 side_field_vla_visitor("vlavisit2d",
248 side_type_vla_visitor(
249 side_elem(side_type_u32()),
252 ), test_outer_visitor
),
258 void test_vla_visitor_2d(void)
260 side_event_cond(my_provider_event_vla_visitor2d
) {
261 struct app_visitor_2d_outer_ctx ctx
= {
263 .length
= SIDE_ARRAY_SIZE(testarray2d
),
265 side_event_call(my_provider_event_vla_visitor2d
, side_arg_list(side_arg_vla_visitor(&ctx
), side_arg_s64(42)));
269 side_static_event(my_provider_event_dynamic_basic
,
270 "myprovider", "mydynamicbasic", SIDE_LOGLEVEL_DEBUG
,
272 side_field_dynamic("dynamic"),
277 void test_dynamic_basic_type(void)
279 side_event(my_provider_event_dynamic_basic
,
280 side_arg_list(side_arg_dynamic_s16(-33)));
283 side_static_event(my_provider_event_dynamic_vla
,
284 "myprovider", "mydynamicvla", SIDE_LOGLEVEL_DEBUG
,
286 side_field_dynamic("dynamic"),
291 void test_dynamic_vla(void)
293 side_arg_dynamic_define_vec(myvla
,
295 side_arg_dynamic_u32(1),
296 side_arg_dynamic_u32(2),
297 side_arg_dynamic_u32(3),
300 side_event(my_provider_event_dynamic_vla
,
301 side_arg_list(side_arg_dynamic_vla(&myvla
)));
304 side_static_event(my_provider_event_dynamic_null
,
305 "myprovider", "mydynamicnull", SIDE_LOGLEVEL_DEBUG
,
307 side_field_dynamic("dynamic"),
312 void test_dynamic_null(void)
314 side_event(my_provider_event_dynamic_null
,
315 side_arg_list(side_arg_dynamic_null()));
318 side_static_event(my_provider_event_dynamic_struct
,
319 "myprovider", "mydynamicstruct", SIDE_LOGLEVEL_DEBUG
,
321 side_field_dynamic("dynamic"),
326 void test_dynamic_struct(void)
328 side_arg_dynamic_define_struct(mystruct
,
330 side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
331 side_arg_dynamic_field("b", side_arg_dynamic_string("zzz")),
332 side_arg_dynamic_field("c", side_arg_dynamic_null()),
336 side_event(my_provider_event_dynamic_struct
,
337 side_arg_list(side_arg_dynamic_struct(&mystruct
)));
340 side_static_event(my_provider_event_dynamic_nested_struct
,
341 "myprovider", "mydynamicnestedstruct", SIDE_LOGLEVEL_DEBUG
,
343 side_field_dynamic("dynamic"),
348 void test_dynamic_nested_struct(void)
350 side_arg_dynamic_define_struct(nested
,
352 side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
353 side_arg_dynamic_field("b", side_arg_dynamic_u8(55)),
356 side_arg_dynamic_define_struct(nested2
,
358 side_arg_dynamic_field("aa", side_arg_dynamic_u64(128)),
359 side_arg_dynamic_field("bb", side_arg_dynamic_u16(1)),
362 side_arg_dynamic_define_struct(mystruct
,
364 side_arg_dynamic_field("nested", side_arg_dynamic_struct(&nested
)),
365 side_arg_dynamic_field("nested2", side_arg_dynamic_struct(&nested2
)),
368 side_event(my_provider_event_dynamic_nested_struct
,
369 side_arg_list(side_arg_dynamic_struct(&mystruct
)));
372 side_static_event(my_provider_event_dynamic_vla_struct
,
373 "myprovider", "mydynamicvlastruct", SIDE_LOGLEVEL_DEBUG
,
375 side_field_dynamic("dynamic"),
380 void test_dynamic_vla_struct(void)
382 side_arg_dynamic_define_struct(nested
,
384 side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
385 side_arg_dynamic_field("b", side_arg_dynamic_u8(55)),
388 side_arg_dynamic_define_vec(myvla
,
390 side_arg_dynamic_struct(&nested
),
391 side_arg_dynamic_struct(&nested
),
392 side_arg_dynamic_struct(&nested
),
393 side_arg_dynamic_struct(&nested
),
396 side_event(my_provider_event_dynamic_vla_struct
,
397 side_arg_list(side_arg_dynamic_vla(&myvla
)));
400 side_static_event(my_provider_event_dynamic_struct_vla
,
401 "myprovider", "mydynamicstructvla", SIDE_LOGLEVEL_DEBUG
,
403 side_field_dynamic("dynamic"),
408 void test_dynamic_struct_vla(void)
410 side_arg_dynamic_define_vec(myvla
,
412 side_arg_dynamic_u32(1),
413 side_arg_dynamic_u32(2),
414 side_arg_dynamic_u32(3),
417 side_arg_dynamic_define_vec(myvla2
,
419 side_arg_dynamic_u32(4),
420 side_arg_dynamic_u64(5),
421 side_arg_dynamic_u32(6),
424 side_arg_dynamic_define_struct(mystruct
,
426 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla
)),
427 side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2
)),
430 side_event(my_provider_event_dynamic_struct_vla
,
431 side_arg_list(side_arg_dynamic_struct(&mystruct
)));
434 side_static_event(my_provider_event_dynamic_nested_vla
,
435 "myprovider", "mydynamicnestedvla", SIDE_LOGLEVEL_DEBUG
,
437 side_field_dynamic("dynamic"),
442 void test_dynamic_nested_vla(void)
444 side_arg_dynamic_define_vec(nestedvla
,
446 side_arg_dynamic_u32(1),
447 side_arg_dynamic_u16(2),
448 side_arg_dynamic_u32(3),
451 side_arg_dynamic_define_vec(nestedvla2
,
453 side_arg_dynamic_u8(4),
454 side_arg_dynamic_u32(5),
455 side_arg_dynamic_u32(6),
458 side_arg_dynamic_define_vec(myvla
,
460 side_arg_dynamic_vla(&nestedvla
),
461 side_arg_dynamic_vla(&nestedvla2
),
464 side_event(my_provider_event_dynamic_nested_vla
,
465 side_arg_list(side_arg_dynamic_vla(&myvla
)));
468 side_static_event_variadic(my_provider_event_variadic
,
469 "myprovider", "myvariadicevent", SIDE_LOGLEVEL_DEBUG
,
474 void test_variadic(void)
476 side_event_variadic(my_provider_event_variadic
,
479 side_arg_dynamic_field("a", side_arg_dynamic_u32(55)),
480 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4)),
485 side_static_event_variadic(my_provider_event_static_variadic
,
486 "myprovider", "mystaticvariadicevent", SIDE_LOGLEVEL_DEBUG
,
488 side_field_u32("abc"),
489 side_field_u16("def"),
494 void test_static_variadic(void)
496 side_event_variadic(my_provider_event_static_variadic
,
502 side_arg_dynamic_field("a", side_arg_dynamic_u32(55)),
503 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4)),
508 side_static_event(my_provider_event_bool
, "myprovider", "myeventbool", SIDE_LOGLEVEL_DEBUG
,
510 side_field_bool("a_false"),
511 side_field_bool("b_true"),
512 side_field_bool("c_true"),
513 side_field_bool("d_true"),
514 side_field_bool("e_true"),
515 side_field_bool("f_false"),
516 side_field_bool("g_true"),
525 uint64_t c
= 0x12345678;
531 side_event(my_provider_event_bool
,
544 side_static_event_variadic(my_provider_event_dynamic_bool
,
545 "myprovider", "mydynamicbool", SIDE_LOGLEVEL_DEBUG
,
550 void test_dynamic_bool(void)
552 side_event_variadic(my_provider_event_dynamic_bool
,
555 side_arg_dynamic_field("a_true", side_arg_dynamic_bool(55)),
556 side_arg_dynamic_field("b_true", side_arg_dynamic_bool(-4)),
557 side_arg_dynamic_field("c_false", side_arg_dynamic_bool(0)),
558 side_arg_dynamic_field("d_true", side_arg_dynamic_bool(256)),
563 side_static_event(my_provider_event_dynamic_vla_visitor
,
564 "myprovider", "mydynamicvlavisitor", SIDE_LOGLEVEL_DEBUG
,
566 side_field_dynamic("dynamic"),
570 struct app_dynamic_vla_visitor_ctx
{
576 enum side_visitor_status
test_dynamic_vla_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
578 struct app_dynamic_vla_visitor_ctx
*ctx
= (struct app_dynamic_vla_visitor_ctx
*) _ctx
;
579 uint32_t length
= ctx
->length
, i
;
581 for (i
= 0; i
< length
; i
++) {
582 const struct side_arg elem
= side_arg_dynamic_u32(ctx
->ptr
[i
]);
583 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
584 return SIDE_VISITOR_STATUS_ERROR
;
586 return SIDE_VISITOR_STATUS_OK
;
589 static uint32_t testarray_dynamic_vla
[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
592 void test_dynamic_vla_with_visitor(void)
594 side_event_cond(my_provider_event_dynamic_vla_visitor
) {
595 struct app_dynamic_vla_visitor_ctx ctx
= {
596 .ptr
= testarray_dynamic_vla
,
597 .length
= SIDE_ARRAY_SIZE(testarray_dynamic_vla
),
599 side_event_call(my_provider_event_dynamic_vla_visitor
,
601 side_arg_dynamic_vla_visitor(test_dynamic_vla_visitor
, &ctx
)
607 side_static_event(my_provider_event_dynamic_struct_visitor
,
608 "myprovider", "mydynamicstructvisitor", SIDE_LOGLEVEL_DEBUG
,
610 side_field_dynamic("dynamic"),
614 struct struct_visitor_pair
{
619 struct app_dynamic_struct_visitor_ctx
{
620 const struct struct_visitor_pair
*ptr
;
625 enum side_visitor_status
test_dynamic_struct_visitor(const struct side_tracer_dynamic_struct_visitor_ctx
*tracer_ctx
, void *_ctx
)
627 struct app_dynamic_struct_visitor_ctx
*ctx
= (struct app_dynamic_struct_visitor_ctx
*) _ctx
;
628 uint32_t length
= ctx
->length
, i
;
630 for (i
= 0; i
< length
; i
++) {
631 struct side_arg_dynamic_field dynamic_field
= {
632 .field_name
= ctx
->ptr
[i
].name
,
633 .elem
= side_arg_dynamic_u32(ctx
->ptr
[i
].value
),
635 if (tracer_ctx
->write_field(tracer_ctx
, &dynamic_field
) != SIDE_VISITOR_STATUS_OK
)
636 return SIDE_VISITOR_STATUS_ERROR
;
638 return SIDE_VISITOR_STATUS_OK
;
641 static struct struct_visitor_pair testarray_dynamic_struct
[] = {
649 void test_dynamic_struct_with_visitor(void)
651 side_event_cond(my_provider_event_dynamic_struct_visitor
) {
652 struct app_dynamic_struct_visitor_ctx ctx
= {
653 .ptr
= testarray_dynamic_struct
,
654 .length
= SIDE_ARRAY_SIZE(testarray_dynamic_struct
),
656 side_event_call(my_provider_event_dynamic_struct_visitor
,
658 side_arg_dynamic_struct_visitor(test_dynamic_struct_visitor
, &ctx
)
664 side_static_event(my_provider_event_user_attribute
, "myprovider", "myevent_user_attribute", SIDE_LOGLEVEL_DEBUG
,
666 side_field_u32("abc"),
667 side_field_s64("def"),
670 side_attr("user_attribute_a", side_attr_string("val1")),
671 side_attr("user_attribute_b", side_attr_string("val2")),
676 void test_event_user_attribute(void)
678 side_event(my_provider_event_user_attribute
, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
681 side_static_event(my_provider_field_user_attribute
, "myprovider", "myevent_field_attribute", SIDE_LOGLEVEL_DEBUG
,
683 side_field_u32("abc",
685 side_attr("user_attribute_a", side_attr_string("val1")),
686 side_attr("user_attribute_b", side_attr_u32(2)),
689 side_field_s64("def",
691 side_attr("user_attribute_c", side_attr_string("val3")),
692 side_attr("user_attribute_d", side_attr_s64(-5)),
699 void test_field_user_attribute(void)
701 side_event(my_provider_field_user_attribute
, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
704 side_static_event_variadic(my_provider_event_variadic_attr
,
705 "myprovider", "myvariadiceventattr", SIDE_LOGLEVEL_DEBUG
,
710 void test_variadic_attr(void)
712 side_event_variadic(my_provider_event_variadic_attr
,
715 side_arg_dynamic_field("a",
716 side_arg_dynamic_u32(55,
718 side_attr("user_attribute_c", side_attr_string("valX")),
719 side_attr("user_attribute_d", side_attr_u8(55)),
723 side_arg_dynamic_field("b",
724 side_arg_dynamic_s8(-4,
726 side_attr("X", side_attr_u8(1)),
727 side_attr("Y", side_attr_s8(2)),
735 side_static_event_variadic(my_provider_event_variadic_vla_attr
,
736 "myprovider", "myvariadiceventvlaattr", SIDE_LOGLEVEL_DEBUG
,
741 void test_variadic_vla_attr(void)
743 side_arg_dynamic_define_vec(myvla
,
745 side_arg_dynamic_u32(1,
747 side_attr("Z", side_attr_u8(0)),
748 side_attr("A", side_attr_u8(123)),
751 side_arg_dynamic_u32(2),
752 side_arg_dynamic_u32(3),
755 side_attr("X", side_attr_u8(1)),
756 side_attr("Y", side_attr_u8(2)),
759 side_event_variadic(my_provider_event_variadic_vla_attr
,
762 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla
)),
767 side_static_event_variadic(my_provider_event_variadic_struct_attr
,
768 "myprovider", "myvariadiceventstructattr", SIDE_LOGLEVEL_DEBUG
,
773 void test_variadic_struct_attr(void)
775 side_event_cond(my_provider_event_variadic_struct_attr
) {
776 side_arg_dynamic_define_struct(mystruct
,
778 side_arg_dynamic_field("a",
779 side_arg_dynamic_u32(43,
781 side_attr("A", side_attr_bool(true)),
785 side_arg_dynamic_field("b", side_arg_dynamic_u8(55)),
788 side_attr("X", side_attr_u8(1)),
789 side_attr("Y", side_attr_u8(2)),
792 side_event_call_variadic(my_provider_event_variadic_struct_attr
,
795 side_arg_dynamic_field("a", side_arg_dynamic_struct(&mystruct
)),
801 side_static_event(my_provider_event_float
, "myprovider", "myeventfloat", SIDE_LOGLEVEL_DEBUG
,
804 side_field_float_binary16("binary16"),
805 side_field_float_binary16_le("binary16_le"),
806 side_field_float_binary16_be("binary16_be"),
809 side_field_float_binary32("binary32"),
810 side_field_float_binary32_le("binary32_le"),
811 side_field_float_binary32_be("binary32_be"),
814 side_field_float_binary64("binary64"),
815 side_field_float_binary64_le("binary64_le"),
816 side_field_float_binary64_be("binary64_be"),
819 side_field_float_binary128("binary128"),
820 side_field_float_binary128_le("binary128_le"),
821 side_field_float_binary128_be("binary128_be"),
827 void test_float(void)
863 float16
.u
= side_bswap_16(float16
.u
);
866 float32
.u
= side_bswap_32(float32
.u
);
869 float64
.u
= side_bswap_64(float64
.u
);
872 side_bswap_128p(float128
.arr
);
875 side_event(my_provider_event_float
,
878 side_arg_float_binary16(1.1),
879 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
880 side_arg_float_binary16(1.1),
881 side_arg_float_binary16(float16
.f
),
883 side_arg_float_binary16(float16
.f
),
884 side_arg_float_binary16(1.1),
888 side_arg_float_binary32(2.2),
889 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
890 side_arg_float_binary32(2.2),
891 side_arg_float_binary32(float32
.f
),
893 side_arg_float_binary32(float32
.f
),
894 side_arg_float_binary32(2.2),
898 side_arg_float_binary64(3.3),
899 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
900 side_arg_float_binary64(3.3),
901 side_arg_float_binary64(float64
.f
),
903 side_arg_float_binary64(float64
.f
),
904 side_arg_float_binary64(3.3),
908 side_arg_float_binary128(4.4),
909 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
910 side_arg_float_binary128(4.4),
911 side_arg_float_binary128(float128
.f
),
913 side_arg_float_binary128(float128
.f
),
914 side_arg_float_binary128(4.4),
921 side_static_event_variadic(my_provider_event_variadic_float
,
922 "myprovider", "myvariadicfloat", SIDE_LOGLEVEL_DEBUG
,
927 void test_variadic_float(void)
963 float16
.u
= side_bswap_16(float16
.u
);
966 float32
.u
= side_bswap_32(float32
.u
);
969 float64
.u
= side_bswap_64(float64
.u
);
972 side_bswap_128p(float128
.arr
);
975 side_event_variadic(my_provider_event_variadic_float
,
979 side_arg_dynamic_field("binary16", side_arg_dynamic_float_binary16(1.1)),
980 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
981 side_arg_dynamic_field("binary16_le", side_arg_dynamic_float_binary16_le(1.1)),
982 side_arg_dynamic_field("binary16_be", side_arg_dynamic_float_binary16_be(float16
.f
)),
984 side_arg_dynamic_field("binary16_le", side_arg_dynamic_float_binary16_le(float16
.f
)),
985 side_arg_dynamic_field("binary16_be", side_arg_dynamic_float_binary16_be(1.1)),
989 side_arg_dynamic_field("binary32", side_arg_dynamic_float_binary32(2.2)),
990 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
991 side_arg_dynamic_field("binary32_le", side_arg_dynamic_float_binary32_le(2.2)),
992 side_arg_dynamic_field("binary32_be", side_arg_dynamic_float_binary32_be(float32
.f
)),
994 side_arg_dynamic_field("binary32_le", side_arg_dynamic_float_binary32_le(float32
.f
)),
995 side_arg_dynamic_field("binary32_be", side_arg_dynamic_float_binary32_be(2.2)),
999 side_arg_dynamic_field("binary64", side_arg_dynamic_float_binary64(3.3)),
1000 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
1001 side_arg_dynamic_field("binary64_le", side_arg_dynamic_float_binary64_le(3.3)),
1002 side_arg_dynamic_field("binary64_be", side_arg_dynamic_float_binary64_be(float64
.f
)),
1004 side_arg_dynamic_field("binary64_le", side_arg_dynamic_float_binary64_le(float64
.f
)),
1005 side_arg_dynamic_field("binary64_be", side_arg_dynamic_float_binary64_be(3.3)),
1009 side_arg_dynamic_field("binary128", side_arg_dynamic_float_binary128(4.4)),
1010 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
1011 side_arg_dynamic_field("binary128_le", side_arg_dynamic_float_binary128_le(4.4)),
1012 side_arg_dynamic_field("binary128_be", side_arg_dynamic_float_binary128_be(float128
.f
)),
1014 side_arg_dynamic_field("binary128_le", side_arg_dynamic_float_binary128_le(float128
.f
)),
1015 side_arg_dynamic_field("binary128_be", side_arg_dynamic_float_binary128_be(4.4)),
1022 static side_define_enum(myenum
,
1023 side_enum_mapping_list(
1024 side_enum_mapping_range("one-ten", 1, 10),
1025 side_enum_mapping_range("100-200", 100, 200),
1026 side_enum_mapping_value("200", 200),
1027 side_enum_mapping_value("300", 300),
1031 side_static_event(my_provider_event_enum
, "myprovider", "myeventenum", SIDE_LOGLEVEL_DEBUG
,
1033 side_field_enum("5", &myenum
, side_elem(side_type_u32())),
1034 side_field_enum("400", &myenum
, side_elem(side_type_u64())),
1035 side_field_enum("200", &myenum
, side_elem(side_type_u8())),
1036 side_field_enum("-100", &myenum
, side_elem(side_type_s8())),
1037 side_field_enum("6_be", &myenum
, side_elem(side_type_u32_be())),
1038 side_field_enum("6_le", &myenum
, side_elem(side_type_u32_le())),
1043 void test_enum(void)
1045 side_event(my_provider_event_enum
,
1051 #if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1052 side_arg_u32(side_bswap_32(6)),
1056 side_arg_u32(side_bswap_32(6)),
1062 /* A bitmap enum maps bits to labels. */
1063 static side_define_enum_bitmap(myenum_bitmap
,
1064 side_enum_bitmap_mapping_list(
1065 side_enum_bitmap_mapping_value("0", 0),
1066 side_enum_bitmap_mapping_range("1-2", 1, 2),
1067 side_enum_bitmap_mapping_range("2-4", 2, 4),
1068 side_enum_bitmap_mapping_value("3", 3),
1069 side_enum_bitmap_mapping_value("30", 30),
1070 side_enum_bitmap_mapping_value("63", 63),
1071 side_enum_bitmap_mapping_range("158-160", 158, 160),
1072 side_enum_bitmap_mapping_value("159", 159),
1073 side_enum_bitmap_mapping_range("500-700", 500, 700),
1077 side_static_event(my_provider_event_enum_bitmap
, "myprovider", "myeventenumbitmap", SIDE_LOGLEVEL_DEBUG
,
1079 side_field_enum_bitmap("bit_0", &myenum_bitmap
, side_elem(side_type_u32())),
1080 side_field_enum_bitmap("bit_1", &myenum_bitmap
, side_elem(side_type_u32())),
1081 side_field_enum_bitmap("bit_2", &myenum_bitmap
, side_elem(side_type_u8())),
1082 side_field_enum_bitmap("bit_3", &myenum_bitmap
, side_elem(side_type_u8())),
1083 side_field_enum_bitmap("bit_30", &myenum_bitmap
, side_elem(side_type_u32())),
1084 side_field_enum_bitmap("bit_31", &myenum_bitmap
, side_elem(side_type_u32())),
1085 side_field_enum_bitmap("bit_63", &myenum_bitmap
, side_elem(side_type_u64())),
1086 side_field_enum_bitmap("bits_1+63", &myenum_bitmap
, side_elem(side_type_u64())),
1087 side_field_enum_bitmap("byte_bit_2", &myenum_bitmap
, side_elem(side_type_byte())),
1088 side_field_enum_bitmap("bit_159", &myenum_bitmap
,
1089 side_elem(side_type_array(side_elem(side_type_u32()), 5))),
1090 side_field_enum_bitmap("bit_159", &myenum_bitmap
,
1091 side_elem(side_type_vla(side_elem(side_type_u32())))),
1092 side_field_enum_bitmap("bit_2_be", &myenum_bitmap
, side_elem(side_type_u32_be())),
1093 side_field_enum_bitmap("bit_2_le", &myenum_bitmap
, side_elem(side_type_u32_le())),
1098 void test_enum_bitmap(void)
1100 side_event_cond(my_provider_event_enum_bitmap
) {
1101 side_arg_define_vec(myarray
,
1107 side_arg_u32(0x80000000), /* bit 159 */
1110 side_event_call(my_provider_event_enum_bitmap
,
1112 side_arg_u32(1U << 0),
1113 side_arg_u32(1U << 1),
1114 side_arg_u8(1U << 2),
1115 side_arg_u8(1U << 3),
1116 side_arg_u32(1U << 30),
1117 side_arg_u32(1U << 31),
1118 side_arg_u64(1ULL << 63),
1119 side_arg_u64((1ULL << 1) | (1ULL << 63)),
1120 side_arg_byte(1U << 2),
1121 side_arg_array(&myarray
),
1122 side_arg_vla(&myarray
),
1123 #if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1124 side_arg_u32(side_bswap_32(1U << 2)),
1125 side_arg_u32(1U << 2),
1127 side_arg_u32(1U << 2),
1128 side_arg_u32(side_bswap_32(1U << 2)),
1135 side_static_event_variadic(my_provider_event_blob
, "myprovider", "myeventblob", SIDE_LOGLEVEL_DEBUG
,
1137 side_field_byte("blobfield"),
1138 side_field_array("arrayblob", side_elem(side_type_byte()), 3),
1143 void test_blob(void)
1145 side_event_cond(my_provider_event_blob
) {
1146 side_arg_define_vec(myarray
, side_arg_list(side_arg_byte(1), side_arg_byte(2), side_arg_byte(3)));
1147 side_arg_dynamic_define_vec(myvla
,
1149 side_arg_dynamic_byte(0x22),
1150 side_arg_dynamic_byte(0x33),
1153 side_event_call_variadic(my_provider_event_blob
,
1155 side_arg_byte(0x55),
1156 side_arg_array(&myarray
),
1159 side_arg_dynamic_field("varblobfield",
1160 side_arg_dynamic_byte(0x55)
1162 side_arg_dynamic_field("varblobvla", side_arg_dynamic_vla(&myvla
)),
1168 side_static_event_variadic(my_provider_event_format_string
,
1169 "myprovider", "myeventformatstring", SIDE_LOGLEVEL_DEBUG
,
1171 side_field_string("fmt"),
1174 side_attr("lang.c.format_string", side_attr_bool(true)),
1179 void test_fmt_string(void)
1181 side_event_cond(my_provider_event_format_string
) {
1182 side_arg_dynamic_define_vec(args
,
1184 side_arg_dynamic_string("blah"),
1185 side_arg_dynamic_s32(123),
1188 side_event_call_variadic(my_provider_event_format_string
,
1190 side_arg_string("This is a formatted string with str: %s int: %d"),
1193 side_arg_dynamic_field("arguments", side_arg_dynamic_vla(&args
)),
1199 side_static_event_variadic(my_provider_event_endian
, "myprovider", "myevent_endian", SIDE_LOGLEVEL_DEBUG
,
1201 side_field_u16_le("u16_le"),
1202 side_field_u32_le("u32_le"),
1203 side_field_u64_le("u64_le"),
1204 side_field_s16_le("s16_le"),
1205 side_field_s32_le("s32_le"),
1206 side_field_s64_le("s64_le"),
1207 side_field_u16_be("u16_be"),
1208 side_field_u32_be("u32_be"),
1209 side_field_u64_be("u64_be"),
1210 side_field_s16_be("s16_be"),
1211 side_field_s32_be("s32_be"),
1212 side_field_s64_be("s64_be"),
1217 void test_endian(void)
1219 side_event_variadic(my_provider_event_endian
,
1221 #if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1228 side_arg_u16(side_bswap_16(1)),
1229 side_arg_u32(side_bswap_32(1)),
1230 side_arg_u64(side_bswap_64(1)),
1231 side_arg_s16(side_bswap_16(1)),
1232 side_arg_s32(side_bswap_32(1)),
1233 side_arg_s64(side_bswap_64(1)),
1235 side_arg_u16(side_bswap_16(1)),
1236 side_arg_u32(side_bswap_32(1)),
1237 side_arg_u64(side_bswap_64(1)),
1238 side_arg_s16(side_bswap_16(1)),
1239 side_arg_s32(side_bswap_32(1)),
1240 side_arg_s64(side_bswap_64(1)),
1250 #if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1251 side_arg_dynamic_field("u16_le", side_arg_dynamic_u16_le(1)),
1252 side_arg_dynamic_field("u32_le", side_arg_dynamic_u32_le(1)),
1253 side_arg_dynamic_field("u64_le", side_arg_dynamic_u64_le(1)),
1254 side_arg_dynamic_field("s16_le", side_arg_dynamic_s16_le(1)),
1255 side_arg_dynamic_field("s32_le", side_arg_dynamic_s32_le(1)),
1256 side_arg_dynamic_field("s64_le", side_arg_dynamic_s64_le(1)),
1257 side_arg_dynamic_field("u16_be", side_arg_dynamic_u16_be(side_bswap_16(1))),
1258 side_arg_dynamic_field("u32_be", side_arg_dynamic_u32_be(side_bswap_32(1))),
1259 side_arg_dynamic_field("u64_be", side_arg_dynamic_u64_be(side_bswap_64(1))),
1260 side_arg_dynamic_field("s16_be", side_arg_dynamic_s16_be(side_bswap_16(1))),
1261 side_arg_dynamic_field("s32_be", side_arg_dynamic_s32_be(side_bswap_32(1))),
1262 side_arg_dynamic_field("s64_be", side_arg_dynamic_s64_be(side_bswap_64(1))),
1264 side_arg_dynamic_field("u16_le", side_arg_dynamic_u16_le(side_bswap_16(1))),
1265 side_arg_dynamic_field("u32_le", side_arg_dynamic_u32_le(side_bswap_32(1))),
1266 side_arg_dynamic_field("u64_le", side_arg_dynamic_u64_le(side_bswap_64(1))),
1267 side_arg_dynamic_field("s16_le", side_arg_dynamic_s16_le(side_bswap_16(1))),
1268 side_arg_dynamic_field("s32_le", side_arg_dynamic_s32_le(side_bswap_32(1))),
1269 side_arg_dynamic_field("s64_le", side_arg_dynamic_s64_le(side_bswap_64(1))),
1270 side_arg_dynamic_field("u16_be", side_arg_dynamic_u16_be(1)),
1271 side_arg_dynamic_field("u32_be", side_arg_dynamic_u32_be(1)),
1272 side_arg_dynamic_field("u64_be", side_arg_dynamic_u64_be(1)),
1273 side_arg_dynamic_field("s16_be", side_arg_dynamic_s16_be(1)),
1274 side_arg_dynamic_field("s32_be", side_arg_dynamic_s32_be(1)),
1275 side_arg_dynamic_field("s64_be", side_arg_dynamic_s64_be(1)),
1281 side_static_event(my_provider_event_base
, "myprovider", "myevent_base", SIDE_LOGLEVEL_DEBUG
,
1283 side_field_u8("u8base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1284 side_field_u8("u8base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1285 side_field_u8("u8base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1286 side_field_u8("u8base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1287 side_field_u16("u16base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1288 side_field_u16("u16base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1289 side_field_u16("u16base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1290 side_field_u16("u16base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1291 side_field_u32("u32base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1292 side_field_u32("u32base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1293 side_field_u32("u32base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1294 side_field_u32("u32base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1295 side_field_u64("u64base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1296 side_field_u64("u64base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1297 side_field_u64("u64base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1298 side_field_u64("u64base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1299 side_field_s8("s8base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1300 side_field_s8("s8base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1301 side_field_s8("s8base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1302 side_field_s8("s8base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1303 side_field_s16("s16base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1304 side_field_s16("s16base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1305 side_field_s16("s16base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1306 side_field_s16("s16base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1307 side_field_s32("s32base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1308 side_field_s32("s32base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1309 side_field_s32("s32base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1310 side_field_s32("s32base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1311 side_field_s64("s64base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1312 side_field_s64("s64base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1313 side_field_s64("s64base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1314 side_field_s64("s64base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1319 void test_base(void)
1321 side_event(my_provider_event_base
,
1374 static side_define_struct(mystructgatherdef
,
1376 side_field_gather_unsigned_integer("a", offsetof(struct test
, a
),
1377 side_struct_field_sizeof(struct test
, a
), 0, 0,
1378 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1379 side_field_gather_signed_integer("d", offsetof(struct test
, d
),
1380 side_struct_field_sizeof(struct test
, d
), 0, 0,
1381 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1382 side_field_gather_unsigned_integer("e", offsetof(struct test
, e
),
1383 side_struct_field_sizeof(struct test
, e
), 8, 4,
1384 SIDE_TYPE_GATHER_ACCESS_DIRECT
, side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1385 side_field_gather_signed_integer("f", offsetof(struct test
, f
),
1386 side_struct_field_sizeof(struct test
, f
), 1, 4,
1387 SIDE_TYPE_GATHER_ACCESS_DIRECT
, side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1388 side_field_gather_signed_integer("g", offsetof(struct test
, g
),
1389 side_struct_field_sizeof(struct test
, g
), 11, 4,
1390 SIDE_TYPE_GATHER_ACCESS_DIRECT
, side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1391 side_field_gather_signed_integer("h", offsetof(struct test
, h
),
1392 side_struct_field_sizeof(struct test
, h
), 1, 31,
1393 SIDE_TYPE_GATHER_ACCESS_DIRECT
, side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1394 side_field_gather_signed_integer("i", offsetof(struct test
, i
),
1395 side_struct_field_sizeof(struct test
, i
), 33, 20,
1396 SIDE_TYPE_GATHER_ACCESS_DIRECT
, side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1397 side_field_gather_signed_integer("j", offsetof(struct test
, j
),
1398 side_struct_field_sizeof(struct test
, j
), 63, 1,
1399 SIDE_TYPE_GATHER_ACCESS_DIRECT
, side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1400 side_field_gather_signed_integer("k", offsetof(struct test
, k
),
1401 side_struct_field_sizeof(struct test
, k
), 1, 63,
1402 SIDE_TYPE_GATHER_ACCESS_DIRECT
, side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1403 side_field_gather_unsigned_integer_le("test", offsetof(struct test
, test
),
1404 side_struct_field_sizeof(struct test
, test
), 0, 64,
1405 SIDE_TYPE_GATHER_ACCESS_DIRECT
, side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1406 side_field_gather_unsigned_integer_le("test_le", offsetof(struct test
, test
),
1407 side_struct_field_sizeof(struct test
, test
), 0, 64,
1408 SIDE_TYPE_GATHER_ACCESS_DIRECT
, side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1409 side_field_gather_unsigned_integer_be("test_be", offsetof(struct test
, test
),
1410 side_struct_field_sizeof(struct test
, test
), 0, 64,
1411 SIDE_TYPE_GATHER_ACCESS_DIRECT
, side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1415 side_static_event(my_provider_event_structgather
, "myprovider", "myeventstructgather", SIDE_LOGLEVEL_DEBUG
,
1417 side_field_gather_struct("structgather", &mystructgatherdef
, 0, sizeof(struct test
),
1418 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1419 side_field_gather_signed_integer("intgather", 0, sizeof(int32_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
,
1420 side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1422 side_field_gather_float("f32", 0, sizeof(_Float32
), SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1428 void test_struct_gather(void)
1430 side_event_cond(my_provider_event_structgather
) {
1431 struct test mystruct
= {
1449 side_event_call(my_provider_event_structgather
,
1451 side_arg_gather_struct(&mystruct
),
1452 side_arg_gather_integer(&val
),
1454 side_arg_gather_float(&f32
),
1467 struct testnest2
*nest
;
1472 struct testnest1
*nest
;
1475 static side_define_struct(mystructgathernest2
,
1477 side_field_gather_unsigned_integer("c", offsetof(struct testnest2
, c
),
1478 side_struct_field_sizeof(struct testnest2
, c
), 0, 0,
1479 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1483 static side_define_struct(mystructgathernest1
,
1485 side_field_gather_unsigned_integer("b", offsetof(struct testnest1
, b
),
1486 side_struct_field_sizeof(struct testnest1
, b
), 0, 0,
1487 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1488 side_field_gather_struct("nest2", &mystructgathernest2
,
1489 offsetof(struct testnest1
, nest
), sizeof(struct testnest2
),
1490 SIDE_TYPE_GATHER_ACCESS_POINTER
),
1494 static side_define_struct(mystructgathernest0
,
1496 side_field_gather_unsigned_integer("a", offsetof(struct testnest0
, a
),
1497 side_struct_field_sizeof(struct testnest0
, a
), 0, 0,
1498 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1499 side_field_gather_struct("nest1", &mystructgathernest1
,
1500 offsetof(struct testnest0
, nest
), sizeof(struct testnest1
),
1501 SIDE_TYPE_GATHER_ACCESS_POINTER
),
1505 side_static_event(my_provider_event_structgather_nest
,
1506 "myprovider", "myeventstructgathernest", SIDE_LOGLEVEL_DEBUG
,
1508 side_field_gather_struct("nest0", &mystructgathernest0
, 0,
1509 sizeof(struct testnest0
), SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1514 void test_struct_gather_nest_ptr(void)
1516 side_event_cond(my_provider_event_structgather_nest
) {
1517 struct testnest2 mystruct2
= {
1520 struct testnest1 mystruct1
= {
1524 struct testnest0 mystruct
= {
1528 side_event_call(my_provider_event_structgather_nest
,
1530 side_arg_gather_struct(&mystruct
),
1551 static side_define_struct(mystructgatherfloat
,
1554 side_field_gather_float("f16", offsetof(struct testfloat
, f16
), side_struct_field_sizeof(struct testfloat
, f16
),
1555 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1558 side_field_gather_float("f32", offsetof(struct testfloat
, f32
), side_struct_field_sizeof(struct testfloat
, f32
),
1559 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1562 side_field_gather_float("f64", offsetof(struct testfloat
, f64
), side_struct_field_sizeof(struct testfloat
, f64
),
1563 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1566 side_field_gather_float("f128", offsetof(struct testfloat
, f128
), side_struct_field_sizeof(struct testfloat
, f128
),
1567 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1572 side_static_event(my_provider_event_structgatherfloat
,
1573 "myprovider", "myeventstructgatherfloat", SIDE_LOGLEVEL_DEBUG
,
1575 side_field_gather_struct("structgatherfloat", &mystructgatherfloat
, 0,
1576 sizeof(struct testfloat
), SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1581 void test_struct_gather_float(void)
1583 side_event_cond(my_provider_event_structgatherfloat
) {
1584 struct testfloat mystruct
= {
1598 side_event_call(my_provider_event_structgatherfloat
,
1600 side_arg_gather_struct(&mystruct
),
1606 uint32_t mygatherarray
[] = { 1, 2, 3, 4, 5 };
1608 uint16_t mygatherarray2
[] = { 6, 7, 8, 9 };
1615 static side_define_struct(mystructgatherarray
,
1617 side_field_gather_array("array",
1618 side_elem(side_type_gather_unsigned_integer(0, sizeof(uint32_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
)),
1619 SIDE_ARRAY_SIZE(mygatherarray
),
1620 offsetof(struct testarray
, ptr
),
1621 SIDE_TYPE_GATHER_ACCESS_POINTER
1626 side_static_event(my_provider_event_structgatherarray
,
1627 "myprovider", "myeventstructgatherarray", SIDE_LOGLEVEL_DEBUG
,
1629 side_field_gather_struct("structgatherarray", &mystructgatherarray
, 0,
1630 sizeof(struct testarray
), SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1631 side_field_gather_array("array2",
1632 side_elem(side_type_gather_unsigned_integer(0, sizeof(uint16_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
)),
1633 SIDE_ARRAY_SIZE(mygatherarray2
), 0,
1634 SIDE_TYPE_GATHER_ACCESS_DIRECT
1640 void test_array_gather(void)
1642 side_event_cond(my_provider_event_structgatherarray
) {
1643 struct testarray mystruct
= {
1645 .ptr
= mygatherarray
,
1647 side_event_call(my_provider_event_structgatherarray
,
1649 side_arg_gather_struct(&mystruct
),
1650 side_arg_gather_array(&mygatherarray2
),
1656 #define TESTSGNESTARRAY_LEN 4
1657 struct testgatherstructnest1
{
1659 int c
[TESTSGNESTARRAY_LEN
];
1662 struct testgatherstructnest0
{
1663 struct testgatherstructnest1 nest
;
1664 struct testgatherstructnest1 nestarray
[2];
1668 static side_define_struct(mystructgatherstructnest1
,
1670 side_field_gather_signed_integer("b", offsetof(struct testgatherstructnest1
, b
),
1671 side_struct_field_sizeof(struct testgatherstructnest1
, b
), 0, 0,
1672 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1673 side_field_gather_array("c",
1675 side_type_gather_signed_integer(0, sizeof(uint32_t), 0, 0,
1676 SIDE_TYPE_GATHER_ACCESS_DIRECT
)
1678 TESTSGNESTARRAY_LEN
,
1679 offsetof(struct testgatherstructnest1
, c
),
1680 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1684 static side_define_struct(mystructgatherstructnest0
,
1686 side_field_gather_signed_integer("a", offsetof(struct testgatherstructnest0
, a
),
1687 side_struct_field_sizeof(struct testgatherstructnest0
, a
), 0, 0,
1688 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1689 side_field_gather_struct("structnest0", &mystructgatherstructnest1
,
1690 offsetof(struct testgatherstructnest0
, nest
),
1691 sizeof(struct testgatherstructnest1
),
1692 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1693 side_field_gather_array("nestarray",
1695 side_type_gather_struct(&mystructgatherstructnest1
,
1697 sizeof(struct testgatherstructnest1
),
1698 SIDE_TYPE_GATHER_ACCESS_DIRECT
)
1701 offsetof(struct testgatherstructnest0
, nestarray
),
1702 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1706 side_static_event(my_provider_event_gatherstructnest
,
1707 "myprovider", "myeventgatherstructnest", SIDE_LOGLEVEL_DEBUG
,
1709 side_field_gather_struct("structgather", &mystructgatherstructnest0
, 0,
1710 sizeof(struct testgatherstructnest0
), SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1715 void test_gather_structnest(void)
1717 side_event_cond(my_provider_event_gatherstructnest
) {
1718 struct testgatherstructnest0 mystruct
= {
1721 .c
= { 0, 1, 2, 3 },
1726 .c
= { 11, 12, 13, 14 },
1730 .c
= { 15, 16, 17, 18 },
1735 side_event_call(my_provider_event_gatherstructnest
,
1737 side_arg_gather_struct(&mystruct
),
1743 uint32_t gathervla
[] = { 1, 2, 3, 4 };
1744 uint32_t gathervla2
[] = { 5, 6, 7, 8, 9 };
1746 struct testgathervla
{
1752 static side_define_struct(mystructgathervla
,
1754 side_field_gather_signed_integer("a", offsetof(struct testgathervla
, a
),
1755 side_struct_field_sizeof(struct testgathervla
, a
), 0, 0,
1756 SIDE_TYPE_GATHER_ACCESS_DIRECT
1758 side_field_gather_vla("nestvla",
1759 side_elem(side_type_gather_unsigned_integer(0, sizeof(uint32_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
)),
1760 offsetof(struct testgathervla
, p
),
1761 SIDE_TYPE_GATHER_ACCESS_POINTER
,
1762 side_length(side_type_gather_unsigned_integer(offsetof(struct testgathervla
, len
),
1763 sizeof(uint16_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
))
1768 side_static_event(my_provider_event_gathervla
,
1769 "myprovider", "myeventgathervla", SIDE_LOGLEVEL_DEBUG
,
1771 side_field_gather_struct("structgathervla", &mystructgathervla
, 0,
1772 sizeof(struct testgathervla
), SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1773 side_field_gather_vla("vla",
1774 side_elem(side_type_gather_unsigned_integer(0, sizeof(uint32_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
)),
1775 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
,
1776 side_length(side_type_gather_unsigned_integer(0, sizeof(uint16_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
))
1782 void test_gather_vla(void)
1784 side_event_cond(my_provider_event_gathervla
) {
1785 struct testgathervla mystruct
= {
1787 .len
= SIDE_ARRAY_SIZE(gathervla
),
1790 uint16_t vla2_len
= 5;
1791 side_event_call(my_provider_event_gathervla
,
1793 side_arg_gather_struct(&mystruct
),
1794 side_arg_gather_vla(gathervla2
, &vla2_len
),
1800 struct testgathervlaflex
{
1802 uint32_t otherfield
;
1806 static side_define_struct(mystructgathervlaflex
,
1808 side_field_gather_vla("vlaflex",
1809 side_elem(side_type_gather_unsigned_integer(0, sizeof(uint64_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
)),
1810 offsetof(struct testgathervlaflex
, array
),
1811 SIDE_TYPE_GATHER_ACCESS_DIRECT
,
1812 side_length(side_type_gather_unsigned_integer(offsetof(struct testgathervlaflex
, len
),
1813 side_struct_field_sizeof(struct testgathervlaflex
, len
), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
))
1818 side_static_event(my_provider_event_gathervlaflex
,
1819 "myprovider", "myeventgathervlaflex", SIDE_LOGLEVEL_DEBUG
,
1821 side_field_gather_struct("structgathervlaflex", &mystructgathervlaflex
, 0,
1822 sizeof(struct testgathervlaflex
), SIDE_TYPE_GATHER_ACCESS_DIRECT
)
1826 #define VLAFLEXLEN 6
1828 void test_gather_vla_flex(void)
1830 side_event_cond(my_provider_event_gathervlaflex
) {
1831 struct testgathervlaflex
*mystruct
=
1832 (struct testgathervlaflex
*) malloc(sizeof(*mystruct
) + VLAFLEXLEN
* sizeof(uint64_t));
1834 mystruct
->len
= VLAFLEXLEN
;
1835 mystruct
->otherfield
= 0;
1836 mystruct
->array
[0] = 1;
1837 mystruct
->array
[1] = 2;
1838 mystruct
->array
[2] = 3;
1839 mystruct
->array
[3] = 4;
1840 mystruct
->array
[4] = 5;
1841 mystruct
->array
[5] = 6;
1842 side_event_call(my_provider_event_gathervlaflex
,
1844 side_arg_gather_struct(mystruct
),
1851 side_static_event(my_provider_event_gatherbyte
,
1852 "myprovider", "myeventgatherbyte", SIDE_LOGLEVEL_DEBUG
,
1854 side_field_gather_byte("byte", 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1855 side_field_gather_array("array",
1856 side_elem(side_type_gather_byte(0, SIDE_TYPE_GATHER_ACCESS_DIRECT
)),
1857 3, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
1863 void test_gather_byte(void)
1865 side_event_cond(my_provider_event_gatherbyte
) {
1867 uint8_t array
[3] = { 0x1, 0x2, 0x3 };
1869 side_event_call(my_provider_event_gatherbyte
,
1871 side_arg_gather_byte(&v
),
1872 side_arg_gather_array(array
),
1878 #define ARRAYBOOLLEN 4
1879 static bool arraybool
[ARRAYBOOLLEN
] = { false, true, false, true };
1881 side_static_event(my_provider_event_gatherbool
,
1882 "myprovider", "myeventgatherbool", SIDE_LOGLEVEL_DEBUG
,
1884 side_field_gather_bool("v1_true", 0, sizeof(bool), 0, 0,
1885 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1886 side_field_gather_bool("v2_false", 0, sizeof(bool), 0, 0,
1887 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1888 side_field_gather_bool("v3_true", 0, sizeof(uint16_t), 1, 1,
1889 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1890 side_field_gather_bool("v4_false", 0, sizeof(uint16_t), 1, 1,
1891 SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1892 side_field_gather_array("arraybool",
1893 side_elem(side_type_gather_bool(0, sizeof(bool), 0, 0,
1894 SIDE_TYPE_GATHER_ACCESS_DIRECT
)),
1895 ARRAYBOOLLEN
, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
1901 void test_gather_bool(void)
1903 side_event_cond(my_provider_event_structgatherarray
) {
1906 uint16_t v3
= 1U << 1;
1907 uint16_t v4
= 1U << 2;
1909 side_event_call(my_provider_event_gatherbool
,
1911 side_arg_gather_bool(&v1
),
1912 side_arg_gather_bool(&v2
),
1913 side_arg_gather_bool(&v3
),
1914 side_arg_gather_bool(&v4
),
1915 side_arg_gather_array(arraybool
),
1921 side_static_event(my_provider_event_gatherpointer
,
1922 "myprovider", "myeventgatherpointer", SIDE_LOGLEVEL_DEBUG
,
1924 side_field_gather_pointer("ptr", 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
),
1925 side_field_gather_array("array",
1926 side_elem(side_type_gather_pointer(0, SIDE_TYPE_GATHER_ACCESS_DIRECT
)),
1927 3, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
1933 void test_gather_pointer(void)
1935 side_event_cond(my_provider_event_structgatherarray
) {
1936 void *v
= (void *)0x44;
1937 void *array
[3] = { (void *)0x1, (void *)0x2, (void *)0x3 };
1939 side_event_call(my_provider_event_gatherpointer
,
1941 side_arg_gather_pointer(&v
),
1942 side_arg_gather_array(array
),
1948 static side_define_enum(myenumgather
,
1949 side_enum_mapping_list(
1950 side_enum_mapping_range("one-ten", 1, 10),
1951 side_enum_mapping_range("100-200", 100, 200),
1952 side_enum_mapping_value("200", 200),
1953 side_enum_mapping_value("300", 300),
1957 side_static_event(my_provider_event_enum_gather
, "myprovider", "myeventenumgather", SIDE_LOGLEVEL_DEBUG
,
1959 side_field_gather_enum("5", &myenumgather
,
1961 side_type_gather_unsigned_integer(0, sizeof(uint32_t), 0, 0,
1962 SIDE_TYPE_GATHER_ACCESS_DIRECT
)
1965 side_field_gather_enum("400", &myenumgather
,
1967 side_type_gather_unsigned_integer(0, sizeof(uint64_t), 0, 0,
1968 SIDE_TYPE_GATHER_ACCESS_DIRECT
)
1971 side_field_gather_enum("200", &myenumgather
,
1973 side_type_gather_unsigned_integer(0, sizeof(uint8_t), 0, 0,
1974 SIDE_TYPE_GATHER_ACCESS_DIRECT
)
1977 side_field_gather_enum("-100", &myenumgather
,
1979 side_type_gather_signed_integer(0, sizeof(int8_t), 0, 0,
1980 SIDE_TYPE_GATHER_ACCESS_DIRECT
)
1983 side_field_gather_enum("6_be", &myenumgather
,
1985 side_type_gather_unsigned_integer_be(0, sizeof(uint32_t), 0, 0,
1986 SIDE_TYPE_GATHER_ACCESS_DIRECT
)
1989 side_field_gather_enum("6_le", &myenumgather
,
1991 side_type_gather_unsigned_integer_le(0, sizeof(uint32_t), 0, 0,
1992 SIDE_TYPE_GATHER_ACCESS_DIRECT
)
1999 void test_gather_enum(void)
2005 #if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
2006 uint32_t v5
= side_bswap_32(6);
2010 uint32_t v6
= side_bswap_32(6);
2013 side_event(my_provider_event_enum_gather
,
2015 side_arg_gather_integer(&v1
),
2016 side_arg_gather_integer(&v2
),
2017 side_arg_gather_integer(&v3
),
2018 side_arg_gather_integer(&v4
),
2019 side_arg_gather_integer(&v5
),
2020 side_arg_gather_integer(&v6
),
2025 side_static_event(my_provider_event_gatherstring
,
2026 "myprovider", "myeventgatherstring", SIDE_LOGLEVEL_DEBUG
,
2028 side_field_gather_string("string", 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
),
2029 side_field_gather_array("arrayptr",
2030 side_elem(side_type_gather_string(0, SIDE_TYPE_GATHER_ACCESS_POINTER
)),
2031 3, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
2033 side_field_gather_array("array",
2034 side_elem(side_type_gather_string(0, SIDE_TYPE_GATHER_ACCESS_DIRECT
)),
2035 3, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
2041 void test_gather_string(void)
2043 side_event_cond(my_provider_event_gatherstring
) {
2044 const char *str1
= "abcdef";
2045 const char *ptrarray
[3] = {
2050 char flatarray
[] = { 'a', 'b', '\0', 'c', 'd', '\0', 'e', 'f', '\0' };
2052 side_event_call(my_provider_event_gatherstring
,
2054 side_arg_gather_string(str1
),
2055 side_arg_gather_array(ptrarray
),
2056 side_arg_gather_array(flatarray
),
2062 side_static_event(my_provider_event_str_utf
, "myprovider", "myevent_str_utf", SIDE_LOGLEVEL_DEBUG
,
2064 side_field_string("utf8"),
2065 side_field_string32("utf32"),
2066 side_field_string16("utf16"),
2067 side_field_string32_le("utf32_le"),
2068 side_field_string16_le("utf16_le"),
2069 side_field_string32_be("utf32_be"),
2070 side_field_string16_be("utf16_be"),
2071 side_field_dynamic("dynamic_utf32"),
2072 side_field_gather_string32("gather_utf32", 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
),
2077 void test_string_utf(void)
2083 * UTF-32: U+000000ae
2085 uint8_t str8
[] = { 0xc2, 0xae, 'a', 'b', 'c', 0 };
2086 uint32_t str32
[] = { 0x000000ae, 'a', 'b', 'c', 0 };
2087 uint16_t str16
[] = { 0x00ae, 'a', 'b', 'c', 0 };
2088 #if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
2089 uint32_t str32_le
[] = { 0x000000ae, 'a', 'b', 'c', 0 };
2090 uint16_t str16_le
[] = { 0x00ae, 'a', 'b', 'c', 0 };
2091 uint32_t str32_be
[] = { side_bswap_32(0x000000ae), side_bswap_32('a'), side_bswap_32('b'), side_bswap_32('c'), 0 };
2092 uint16_t str16_be
[] = { side_bswap_16(0x00ae), side_bswap_16('a'), side_bswap_16('b'), side_bswap_16('c'), 0 };
2094 uint32_t str32_le
[] = { side_bswap_32(0x000000ae), side_bswap_32('a'), side_bswap_32('b'), side_bswap_32('c'), 0 };
2095 uint16_t str16_le
[] = { side_bswap_16(0x00ae), side_bswap_16('a'), side_bswap_16('b'), side_bswap_16('c'), 0 };
2096 uint32_t str32_be
[] = { 0x000000ae, 'a', 'b', 'c', 0 };
2097 uint16_t str16_be
[] = { 0x00ae, 'a', 'b', 'c', 0 };
2100 side_event(my_provider_event_str_utf
,
2102 side_arg_string(str8
),
2103 side_arg_string32(str32
),
2104 side_arg_string16(str16
),
2105 side_arg_string32(str32_le
),
2106 side_arg_string16(str16_le
),
2107 side_arg_string32(str32_be
),
2108 side_arg_string16(str16_be
),
2109 side_arg_dynamic_string32(str32
),
2110 side_arg_gather_string(str32
),
2115 static side_define_variant(myvariantdef
,
2118 side_option_range(1, 3, side_type_u16()),
2119 side_option(5, side_type_string()),
2123 side_static_event(my_provider_event_variant
, "myprovider", "myeventvariant", SIDE_LOGLEVEL_DEBUG
,
2125 side_field_variant("variant1", &myvariantdef
),
2126 side_field_variant("variant2", &myvariantdef
),
2132 void test_variant(void)
2134 side_event_cond(my_provider_event_variant
) {
2135 side_arg_define_variant(myvariant1
, side_arg_u32(2), side_arg_u16(4));
2136 side_arg_define_variant(myvariant2
, side_arg_u32(5), side_arg_string("abc"));
2138 side_event_call(my_provider_event_variant
,
2140 side_arg_variant(&myvariant1
),
2141 side_arg_variant(&myvariant2
),
2151 test_event_hidden();
2152 test_event_export();
2153 test_struct_literal();
2158 test_vla_visitor_2d();
2159 test_dynamic_basic_type();
2161 test_dynamic_null();
2162 test_dynamic_struct();
2163 test_dynamic_nested_struct();
2164 test_dynamic_vla_struct();
2165 test_dynamic_struct_vla();
2166 test_dynamic_nested_vla();
2168 test_static_variadic();
2170 test_dynamic_bool();
2171 test_dynamic_vla_with_visitor();
2172 test_dynamic_struct_with_visitor();
2173 test_event_user_attribute();
2174 test_field_user_attribute();
2175 test_variadic_attr();
2176 test_variadic_vla_attr();
2177 test_variadic_struct_attr();
2179 test_variadic_float();
2186 test_struct_gather();
2187 test_struct_gather_nest_ptr();
2188 test_struct_gather_float();
2189 test_array_gather();
2190 test_gather_structnest();
2192 test_gather_vla_flex();
2195 test_gather_pointer();
2197 test_gather_string();