1 // SPDX-License-Identifier: MIT
3 * Copyright 2022 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 #include <side/trace.h>
15 /* User code example */
17 static side_define_event(my_provider_event
, "myprovider", "myevent", SIDE_LOGLEVEL_DEBUG
,
19 side_field_u32("abc", side_attr_list()),
20 side_field_s64("def", side_attr_list()),
21 side_field_dynamic("dynamic", side_attr_list()),
27 void test_fields(void)
32 my_provider_event
.enabled
= 1;
33 side_event(&my_provider_event
, side_arg_list(side_arg_u32(uw
), side_arg_s64(sdw
),
34 side_arg_dynamic(side_arg_dynamic_string("zzz", side_attr_list()))));
37 static side_define_event(my_provider_event2
, "myprovider", "myevent2", SIDE_LOGLEVEL_DEBUG
,
39 side_field_struct("structfield",
41 side_field_u32("x", side_attr_list()),
42 side_field_s64("y", side_attr_list()),
46 side_field_u8("z", side_attr_list()),
52 void test_struct(void)
54 my_provider_event2
.enabled
= 1;
55 side_event_cond(&my_provider_event2
) {
56 side_arg_define_vec(mystruct
, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
57 side_event_call(&my_provider_event2
, side_arg_list(side_arg_struct(&mystruct
), side_arg_u8(55)));
61 static side_define_event(my_provider_event_array
, "myprovider", "myarray", SIDE_LOGLEVEL_DEBUG
,
63 side_field_array("arr", side_elem(side_type_u32(side_attr_list())), 3, side_attr_list()),
64 side_field_s64("v", side_attr_list()),
72 my_provider_event_array
.enabled
= 1;
73 side_event_cond(&my_provider_event_array
) {
74 side_arg_define_vec(myarray
, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
75 side_event_call(&my_provider_event_array
, side_arg_list(side_arg_array(&myarray
), side_arg_s64(42)));
79 static side_define_event(my_provider_event_vla
, "myprovider", "myvla", SIDE_LOGLEVEL_DEBUG
,
81 side_field_vla("vla", side_elem(side_type_u32(side_attr_list())), side_attr_list()),
82 side_field_s64("v", side_attr_list()),
90 my_provider_event_vla
.enabled
= 1;
91 side_event_cond(&my_provider_event_vla
) {
92 side_arg_define_vec(myvla
, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
93 side_event_call(&my_provider_event_vla
, side_arg_list(side_arg_vla(&myvla
), side_arg_s64(42)));
97 /* 1D array visitor */
99 struct app_visitor_ctx
{
105 enum side_visitor_status
test_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
107 struct app_visitor_ctx
*ctx
= (struct app_visitor_ctx
*) _ctx
;
108 uint32_t length
= ctx
->length
, i
;
110 for (i
= 0; i
< length
; i
++) {
111 const struct side_arg_vec elem
= side_arg_u32(ctx
->ptr
[i
]);
113 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
114 return SIDE_VISITOR_STATUS_ERROR
;
116 return SIDE_VISITOR_STATUS_OK
;
119 static uint32_t testarray
[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
121 static side_define_event(my_provider_event_vla_visitor
, "myprovider", "myvlavisit", SIDE_LOGLEVEL_DEBUG
,
123 side_field_vla_visitor("vlavisit", side_elem(side_type_u32(side_attr_list())), test_visitor
, side_attr_list()),
124 side_field_s64("v", side_attr_list()),
130 void test_vla_visitor(void)
132 my_provider_event_vla_visitor
.enabled
= 1;
133 side_event_cond(&my_provider_event_vla_visitor
) {
134 struct app_visitor_ctx ctx
= {
136 .length
= SIDE_ARRAY_SIZE(testarray
),
138 side_event_call(&my_provider_event_vla_visitor
, side_arg_list(side_arg_vla_visitor(&ctx
), side_arg_s64(42)));
142 /* 2D array visitor */
144 struct app_visitor_2d_inner_ctx
{
150 enum side_visitor_status
test_inner_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
152 struct app_visitor_2d_inner_ctx
*ctx
= (struct app_visitor_2d_inner_ctx
*) _ctx
;
153 uint32_t length
= ctx
->length
, i
;
155 for (i
= 0; i
< length
; i
++) {
156 const struct side_arg_vec elem
= side_arg_u32(ctx
->ptr
[i
]);
158 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
159 return SIDE_VISITOR_STATUS_ERROR
;
161 return SIDE_VISITOR_STATUS_OK
;
164 struct app_visitor_2d_outer_ctx
{
165 const uint32_t (*ptr
)[2];
170 enum side_visitor_status
test_outer_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
172 struct app_visitor_2d_outer_ctx
*ctx
= (struct app_visitor_2d_outer_ctx
*) _ctx
;
173 uint32_t length
= ctx
->length
, i
;
175 for (i
= 0; i
< length
; i
++) {
176 struct app_visitor_2d_inner_ctx inner_ctx
= {
180 const struct side_arg_vec elem
= side_arg_vla_visitor(&inner_ctx
);
181 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
182 return SIDE_VISITOR_STATUS_ERROR
;
184 return SIDE_VISITOR_STATUS_OK
;
187 static uint32_t testarray2d
[][2] = {
193 static side_define_event(my_provider_event_vla_visitor2d
, "myprovider", "myvlavisit2d", SIDE_LOGLEVEL_DEBUG
,
195 side_field_vla_visitor("vlavisit2d",
197 side_type_vla_visitor(
198 side_elem(side_type_u32(side_attr_list())),
201 ), test_outer_visitor
, side_attr_list()),
202 side_field_s64("v", side_attr_list()),
208 void test_vla_visitor_2d(void)
210 my_provider_event_vla_visitor2d
.enabled
= 1;
211 side_event_cond(&my_provider_event_vla_visitor2d
) {
212 struct app_visitor_2d_outer_ctx ctx
= {
214 .length
= SIDE_ARRAY_SIZE(testarray2d
),
216 side_event_call(&my_provider_event_vla_visitor2d
, side_arg_list(side_arg_vla_visitor(&ctx
), side_arg_s64(42)));
220 static int64_t array_fixint
[] = { -444, 555, 123, 2897432587 };
222 static side_define_event(my_provider_event_array_fixint
, "myprovider", "myarrayfixint", SIDE_LOGLEVEL_DEBUG
,
224 side_field_array("arrfixint", side_elem(side_type_s64(side_attr_list())), SIDE_ARRAY_SIZE(array_fixint
), side_attr_list()),
225 side_field_s64("v", side_attr_list()),
231 void test_array_fixint(void)
233 my_provider_event_array_fixint
.enabled
= 1;
234 side_event(&my_provider_event_array_fixint
,
235 side_arg_list(side_arg_array_s64(array_fixint
), side_arg_s64(42)));
238 static int64_t vla_fixint
[] = { -444, 555, 123, 2897432587 };
240 static side_define_event(my_provider_event_vla_fixint
, "myprovider", "myvlafixint", SIDE_LOGLEVEL_DEBUG
,
242 side_field_vla("vlafixint", side_elem(side_type_s64(side_attr_list())), side_attr_list()),
243 side_field_s64("v", side_attr_list()),
249 void test_vla_fixint(void)
251 my_provider_event_vla_fixint
.enabled
= 1;
252 side_event(&my_provider_event_vla_fixint
,
253 side_arg_list(side_arg_vla_s64(vla_fixint
, SIDE_ARRAY_SIZE(vla_fixint
)), side_arg_s64(42)));
256 static side_define_event(my_provider_event_dynamic_basic
,
257 "myprovider", "mydynamicbasic", SIDE_LOGLEVEL_DEBUG
,
259 side_field_dynamic("dynamic", side_attr_list()),
265 void test_dynamic_basic_type(void)
267 my_provider_event_dynamic_basic
.enabled
= 1;
268 side_event(&my_provider_event_dynamic_basic
,
269 side_arg_list(side_arg_dynamic(side_arg_dynamic_s16(-33, side_attr_list()))));
272 static side_define_event(my_provider_event_dynamic_vla
,
273 "myprovider", "mydynamicvla", SIDE_LOGLEVEL_DEBUG
,
275 side_field_dynamic("dynamic", side_attr_list()),
281 void test_dynamic_vla(void)
283 side_arg_dynamic_define_vec(myvla
,
285 side_arg_dynamic_u32(1, side_attr_list()),
286 side_arg_dynamic_u32(2, side_attr_list()),
287 side_arg_dynamic_u32(3, side_attr_list()),
290 my_provider_event_dynamic_vla
.enabled
= 1;
291 side_event(&my_provider_event_dynamic_vla
,
292 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
, side_attr_list()))));
295 static side_define_event(my_provider_event_dynamic_null
,
296 "myprovider", "mydynamicnull", SIDE_LOGLEVEL_DEBUG
,
298 side_field_dynamic("dynamic", side_attr_list()),
304 void test_dynamic_null(void)
306 my_provider_event_dynamic_null
.enabled
= 1;
307 side_event(&my_provider_event_dynamic_null
,
308 side_arg_list(side_arg_dynamic(side_arg_dynamic_null(side_attr_list()))));
311 static side_define_event(my_provider_event_dynamic_struct
,
312 "myprovider", "mydynamicstruct", SIDE_LOGLEVEL_DEBUG
,
314 side_field_dynamic("dynamic", side_attr_list()),
320 void test_dynamic_struct(void)
322 side_arg_dynamic_define_struct(mystruct
,
324 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
325 side_arg_dynamic_field("b", side_arg_dynamic_string("zzz", side_attr_list())),
326 side_arg_dynamic_field("c", side_arg_dynamic_null(side_attr_list())),
330 my_provider_event_dynamic_struct
.enabled
= 1;
331 side_event(&my_provider_event_dynamic_struct
,
332 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct
, side_attr_list()))));
335 static side_define_event(my_provider_event_dynamic_nested_struct
,
336 "myprovider", "mydynamicnestedstruct", SIDE_LOGLEVEL_DEBUG
,
338 side_field_dynamic("dynamic", side_attr_list()),
344 void test_dynamic_nested_struct(void)
346 side_arg_dynamic_define_struct(nested
,
348 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
349 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
352 side_arg_dynamic_define_struct(nested2
,
354 side_arg_dynamic_field("aa", side_arg_dynamic_u64(128, side_attr_list())),
355 side_arg_dynamic_field("bb", side_arg_dynamic_u16(1, side_attr_list())),
358 side_arg_dynamic_define_struct(mystruct
,
360 side_arg_dynamic_field("nested", side_arg_dynamic_struct(&nested
, side_attr_list())),
361 side_arg_dynamic_field("nested2", side_arg_dynamic_struct(&nested2
, side_attr_list())),
364 my_provider_event_dynamic_nested_struct
.enabled
= 1;
365 side_event(&my_provider_event_dynamic_nested_struct
,
366 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct
, side_attr_list()))));
369 static side_define_event(my_provider_event_dynamic_vla_struct
,
370 "myprovider", "mydynamicvlastruct", SIDE_LOGLEVEL_DEBUG
,
372 side_field_dynamic("dynamic", side_attr_list()),
378 void test_dynamic_vla_struct(void)
380 side_arg_dynamic_define_struct(nested
,
382 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
383 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
386 side_arg_dynamic_define_vec(myvla
,
388 side_arg_dynamic_struct(&nested
, side_attr_list()),
389 side_arg_dynamic_struct(&nested
, side_attr_list()),
390 side_arg_dynamic_struct(&nested
, side_attr_list()),
391 side_arg_dynamic_struct(&nested
, side_attr_list()),
394 my_provider_event_dynamic_vla_struct
.enabled
= 1;
395 side_event(&my_provider_event_dynamic_vla_struct
,
396 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
, side_attr_list()))));
399 static side_define_event(my_provider_event_dynamic_struct_vla
,
400 "myprovider", "mydynamicstructvla", SIDE_LOGLEVEL_DEBUG
,
402 side_field_dynamic("dynamic", side_attr_list()),
408 void test_dynamic_struct_vla(void)
410 side_arg_dynamic_define_vec(myvla
,
412 side_arg_dynamic_u32(1, side_attr_list()),
413 side_arg_dynamic_u32(2, side_attr_list()),
414 side_arg_dynamic_u32(3, side_attr_list()),
417 side_arg_dynamic_define_vec(myvla2
,
419 side_arg_dynamic_u32(4, side_attr_list()),
420 side_arg_dynamic_u64(5, side_attr_list()),
421 side_arg_dynamic_u32(6, side_attr_list()),
424 side_arg_dynamic_define_struct(mystruct
,
426 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla
, side_attr_list())),
427 side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2
, side_attr_list())),
430 my_provider_event_dynamic_struct_vla
.enabled
= 1;
431 side_event(&my_provider_event_dynamic_struct_vla
,
432 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct
, side_attr_list()))));
435 static side_define_event(my_provider_event_dynamic_nested_vla
,
436 "myprovider", "mydynamicnestedvla", SIDE_LOGLEVEL_DEBUG
,
438 side_field_dynamic("dynamic", side_attr_list()),
444 void test_dynamic_nested_vla(void)
446 side_arg_dynamic_define_vec(nestedvla
,
448 side_arg_dynamic_u32(1, side_attr_list()),
449 side_arg_dynamic_u16(2, side_attr_list()),
450 side_arg_dynamic_u32(3, side_attr_list()),
453 side_arg_dynamic_define_vec(nestedvla2
,
455 side_arg_dynamic_u8(4, side_attr_list()),
456 side_arg_dynamic_u32(5, side_attr_list()),
457 side_arg_dynamic_u32(6, side_attr_list()),
460 side_arg_dynamic_define_vec(myvla
,
462 side_arg_dynamic_vla(&nestedvla
, side_attr_list()),
463 side_arg_dynamic_vla(&nestedvla2
, side_attr_list()),
466 my_provider_event_dynamic_nested_vla
.enabled
= 1;
467 side_event(&my_provider_event_dynamic_nested_vla
,
468 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
, side_attr_list()))));
471 static side_define_event_variadic(my_provider_event_variadic
,
472 "myprovider", "myvariadicevent", SIDE_LOGLEVEL_DEBUG
,
478 void test_variadic(void)
480 my_provider_event_variadic
.enabled
= 1;
481 side_event_variadic(&my_provider_event_variadic
,
484 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
485 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
490 static side_define_event_variadic(my_provider_event_static_variadic
,
491 "myprovider", "mystaticvariadicevent", SIDE_LOGLEVEL_DEBUG
,
493 side_field_u32("abc", side_attr_list()),
494 side_field_u16("def", side_attr_list()),
500 void test_static_variadic(void)
502 my_provider_event_static_variadic
.enabled
= 1;
503 side_event_variadic(&my_provider_event_static_variadic
,
509 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
510 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
515 static side_define_event(my_provider_event_bool
, "myprovider", "myeventbool", SIDE_LOGLEVEL_DEBUG
,
517 side_field_bool("a_false", side_attr_list()),
518 side_field_bool("b_true", side_attr_list()),
519 side_field_bool("c_true", side_attr_list()),
520 side_field_bool("d_true", side_attr_list()),
521 side_field_bool("e_true", side_attr_list()),
522 side_field_bool("f_false", side_attr_list()),
523 side_field_bool("g_true", side_attr_list()),
533 uint64_t c
= 0x12345678;
539 my_provider_event_bool
.enabled
= 1;
540 side_event(&my_provider_event_bool
,
553 static side_define_event_variadic(my_provider_event_dynamic_bool
,
554 "myprovider", "mydynamicbool", SIDE_LOGLEVEL_DEBUG
,
560 void test_dynamic_bool(void)
562 my_provider_event_dynamic_bool
.enabled
= 1;
563 side_event_variadic(&my_provider_event_dynamic_bool
,
566 side_arg_dynamic_field("a_true", side_arg_dynamic_bool(55, side_attr_list())),
567 side_arg_dynamic_field("b_true", side_arg_dynamic_bool(-4, side_attr_list())),
568 side_arg_dynamic_field("c_false", side_arg_dynamic_bool(0, side_attr_list())),
569 side_arg_dynamic_field("d_true", side_arg_dynamic_bool(256, side_attr_list())),
574 static side_define_event(my_provider_event_dynamic_vla_visitor
,
575 "myprovider", "mydynamicvlavisitor", SIDE_LOGLEVEL_DEBUG
,
577 side_field_dynamic("dynamic", side_attr_list()),
582 struct app_dynamic_vla_visitor_ctx
{
588 enum side_visitor_status
test_dynamic_vla_visitor(const struct side_tracer_dynamic_vla_visitor_ctx
*tracer_ctx
, void *_ctx
)
590 struct app_dynamic_vla_visitor_ctx
*ctx
= (struct app_dynamic_vla_visitor_ctx
*) _ctx
;
591 uint32_t length
= ctx
->length
, i
;
593 for (i
= 0; i
< length
; i
++) {
594 const struct side_arg_dynamic_vec elem
= {
595 .dynamic_type
= SIDE_DYNAMIC_TYPE_U32
,
599 .side_u32
= ctx
->ptr
[i
],
602 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
603 return SIDE_VISITOR_STATUS_ERROR
;
605 return SIDE_VISITOR_STATUS_OK
;
608 static uint32_t testarray_dynamic_vla
[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
611 void test_dynamic_vla_with_visitor(void)
613 my_provider_event_dynamic_vla_visitor
.enabled
= 1;
614 side_event_cond(&my_provider_event_dynamic_vla_visitor
) {
615 struct app_dynamic_vla_visitor_ctx ctx
= {
616 .ptr
= testarray_dynamic_vla
,
617 .length
= SIDE_ARRAY_SIZE(testarray_dynamic_vla
),
619 side_event_call(&my_provider_event_dynamic_vla_visitor
,
622 side_arg_dynamic_vla_visitor(test_dynamic_vla_visitor
, &ctx
, side_attr_list())
629 static side_define_event(my_provider_event_dynamic_struct_visitor
,
630 "myprovider", "mydynamicstructvisitor", SIDE_LOGLEVEL_DEBUG
,
632 side_field_dynamic("dynamic", side_attr_list()),
637 struct struct_visitor_pair
{
642 struct app_dynamic_struct_visitor_ctx
{
643 const struct struct_visitor_pair
*ptr
;
648 enum side_visitor_status
test_dynamic_struct_visitor(const struct side_tracer_dynamic_struct_visitor_ctx
*tracer_ctx
, void *_ctx
)
650 struct app_dynamic_struct_visitor_ctx
*ctx
= (struct app_dynamic_struct_visitor_ctx
*) _ctx
;
651 uint32_t length
= ctx
->length
, i
;
653 for (i
= 0; i
< length
; i
++) {
654 struct side_arg_dynamic_event_field dynamic_field
= {
655 .field_name
= ctx
->ptr
[i
].name
,
657 .dynamic_type
= SIDE_DYNAMIC_TYPE_U32
,
661 .side_u32
= ctx
->ptr
[i
].value
,
665 if (tracer_ctx
->write_field(tracer_ctx
, &dynamic_field
) != SIDE_VISITOR_STATUS_OK
)
666 return SIDE_VISITOR_STATUS_ERROR
;
668 return SIDE_VISITOR_STATUS_OK
;
671 static struct struct_visitor_pair testarray_dynamic_struct
[] = {
679 void test_dynamic_struct_with_visitor(void)
681 my_provider_event_dynamic_struct_visitor
.enabled
= 1;
682 side_event_cond(&my_provider_event_dynamic_struct_visitor
) {
683 struct app_dynamic_struct_visitor_ctx ctx
= {
684 .ptr
= testarray_dynamic_struct
,
685 .length
= SIDE_ARRAY_SIZE(testarray_dynamic_struct
),
687 side_event_call(&my_provider_event_dynamic_struct_visitor
,
690 side_arg_dynamic_struct_visitor(test_dynamic_struct_visitor
, &ctx
, side_attr_list())
697 static side_define_event(my_provider_event_user_attribute
, "myprovider", "myevent_user_attribute", SIDE_LOGLEVEL_DEBUG
,
699 side_field_u32("abc", side_attr_list()),
700 side_field_s64("def", side_attr_list()),
703 side_attr("user_attribute_a", side_attr_string("val1")),
704 side_attr("user_attribute_b", side_attr_string("val2")),
709 void test_event_user_attribute(void)
711 my_provider_event_user_attribute
.enabled
= 1;
712 side_event(&my_provider_event_user_attribute
, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
715 static side_define_event(my_provider_field_user_attribute
, "myprovider", "myevent_field_attribute", SIDE_LOGLEVEL_DEBUG
,
717 side_field_u32("abc",
719 side_attr("user_attribute_a", side_attr_string("val1")),
720 side_attr("user_attribute_b", side_attr_u32(2)),
723 side_field_s64("def",
725 side_attr("user_attribute_c", side_attr_string("val3")),
726 side_attr("user_attribute_d", side_attr_s64(-5)),
734 void test_field_user_attribute(void)
736 my_provider_field_user_attribute
.enabled
= 1;
737 side_event(&my_provider_field_user_attribute
, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
740 static side_define_event_variadic(my_provider_event_variadic_attr
,
741 "myprovider", "myvariadiceventattr", SIDE_LOGLEVEL_DEBUG
,
747 void test_variadic_attr(void)
749 my_provider_event_variadic_attr
.enabled
= 1;
750 side_event_variadic(&my_provider_event_variadic_attr
,
753 side_arg_dynamic_field("a",
754 side_arg_dynamic_u32(55,
756 side_attr("user_attribute_c", side_attr_string("valX")),
757 side_attr("user_attribute_d", side_attr_u8(55)),
761 side_arg_dynamic_field("b",
762 side_arg_dynamic_s8(-4,
764 side_attr("X", side_attr_u8(1)),
765 side_attr("Y", side_attr_s8(2)),
773 static side_define_event_variadic(my_provider_event_variadic_vla_attr
,
774 "myprovider", "myvariadiceventvlaattr", SIDE_LOGLEVEL_DEBUG
,
780 void test_variadic_vla_attr(void)
782 side_arg_dynamic_define_vec(myvla
,
784 side_arg_dynamic_u32(1,
786 side_attr("Z", side_attr_u8(0)),
787 side_attr("A", side_attr_u8(123)),
790 side_arg_dynamic_u32(2, side_attr_list()),
791 side_arg_dynamic_u32(3, side_attr_list()),
794 my_provider_event_variadic_vla_attr
.enabled
= 1;
795 side_event_variadic(&my_provider_event_variadic_vla_attr
,
798 side_arg_dynamic_field("a",
799 side_arg_dynamic_vla(&myvla
,
801 side_attr("X", side_attr_u8(1)),
802 side_attr("Y", side_attr_u8(2)),
810 static side_define_event_variadic(my_provider_event_variadic_struct_attr
,
811 "myprovider", "myvariadiceventstructattr", SIDE_LOGLEVEL_DEBUG
,
817 void test_variadic_struct_attr(void)
819 my_provider_event_variadic_struct_attr
.enabled
= 1;
820 side_event_cond(&my_provider_event_variadic_struct_attr
) {
821 side_arg_dynamic_define_struct(mystruct
,
823 side_arg_dynamic_field("a",
824 side_arg_dynamic_u32(43,
826 side_attr("A", side_attr_bool(true)),
830 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
833 side_event_call_variadic(&my_provider_event_variadic_struct_attr
,
836 side_arg_dynamic_field("a",
837 side_arg_dynamic_struct(&mystruct
,
839 side_attr("X", side_attr_u8(1)),
840 side_attr("Y", side_attr_u8(2)),
849 static side_define_event(my_provider_event_float
, "myprovider", "myeventfloat", SIDE_LOGLEVEL_DEBUG
,
852 side_field_float_binary16("binary16", side_attr_list()),
855 side_field_float_binary32("binary32", side_attr_list()),
858 side_field_float_binary64("binary64", side_attr_list()),
861 side_field_float_binary128("binary128", side_attr_list()),
868 void test_float(void)
870 my_provider_event_float
.enabled
= 1;
871 side_event(&my_provider_event_float
,
874 side_arg_float_binary16(1.1),
877 side_arg_float_binary32(2.2),
880 side_arg_float_binary64(3.3),
883 side_arg_float_binary128(4.4),
889 static side_define_event_variadic(my_provider_event_variadic_float
,
890 "myprovider", "myvariadicfloat", SIDE_LOGLEVEL_DEBUG
,
896 void test_variadic_float(void)
898 my_provider_event_variadic_float
.enabled
= 1;
899 side_event_variadic(&my_provider_event_variadic_float
,
903 side_arg_dynamic_field("binary16",
904 side_arg_dynamic_float_binary16(1.1, side_attr_list())
908 side_arg_dynamic_field("binary32",
909 side_arg_dynamic_float_binary32(2.2, side_attr_list())
913 side_arg_dynamic_field("binary64",
914 side_arg_dynamic_float_binary64(3.3, side_attr_list())
918 side_arg_dynamic_field("binary128",
919 side_arg_dynamic_float_binary128(4.4, side_attr_list())
926 static side_define_enum(myenum
,
927 side_enum_mapping_list(
928 side_enum_mapping_range("one-ten", 1, 10),
929 side_enum_mapping_range("100-200", 100, 200),
930 side_enum_mapping_value("200", 200),
931 side_enum_mapping_value("300", 300),
935 static side_define_event(my_provider_event_enum
, "myprovider", "myeventenum", SIDE_LOGLEVEL_DEBUG
,
937 side_field_enum_u32("5", &myenum
, side_attr_list()),
938 side_field_enum_u64("400", &myenum
, side_attr_list()),
939 side_field_enum_u8("200", &myenum
, side_attr_list()),
940 side_field_enum_s8("-100", &myenum
, side_attr_list()),
948 my_provider_event_enum
.enabled
= 1;
949 side_event(&my_provider_event_enum
,
951 side_arg_enum_u32(5),
952 side_arg_enum_u64(400),
953 side_arg_enum_u8(200),
954 side_arg_enum_s8(-100),
959 /* A bitmap enum maps bits to labels. */
960 static side_define_enum_bitmap(myenum_bitmap
,
961 side_enum_bitmap_mapping_list(
962 side_enum_bitmap_mapping_value("0", 0),
963 side_enum_bitmap_mapping_range("1-2", 1, 2),
964 side_enum_bitmap_mapping_range("2-4", 2, 4),
965 side_enum_bitmap_mapping_value("3", 3),
966 side_enum_bitmap_mapping_value("30", 30),
967 side_enum_bitmap_mapping_value("63", 63),
971 static side_define_event(my_provider_event_enum_bitmap
, "myprovider", "myeventenumbitmap", SIDE_LOGLEVEL_DEBUG
,
973 side_field_enum_bitmap32("bit_0", &myenum_bitmap
, side_attr_list()),
974 side_field_enum_bitmap32("bit_1", &myenum_bitmap
, side_attr_list()),
975 side_field_enum_bitmap8("bit_2", &myenum_bitmap
, side_attr_list()),
976 side_field_enum_bitmap8("bit_3", &myenum_bitmap
, side_attr_list()),
977 side_field_enum_bitmap32("bit_30", &myenum_bitmap
, side_attr_list()),
978 side_field_enum_bitmap32("bit_31", &myenum_bitmap
, side_attr_list()),
979 side_field_enum_bitmap64("bit_63", &myenum_bitmap
, side_attr_list()),
980 side_field_enum_bitmap64("bits_1+63", &myenum_bitmap
, side_attr_list()),
986 void test_enum_bitmap(void)
988 my_provider_event_enum_bitmap
.enabled
= 1;
989 side_event(&my_provider_event_enum_bitmap
,
991 side_arg_enum_bitmap32(1 << 0),
992 side_arg_enum_bitmap32(1 << 1),
993 side_arg_enum_bitmap8(1 << 2),
994 side_arg_enum_bitmap8(1 << 3),
995 side_arg_enum_bitmap32(1 << 30),
996 side_arg_enum_bitmap32(1 << 31),
997 side_arg_enum_bitmap64(1ULL << 63),
998 side_arg_enum_bitmap64((1ULL << 1) | (1ULL << 63)),
1003 static uint8_t blob_fixint
[] = { 0x55, 0x44, 0x33, 0x22, 0x11 };
1005 static side_define_event(my_provider_event_blob
, "myprovider", "myeventblob", SIDE_LOGLEVEL_DEBUG
,
1007 side_field_blob("blobfield", side_attr_list()),
1008 side_field_array("arrayblob", side_elem(side_type_blob(side_attr_list())), 3, side_attr_list()),
1009 side_field_array("arrayblobfix", side_elem(side_type_blob(side_attr_list())), SIDE_ARRAY_SIZE(blob_fixint
), side_attr_list()),
1010 side_field_vla("vlablobfix", side_elem(side_type_blob(side_attr_list())), side_attr_list()),
1016 void test_blob(void)
1018 my_provider_event_blob
.enabled
= 1;
1019 side_event_cond(&my_provider_event_blob
) {
1020 side_arg_define_vec(myarray
, side_arg_list(side_arg_blob(1), side_arg_blob(2), side_arg_blob(3)));
1021 side_event_call(&my_provider_event_blob
,
1023 side_arg_blob(0x55),
1024 side_arg_array(&myarray
),
1025 side_arg_array_blob(blob_fixint
),
1026 side_arg_vla_blob(blob_fixint
, SIDE_ARRAY_SIZE(blob_fixint
)),
1039 test_vla_visitor_2d();
1040 test_array_fixint();
1042 test_dynamic_basic_type();
1044 test_dynamic_null();
1045 test_dynamic_struct();
1046 test_dynamic_nested_struct();
1047 test_dynamic_vla_struct();
1048 test_dynamic_struct_vla();
1049 test_dynamic_nested_vla();
1051 test_static_variadic();
1053 test_dynamic_bool();
1054 test_dynamic_vla_with_visitor();
1055 test_dynamic_struct_with_visitor();
1056 test_event_user_attribute();
1057 test_field_user_attribute();
1058 test_variadic_attr();
1059 test_variadic_vla_attr();
1060 test_variadic_struct_attr();
1062 test_variadic_float();