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_event_struct_literal
, "myprovider", "myeventstructliteral", SIDE_LOGLEVEL_DEBUG
,
39 side_field_struct("structliteral",
42 side_field_u32("x", side_attr_list()),
43 side_field_s64("y", side_attr_list()),
48 side_field_u8("z", side_attr_list()),
54 void test_struct_literal(void)
56 my_provider_event_struct_literal_enabled
= 1;
57 side_event_cond(my_provider_event_struct_literal
) {
58 side_arg_define_vec(mystruct
, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
59 side_event_call(my_provider_event_struct_literal
, side_arg_list(side_arg_struct(&mystruct
), side_arg_u8(55)));
63 static side_define_struct(mystructdef
,
65 side_field_u32("x", side_attr_list()),
66 side_field_s64("y", side_attr_list()),
71 static side_define_event(my_provider_event_struct
, "myprovider", "myeventstruct", SIDE_LOGLEVEL_DEBUG
,
73 side_field_struct("struct", &mystructdef
),
74 side_field_u8("z", side_attr_list()),
80 void test_struct(void)
82 my_provider_event_struct_enabled
= 1;
83 side_event_cond(my_provider_event_struct
) {
84 side_arg_define_vec(mystruct
, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
85 side_event_call(my_provider_event_struct
, side_arg_list(side_arg_struct(&mystruct
), side_arg_u8(55)));
89 static side_define_event(my_provider_event_array
, "myprovider", "myarray", SIDE_LOGLEVEL_DEBUG
,
91 side_field_array("arr", side_elem(side_type_u32(side_attr_list())), 3, side_attr_list()),
92 side_field_s64("v", side_attr_list()),
100 my_provider_event_array_enabled
= 1;
101 side_event_cond(my_provider_event_array
) {
102 side_arg_define_vec(myarray
, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
103 side_event_call(my_provider_event_array
, side_arg_list(side_arg_array(&myarray
), side_arg_s64(42)));
107 static side_define_event(my_provider_event_vla
, "myprovider", "myvla", SIDE_LOGLEVEL_DEBUG
,
109 side_field_vla("vla", side_elem(side_type_u32(side_attr_list())), side_attr_list()),
110 side_field_s64("v", side_attr_list()),
118 my_provider_event_vla_enabled
= 1;
119 side_event_cond(my_provider_event_vla
) {
120 side_arg_define_vec(myvla
, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
121 side_event_call(my_provider_event_vla
, side_arg_list(side_arg_vla(&myvla
), side_arg_s64(42)));
125 /* 1D array visitor */
127 struct app_visitor_ctx
{
133 enum side_visitor_status
test_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
135 struct app_visitor_ctx
*ctx
= (struct app_visitor_ctx
*) _ctx
;
136 uint32_t length
= ctx
->length
, i
;
138 for (i
= 0; i
< length
; i
++) {
139 const struct side_arg_vec elem
= side_arg_u32(ctx
->ptr
[i
]);
141 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
142 return SIDE_VISITOR_STATUS_ERROR
;
144 return SIDE_VISITOR_STATUS_OK
;
147 static uint32_t testarray
[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
149 static side_define_event(my_provider_event_vla_visitor
, "myprovider", "myvlavisit", SIDE_LOGLEVEL_DEBUG
,
151 side_field_vla_visitor("vlavisit", side_elem(side_type_u32(side_attr_list())), test_visitor
, side_attr_list()),
152 side_field_s64("v", side_attr_list()),
158 void test_vla_visitor(void)
160 my_provider_event_vla_visitor_enabled
= 1;
161 side_event_cond(my_provider_event_vla_visitor
) {
162 struct app_visitor_ctx ctx
= {
164 .length
= SIDE_ARRAY_SIZE(testarray
),
166 side_event_call(my_provider_event_vla_visitor
, side_arg_list(side_arg_vla_visitor(&ctx
), side_arg_s64(42)));
170 /* 2D array visitor */
172 struct app_visitor_2d_inner_ctx
{
178 enum side_visitor_status
test_inner_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
180 struct app_visitor_2d_inner_ctx
*ctx
= (struct app_visitor_2d_inner_ctx
*) _ctx
;
181 uint32_t length
= ctx
->length
, i
;
183 for (i
= 0; i
< length
; i
++) {
184 const struct side_arg_vec elem
= side_arg_u32(ctx
->ptr
[i
]);
186 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
187 return SIDE_VISITOR_STATUS_ERROR
;
189 return SIDE_VISITOR_STATUS_OK
;
192 struct app_visitor_2d_outer_ctx
{
193 const uint32_t (*ptr
)[2];
198 enum side_visitor_status
test_outer_visitor(const struct side_tracer_visitor_ctx
*tracer_ctx
, void *_ctx
)
200 struct app_visitor_2d_outer_ctx
*ctx
= (struct app_visitor_2d_outer_ctx
*) _ctx
;
201 uint32_t length
= ctx
->length
, i
;
203 for (i
= 0; i
< length
; i
++) {
204 struct app_visitor_2d_inner_ctx inner_ctx
= {
208 const struct side_arg_vec elem
= side_arg_vla_visitor(&inner_ctx
);
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 static uint32_t testarray2d
[][2] = {
221 static side_define_event(my_provider_event_vla_visitor2d
, "myprovider", "myvlavisit2d", SIDE_LOGLEVEL_DEBUG
,
223 side_field_vla_visitor("vlavisit2d",
225 side_type_vla_visitor(
226 side_elem(side_type_u32(side_attr_list())),
229 ), test_outer_visitor
, side_attr_list()),
230 side_field_s64("v", side_attr_list()),
236 void test_vla_visitor_2d(void)
238 my_provider_event_vla_visitor2d_enabled
= 1;
239 side_event_cond(my_provider_event_vla_visitor2d
) {
240 struct app_visitor_2d_outer_ctx ctx
= {
242 .length
= SIDE_ARRAY_SIZE(testarray2d
),
244 side_event_call(my_provider_event_vla_visitor2d
, side_arg_list(side_arg_vla_visitor(&ctx
), side_arg_s64(42)));
248 static int64_t array_fixint
[] = { -444, 555, 123, 2897432587 };
250 static side_define_event(my_provider_event_array_fixint
, "myprovider", "myarrayfixint", SIDE_LOGLEVEL_DEBUG
,
252 side_field_array("arrfixint", side_elem(side_type_s64(side_attr_list())), SIDE_ARRAY_SIZE(array_fixint
), side_attr_list()),
253 side_field_s64("v", side_attr_list()),
259 void test_array_fixint(void)
261 my_provider_event_array_fixint_enabled
= 1;
262 side_event(my_provider_event_array_fixint
,
263 side_arg_list(side_arg_array_s64(array_fixint
), side_arg_s64(42)));
266 static int64_t vla_fixint
[] = { -444, 555, 123, 2897432587 };
268 static side_define_event(my_provider_event_vla_fixint
, "myprovider", "myvlafixint", SIDE_LOGLEVEL_DEBUG
,
270 side_field_vla("vlafixint", side_elem(side_type_s64(side_attr_list())), side_attr_list()),
271 side_field_s64("v", side_attr_list()),
277 void test_vla_fixint(void)
279 my_provider_event_vla_fixint_enabled
= 1;
280 side_event(my_provider_event_vla_fixint
,
281 side_arg_list(side_arg_vla_s64(vla_fixint
, SIDE_ARRAY_SIZE(vla_fixint
)), side_arg_s64(42)));
284 static side_define_event(my_provider_event_dynamic_basic
,
285 "myprovider", "mydynamicbasic", SIDE_LOGLEVEL_DEBUG
,
287 side_field_dynamic("dynamic", side_attr_list()),
293 void test_dynamic_basic_type(void)
295 my_provider_event_dynamic_basic_enabled
= 1;
296 side_event(my_provider_event_dynamic_basic
,
297 side_arg_list(side_arg_dynamic(side_arg_dynamic_s16(-33, side_attr_list()))));
300 static side_define_event(my_provider_event_dynamic_vla
,
301 "myprovider", "mydynamicvla", SIDE_LOGLEVEL_DEBUG
,
303 side_field_dynamic("dynamic", side_attr_list()),
309 void test_dynamic_vla(void)
311 side_arg_dynamic_define_vec(myvla
,
313 side_arg_dynamic_u32(1, side_attr_list()),
314 side_arg_dynamic_u32(2, side_attr_list()),
315 side_arg_dynamic_u32(3, side_attr_list()),
318 my_provider_event_dynamic_vla_enabled
= 1;
319 side_event(my_provider_event_dynamic_vla
,
320 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
, side_attr_list()))));
323 static side_define_event(my_provider_event_dynamic_null
,
324 "myprovider", "mydynamicnull", SIDE_LOGLEVEL_DEBUG
,
326 side_field_dynamic("dynamic", side_attr_list()),
332 void test_dynamic_null(void)
334 my_provider_event_dynamic_null_enabled
= 1;
335 side_event(my_provider_event_dynamic_null
,
336 side_arg_list(side_arg_dynamic(side_arg_dynamic_null(side_attr_list()))));
339 static side_define_event(my_provider_event_dynamic_struct
,
340 "myprovider", "mydynamicstruct", SIDE_LOGLEVEL_DEBUG
,
342 side_field_dynamic("dynamic", side_attr_list()),
348 void test_dynamic_struct(void)
350 side_arg_dynamic_define_struct(mystruct
,
352 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
353 side_arg_dynamic_field("b", side_arg_dynamic_string("zzz", side_attr_list())),
354 side_arg_dynamic_field("c", side_arg_dynamic_null(side_attr_list())),
358 my_provider_event_dynamic_struct_enabled
= 1;
359 side_event(my_provider_event_dynamic_struct
,
360 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct
, side_attr_list()))));
363 static side_define_event(my_provider_event_dynamic_nested_struct
,
364 "myprovider", "mydynamicnestedstruct", SIDE_LOGLEVEL_DEBUG
,
366 side_field_dynamic("dynamic", side_attr_list()),
372 void test_dynamic_nested_struct(void)
374 side_arg_dynamic_define_struct(nested
,
376 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
377 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
380 side_arg_dynamic_define_struct(nested2
,
382 side_arg_dynamic_field("aa", side_arg_dynamic_u64(128, side_attr_list())),
383 side_arg_dynamic_field("bb", side_arg_dynamic_u16(1, side_attr_list())),
386 side_arg_dynamic_define_struct(mystruct
,
388 side_arg_dynamic_field("nested", side_arg_dynamic_struct(&nested
, side_attr_list())),
389 side_arg_dynamic_field("nested2", side_arg_dynamic_struct(&nested2
, side_attr_list())),
392 my_provider_event_dynamic_nested_struct_enabled
= 1;
393 side_event(my_provider_event_dynamic_nested_struct
,
394 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct
, side_attr_list()))));
397 static side_define_event(my_provider_event_dynamic_vla_struct
,
398 "myprovider", "mydynamicvlastruct", SIDE_LOGLEVEL_DEBUG
,
400 side_field_dynamic("dynamic", side_attr_list()),
406 void test_dynamic_vla_struct(void)
408 side_arg_dynamic_define_struct(nested
,
410 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
411 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
414 side_arg_dynamic_define_vec(myvla
,
416 side_arg_dynamic_struct(&nested
, side_attr_list()),
417 side_arg_dynamic_struct(&nested
, side_attr_list()),
418 side_arg_dynamic_struct(&nested
, side_attr_list()),
419 side_arg_dynamic_struct(&nested
, side_attr_list()),
422 my_provider_event_dynamic_vla_struct_enabled
= 1;
423 side_event(my_provider_event_dynamic_vla_struct
,
424 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
, side_attr_list()))));
427 static side_define_event(my_provider_event_dynamic_struct_vla
,
428 "myprovider", "mydynamicstructvla", SIDE_LOGLEVEL_DEBUG
,
430 side_field_dynamic("dynamic", side_attr_list()),
436 void test_dynamic_struct_vla(void)
438 side_arg_dynamic_define_vec(myvla
,
440 side_arg_dynamic_u32(1, side_attr_list()),
441 side_arg_dynamic_u32(2, side_attr_list()),
442 side_arg_dynamic_u32(3, side_attr_list()),
445 side_arg_dynamic_define_vec(myvla2
,
447 side_arg_dynamic_u32(4, side_attr_list()),
448 side_arg_dynamic_u64(5, side_attr_list()),
449 side_arg_dynamic_u32(6, side_attr_list()),
452 side_arg_dynamic_define_struct(mystruct
,
454 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla
, side_attr_list())),
455 side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2
, side_attr_list())),
458 my_provider_event_dynamic_struct_vla_enabled
= 1;
459 side_event(my_provider_event_dynamic_struct_vla
,
460 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct
, side_attr_list()))));
463 static side_define_event(my_provider_event_dynamic_nested_vla
,
464 "myprovider", "mydynamicnestedvla", SIDE_LOGLEVEL_DEBUG
,
466 side_field_dynamic("dynamic", side_attr_list()),
472 void test_dynamic_nested_vla(void)
474 side_arg_dynamic_define_vec(nestedvla
,
476 side_arg_dynamic_u32(1, side_attr_list()),
477 side_arg_dynamic_u16(2, side_attr_list()),
478 side_arg_dynamic_u32(3, side_attr_list()),
481 side_arg_dynamic_define_vec(nestedvla2
,
483 side_arg_dynamic_u8(4, side_attr_list()),
484 side_arg_dynamic_u32(5, side_attr_list()),
485 side_arg_dynamic_u32(6, side_attr_list()),
488 side_arg_dynamic_define_vec(myvla
,
490 side_arg_dynamic_vla(&nestedvla
, side_attr_list()),
491 side_arg_dynamic_vla(&nestedvla2
, side_attr_list()),
494 my_provider_event_dynamic_nested_vla_enabled
= 1;
495 side_event(my_provider_event_dynamic_nested_vla
,
496 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla
, side_attr_list()))));
499 static side_define_event_variadic(my_provider_event_variadic
,
500 "myprovider", "myvariadicevent", SIDE_LOGLEVEL_DEBUG
,
506 void test_variadic(void)
508 my_provider_event_variadic_enabled
= 1;
509 side_event_variadic(my_provider_event_variadic
,
512 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
513 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
518 static side_define_event_variadic(my_provider_event_static_variadic
,
519 "myprovider", "mystaticvariadicevent", SIDE_LOGLEVEL_DEBUG
,
521 side_field_u32("abc", side_attr_list()),
522 side_field_u16("def", side_attr_list()),
528 void test_static_variadic(void)
530 my_provider_event_static_variadic_enabled
= 1;
531 side_event_variadic(my_provider_event_static_variadic
,
537 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
538 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
543 static side_define_event(my_provider_event_bool
, "myprovider", "myeventbool", SIDE_LOGLEVEL_DEBUG
,
545 side_field_bool("a_false", side_attr_list()),
546 side_field_bool("b_true", side_attr_list()),
547 side_field_bool("c_true", side_attr_list()),
548 side_field_bool("d_true", side_attr_list()),
549 side_field_bool("e_true", side_attr_list()),
550 side_field_bool("f_false", side_attr_list()),
551 side_field_bool("g_true", side_attr_list()),
561 uint64_t c
= 0x12345678;
567 my_provider_event_bool_enabled
= 1;
568 side_event(my_provider_event_bool
,
581 static side_define_event_variadic(my_provider_event_dynamic_bool
,
582 "myprovider", "mydynamicbool", SIDE_LOGLEVEL_DEBUG
,
588 void test_dynamic_bool(void)
590 my_provider_event_dynamic_bool_enabled
= 1;
591 side_event_variadic(my_provider_event_dynamic_bool
,
594 side_arg_dynamic_field("a_true", side_arg_dynamic_bool(55, side_attr_list())),
595 side_arg_dynamic_field("b_true", side_arg_dynamic_bool(-4, side_attr_list())),
596 side_arg_dynamic_field("c_false", side_arg_dynamic_bool(0, side_attr_list())),
597 side_arg_dynamic_field("d_true", side_arg_dynamic_bool(256, side_attr_list())),
602 static side_define_event(my_provider_event_dynamic_vla_visitor
,
603 "myprovider", "mydynamicvlavisitor", SIDE_LOGLEVEL_DEBUG
,
605 side_field_dynamic("dynamic", side_attr_list()),
610 struct app_dynamic_vla_visitor_ctx
{
616 enum side_visitor_status
test_dynamic_vla_visitor(const struct side_tracer_dynamic_vla_visitor_ctx
*tracer_ctx
, void *_ctx
)
618 struct app_dynamic_vla_visitor_ctx
*ctx
= (struct app_dynamic_vla_visitor_ctx
*) _ctx
;
619 uint32_t length
= ctx
->length
, i
;
621 for (i
= 0; i
< length
; i
++) {
622 const struct side_arg_dynamic_vec elem
= {
623 .dynamic_type
= SIDE_DYNAMIC_TYPE_U32
,
627 .side_u32
= ctx
->ptr
[i
],
630 if (tracer_ctx
->write_elem(tracer_ctx
, &elem
) != SIDE_VISITOR_STATUS_OK
)
631 return SIDE_VISITOR_STATUS_ERROR
;
633 return SIDE_VISITOR_STATUS_OK
;
636 static uint32_t testarray_dynamic_vla
[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
639 void test_dynamic_vla_with_visitor(void)
641 my_provider_event_dynamic_vla_visitor_enabled
= 1;
642 side_event_cond(my_provider_event_dynamic_vla_visitor
) {
643 struct app_dynamic_vla_visitor_ctx ctx
= {
644 .ptr
= testarray_dynamic_vla
,
645 .length
= SIDE_ARRAY_SIZE(testarray_dynamic_vla
),
647 side_event_call(my_provider_event_dynamic_vla_visitor
,
650 side_arg_dynamic_vla_visitor(test_dynamic_vla_visitor
, &ctx
, side_attr_list())
657 static side_define_event(my_provider_event_dynamic_struct_visitor
,
658 "myprovider", "mydynamicstructvisitor", SIDE_LOGLEVEL_DEBUG
,
660 side_field_dynamic("dynamic", side_attr_list()),
665 struct struct_visitor_pair
{
670 struct app_dynamic_struct_visitor_ctx
{
671 const struct struct_visitor_pair
*ptr
;
676 enum side_visitor_status
test_dynamic_struct_visitor(const struct side_tracer_dynamic_struct_visitor_ctx
*tracer_ctx
, void *_ctx
)
678 struct app_dynamic_struct_visitor_ctx
*ctx
= (struct app_dynamic_struct_visitor_ctx
*) _ctx
;
679 uint32_t length
= ctx
->length
, i
;
681 for (i
= 0; i
< length
; i
++) {
682 struct side_arg_dynamic_event_field dynamic_field
= {
683 .field_name
= ctx
->ptr
[i
].name
,
685 .dynamic_type
= SIDE_DYNAMIC_TYPE_U32
,
689 .side_u32
= ctx
->ptr
[i
].value
,
693 if (tracer_ctx
->write_field(tracer_ctx
, &dynamic_field
) != SIDE_VISITOR_STATUS_OK
)
694 return SIDE_VISITOR_STATUS_ERROR
;
696 return SIDE_VISITOR_STATUS_OK
;
699 static struct struct_visitor_pair testarray_dynamic_struct
[] = {
707 void test_dynamic_struct_with_visitor(void)
709 my_provider_event_dynamic_struct_visitor_enabled
= 1;
710 side_event_cond(my_provider_event_dynamic_struct_visitor
) {
711 struct app_dynamic_struct_visitor_ctx ctx
= {
712 .ptr
= testarray_dynamic_struct
,
713 .length
= SIDE_ARRAY_SIZE(testarray_dynamic_struct
),
715 side_event_call(my_provider_event_dynamic_struct_visitor
,
718 side_arg_dynamic_struct_visitor(test_dynamic_struct_visitor
, &ctx
, side_attr_list())
725 static side_define_event(my_provider_event_user_attribute
, "myprovider", "myevent_user_attribute", SIDE_LOGLEVEL_DEBUG
,
727 side_field_u32("abc", side_attr_list()),
728 side_field_s64("def", side_attr_list()),
731 side_attr("user_attribute_a", side_attr_string("val1")),
732 side_attr("user_attribute_b", side_attr_string("val2")),
737 void test_event_user_attribute(void)
739 my_provider_event_user_attribute_enabled
= 1;
740 side_event(my_provider_event_user_attribute
, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
743 static side_define_event(my_provider_field_user_attribute
, "myprovider", "myevent_field_attribute", SIDE_LOGLEVEL_DEBUG
,
745 side_field_u32("abc",
747 side_attr("user_attribute_a", side_attr_string("val1")),
748 side_attr("user_attribute_b", side_attr_u32(2)),
751 side_field_s64("def",
753 side_attr("user_attribute_c", side_attr_string("val3")),
754 side_attr("user_attribute_d", side_attr_s64(-5)),
762 void test_field_user_attribute(void)
764 my_provider_field_user_attribute_enabled
= 1;
765 side_event(my_provider_field_user_attribute
, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
768 static side_define_event_variadic(my_provider_event_variadic_attr
,
769 "myprovider", "myvariadiceventattr", SIDE_LOGLEVEL_DEBUG
,
775 void test_variadic_attr(void)
777 my_provider_event_variadic_attr_enabled
= 1;
778 side_event_variadic(my_provider_event_variadic_attr
,
781 side_arg_dynamic_field("a",
782 side_arg_dynamic_u32(55,
784 side_attr("user_attribute_c", side_attr_string("valX")),
785 side_attr("user_attribute_d", side_attr_u8(55)),
789 side_arg_dynamic_field("b",
790 side_arg_dynamic_s8(-4,
792 side_attr("X", side_attr_u8(1)),
793 side_attr("Y", side_attr_s8(2)),
801 static side_define_event_variadic(my_provider_event_variadic_vla_attr
,
802 "myprovider", "myvariadiceventvlaattr", SIDE_LOGLEVEL_DEBUG
,
808 void test_variadic_vla_attr(void)
810 side_arg_dynamic_define_vec(myvla
,
812 side_arg_dynamic_u32(1,
814 side_attr("Z", side_attr_u8(0)),
815 side_attr("A", side_attr_u8(123)),
818 side_arg_dynamic_u32(2, side_attr_list()),
819 side_arg_dynamic_u32(3, side_attr_list()),
822 my_provider_event_variadic_vla_attr_enabled
= 1;
823 side_event_variadic(my_provider_event_variadic_vla_attr
,
826 side_arg_dynamic_field("a",
827 side_arg_dynamic_vla(&myvla
,
829 side_attr("X", side_attr_u8(1)),
830 side_attr("Y", side_attr_u8(2)),
838 static side_define_event_variadic(my_provider_event_variadic_struct_attr
,
839 "myprovider", "myvariadiceventstructattr", SIDE_LOGLEVEL_DEBUG
,
845 void test_variadic_struct_attr(void)
847 my_provider_event_variadic_struct_attr_enabled
= 1;
848 side_event_cond(my_provider_event_variadic_struct_attr
) {
849 side_arg_dynamic_define_struct(mystruct
,
851 side_arg_dynamic_field("a",
852 side_arg_dynamic_u32(43,
854 side_attr("A", side_attr_bool(true)),
858 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
861 side_event_call_variadic(my_provider_event_variadic_struct_attr
,
864 side_arg_dynamic_field("a",
865 side_arg_dynamic_struct(&mystruct
,
867 side_attr("X", side_attr_u8(1)),
868 side_attr("Y", side_attr_u8(2)),
877 static side_define_event(my_provider_event_float
, "myprovider", "myeventfloat", SIDE_LOGLEVEL_DEBUG
,
880 side_field_float_binary16("binary16", side_attr_list()),
883 side_field_float_binary32("binary32", side_attr_list()),
886 side_field_float_binary64("binary64", side_attr_list()),
889 side_field_float_binary128("binary128", side_attr_list()),
896 void test_float(void)
898 my_provider_event_float_enabled
= 1;
899 side_event(my_provider_event_float
,
902 side_arg_float_binary16(1.1),
905 side_arg_float_binary32(2.2),
908 side_arg_float_binary64(3.3),
911 side_arg_float_binary128(4.4),
917 static side_define_event_variadic(my_provider_event_variadic_float
,
918 "myprovider", "myvariadicfloat", SIDE_LOGLEVEL_DEBUG
,
924 void test_variadic_float(void)
926 my_provider_event_variadic_float_enabled
= 1;
927 side_event_variadic(my_provider_event_variadic_float
,
931 side_arg_dynamic_field("binary16",
932 side_arg_dynamic_float_binary16(1.1, side_attr_list())
936 side_arg_dynamic_field("binary32",
937 side_arg_dynamic_float_binary32(2.2, side_attr_list())
941 side_arg_dynamic_field("binary64",
942 side_arg_dynamic_float_binary64(3.3, side_attr_list())
946 side_arg_dynamic_field("binary128",
947 side_arg_dynamic_float_binary128(4.4, side_attr_list())
954 static side_define_enum(myenum
,
955 side_enum_mapping_list(
956 side_enum_mapping_range("one-ten", 1, 10),
957 side_enum_mapping_range("100-200", 100, 200),
958 side_enum_mapping_value("200", 200),
959 side_enum_mapping_value("300", 300),
964 static side_define_event(my_provider_event_enum
, "myprovider", "myeventenum", SIDE_LOGLEVEL_DEBUG
,
966 side_field_enum_u32("5", &myenum
),
967 side_field_enum_u64("400", &myenum
),
968 side_field_enum_u8("200", &myenum
),
969 side_field_enum_s8("-100", &myenum
),
977 my_provider_event_enum_enabled
= 1;
978 side_event(my_provider_event_enum
,
980 side_arg_enum_u32(5),
981 side_arg_enum_u64(400),
982 side_arg_enum_u8(200),
983 side_arg_enum_s8(-100),
988 /* A bitmap enum maps bits to labels. */
989 static side_define_enum_bitmap(myenum_bitmap
,
990 side_enum_bitmap_mapping_list(
991 side_enum_bitmap_mapping_value("0", 0),
992 side_enum_bitmap_mapping_range("1-2", 1, 2),
993 side_enum_bitmap_mapping_range("2-4", 2, 4),
994 side_enum_bitmap_mapping_value("3", 3),
995 side_enum_bitmap_mapping_value("30", 30),
996 side_enum_bitmap_mapping_value("63", 63),
1001 static side_define_event(my_provider_event_enum_bitmap
, "myprovider", "myeventenumbitmap", SIDE_LOGLEVEL_DEBUG
,
1003 side_field_enum_bitmap32("bit_0", &myenum_bitmap
),
1004 side_field_enum_bitmap32("bit_1", &myenum_bitmap
),
1005 side_field_enum_bitmap8("bit_2", &myenum_bitmap
),
1006 side_field_enum_bitmap8("bit_3", &myenum_bitmap
),
1007 side_field_enum_bitmap32("bit_30", &myenum_bitmap
),
1008 side_field_enum_bitmap32("bit_31", &myenum_bitmap
),
1009 side_field_enum_bitmap64("bit_63", &myenum_bitmap
),
1010 side_field_enum_bitmap64("bits_1+63", &myenum_bitmap
),
1016 void test_enum_bitmap(void)
1018 my_provider_event_enum_bitmap_enabled
= 1;
1019 side_event(my_provider_event_enum_bitmap
,
1021 side_arg_enum_bitmap32(1 << 0),
1022 side_arg_enum_bitmap32(1 << 1),
1023 side_arg_enum_bitmap8(1 << 2),
1024 side_arg_enum_bitmap8(1 << 3),
1025 side_arg_enum_bitmap32(1 << 30),
1026 side_arg_enum_bitmap32(1 << 31),
1027 side_arg_enum_bitmap64(1ULL << 63),
1028 side_arg_enum_bitmap64((1ULL << 1) | (1ULL << 63)),
1033 static uint8_t blob_fixint
[] = { 0x55, 0x44, 0x33, 0x22, 0x11 };
1035 static side_define_event_variadic(my_provider_event_blob
, "myprovider", "myeventblob", SIDE_LOGLEVEL_DEBUG
,
1037 side_field_blob("blobfield", side_attr_list()),
1038 side_field_array("arrayblob", side_elem(side_type_blob(side_attr_list())), 3, side_attr_list()),
1039 side_field_array("arrayblobfix", side_elem(side_type_blob(side_attr_list())), SIDE_ARRAY_SIZE(blob_fixint
), side_attr_list()),
1040 side_field_vla("vlablobfix", side_elem(side_type_blob(side_attr_list())), side_attr_list()),
1046 void test_blob(void)
1048 my_provider_event_blob_enabled
= 1;
1049 side_event_cond(my_provider_event_blob
) {
1050 side_arg_define_vec(myarray
, side_arg_list(side_arg_blob(1), side_arg_blob(2), side_arg_blob(3)));
1051 side_arg_dynamic_define_vec(myvla
,
1053 side_arg_dynamic_blob(0x22, side_attr_list()),
1054 side_arg_dynamic_blob(0x33, side_attr_list()),
1057 side_event_call_variadic(my_provider_event_blob
,
1059 side_arg_blob(0x55),
1060 side_arg_array(&myarray
),
1061 side_arg_array_blob(blob_fixint
),
1062 side_arg_vla_blob(blob_fixint
, SIDE_ARRAY_SIZE(blob_fixint
)),
1065 side_arg_dynamic_field("varblobfield",
1066 side_arg_dynamic_blob(0x55, side_attr_list())
1068 side_arg_dynamic_field("varblobvla",
1069 side_arg_dynamic_vla(&myvla
, side_attr_list())
1079 test_struct_literal();
1084 test_vla_visitor_2d();
1085 test_array_fixint();
1087 test_dynamic_basic_type();
1089 test_dynamic_null();
1090 test_dynamic_struct();
1091 test_dynamic_nested_struct();
1092 test_dynamic_vla_struct();
1093 test_dynamic_struct_vla();
1094 test_dynamic_nested_vla();
1096 test_static_variadic();
1098 test_dynamic_bool();
1099 test_dynamic_vla_with_visitor();
1100 test_dynamic_struct_with_visitor();
1101 test_event_user_attribute();
1102 test_field_user_attribute();
1103 test_variadic_attr();
1104 test_variadic_vla_attr();
1105 test_variadic_struct_attr();
1107 test_variadic_float();