1 // SPDX-License-Identifier: MIT
3 * Copyright 2022 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 #include <side/trace.h>
16 /* User code example */
18 side_static_event(my_provider_event
, "myprovider", "myevent", SIDE_LOGLEVEL_DEBUG
,
20 side_field_u32("abc", side_attr_list()),
21 side_field_s64("def", side_attr_list()),
22 side_field_pointer("ptr", side_attr_list()),
23 side_field_dynamic("dynamic", side_attr_list()),
24 side_field_dynamic("dynamic_pointer", side_attr_list()),
30 void test_fields(void)
35 side_event(my_provider_event
,
39 side_arg_pointer((void *) 0x1),
40 side_arg_dynamic(side_arg_dynamic_string("zzz", side_attr_list())),
41 side_arg_dynamic(side_arg_dynamic_pointer((void *) 0x1, side_attr_list())),
46 side_hidden_event(my_provider_event_hidden
, "myprovider", "myeventhidden", SIDE_LOGLEVEL_DEBUG
,
48 side_field_u32("abc", side_attr_list()),
54 void test_event_hidden(void)
56 side_event(my_provider_event_hidden
, side_arg_list(side_arg_u32(2)));
59 side_declare_event(my_provider_event_export
);
61 side_export_event(my_provider_event_export
, "myprovider", "myeventexport", SIDE_LOGLEVEL_DEBUG
,
63 side_field_u32("abc", side_attr_list()),
69 void test_event_export(void)
71 side_event(my_provider_event_export
, side_arg_list(side_arg_u32(2)));
74 side_static_event(my_provider_event_struct_literal
, "myprovider", "myeventstructliteral", SIDE_LOGLEVEL_DEBUG
,
76 side_field_struct("structliteral",
79 side_field_u32("x", side_attr_list()),
80 side_field_s64("y", side_attr_list()),
85 side_field_u8("z", side_attr_list()),
91 void test_struct_literal(void)
93 side_event_cond(my_provider_event_struct_literal
) {
94 side_arg_define_vec(mystruct
, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
95 side_event_call(my_provider_event_struct_literal
, side_arg_list(side_arg_struct(&mystruct
), side_arg_u8(55)));
99 static side_define_struct(mystructdef
,
101 side_field_u32("x", side_attr_list()),
102 side_field_s64("y", side_attr_list()),
107 side_static_event(my_provider_event_struct
, "myprovider", "myeventstruct", SIDE_LOGLEVEL_DEBUG
,
109 side_field_struct("struct", &mystructdef
),
110 side_field_u8("z", side_attr_list()),
116 void test_struct(void)
118 side_event_cond(my_provider_event_struct
) {
119 side_arg_define_vec(mystruct
, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
120 side_event_call(my_provider_event_struct
, side_arg_list(side_arg_struct(&mystruct
), side_arg_u8(55)));
124 side_static_event(my_provider_event_array
, "myprovider", "myarray", SIDE_LOGLEVEL_DEBUG
,
126 side_field_array("arr", side_elem(side_type_u32(side_attr_list())), 3, side_attr_list()),
127 side_field_s64("v", side_attr_list()),
133 void test_array(void)
135 side_event_cond(my_provider_event_array
) {
136 side_arg_define_vec(myarray
, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
137 side_event_call(my_provider_event_array
, side_arg_list(side_arg_array(&myarray
), side_arg_s64(42)));
141 side_static_event(my_provider_event_vla
, "myprovider", "myvla", SIDE_LOGLEVEL_DEBUG
,
143 side_field_vla("vla", side_elem(side_type_u32(side_attr_list())), side_attr_list()),
144 side_field_s64("v", side_attr_list()),
152 side_event_cond(my_provider_event_vla
) {
153 side_arg_define_vec(myvla
, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
154 side_event_call(my_provider_event_vla
, side_arg_list(side_arg_vla(&myvla
), side_arg_s64(42)));
158 /* 1D array visitor */
160 struct app_visitor_ctx
{
166 enum side_visitor_status
test_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
168 struct app_visitor_ctx
*ctx
= (struct app_visitor_ctx
*) _ctx
;
169 uint32_t length
= ctx
->length
, i
;
171 for (i
= 0; i
< length
; i
++) {
172 const struct side_arg_vec elem
= side_arg_u32(ctx
->ptr
[i
]);
174 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
175 return SIDE_VISITOR_STATUS_ERROR
;
177 return SIDE_VISITOR_STATUS_OK
;
180 static uint32_t testarray
[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
182 side_static_event(my_provider_event_vla_visitor
, "myprovider", "myvlavisit", SIDE_LOGLEVEL_DEBUG
,
184 side_field_vla_visitor("vlavisit", side_elem(side_type_u32(side_attr_list())), test_visitor
, side_attr_list()),
185 side_field_s64("v", side_attr_list()),
191 void test_vla_visitor(void)
193 side_event_cond(my_provider_event_vla_visitor
) {
194 struct app_visitor_ctx ctx
= {
196 .length
= SIDE_ARRAY_SIZE(testarray
),
198 side_event_call(my_provider_event_vla_visitor
, side_arg_list(side_arg_vla_visitor(&ctx
), side_arg_s64(42)));
202 /* 2D array visitor */
204 struct app_visitor_2d_inner_ctx
{
210 enum side_visitor_status
test_inner_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
212 struct app_visitor_2d_inner_ctx
*ctx
= (struct app_visitor_2d_inner_ctx
*) _ctx
;
213 uint32_t length
= ctx
->length
, i
;
215 for (i
= 0; i
< length
; i
++) {
216 const struct side_arg_vec elem
= side_arg_u32(ctx
->ptr
[i
]);
218 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
219 return SIDE_VISITOR_STATUS_ERROR
;
221 return SIDE_VISITOR_STATUS_OK
;
224 struct app_visitor_2d_outer_ctx
{
225 const uint32_t (*ptr
)[2];
230 enum side_visitor_status
test_outer_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
232 struct app_visitor_2d_outer_ctx
*ctx
= (struct app_visitor_2d_outer_ctx
*) _ctx
;
233 uint32_t length
= ctx
->length
, i
;
235 for (i
= 0; i
< length
; i
++) {
236 struct app_visitor_2d_inner_ctx inner_ctx
= {
240 const struct side_arg_vec elem
= side_arg_vla_visitor(&inner_ctx
);
241 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
242 return SIDE_VISITOR_STATUS_ERROR
;
244 return SIDE_VISITOR_STATUS_OK
;
247 static uint32_t testarray2d
[][2] = {
253 side_static_event(my_provider_event_vla_visitor2d
, "myprovider", "myvlavisit2d", SIDE_LOGLEVEL_DEBUG
,
255 side_field_vla_visitor("vlavisit2d",
257 side_type_vla_visitor(
258 side_elem(side_type_u32(side_attr_list())),
261 ), test_outer_visitor
, side_attr_list()),
262 side_field_s64("v", side_attr_list()),
268 void test_vla_visitor_2d(void)
270 side_event_cond(my_provider_event_vla_visitor2d
) {
271 struct app_visitor_2d_outer_ctx ctx
= {
273 .length
= SIDE_ARRAY_SIZE(testarray2d
),
275 side_event_call(my_provider_event_vla_visitor2d
, side_arg_list(side_arg_vla_visitor(&ctx
), side_arg_s64(42)));
279 static int64_t array_fixint
[] = { -444, 555, 123, 2897432587 };
281 side_static_event(my_provider_event_array_fixint
, "myprovider", "myarrayfixint", SIDE_LOGLEVEL_DEBUG
,
283 side_field_array("arrfixint", side_elem(side_type_s64(side_attr_list())), SIDE_ARRAY_SIZE(array_fixint
), side_attr_list()),
284 side_field_s64("v", side_attr_list()),
290 void test_array_fixint(void)
292 side_event(my_provider_event_array_fixint
,
293 side_arg_list(side_arg_array_s64(array_fixint
), side_arg_s64(42)));
296 static int64_t vla_fixint
[] = { -444, 555, 123, 2897432587 };
298 side_static_event(my_provider_event_vla_fixint
, "myprovider", "myvlafixint", SIDE_LOGLEVEL_DEBUG
,
300 side_field_vla("vlafixint", side_elem(side_type_s64(side_attr_list())), side_attr_list()),
301 side_field_s64("v", side_attr_list()),
307 void test_vla_fixint(void)
309 side_event(my_provider_event_vla_fixint
,
310 side_arg_list(side_arg_vla_s64(vla_fixint
, SIDE_ARRAY_SIZE(vla_fixint
)), side_arg_s64(42)));
313 side_static_event(my_provider_event_dynamic_basic
,
314 "myprovider", "mydynamicbasic", SIDE_LOGLEVEL_DEBUG
,
316 side_field_dynamic("dynamic", side_attr_list()),
322 void test_dynamic_basic_type(void)
324 side_event(my_provider_event_dynamic_basic
,
325 side_arg_list(side_arg_dynamic(side_arg_dynamic_s16(-33, side_attr_list()))));
328 side_static_event(my_provider_event_dynamic_vla
,
329 "myprovider", "mydynamicvla", SIDE_LOGLEVEL_DEBUG
,
331 side_field_dynamic("dynamic", side_attr_list()),
337 void test_dynamic_vla(void)
339 side_arg_dynamic_define_vec(myvla
,
341 side_arg_dynamic_u32(1, side_attr_list()),
342 side_arg_dynamic_u32(2, side_attr_list()),
343 side_arg_dynamic_u32(3, side_attr_list()),
347 side_event(my_provider_event_dynamic_vla
,
348 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
))));
351 side_static_event(my_provider_event_dynamic_null
,
352 "myprovider", "mydynamicnull", SIDE_LOGLEVEL_DEBUG
,
354 side_field_dynamic("dynamic", side_attr_list()),
360 void test_dynamic_null(void)
362 side_event(my_provider_event_dynamic_null
,
363 side_arg_list(side_arg_dynamic(side_arg_dynamic_null(side_attr_list()))));
366 side_static_event(my_provider_event_dynamic_struct
,
367 "myprovider", "mydynamicstruct", SIDE_LOGLEVEL_DEBUG
,
369 side_field_dynamic("dynamic", side_attr_list()),
375 void test_dynamic_struct(void)
377 side_arg_dynamic_define_struct(mystruct
,
379 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
380 side_arg_dynamic_field("b", side_arg_dynamic_string("zzz", side_attr_list())),
381 side_arg_dynamic_field("c", side_arg_dynamic_null(side_attr_list())),
386 side_event(my_provider_event_dynamic_struct
,
387 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct
))));
390 side_static_event(my_provider_event_dynamic_nested_struct
,
391 "myprovider", "mydynamicnestedstruct", SIDE_LOGLEVEL_DEBUG
,
393 side_field_dynamic("dynamic", side_attr_list()),
399 void test_dynamic_nested_struct(void)
401 side_arg_dynamic_define_struct(nested
,
403 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
404 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
408 side_arg_dynamic_define_struct(nested2
,
410 side_arg_dynamic_field("aa", side_arg_dynamic_u64(128, side_attr_list())),
411 side_arg_dynamic_field("bb", side_arg_dynamic_u16(1, side_attr_list())),
415 side_arg_dynamic_define_struct(mystruct
,
417 side_arg_dynamic_field("nested", side_arg_dynamic_struct(&nested
)),
418 side_arg_dynamic_field("nested2", side_arg_dynamic_struct(&nested2
)),
422 side_event(my_provider_event_dynamic_nested_struct
,
423 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct
))));
426 side_static_event(my_provider_event_dynamic_vla_struct
,
427 "myprovider", "mydynamicvlastruct", SIDE_LOGLEVEL_DEBUG
,
429 side_field_dynamic("dynamic", side_attr_list()),
435 void test_dynamic_vla_struct(void)
437 side_arg_dynamic_define_struct(nested
,
439 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
440 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
444 side_arg_dynamic_define_vec(myvla
,
446 side_arg_dynamic_struct(&nested
),
447 side_arg_dynamic_struct(&nested
),
448 side_arg_dynamic_struct(&nested
),
449 side_arg_dynamic_struct(&nested
),
453 side_event(my_provider_event_dynamic_vla_struct
,
454 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
))));
457 side_static_event(my_provider_event_dynamic_struct_vla
,
458 "myprovider", "mydynamicstructvla", SIDE_LOGLEVEL_DEBUG
,
460 side_field_dynamic("dynamic", side_attr_list()),
466 void test_dynamic_struct_vla(void)
468 side_arg_dynamic_define_vec(myvla
,
470 side_arg_dynamic_u32(1, side_attr_list()),
471 side_arg_dynamic_u32(2, side_attr_list()),
472 side_arg_dynamic_u32(3, side_attr_list()),
476 side_arg_dynamic_define_vec(myvla2
,
478 side_arg_dynamic_u32(4, side_attr_list()),
479 side_arg_dynamic_u64(5, side_attr_list()),
480 side_arg_dynamic_u32(6, side_attr_list()),
484 side_arg_dynamic_define_struct(mystruct
,
486 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla
)),
487 side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2
)),
491 side_event(my_provider_event_dynamic_struct_vla
,
492 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct
))));
495 side_static_event(my_provider_event_dynamic_nested_vla
,
496 "myprovider", "mydynamicnestedvla", SIDE_LOGLEVEL_DEBUG
,
498 side_field_dynamic("dynamic", side_attr_list()),
504 void test_dynamic_nested_vla(void)
506 side_arg_dynamic_define_vec(nestedvla
,
508 side_arg_dynamic_u32(1, side_attr_list()),
509 side_arg_dynamic_u16(2, side_attr_list()),
510 side_arg_dynamic_u32(3, side_attr_list()),
514 side_arg_dynamic_define_vec(nestedvla2
,
516 side_arg_dynamic_u8(4, side_attr_list()),
517 side_arg_dynamic_u32(5, side_attr_list()),
518 side_arg_dynamic_u32(6, side_attr_list()),
522 side_arg_dynamic_define_vec(myvla
,
524 side_arg_dynamic_vla(&nestedvla
),
525 side_arg_dynamic_vla(&nestedvla2
),
529 side_event(my_provider_event_dynamic_nested_vla
,
530 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
))));
533 side_static_event_variadic(my_provider_event_variadic
,
534 "myprovider", "myvariadicevent", SIDE_LOGLEVEL_DEBUG
,
540 void test_variadic(void)
542 side_event_variadic(my_provider_event_variadic
,
545 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
546 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
552 side_static_event_variadic(my_provider_event_static_variadic
,
553 "myprovider", "mystaticvariadicevent", SIDE_LOGLEVEL_DEBUG
,
555 side_field_u32("abc", side_attr_list()),
556 side_field_u16("def", side_attr_list()),
562 void test_static_variadic(void)
564 side_event_variadic(my_provider_event_static_variadic
,
570 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
571 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
577 side_static_event(my_provider_event_bool
, "myprovider", "myeventbool", SIDE_LOGLEVEL_DEBUG
,
579 side_field_bool("a_false", side_attr_list()),
580 side_field_bool("b_true", side_attr_list()),
581 side_field_bool("c_true", side_attr_list()),
582 side_field_bool("d_true", side_attr_list()),
583 side_field_bool("e_true", side_attr_list()),
584 side_field_bool("f_false", side_attr_list()),
585 side_field_bool("g_true", side_attr_list()),
595 uint64_t c
= 0x12345678;
601 side_event(my_provider_event_bool
,
614 side_static_event_variadic(my_provider_event_dynamic_bool
,
615 "myprovider", "mydynamicbool", SIDE_LOGLEVEL_DEBUG
,
621 void test_dynamic_bool(void)
623 side_event_variadic(my_provider_event_dynamic_bool
,
626 side_arg_dynamic_field("a_true", side_arg_dynamic_bool(55, side_attr_list())),
627 side_arg_dynamic_field("b_true", side_arg_dynamic_bool(-4, side_attr_list())),
628 side_arg_dynamic_field("c_false", side_arg_dynamic_bool(0, side_attr_list())),
629 side_arg_dynamic_field("d_true", side_arg_dynamic_bool(256, side_attr_list())),
635 side_static_event(my_provider_event_dynamic_vla_visitor
,
636 "myprovider", "mydynamicvlavisitor", SIDE_LOGLEVEL_DEBUG
,
638 side_field_dynamic("dynamic", side_attr_list()),
643 struct app_dynamic_vla_visitor_ctx
{
649 enum side_visitor_status
test_dynamic_vla_visitor(const struct side_tracer_dynamic_vla_visitor_ctx
*tracer_ctx
, void *_ctx
)
651 struct app_dynamic_vla_visitor_ctx
*ctx
= (struct app_dynamic_vla_visitor_ctx
*) _ctx
;
652 uint32_t length
= ctx
->length
, i
;
654 for (i
= 0; i
< length
; i
++) {
655 const struct side_arg_dynamic_vec elem
= {
656 .dynamic_type
= SIDE_DYNAMIC_TYPE_U32
,
662 .side_u32
= ctx
->ptr
[i
],
667 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
668 return SIDE_VISITOR_STATUS_ERROR
;
670 return SIDE_VISITOR_STATUS_OK
;
673 static uint32_t testarray_dynamic_vla
[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
676 void test_dynamic_vla_with_visitor(void)
678 side_event_cond(my_provider_event_dynamic_vla_visitor
) {
679 struct app_dynamic_vla_visitor_ctx ctx
= {
680 .ptr
= testarray_dynamic_vla
,
681 .length
= SIDE_ARRAY_SIZE(testarray_dynamic_vla
),
683 side_event_call(my_provider_event_dynamic_vla_visitor
,
686 side_arg_dynamic_vla_visitor(test_dynamic_vla_visitor
, &ctx
, side_attr_list())
693 side_static_event(my_provider_event_dynamic_struct_visitor
,
694 "myprovider", "mydynamicstructvisitor", SIDE_LOGLEVEL_DEBUG
,
696 side_field_dynamic("dynamic", side_attr_list()),
701 struct struct_visitor_pair
{
706 struct app_dynamic_struct_visitor_ctx
{
707 const struct struct_visitor_pair
*ptr
;
712 enum side_visitor_status
test_dynamic_struct_visitor(const struct side_tracer_dynamic_struct_visitor_ctx
*tracer_ctx
, void *_ctx
)
714 struct app_dynamic_struct_visitor_ctx
*ctx
= (struct app_dynamic_struct_visitor_ctx
*) _ctx
;
715 uint32_t length
= ctx
->length
, i
;
717 for (i
= 0; i
< length
; i
++) {
718 struct side_arg_dynamic_event_field dynamic_field
= {
719 .field_name
= ctx
->ptr
[i
].name
,
721 .dynamic_type
= SIDE_DYNAMIC_TYPE_U32
,
727 .side_u32
= ctx
->ptr
[i
].value
,
733 if (tracer_ctx
->write_field(tracer_ctx
, &dynamic_field
) != SIDE_VISITOR_STATUS_OK
)
734 return SIDE_VISITOR_STATUS_ERROR
;
736 return SIDE_VISITOR_STATUS_OK
;
739 static struct struct_visitor_pair testarray_dynamic_struct
[] = {
747 void test_dynamic_struct_with_visitor(void)
749 side_event_cond(my_provider_event_dynamic_struct_visitor
) {
750 struct app_dynamic_struct_visitor_ctx ctx
= {
751 .ptr
= testarray_dynamic_struct
,
752 .length
= SIDE_ARRAY_SIZE(testarray_dynamic_struct
),
754 side_event_call(my_provider_event_dynamic_struct_visitor
,
757 side_arg_dynamic_struct_visitor(test_dynamic_struct_visitor
, &ctx
, side_attr_list())
764 side_static_event(my_provider_event_user_attribute
, "myprovider", "myevent_user_attribute", SIDE_LOGLEVEL_DEBUG
,
766 side_field_u32("abc", side_attr_list()),
767 side_field_s64("def", side_attr_list()),
770 side_attr("user_attribute_a", side_attr_string("val1")),
771 side_attr("user_attribute_b", side_attr_string("val2")),
776 void test_event_user_attribute(void)
778 side_event(my_provider_event_user_attribute
, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
781 side_static_event(my_provider_field_user_attribute
, "myprovider", "myevent_field_attribute", SIDE_LOGLEVEL_DEBUG
,
783 side_field_u32("abc",
785 side_attr("user_attribute_a", side_attr_string("val1")),
786 side_attr("user_attribute_b", side_attr_u32(2)),
789 side_field_s64("def",
791 side_attr("user_attribute_c", side_attr_string("val3")),
792 side_attr("user_attribute_d", side_attr_s64(-5)),
800 void test_field_user_attribute(void)
802 side_event(my_provider_field_user_attribute
, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
805 side_static_event_variadic(my_provider_event_variadic_attr
,
806 "myprovider", "myvariadiceventattr", SIDE_LOGLEVEL_DEBUG
,
812 void test_variadic_attr(void)
814 side_event_variadic(my_provider_event_variadic_attr
,
817 side_arg_dynamic_field("a",
818 side_arg_dynamic_u32(55,
820 side_attr("user_attribute_c", side_attr_string("valX")),
821 side_attr("user_attribute_d", side_attr_u8(55)),
825 side_arg_dynamic_field("b",
826 side_arg_dynamic_s8(-4,
828 side_attr("X", side_attr_u8(1)),
829 side_attr("Y", side_attr_s8(2)),
838 side_static_event_variadic(my_provider_event_variadic_vla_attr
,
839 "myprovider", "myvariadiceventvlaattr", SIDE_LOGLEVEL_DEBUG
,
845 void test_variadic_vla_attr(void)
847 side_arg_dynamic_define_vec(myvla
,
849 side_arg_dynamic_u32(1,
851 side_attr("Z", side_attr_u8(0)),
852 side_attr("A", side_attr_u8(123)),
855 side_arg_dynamic_u32(2, side_attr_list()),
856 side_arg_dynamic_u32(3, side_attr_list()),
859 side_attr("X", side_attr_u8(1)),
860 side_attr("Y", side_attr_u8(2)),
863 side_event_variadic(my_provider_event_variadic_vla_attr
,
866 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla
)),
872 side_static_event_variadic(my_provider_event_variadic_struct_attr
,
873 "myprovider", "myvariadiceventstructattr", SIDE_LOGLEVEL_DEBUG
,
879 void test_variadic_struct_attr(void)
881 side_event_cond(my_provider_event_variadic_struct_attr
) {
882 side_arg_dynamic_define_struct(mystruct
,
884 side_arg_dynamic_field("a",
885 side_arg_dynamic_u32(43,
887 side_attr("A", side_attr_bool(true)),
891 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
894 side_attr("X", side_attr_u8(1)),
895 side_attr("Y", side_attr_u8(2)),
898 side_event_call_variadic(my_provider_event_variadic_struct_attr
,
901 side_arg_dynamic_field("a", side_arg_dynamic_struct(&mystruct
)),
908 side_static_event(my_provider_event_float
, "myprovider", "myeventfloat", SIDE_LOGLEVEL_DEBUG
,
911 side_field_float_binary16("binary16", side_attr_list()),
912 side_field_float_binary16_le("binary16_le", side_attr_list()),
913 side_field_float_binary16_be("binary16_be", side_attr_list()),
916 side_field_float_binary32("binary32", side_attr_list()),
917 side_field_float_binary32_le("binary32_le", side_attr_list()),
918 side_field_float_binary32_be("binary32_be", side_attr_list()),
921 side_field_float_binary64("binary64", side_attr_list()),
922 side_field_float_binary64_le("binary64_le", side_attr_list()),
923 side_field_float_binary64_be("binary64_be", side_attr_list()),
926 side_field_float_binary128("binary128", side_attr_list()),
927 side_field_float_binary128_le("binary128_le", side_attr_list()),
928 side_field_float_binary128_be("binary128_be", side_attr_list()),
935 void test_float(void)
971 float16
.u
= side_bswap_16(float16
.u
);
974 float32
.u
= side_bswap_32(float32
.u
);
977 float64
.u
= side_bswap_64(float64
.u
);
980 side_bswap_128p(float128
.arr
);
983 side_event(my_provider_event_float
,
986 side_arg_float_binary16(1.1),
987 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
988 side_arg_float_binary16(1.1),
989 side_arg_float_binary16(float16
.f
),
991 side_arg_float_binary16(float16
.f
),
992 side_arg_float_binary16(1.1),
996 side_arg_float_binary32(2.2),
997 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
998 side_arg_float_binary32(2.2),
999 side_arg_float_binary32(float32
.f
),
1001 side_arg_float_binary32(float32
.f
),
1002 side_arg_float_binary32(2.2),
1006 side_arg_float_binary64(3.3),
1007 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
1008 side_arg_float_binary64(3.3),
1009 side_arg_float_binary64(float64
.f
),
1011 side_arg_float_binary64(float64
.f
),
1012 side_arg_float_binary64(3.3),
1016 side_arg_float_binary128(4.4),
1017 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
1018 side_arg_float_binary128(4.4),
1019 side_arg_float_binary128(float128
.f
),
1021 side_arg_float_binary128(float128
.f
),
1022 side_arg_float_binary128(4.4),
1029 side_static_event_variadic(my_provider_event_variadic_float
,
1030 "myprovider", "myvariadicfloat", SIDE_LOGLEVEL_DEBUG
,
1036 void test_variadic_float(void)
1072 float16
.u
= side_bswap_16(float16
.u
);
1075 float32
.u
= side_bswap_32(float32
.u
);
1078 float64
.u
= side_bswap_64(float64
.u
);
1081 side_bswap_128p(float128
.arr
);
1084 side_event_variadic(my_provider_event_variadic_float
,
1088 side_arg_dynamic_field("binary16", side_arg_dynamic_float_binary16(1.1, side_attr_list())),
1089 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
1090 side_arg_dynamic_field("binary16_le", side_arg_dynamic_float_binary16_le(1.1, side_attr_list())),
1091 side_arg_dynamic_field("binary16_be", side_arg_dynamic_float_binary16_be(float16
.f
, side_attr_list())),
1093 side_arg_dynamic_field("binary16_le", side_arg_dynamic_float_binary16_le(float16
.f
, side_attr_list())),
1094 side_arg_dynamic_field("binary16_be", side_arg_dynamic_float_binary16_be(1.1, side_attr_list())),
1098 side_arg_dynamic_field("binary32", side_arg_dynamic_float_binary32(2.2, side_attr_list())),
1099 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
1100 side_arg_dynamic_field("binary32_le", side_arg_dynamic_float_binary32_le(2.2, side_attr_list())),
1101 side_arg_dynamic_field("binary32_be", side_arg_dynamic_float_binary32_be(float32
.f
, side_attr_list())),
1103 side_arg_dynamic_field("binary32_le", side_arg_dynamic_float_binary32_le(float32
.f
, side_attr_list())),
1104 side_arg_dynamic_field("binary32_be", side_arg_dynamic_float_binary32_be(2.2, side_attr_list())),
1108 side_arg_dynamic_field("binary64", side_arg_dynamic_float_binary64(3.3, side_attr_list())),
1109 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
1110 side_arg_dynamic_field("binary64_le", side_arg_dynamic_float_binary64_le(3.3, side_attr_list())),
1111 side_arg_dynamic_field("binary64_be", side_arg_dynamic_float_binary64_be(float64
.f
, side_attr_list())),
1113 side_arg_dynamic_field("binary64_le", side_arg_dynamic_float_binary64_le(float64
.f
, side_attr_list())),
1114 side_arg_dynamic_field("binary64_be", side_arg_dynamic_float_binary64_be(3.3, side_attr_list())),
1118 side_arg_dynamic_field("binary128", side_arg_dynamic_float_binary128(4.4, side_attr_list())),
1119 # if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
1120 side_arg_dynamic_field("binary128_le", side_arg_dynamic_float_binary128_le(4.4, side_attr_list())),
1121 side_arg_dynamic_field("binary128_be", side_arg_dynamic_float_binary128_be(float128
.f
, side_attr_list())),
1123 side_arg_dynamic_field("binary128_le", side_arg_dynamic_float_binary128_le(float128
.f
, side_attr_list())),
1124 side_arg_dynamic_field("binary128_be", side_arg_dynamic_float_binary128_be(4.4, side_attr_list())),
1132 static side_define_enum(myenum
,
1133 side_enum_mapping_list(
1134 side_enum_mapping_range("one-ten", 1, 10),
1135 side_enum_mapping_range("100-200", 100, 200),
1136 side_enum_mapping_value("200", 200),
1137 side_enum_mapping_value("300", 300),
1142 side_static_event(my_provider_event_enum
, "myprovider", "myeventenum", SIDE_LOGLEVEL_DEBUG
,
1144 side_field_enum("5", &myenum
, side_elem(side_type_u32(side_attr_list()))),
1145 side_field_enum("400", &myenum
, side_elem(side_type_u64(side_attr_list()))),
1146 side_field_enum("200", &myenum
, side_elem(side_type_u8(side_attr_list()))),
1147 side_field_enum("-100", &myenum
, side_elem(side_type_s8(side_attr_list()))),
1148 side_field_enum("6_be", &myenum
, side_elem(side_type_u32_be(side_attr_list()))),
1149 side_field_enum("6_le", &myenum
, side_elem(side_type_u32_le(side_attr_list()))),
1155 void test_enum(void)
1157 side_event(my_provider_event_enum
,
1163 #if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1164 side_arg_u32(side_bswap_32(6)),
1167 side_arg_u32(side_bswap_32(6)),
1174 /* A bitmap enum maps bits to labels. */
1175 static side_define_enum_bitmap(myenum_bitmap
,
1176 side_enum_bitmap_mapping_list(
1177 side_enum_bitmap_mapping_value("0", 0),
1178 side_enum_bitmap_mapping_range("1-2", 1, 2),
1179 side_enum_bitmap_mapping_range("2-4", 2, 4),
1180 side_enum_bitmap_mapping_value("3", 3),
1181 side_enum_bitmap_mapping_value("30", 30),
1182 side_enum_bitmap_mapping_value("63", 63),
1183 side_enum_bitmap_mapping_range("158-160", 158, 160),
1184 side_enum_bitmap_mapping_value("159", 159),
1185 side_enum_bitmap_mapping_range("500-700", 500, 700),
1190 side_static_event(my_provider_event_enum_bitmap
, "myprovider", "myeventenumbitmap", SIDE_LOGLEVEL_DEBUG
,
1192 side_field_enum_bitmap("bit_0", &myenum_bitmap
, side_elem(side_type_u32(side_attr_list()))),
1193 side_field_enum_bitmap("bit_1", &myenum_bitmap
, side_elem(side_type_u32(side_attr_list()))),
1194 side_field_enum_bitmap("bit_2", &myenum_bitmap
, side_elem(side_type_u8(side_attr_list()))),
1195 side_field_enum_bitmap("bit_3", &myenum_bitmap
, side_elem(side_type_u8(side_attr_list()))),
1196 side_field_enum_bitmap("bit_30", &myenum_bitmap
, side_elem(side_type_u32(side_attr_list()))),
1197 side_field_enum_bitmap("bit_31", &myenum_bitmap
, side_elem(side_type_u32(side_attr_list()))),
1198 side_field_enum_bitmap("bit_63", &myenum_bitmap
, side_elem(side_type_u64(side_attr_list()))),
1199 side_field_enum_bitmap("bits_1+63", &myenum_bitmap
, side_elem(side_type_u64(side_attr_list()))),
1200 side_field_enum_bitmap("byte_bit_2", &myenum_bitmap
, side_elem(side_type_byte(side_attr_list()))),
1201 side_field_enum_bitmap("bit_159", &myenum_bitmap
,
1202 side_elem(side_type_array(side_elem(side_type_u32(side_attr_list())), 5, side_attr_list()))),
1203 side_field_enum_bitmap("bit_159", &myenum_bitmap
,
1204 side_elem(side_type_vla(side_elem(side_type_u32(side_attr_list())), side_attr_list()))),
1205 side_field_enum_bitmap("bit_2_be", &myenum_bitmap
, side_elem(side_type_u32_be(side_attr_list()))),
1206 side_field_enum_bitmap("bit_2_le", &myenum_bitmap
, side_elem(side_type_u32_le(side_attr_list()))),
1212 void test_enum_bitmap(void)
1214 side_event_cond(my_provider_event_enum_bitmap
) {
1215 side_arg_define_vec(myarray
,
1221 side_arg_u32(0x80000000), /* bit 159 */
1224 side_event_call(my_provider_event_enum_bitmap
,
1226 side_arg_u32(1 << 0),
1227 side_arg_u32(1 << 1),
1228 side_arg_u8(1 << 2),
1229 side_arg_u8(1 << 3),
1230 side_arg_u32(1 << 30),
1231 side_arg_u32(1 << 31),
1232 side_arg_u64(1ULL << 63),
1233 side_arg_u64((1ULL << 1) | (1ULL << 63)),
1234 side_arg_byte(1 << 2),
1235 side_arg_array(&myarray
),
1236 side_arg_vla(&myarray
),
1237 #if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1238 side_arg_u32(side_bswap_32(1 << 2)),
1239 side_arg_u32(1 << 2),
1241 side_arg_u32(0x06000000),
1242 side_arg_u32(side_bswap_32(1 << 2)),
1249 static uint8_t blob_fixint
[] = { 0x55, 0x44, 0x33, 0x22, 0x11 };
1251 side_static_event_variadic(my_provider_event_blob
, "myprovider", "myeventblob", SIDE_LOGLEVEL_DEBUG
,
1253 side_field_byte("blobfield", side_attr_list()),
1254 side_field_array("arrayblob", side_elem(side_type_byte(side_attr_list())), 3, side_attr_list()),
1255 side_field_array("arrayblobfix", side_elem(side_type_byte(side_attr_list())), SIDE_ARRAY_SIZE(blob_fixint
), side_attr_list()),
1256 side_field_vla("vlablobfix", side_elem(side_type_byte(side_attr_list())), side_attr_list()),
1262 void test_blob(void)
1264 side_event_cond(my_provider_event_blob
) {
1265 side_arg_define_vec(myarray
, side_arg_list(side_arg_byte(1), side_arg_byte(2), side_arg_byte(3)));
1266 side_arg_dynamic_define_vec(myvla
,
1268 side_arg_dynamic_byte(0x22, side_attr_list()),
1269 side_arg_dynamic_byte(0x33, side_attr_list()),
1273 side_event_call_variadic(my_provider_event_blob
,
1275 side_arg_byte(0x55),
1276 side_arg_array(&myarray
),
1277 side_arg_array_byte(blob_fixint
),
1278 side_arg_vla_byte(blob_fixint
, SIDE_ARRAY_SIZE(blob_fixint
)),
1281 side_arg_dynamic_field("varblobfield",
1282 side_arg_dynamic_byte(0x55, side_attr_list())
1284 side_arg_dynamic_field("varblobvla", side_arg_dynamic_vla(&myvla
)),
1291 side_static_event_variadic(my_provider_event_format_string
,
1292 "myprovider", "myeventformatstring", SIDE_LOGLEVEL_DEBUG
,
1294 side_field_string("fmt", side_attr_list()),
1297 side_attr("lang.c.format_string", side_attr_bool(true)),
1302 void test_fmt_string(void)
1304 side_event_cond(my_provider_event_format_string
) {
1305 side_arg_dynamic_define_vec(args
,
1307 side_arg_dynamic_string("blah", side_attr_list()),
1308 side_arg_dynamic_s32(123, side_attr_list()),
1312 side_event_call_variadic(my_provider_event_format_string
,
1314 side_arg_string("This is a formatted string with str: %s int: %d"),
1317 side_arg_dynamic_field("arguments", side_arg_dynamic_vla(&args
)),
1324 side_static_event_variadic(my_provider_event_endian
, "myprovider", "myevent_endian", SIDE_LOGLEVEL_DEBUG
,
1326 side_field_u16_le("u16_le", side_attr_list()),
1327 side_field_u32_le("u32_le", side_attr_list()),
1328 side_field_u64_le("u64_le", side_attr_list()),
1329 side_field_s16_le("s16_le", side_attr_list()),
1330 side_field_s32_le("s32_le", side_attr_list()),
1331 side_field_s64_le("s64_le", side_attr_list()),
1332 side_field_u16_be("u16_be", side_attr_list()),
1333 side_field_u32_be("u32_be", side_attr_list()),
1334 side_field_u64_be("u64_be", side_attr_list()),
1335 side_field_s16_be("s16_be", side_attr_list()),
1336 side_field_s32_be("s32_be", side_attr_list()),
1337 side_field_s64_be("s64_be", side_attr_list()),
1343 void test_endian(void)
1345 side_event_variadic(my_provider_event_endian
,
1347 #if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1354 side_arg_u16(side_bswap_16(1)),
1355 side_arg_u32(side_bswap_32(1)),
1356 side_arg_u64(side_bswap_64(1)),
1357 side_arg_s16(side_bswap_16(1)),
1358 side_arg_s32(side_bswap_32(1)),
1359 side_arg_s64(side_bswap_64(1)),
1361 side_arg_u16(side_bswap_16(1)),
1362 side_arg_u32(side_bswap_32(1)),
1363 side_arg_u64(side_bswap_64(1)),
1364 side_arg_s16(side_bswap_16(1)),
1365 side_arg_s32(side_bswap_32(1)),
1366 side_arg_s64(side_bswap_64(1)),
1376 #if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1377 side_arg_dynamic_field("u16_le", side_arg_dynamic_u16_le(1, side_attr_list())),
1378 side_arg_dynamic_field("u32_le", side_arg_dynamic_u32_le(1, side_attr_list())),
1379 side_arg_dynamic_field("u64_le", side_arg_dynamic_u64_le(1, side_attr_list())),
1380 side_arg_dynamic_field("s16_le", side_arg_dynamic_s16_le(1, side_attr_list())),
1381 side_arg_dynamic_field("s32_le", side_arg_dynamic_s32_le(1, side_attr_list())),
1382 side_arg_dynamic_field("s64_le", side_arg_dynamic_s64_le(1, side_attr_list())),
1383 side_arg_dynamic_field("u16_be", side_arg_dynamic_u16_be(side_bswap_16(1), side_attr_list())),
1384 side_arg_dynamic_field("u32_be", side_arg_dynamic_u32_be(side_bswap_32(1), side_attr_list())),
1385 side_arg_dynamic_field("u64_be", side_arg_dynamic_u64_be(side_bswap_64(1), side_attr_list())),
1386 side_arg_dynamic_field("s16_be", side_arg_dynamic_s16_be(side_bswap_16(1), side_attr_list())),
1387 side_arg_dynamic_field("s32_be", side_arg_dynamic_s32_be(side_bswap_32(1), side_attr_list())),
1388 side_arg_dynamic_field("s64_be", side_arg_dynamic_s64_be(side_bswap_64(1), side_attr_list())),
1390 side_arg_dynamic_field("u16_le", side_arg_dynamic_u16_le(side_bswap_16(1), side_attr_list())),
1391 side_arg_dynamic_field("u32_le", side_arg_dynamic_u32_le(side_bswap_32(1), side_attr_list())),
1392 side_arg_dynamic_field("u64_le", side_arg_dynamic_u64_le(side_bswap_64(1), side_attr_list())),
1393 side_arg_dynamic_field("s16_le", side_arg_dynamic_s16_le(side_bswap_16(1), side_attr_list())),
1394 side_arg_dynamic_field("s32_le", side_arg_dynamic_s32_le(side_bswap_32(1), side_attr_list())),
1395 side_arg_dynamic_field("s64_le", side_arg_dynamic_s64_le(side_bswap_64(1), side_attr_list())),
1396 side_arg_dynamic_field("u16_be", side_arg_dynamic_u16_be(1, side_attr_list())),
1397 side_arg_dynamic_field("u32_be", side_arg_dynamic_u32_be(1, side_attr_list())),
1398 side_arg_dynamic_field("u64_be", side_arg_dynamic_u64_be(1, side_attr_list())),
1399 side_arg_dynamic_field("s16_be", side_arg_dynamic_s16_be(1, side_attr_list())),
1400 side_arg_dynamic_field("s32_be", side_arg_dynamic_s32_be(1, side_attr_list())),
1401 side_arg_dynamic_field("s64_be", side_arg_dynamic_s64_be(1, side_attr_list())),
1408 side_static_event(my_provider_event_base
, "myprovider", "myevent_base", SIDE_LOGLEVEL_DEBUG
,
1410 side_field_u8("u8base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1411 side_field_u8("u8base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1412 side_field_u8("u8base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1413 side_field_u8("u8base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1414 side_field_u16("u16base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1415 side_field_u16("u16base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1416 side_field_u16("u16base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1417 side_field_u16("u16base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1418 side_field_u32("u32base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1419 side_field_u32("u32base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1420 side_field_u32("u32base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1421 side_field_u32("u32base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1422 side_field_u64("u64base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1423 side_field_u64("u64base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1424 side_field_u64("u64base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1425 side_field_u64("u64base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1426 side_field_s8("s8base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1427 side_field_s8("s8base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1428 side_field_s8("s8base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1429 side_field_s8("s8base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1430 side_field_s16("s16base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1431 side_field_s16("s16base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1432 side_field_s16("s16base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1433 side_field_s16("s16base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1434 side_field_s32("s32base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1435 side_field_s32("s32base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1436 side_field_s32("s32base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1437 side_field_s32("s32base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1438 side_field_s64("s64base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1439 side_field_s64("s64base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1440 side_field_s64("s64base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1441 side_field_s64("s64base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1447 void test_base(void)
1449 side_event(my_provider_event_base
,
1495 static side_define_struct_sg(mystructsgdef
,
1497 side_field_sg_unsigned_integer("a", offsetof(struct test
, a
), 32, 0, 32, side_attr_list()),
1498 side_field_sg_signed_integer("d", offsetof(struct test
, d
), 32, 0, 32, side_attr_list()),
1499 side_field_sg_unsigned_integer("e", offsetof(struct test
, e
), 16, 8, 4,
1500 side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1505 side_static_event(my_provider_event_structsg
, "myprovider", "myeventstructsg", SIDE_LOGLEVEL_DEBUG
,
1507 side_field_struct_sg("structsg", &mystructsgdef
),
1513 void test_struct_sg(void)
1515 side_event_cond(my_provider_event_structsg
) {
1516 struct test mystruct
= {
1523 side_event_call(my_provider_event_structsg
, side_arg_list(side_arg_struct_sg(&mystruct
)));
1530 test_event_hidden();
1531 test_event_export();
1532 test_struct_literal();
1537 test_vla_visitor_2d();
1538 test_array_fixint();
1540 test_dynamic_basic_type();
1542 test_dynamic_null();
1543 test_dynamic_struct();
1544 test_dynamic_nested_struct();
1545 test_dynamic_vla_struct();
1546 test_dynamic_struct_vla();
1547 test_dynamic_nested_vla();
1549 test_static_variadic();
1551 test_dynamic_bool();
1552 test_dynamic_vla_with_visitor();
1553 test_dynamic_struct_with_visitor();
1554 test_event_user_attribute();
1555 test_field_user_attribute();
1556 test_variadic_attr();
1557 test_variadic_vla_attr();
1558 test_variadic_struct_attr();
1560 test_variadic_float();