RCU: check for both period active readers initially
[libside.git] / src / test.c
CommitLineData
f611d0c3
MD
1// SPDX-License-Identifier: MIT
2/*
3 * Copyright 2022 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
4 */
5
6#include <stdint.h>
7#include <inttypes.h>
8#include <stdlib.h>
9#include <stdio.h>
4f40d951 10#include <stdbool.h>
f611d0c3
MD
11
12#include <side/trace.h>
13#include "tracer.h"
14
15/* User code example */
16
89747802 17side_static_event(my_provider_event, "myprovider", "myevent", SIDE_LOGLEVEL_DEBUG,
f611d0c3 18 side_field_list(
485b800a
MD
19 side_field_u32("abc", side_attr_list()),
20 side_field_s64("def", side_attr_list()),
21 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
22 ),
23 side_attr_list()
f611d0c3
MD
24);
25
26static
27void test_fields(void)
28{
29 uint32_t uw = 42;
30 int64_t sdw = -500;
31
89747802 32 side_event_enable__my_provider_event = 1;
d5cdb129 33 side_event(my_provider_event, side_arg_list(side_arg_u32(uw), side_arg_s64(sdw),
808bd9bf 34 side_arg_dynamic(side_arg_dynamic_string("zzz", side_attr_list()))));
f611d0c3
MD
35}
36
89747802
MD
37side_hidden_event(my_provider_event_hidden, "myprovider", "myeventhidden", SIDE_LOGLEVEL_DEBUG,
38 side_field_list(
39 side_field_u32("abc", side_attr_list()),
40 ),
41 side_attr_list()
42);
43
44static
45void test_event_hidden(void)
46{
47 side_event_enable__my_provider_event_hidden = 1;
48 side_event(my_provider_event_hidden, side_arg_list(side_arg_u32(2)));
49}
50
51side_declare_event(my_provider_event_export);
52
53side_export_event(my_provider_event_export, "myprovider", "myeventexport", SIDE_LOGLEVEL_DEBUG,
54 side_field_list(
55 side_field_u32("abc", side_attr_list()),
56 ),
57 side_attr_list()
58);
59
60static
61void test_event_export(void)
62{
63 side_event_enable__my_provider_event_export = 1;
64 side_event(my_provider_event_export, side_arg_list(side_arg_u32(2)));
65}
66
67side_static_event(my_provider_event_struct_literal, "myprovider", "myeventstructliteral", SIDE_LOGLEVEL_DEBUG,
f611d0c3 68 side_field_list(
c7a14585
MD
69 side_field_struct("structliteral",
70 side_struct_literal(
71 side_field_list(
72 side_field_u32("x", side_attr_list()),
73 side_field_s64("y", side_attr_list()),
74 ),
75 side_attr_list()
76 )
f611d0c3 77 ),
485b800a 78 side_field_u8("z", side_attr_list()),
399c836b
MD
79 ),
80 side_attr_list()
f611d0c3
MD
81);
82
c7a14585
MD
83static
84void test_struct_literal(void)
85{
89747802 86 side_event_enable__my_provider_event_struct_literal = 1;
c7a14585
MD
87 side_event_cond(my_provider_event_struct_literal) {
88 side_arg_define_vec(mystruct, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
89 side_event_call(my_provider_event_struct_literal, side_arg_list(side_arg_struct(&mystruct), side_arg_u8(55)));
90 }
91}
92
93static side_define_struct(mystructdef,
94 side_field_list(
95 side_field_u32("x", side_attr_list()),
96 side_field_s64("y", side_attr_list()),
97 ),
98 side_attr_list()
99);
100
89747802 101side_static_event(my_provider_event_struct, "myprovider", "myeventstruct", SIDE_LOGLEVEL_DEBUG,
c7a14585
MD
102 side_field_list(
103 side_field_struct("struct", &mystructdef),
104 side_field_u8("z", side_attr_list()),
105 ),
106 side_attr_list()
107);
108
f611d0c3
MD
109static
110void test_struct(void)
111{
89747802 112 side_event_enable__my_provider_event_struct = 1;
c7a14585 113 side_event_cond(my_provider_event_struct) {
f611d0c3 114 side_arg_define_vec(mystruct, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
c7a14585 115 side_event_call(my_provider_event_struct, side_arg_list(side_arg_struct(&mystruct), side_arg_u8(55)));
f611d0c3
MD
116 }
117}
118
89747802 119side_static_event(my_provider_event_array, "myprovider", "myarray", SIDE_LOGLEVEL_DEBUG,
f611d0c3 120 side_field_list(
9a55f555 121 side_field_array("arr", side_elem(side_type_u32(side_attr_list())), 3, side_attr_list()),
485b800a 122 side_field_s64("v", side_attr_list()),
399c836b
MD
123 ),
124 side_attr_list()
f611d0c3
MD
125);
126
127static
128void test_array(void)
129{
89747802 130 side_event_enable__my_provider_event_array = 1;
d5cdb129 131 side_event_cond(my_provider_event_array) {
f611d0c3 132 side_arg_define_vec(myarray, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
d5cdb129 133 side_event_call(my_provider_event_array, side_arg_list(side_arg_array(&myarray), side_arg_s64(42)));
f611d0c3
MD
134 }
135}
136
89747802 137side_static_event(my_provider_event_vla, "myprovider", "myvla", SIDE_LOGLEVEL_DEBUG,
f611d0c3 138 side_field_list(
9a55f555 139 side_field_vla("vla", side_elem(side_type_u32(side_attr_list())), side_attr_list()),
485b800a 140 side_field_s64("v", side_attr_list()),
399c836b
MD
141 ),
142 side_attr_list()
f611d0c3
MD
143);
144
145static
146void test_vla(void)
147{
89747802 148 side_event_enable__my_provider_event_vla = 1;
d5cdb129 149 side_event_cond(my_provider_event_vla) {
f611d0c3 150 side_arg_define_vec(myvla, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
d5cdb129 151 side_event_call(my_provider_event_vla, side_arg_list(side_arg_vla(&myvla), side_arg_s64(42)));
f611d0c3
MD
152 }
153}
154
cdd6e858
MD
155/* 1D array visitor */
156
f611d0c3
MD
157struct app_visitor_ctx {
158 const uint32_t *ptr;
352a4b77 159 uint32_t length;
f611d0c3
MD
160};
161
352a4b77
MD
162static
163enum side_visitor_status test_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
f611d0c3
MD
164{
165 struct app_visitor_ctx *ctx = (struct app_visitor_ctx *) _ctx;
352a4b77
MD
166 uint32_t length = ctx->length, i;
167
168 for (i = 0; i < length; i++) {
ffb5c809
MD
169 const struct side_arg_vec elem = side_arg_u32(ctx->ptr[i]);
170
db6ecef9
MD
171 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
172 return SIDE_VISITOR_STATUS_ERROR;
352a4b77 173 }
f611d0c3
MD
174 return SIDE_VISITOR_STATUS_OK;
175}
176
177static uint32_t testarray[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
178
89747802 179side_static_event(my_provider_event_vla_visitor, "myprovider", "myvlavisit", SIDE_LOGLEVEL_DEBUG,
f611d0c3 180 side_field_list(
9a55f555 181 side_field_vla_visitor("vlavisit", side_elem(side_type_u32(side_attr_list())), test_visitor, side_attr_list()),
485b800a 182 side_field_s64("v", side_attr_list()),
399c836b
MD
183 ),
184 side_attr_list()
f611d0c3
MD
185);
186
187static
188void test_vla_visitor(void)
189{
89747802 190 side_event_enable__my_provider_event_vla_visitor = 1;
d5cdb129 191 side_event_cond(my_provider_event_vla_visitor) {
f611d0c3
MD
192 struct app_visitor_ctx ctx = {
193 .ptr = testarray,
352a4b77 194 .length = SIDE_ARRAY_SIZE(testarray),
f611d0c3 195 };
d5cdb129 196 side_event_call(my_provider_event_vla_visitor, side_arg_list(side_arg_vla_visitor(&ctx), side_arg_s64(42)));
f611d0c3
MD
197 }
198}
199
cdd6e858
MD
200/* 2D array visitor */
201
202struct app_visitor_2d_inner_ctx {
203 const uint32_t *ptr;
204 uint32_t length;
205};
206
207static
208enum side_visitor_status test_inner_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
209{
210 struct app_visitor_2d_inner_ctx *ctx = (struct app_visitor_2d_inner_ctx *) _ctx;
211 uint32_t length = ctx->length, i;
212
213 for (i = 0; i < length; i++) {
ffb5c809
MD
214 const struct side_arg_vec elem = side_arg_u32(ctx->ptr[i]);
215
db6ecef9
MD
216 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
217 return SIDE_VISITOR_STATUS_ERROR;
cdd6e858
MD
218 }
219 return SIDE_VISITOR_STATUS_OK;
220}
221
222struct app_visitor_2d_outer_ctx {
223 const uint32_t (*ptr)[2];
224 uint32_t length;
225};
226
227static
228enum side_visitor_status test_outer_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
229{
230 struct app_visitor_2d_outer_ctx *ctx = (struct app_visitor_2d_outer_ctx *) _ctx;
231 uint32_t length = ctx->length, i;
232
233 for (i = 0; i < length; i++) {
234 struct app_visitor_2d_inner_ctx inner_ctx = {
235 .ptr = ctx->ptr[i],
236 .length = 2,
237 };
238 const struct side_arg_vec elem = side_arg_vla_visitor(&inner_ctx);
db6ecef9
MD
239 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
240 return SIDE_VISITOR_STATUS_ERROR;
cdd6e858
MD
241 }
242 return SIDE_VISITOR_STATUS_OK;
243}
244
245static uint32_t testarray2d[][2] = {
246 { 1, 2 },
247 { 33, 44 },
248 { 55, 66 },
249};
250
89747802 251side_static_event(my_provider_event_vla_visitor2d, "myprovider", "myvlavisit2d", SIDE_LOGLEVEL_DEBUG,
cdd6e858
MD
252 side_field_list(
253 side_field_vla_visitor("vlavisit2d",
f37a556f 254 side_elem(
32ba58fc 255 side_type_vla_visitor(
9a55f555 256 side_elem(side_type_u32(side_attr_list())),
f37a556f
MD
257 test_inner_visitor,
258 side_attr_list())
259 ), test_outer_visitor, side_attr_list()),
485b800a 260 side_field_s64("v", side_attr_list()),
399c836b
MD
261 ),
262 side_attr_list()
cdd6e858
MD
263);
264
265static
266void test_vla_visitor_2d(void)
267{
89747802 268 side_event_enable__my_provider_event_vla_visitor2d = 1;
d5cdb129 269 side_event_cond(my_provider_event_vla_visitor2d) {
cdd6e858
MD
270 struct app_visitor_2d_outer_ctx ctx = {
271 .ptr = testarray2d,
272 .length = SIDE_ARRAY_SIZE(testarray2d),
273 };
d5cdb129 274 side_event_call(my_provider_event_vla_visitor2d, side_arg_list(side_arg_vla_visitor(&ctx), side_arg_s64(42)));
cdd6e858
MD
275 }
276}
277
ba845af5
MD
278static int64_t array_fixint[] = { -444, 555, 123, 2897432587 };
279
89747802 280side_static_event(my_provider_event_array_fixint, "myprovider", "myarrayfixint", SIDE_LOGLEVEL_DEBUG,
ba845af5 281 side_field_list(
9a55f555 282 side_field_array("arrfixint", side_elem(side_type_s64(side_attr_list())), SIDE_ARRAY_SIZE(array_fixint), side_attr_list()),
485b800a 283 side_field_s64("v", side_attr_list()),
399c836b
MD
284 ),
285 side_attr_list()
ba845af5
MD
286);
287
288static
289void test_array_fixint(void)
290{
89747802 291 side_event_enable__my_provider_event_array_fixint = 1;
d5cdb129 292 side_event(my_provider_event_array_fixint,
1533629f
MD
293 side_arg_list(side_arg_array_s64(array_fixint), side_arg_s64(42)));
294}
295
296static int64_t vla_fixint[] = { -444, 555, 123, 2897432587 };
297
89747802 298side_static_event(my_provider_event_vla_fixint, "myprovider", "myvlafixint", SIDE_LOGLEVEL_DEBUG,
1533629f 299 side_field_list(
9a55f555 300 side_field_vla("vlafixint", side_elem(side_type_s64(side_attr_list())), side_attr_list()),
485b800a 301 side_field_s64("v", side_attr_list()),
399c836b
MD
302 ),
303 side_attr_list()
1533629f
MD
304);
305
306static
307void test_vla_fixint(void)
308{
89747802 309 side_event_enable__my_provider_event_vla_fixint = 1;
d5cdb129 310 side_event(my_provider_event_vla_fixint,
1533629f 311 side_arg_list(side_arg_vla_s64(vla_fixint, SIDE_ARRAY_SIZE(vla_fixint)), side_arg_s64(42)));
ba845af5
MD
312}
313
89747802 314side_static_event(my_provider_event_dynamic_basic,
a2e2357e
MD
315 "myprovider", "mydynamicbasic", SIDE_LOGLEVEL_DEBUG,
316 side_field_list(
485b800a 317 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
318 ),
319 side_attr_list()
a2e2357e
MD
320);
321
322static
323void test_dynamic_basic_type(void)
324{
89747802 325 side_event_enable__my_provider_event_dynamic_basic = 1;
d5cdb129 326 side_event(my_provider_event_dynamic_basic,
808bd9bf 327 side_arg_list(side_arg_dynamic(side_arg_dynamic_s16(-33, side_attr_list()))));
a2e2357e
MD
328}
329
89747802 330side_static_event(my_provider_event_dynamic_vla,
a2e2357e
MD
331 "myprovider", "mydynamicvla", SIDE_LOGLEVEL_DEBUG,
332 side_field_list(
485b800a 333 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
334 ),
335 side_attr_list()
a2e2357e
MD
336);
337
338static
339void test_dynamic_vla(void)
340{
948e3e72
MD
341 side_arg_dynamic_define_vec(myvla,
342 side_arg_list(
808bd9bf
MD
343 side_arg_dynamic_u32(1, side_attr_list()),
344 side_arg_dynamic_u32(2, side_attr_list()),
345 side_arg_dynamic_u32(3, side_attr_list()),
8d20e708
MD
346 ),
347 side_attr_list()
df075fa5 348 );
89747802 349 side_event_enable__my_provider_event_dynamic_vla = 1;
d5cdb129 350 side_event(my_provider_event_dynamic_vla,
8d20e708 351 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla))));
a2e2357e
MD
352}
353
89747802 354side_static_event(my_provider_event_dynamic_null,
465e5e7e
MD
355 "myprovider", "mydynamicnull", SIDE_LOGLEVEL_DEBUG,
356 side_field_list(
485b800a 357 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
358 ),
359 side_attr_list()
465e5e7e
MD
360);
361
362static
363void test_dynamic_null(void)
364{
89747802 365 side_event_enable__my_provider_event_dynamic_null = 1;
d5cdb129 366 side_event(my_provider_event_dynamic_null,
808bd9bf 367 side_arg_list(side_arg_dynamic(side_arg_dynamic_null(side_attr_list()))));
465e5e7e
MD
368}
369
89747802 370side_static_event(my_provider_event_dynamic_struct,
c208889e 371 "myprovider", "mydynamicstruct", SIDE_LOGLEVEL_DEBUG,
465e5e7e 372 side_field_list(
485b800a 373 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
374 ),
375 side_attr_list()
465e5e7e
MD
376);
377
378static
c208889e 379void test_dynamic_struct(void)
465e5e7e 380{
c208889e 381 side_arg_dynamic_define_struct(mystruct,
465e5e7e 382 side_arg_list(
808bd9bf
MD
383 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
384 side_arg_dynamic_field("b", side_arg_dynamic_string("zzz", side_attr_list())),
385 side_arg_dynamic_field("c", side_arg_dynamic_null(side_attr_list())),
8d20e708
MD
386 ),
387 side_attr_list()
465e5e7e
MD
388 );
389
89747802 390 side_event_enable__my_provider_event_dynamic_struct = 1;
d5cdb129 391 side_event(my_provider_event_dynamic_struct,
8d20e708 392 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct))));
465e5e7e
MD
393}
394
89747802 395side_static_event(my_provider_event_dynamic_nested_struct,
c208889e 396 "myprovider", "mydynamicnestedstruct", SIDE_LOGLEVEL_DEBUG,
3222d397 397 side_field_list(
485b800a 398 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
399 ),
400 side_attr_list()
3222d397
MD
401);
402
403static
c208889e 404void test_dynamic_nested_struct(void)
3222d397 405{
c208889e 406 side_arg_dynamic_define_struct(nested,
3222d397 407 side_arg_list(
808bd9bf
MD
408 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
409 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
8d20e708
MD
410 ),
411 side_attr_list()
3222d397 412 );
c208889e 413 side_arg_dynamic_define_struct(nested2,
3222d397 414 side_arg_list(
808bd9bf
MD
415 side_arg_dynamic_field("aa", side_arg_dynamic_u64(128, side_attr_list())),
416 side_arg_dynamic_field("bb", side_arg_dynamic_u16(1, side_attr_list())),
8d20e708
MD
417 ),
418 side_attr_list()
3222d397 419 );
c208889e 420 side_arg_dynamic_define_struct(mystruct,
3222d397 421 side_arg_list(
8d20e708
MD
422 side_arg_dynamic_field("nested", side_arg_dynamic_struct(&nested)),
423 side_arg_dynamic_field("nested2", side_arg_dynamic_struct(&nested2)),
424 ),
425 side_attr_list()
3222d397 426 );
89747802 427 side_event_enable__my_provider_event_dynamic_nested_struct = 1;
d5cdb129 428 side_event(my_provider_event_dynamic_nested_struct,
8d20e708 429 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct))));
3222d397
MD
430}
431
89747802 432side_static_event(my_provider_event_dynamic_vla_struct,
c208889e 433 "myprovider", "mydynamicvlastruct", SIDE_LOGLEVEL_DEBUG,
7ce1b78f 434 side_field_list(
485b800a 435 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
436 ),
437 side_attr_list()
7ce1b78f
MD
438);
439
440static
c208889e 441void test_dynamic_vla_struct(void)
7ce1b78f 442{
c208889e 443 side_arg_dynamic_define_struct(nested,
7ce1b78f 444 side_arg_list(
808bd9bf
MD
445 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
446 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
8d20e708
MD
447 ),
448 side_attr_list()
7ce1b78f
MD
449 );
450 side_arg_dynamic_define_vec(myvla,
451 side_arg_list(
8d20e708
MD
452 side_arg_dynamic_struct(&nested),
453 side_arg_dynamic_struct(&nested),
454 side_arg_dynamic_struct(&nested),
455 side_arg_dynamic_struct(&nested),
456 ),
457 side_attr_list()
7ce1b78f 458 );
89747802 459 side_event_enable__my_provider_event_dynamic_vla_struct = 1;
d5cdb129 460 side_event(my_provider_event_dynamic_vla_struct,
8d20e708 461 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla))));
7ce1b78f
MD
462}
463
89747802 464side_static_event(my_provider_event_dynamic_struct_vla,
c208889e 465 "myprovider", "mydynamicstructvla", SIDE_LOGLEVEL_DEBUG,
980bfdc4 466 side_field_list(
485b800a 467 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
468 ),
469 side_attr_list()
980bfdc4
MD
470);
471
472static
c208889e 473void test_dynamic_struct_vla(void)
980bfdc4
MD
474{
475 side_arg_dynamic_define_vec(myvla,
948e3e72 476 side_arg_list(
808bd9bf
MD
477 side_arg_dynamic_u32(1, side_attr_list()),
478 side_arg_dynamic_u32(2, side_attr_list()),
479 side_arg_dynamic_u32(3, side_attr_list()),
8d20e708
MD
480 ),
481 side_attr_list()
df075fa5 482 );
980bfdc4 483 side_arg_dynamic_define_vec(myvla2,
948e3e72 484 side_arg_list(
808bd9bf
MD
485 side_arg_dynamic_u32(4, side_attr_list()),
486 side_arg_dynamic_u64(5, side_attr_list()),
487 side_arg_dynamic_u32(6, side_attr_list()),
8d20e708
MD
488 ),
489 side_attr_list()
df075fa5 490 );
c208889e 491 side_arg_dynamic_define_struct(mystruct,
980bfdc4 492 side_arg_list(
8d20e708
MD
493 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla)),
494 side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2)),
495 ),
496 side_attr_list()
980bfdc4 497 );
89747802 498 side_event_enable__my_provider_event_dynamic_struct_vla = 1;
d5cdb129 499 side_event(my_provider_event_dynamic_struct_vla,
8d20e708 500 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct))));
980bfdc4
MD
501}
502
89747802 503side_static_event(my_provider_event_dynamic_nested_vla,
948e3e72
MD
504 "myprovider", "mydynamicnestedvla", SIDE_LOGLEVEL_DEBUG,
505 side_field_list(
485b800a 506 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
507 ),
508 side_attr_list()
948e3e72
MD
509);
510
511static
512void test_dynamic_nested_vla(void)
513{
514 side_arg_dynamic_define_vec(nestedvla,
515 side_arg_list(
808bd9bf
MD
516 side_arg_dynamic_u32(1, side_attr_list()),
517 side_arg_dynamic_u16(2, side_attr_list()),
518 side_arg_dynamic_u32(3, side_attr_list()),
8d20e708
MD
519 ),
520 side_attr_list()
948e3e72
MD
521 );
522 side_arg_dynamic_define_vec(nestedvla2,
523 side_arg_list(
808bd9bf
MD
524 side_arg_dynamic_u8(4, side_attr_list()),
525 side_arg_dynamic_u32(5, side_attr_list()),
526 side_arg_dynamic_u32(6, side_attr_list()),
8d20e708
MD
527 ),
528 side_attr_list()
948e3e72
MD
529 );
530 side_arg_dynamic_define_vec(myvla,
531 side_arg_list(
8d20e708
MD
532 side_arg_dynamic_vla(&nestedvla),
533 side_arg_dynamic_vla(&nestedvla2),
534 ),
535 side_attr_list()
948e3e72 536 );
89747802 537 side_event_enable__my_provider_event_dynamic_nested_vla = 1;
d5cdb129 538 side_event(my_provider_event_dynamic_nested_vla,
8d20e708 539 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla))));
948e3e72
MD
540}
541
89747802 542side_static_event_variadic(my_provider_event_variadic,
19fa6aa2 543 "myprovider", "myvariadicevent", SIDE_LOGLEVEL_DEBUG,
399c836b
MD
544 side_field_list(),
545 side_attr_list()
19fa6aa2
MD
546);
547
548static
549void test_variadic(void)
550{
89747802 551 side_event_enable__my_provider_event_variadic = 1;
d5cdb129 552 side_event_variadic(my_provider_event_variadic,
19fa6aa2
MD
553 side_arg_list(),
554 side_arg_list(
808bd9bf
MD
555 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
556 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
8d20e708
MD
557 ),
558 side_attr_list()
19fa6aa2
MD
559 );
560}
561
89747802 562side_static_event_variadic(my_provider_event_static_variadic,
41c4d119
MD
563 "myprovider", "mystaticvariadicevent", SIDE_LOGLEVEL_DEBUG,
564 side_field_list(
485b800a
MD
565 side_field_u32("abc", side_attr_list()),
566 side_field_u16("def", side_attr_list()),
399c836b
MD
567 ),
568 side_attr_list()
41c4d119
MD
569);
570
571static
572void test_static_variadic(void)
573{
89747802 574 side_event_enable__my_provider_event_static_variadic = 1;
d5cdb129 575 side_event_variadic(my_provider_event_static_variadic,
41c4d119
MD
576 side_arg_list(
577 side_arg_u32(1),
578 side_arg_u16(2),
579 ),
580 side_arg_list(
808bd9bf
MD
581 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
582 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
8d20e708
MD
583 ),
584 side_attr_list()
41c4d119
MD
585 );
586}
587
89747802 588side_static_event(my_provider_event_bool, "myprovider", "myeventbool", SIDE_LOGLEVEL_DEBUG,
4f40d951 589 side_field_list(
485b800a
MD
590 side_field_bool("a_false", side_attr_list()),
591 side_field_bool("b_true", side_attr_list()),
592 side_field_bool("c_true", side_attr_list()),
593 side_field_bool("d_true", side_attr_list()),
594 side_field_bool("e_true", side_attr_list()),
595 side_field_bool("f_false", side_attr_list()),
596 side_field_bool("g_true", side_attr_list()),
399c836b
MD
597 ),
598 side_attr_list()
4f40d951
MD
599);
600
601static
602void test_bool(void)
603{
604 uint32_t a = 0;
605 uint32_t b = 1;
606 uint64_t c = 0x12345678;
607 int16_t d = -32768;
608 bool e = true;
609 bool f = false;
610 uint32_t g = 256;
611
89747802 612 side_event_enable__my_provider_event_bool = 1;
d5cdb129 613 side_event(my_provider_event_bool,
4f40d951
MD
614 side_arg_list(
615 side_arg_bool(a),
616 side_arg_bool(b),
617 side_arg_bool(c),
618 side_arg_bool(d),
619 side_arg_bool(e),
620 side_arg_bool(f),
621 side_arg_bool(g),
622 )
623 );
624}
625
89747802 626side_static_event_variadic(my_provider_event_dynamic_bool,
4f40d951 627 "myprovider", "mydynamicbool", SIDE_LOGLEVEL_DEBUG,
399c836b
MD
628 side_field_list(),
629 side_attr_list()
4f40d951
MD
630);
631
632static
633void test_dynamic_bool(void)
634{
89747802 635 side_event_enable__my_provider_event_dynamic_bool = 1;
d5cdb129 636 side_event_variadic(my_provider_event_dynamic_bool,
4f40d951
MD
637 side_arg_list(),
638 side_arg_list(
808bd9bf
MD
639 side_arg_dynamic_field("a_true", side_arg_dynamic_bool(55, side_attr_list())),
640 side_arg_dynamic_field("b_true", side_arg_dynamic_bool(-4, side_attr_list())),
641 side_arg_dynamic_field("c_false", side_arg_dynamic_bool(0, side_attr_list())),
642 side_arg_dynamic_field("d_true", side_arg_dynamic_bool(256, side_attr_list())),
8d20e708
MD
643 ),
644 side_attr_list()
4f40d951
MD
645 );
646}
647
89747802 648side_static_event(my_provider_event_dynamic_vla_visitor,
8ceca0cd
MD
649 "myprovider", "mydynamicvlavisitor", SIDE_LOGLEVEL_DEBUG,
650 side_field_list(
485b800a 651 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
652 ),
653 side_attr_list()
8ceca0cd
MD
654);
655
656struct app_dynamic_vla_visitor_ctx {
657 const uint32_t *ptr;
658 uint32_t length;
659};
660
661static
662enum side_visitor_status test_dynamic_vla_visitor(const struct side_tracer_dynamic_vla_visitor_ctx *tracer_ctx, void *_ctx)
663{
664 struct app_dynamic_vla_visitor_ctx *ctx = (struct app_dynamic_vla_visitor_ctx *) _ctx;
665 uint32_t length = ctx->length, i;
666
667 for (i = 0; i < length; i++) {
668 const struct side_arg_dynamic_vec elem = {
669 .dynamic_type = SIDE_DYNAMIC_TYPE_U32,
670 .u = {
8d20e708
MD
671 .side_basic = {
672 .attr = NULL,
673 .nr_attr = 0,
674 .u = {
675 .side_u32 = ctx->ptr[i],
676 },
677 },
8ceca0cd
MD
678 },
679 };
680 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
681 return SIDE_VISITOR_STATUS_ERROR;
682 }
683 return SIDE_VISITOR_STATUS_OK;
684}
685
686static uint32_t testarray_dynamic_vla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
687
688static
689void test_dynamic_vla_with_visitor(void)
690{
89747802 691 side_event_enable__my_provider_event_dynamic_vla_visitor = 1;
d5cdb129 692 side_event_cond(my_provider_event_dynamic_vla_visitor) {
8ceca0cd
MD
693 struct app_dynamic_vla_visitor_ctx ctx = {
694 .ptr = testarray_dynamic_vla,
695 .length = SIDE_ARRAY_SIZE(testarray_dynamic_vla),
696 };
d5cdb129 697 side_event_call(my_provider_event_dynamic_vla_visitor,
8ceca0cd
MD
698 side_arg_list(
699 side_arg_dynamic(
808bd9bf 700 side_arg_dynamic_vla_visitor(test_dynamic_vla_visitor, &ctx, side_attr_list())
8ceca0cd
MD
701 )
702 )
703 );
704 }
705}
706
89747802 707side_static_event(my_provider_event_dynamic_struct_visitor,
2b359235
MD
708 "myprovider", "mydynamicstructvisitor", SIDE_LOGLEVEL_DEBUG,
709 side_field_list(
485b800a 710 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
711 ),
712 side_attr_list()
2b359235
MD
713);
714
715struct struct_visitor_pair {
716 const char *name;
717 uint32_t value;
718};
719
720struct app_dynamic_struct_visitor_ctx {
721 const struct struct_visitor_pair *ptr;
722 uint32_t length;
723};
724
725static
726enum side_visitor_status test_dynamic_struct_visitor(const struct side_tracer_dynamic_struct_visitor_ctx *tracer_ctx, void *_ctx)
727{
728 struct app_dynamic_struct_visitor_ctx *ctx = (struct app_dynamic_struct_visitor_ctx *) _ctx;
729 uint32_t length = ctx->length, i;
730
731 for (i = 0; i < length; i++) {
732 struct side_arg_dynamic_event_field dynamic_field = {
733 .field_name = ctx->ptr[i].name,
734 .elem = {
735 .dynamic_type = SIDE_DYNAMIC_TYPE_U32,
736 .u = {
8d20e708
MD
737 .side_basic = {
738 .nr_attr = 0,
739 .attr = NULL,
740 .u = {
741 .side_u32 = ctx->ptr[i].value,
742 },
743 },
2b359235
MD
744 },
745 },
746 };
747 if (tracer_ctx->write_field(tracer_ctx, &dynamic_field) != SIDE_VISITOR_STATUS_OK)
748 return SIDE_VISITOR_STATUS_ERROR;
749 }
750 return SIDE_VISITOR_STATUS_OK;
751}
752
753static struct struct_visitor_pair testarray_dynamic_struct[] = {
754 { "a", 1, },
755 { "b", 2, },
756 { "c", 3, },
757 { "d", 4, },
758};
759
760static
761void test_dynamic_struct_with_visitor(void)
762{
89747802 763 side_event_enable__my_provider_event_dynamic_struct_visitor = 1;
d5cdb129 764 side_event_cond(my_provider_event_dynamic_struct_visitor) {
2b359235
MD
765 struct app_dynamic_struct_visitor_ctx ctx = {
766 .ptr = testarray_dynamic_struct,
767 .length = SIDE_ARRAY_SIZE(testarray_dynamic_struct),
768 };
d5cdb129 769 side_event_call(my_provider_event_dynamic_struct_visitor,
2b359235
MD
770 side_arg_list(
771 side_arg_dynamic(
808bd9bf 772 side_arg_dynamic_struct_visitor(test_dynamic_struct_visitor, &ctx, side_attr_list())
2b359235
MD
773 )
774 )
775 );
776 }
777}
778
89747802 779side_static_event(my_provider_event_user_attribute, "myprovider", "myevent_user_attribute", SIDE_LOGLEVEL_DEBUG,
65010f43 780 side_field_list(
485b800a
MD
781 side_field_u32("abc", side_attr_list()),
782 side_field_s64("def", side_attr_list()),
399c836b
MD
783 ),
784 side_attr_list(
bc3c89b3
MD
785 side_attr("user_attribute_a", side_attr_string("val1")),
786 side_attr("user_attribute_b", side_attr_string("val2")),
65010f43
MD
787 )
788);
789
790static
791void test_event_user_attribute(void)
792{
89747802 793 side_event_enable__my_provider_event_user_attribute = 1;
d5cdb129 794 side_event(my_provider_event_user_attribute, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
65010f43
MD
795}
796
89747802 797side_static_event(my_provider_field_user_attribute, "myprovider", "myevent_field_attribute", SIDE_LOGLEVEL_DEBUG,
a848763d 798 side_field_list(
485b800a 799 side_field_u32("abc",
a848763d 800 side_attr_list(
bc3c89b3
MD
801 side_attr("user_attribute_a", side_attr_string("val1")),
802 side_attr("user_attribute_b", side_attr_u32(2)),
a848763d
MD
803 )
804 ),
485b800a 805 side_field_s64("def",
a848763d 806 side_attr_list(
bc3c89b3
MD
807 side_attr("user_attribute_c", side_attr_string("val3")),
808 side_attr("user_attribute_d", side_attr_s64(-5)),
a848763d
MD
809 )
810 ),
811 ),
812 side_attr_list()
813);
814
815static
816void test_field_user_attribute(void)
817{
89747802 818 side_event_enable__my_provider_field_user_attribute = 1;
d5cdb129 819 side_event(my_provider_field_user_attribute, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
a848763d
MD
820}
821
89747802 822side_static_event_variadic(my_provider_event_variadic_attr,
808bd9bf
MD
823 "myprovider", "myvariadiceventattr", SIDE_LOGLEVEL_DEBUG,
824 side_field_list(),
825 side_attr_list()
826);
827
828static
829void test_variadic_attr(void)
830{
89747802 831 side_event_enable__my_provider_event_variadic_attr = 1;
d5cdb129 832 side_event_variadic(my_provider_event_variadic_attr,
808bd9bf
MD
833 side_arg_list(),
834 side_arg_list(
835 side_arg_dynamic_field("a",
836 side_arg_dynamic_u32(55,
837 side_attr_list(
bc3c89b3
MD
838 side_attr("user_attribute_c", side_attr_string("valX")),
839 side_attr("user_attribute_d", side_attr_u8(55)),
808bd9bf
MD
840 )
841 )
842 ),
843 side_arg_dynamic_field("b",
844 side_arg_dynamic_s8(-4,
845 side_attr_list(
bc3c89b3
MD
846 side_attr("X", side_attr_u8(1)),
847 side_attr("Y", side_attr_s8(2)),
808bd9bf
MD
848 )
849 )
850 ),
8d20e708
MD
851 ),
852 side_attr_list()
808bd9bf
MD
853 );
854}
855
89747802 856side_static_event_variadic(my_provider_event_variadic_vla_attr,
808bd9bf
MD
857 "myprovider", "myvariadiceventvlaattr", SIDE_LOGLEVEL_DEBUG,
858 side_field_list(),
859 side_attr_list()
860);
861
862static
863void test_variadic_vla_attr(void)
864{
865 side_arg_dynamic_define_vec(myvla,
866 side_arg_list(
867 side_arg_dynamic_u32(1,
868 side_attr_list(
bc3c89b3
MD
869 side_attr("Z", side_attr_u8(0)),
870 side_attr("A", side_attr_u8(123)),
808bd9bf
MD
871 )
872 ),
873 side_arg_dynamic_u32(2, side_attr_list()),
874 side_arg_dynamic_u32(3, side_attr_list()),
8d20e708
MD
875 ),
876 side_attr_list(
877 side_attr("X", side_attr_u8(1)),
878 side_attr("Y", side_attr_u8(2)),
808bd9bf
MD
879 )
880 );
89747802 881 side_event_enable__my_provider_event_variadic_vla_attr = 1;
d5cdb129 882 side_event_variadic(my_provider_event_variadic_vla_attr,
808bd9bf
MD
883 side_arg_list(),
884 side_arg_list(
8d20e708
MD
885 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla)),
886 ),
887 side_attr_list()
808bd9bf
MD
888 );
889}
890
89747802 891side_static_event_variadic(my_provider_event_variadic_struct_attr,
808bd9bf
MD
892 "myprovider", "myvariadiceventstructattr", SIDE_LOGLEVEL_DEBUG,
893 side_field_list(),
894 side_attr_list()
895);
896
897static
898void test_variadic_struct_attr(void)
899{
89747802 900 side_event_enable__my_provider_event_variadic_struct_attr = 1;
d5cdb129 901 side_event_cond(my_provider_event_variadic_struct_attr) {
808bd9bf
MD
902 side_arg_dynamic_define_struct(mystruct,
903 side_arg_list(
904 side_arg_dynamic_field("a",
905 side_arg_dynamic_u32(43,
906 side_attr_list(
bc3c89b3 907 side_attr("A", side_attr_bool(true)),
808bd9bf
MD
908 )
909 )
910 ),
911 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
8d20e708
MD
912 ),
913 side_attr_list(
914 side_attr("X", side_attr_u8(1)),
915 side_attr("Y", side_attr_u8(2)),
808bd9bf
MD
916 )
917 );
d5cdb129 918 side_event_call_variadic(my_provider_event_variadic_struct_attr,
808bd9bf
MD
919 side_arg_list(),
920 side_arg_list(
8d20e708
MD
921 side_arg_dynamic_field("a", side_arg_dynamic_struct(&mystruct)),
922 ),
923 side_attr_list()
808bd9bf
MD
924 );
925 }
926}
927
89747802 928side_static_event(my_provider_event_float, "myprovider", "myeventfloat", SIDE_LOGLEVEL_DEBUG,
fb25b355
MD
929 side_field_list(
930#if __HAVE_FLOAT16
485b800a 931 side_field_float_binary16("binary16", side_attr_list()),
fb25b355
MD
932#endif
933#if __HAVE_FLOAT32
485b800a 934 side_field_float_binary32("binary32", side_attr_list()),
fb25b355
MD
935#endif
936#if __HAVE_FLOAT64
485b800a 937 side_field_float_binary64("binary64", side_attr_list()),
fb25b355
MD
938#endif
939#if __HAVE_FLOAT128
485b800a 940 side_field_float_binary128("binary128", side_attr_list()),
fb25b355
MD
941#endif
942 ),
943 side_attr_list()
944);
945
946static
947void test_float(void)
948{
89747802 949 side_event_enable__my_provider_event_float = 1;
d5cdb129 950 side_event(my_provider_event_float,
fb25b355
MD
951 side_arg_list(
952#if __HAVE_FLOAT16
953 side_arg_float_binary16(1.1),
954#endif
955#if __HAVE_FLOAT32
956 side_arg_float_binary32(2.2),
957#endif
958#if __HAVE_FLOAT64
959 side_arg_float_binary64(3.3),
960#endif
961#if __HAVE_FLOAT128
962 side_arg_float_binary128(4.4),
963#endif
964 )
965 );
966}
967
89747802 968side_static_event_variadic(my_provider_event_variadic_float,
fb25b355
MD
969 "myprovider", "myvariadicfloat", SIDE_LOGLEVEL_DEBUG,
970 side_field_list(),
971 side_attr_list()
972);
973
974static
975void test_variadic_float(void)
976{
89747802 977 side_event_enable__my_provider_event_variadic_float = 1;
d5cdb129 978 side_event_variadic(my_provider_event_variadic_float,
fb25b355
MD
979 side_arg_list(),
980 side_arg_list(
981#if __HAVE_FLOAT16
982 side_arg_dynamic_field("binary16",
983 side_arg_dynamic_float_binary16(1.1, side_attr_list())
984 ),
985#endif
986#if __HAVE_FLOAT32
987 side_arg_dynamic_field("binary32",
988 side_arg_dynamic_float_binary32(2.2, side_attr_list())
989 ),
990#endif
991#if __HAVE_FLOAT64
992 side_arg_dynamic_field("binary64",
993 side_arg_dynamic_float_binary64(3.3, side_attr_list())
994 ),
995#endif
996#if __HAVE_FLOAT128
997 side_arg_dynamic_field("binary128",
998 side_arg_dynamic_float_binary128(4.4, side_attr_list())
999 ),
1000#endif
8d20e708
MD
1001 ),
1002 side_attr_list()
fb25b355
MD
1003 );
1004}
1005
79f677ba 1006static side_define_enum(myenum,
66cff328 1007 side_enum_mapping_list(
79f677ba
MD
1008 side_enum_mapping_range("one-ten", 1, 10),
1009 side_enum_mapping_range("100-200", 100, 200),
1010 side_enum_mapping_value("200", 200),
1011 side_enum_mapping_value("300", 300),
d4328528
MD
1012 ),
1013 side_attr_list()
79f677ba
MD
1014);
1015
89747802 1016side_static_event(my_provider_event_enum, "myprovider", "myeventenum", SIDE_LOGLEVEL_DEBUG,
79f677ba 1017 side_field_list(
f89c4ad1
MD
1018 side_field_enum("5", &myenum, side_elem(side_type_u32(side_attr_list()))),
1019 side_field_enum("400", &myenum, side_elem(side_type_u64(side_attr_list()))),
1020 side_field_enum("200", &myenum, side_elem(side_type_u8(side_attr_list()))),
1021 side_field_enum("-100", &myenum, side_elem(side_type_s8(side_attr_list()))),
79f677ba
MD
1022 ),
1023 side_attr_list()
1024);
1025
1026static
1027void test_enum(void)
1028{
89747802 1029 side_event_enable__my_provider_event_enum = 1;
d5cdb129 1030 side_event(my_provider_event_enum,
79f677ba 1031 side_arg_list(
d8be25de
MD
1032 side_arg_u32(5),
1033 side_arg_u64(400),
1034 side_arg_u8(200),
1035 side_arg_s8(-100),
79f677ba
MD
1036 )
1037 );
1038}
1039
ea32e5fc 1040/* A bitmap enum maps bits to labels. */
66cff328
MD
1041static side_define_enum_bitmap(myenum_bitmap,
1042 side_enum_bitmap_mapping_list(
1043 side_enum_bitmap_mapping_value("0", 0),
1044 side_enum_bitmap_mapping_range("1-2", 1, 2),
1045 side_enum_bitmap_mapping_range("2-4", 2, 4),
1046 side_enum_bitmap_mapping_value("3", 3),
1047 side_enum_bitmap_mapping_value("30", 30),
1048 side_enum_bitmap_mapping_value("63", 63),
af6aa6e1
MD
1049 side_enum_bitmap_mapping_range("158-160", 158, 160),
1050 side_enum_bitmap_mapping_value("159", 159),
1051 side_enum_bitmap_mapping_range("500-700", 500, 700),
d4328528
MD
1052 ),
1053 side_attr_list()
ea32e5fc
MD
1054);
1055
89747802 1056side_static_event(my_provider_event_enum_bitmap, "myprovider", "myeventenumbitmap", SIDE_LOGLEVEL_DEBUG,
ea32e5fc 1057 side_field_list(
f89c4ad1
MD
1058 side_field_enum_bitmap("bit_0", &myenum_bitmap, side_elem(side_type_u32(side_attr_list()))),
1059 side_field_enum_bitmap("bit_1", &myenum_bitmap, side_elem(side_type_u32(side_attr_list()))),
1060 side_field_enum_bitmap("bit_2", &myenum_bitmap, side_elem(side_type_u8(side_attr_list()))),
1061 side_field_enum_bitmap("bit_3", &myenum_bitmap, side_elem(side_type_u8(side_attr_list()))),
1062 side_field_enum_bitmap("bit_30", &myenum_bitmap, side_elem(side_type_u32(side_attr_list()))),
1063 side_field_enum_bitmap("bit_31", &myenum_bitmap, side_elem(side_type_u32(side_attr_list()))),
1064 side_field_enum_bitmap("bit_63", &myenum_bitmap, side_elem(side_type_u64(side_attr_list()))),
1065 side_field_enum_bitmap("bits_1+63", &myenum_bitmap, side_elem(side_type_u64(side_attr_list()))),
4cc2880b 1066 side_field_enum_bitmap("byte_bit_2", &myenum_bitmap, side_elem(side_type_byte(side_attr_list()))),
f89c4ad1
MD
1067 side_field_enum_bitmap("bit_159", &myenum_bitmap,
1068 side_elem(side_type_array(side_elem(side_type_u32(side_attr_list())), 5, side_attr_list()))),
1069 side_field_enum_bitmap("bit_159", &myenum_bitmap,
1070 side_elem(side_type_vla(side_elem(side_type_u32(side_attr_list())), side_attr_list()))),
ea32e5fc
MD
1071 ),
1072 side_attr_list()
1073);
1074
1075static
1076void test_enum_bitmap(void)
1077{
89747802 1078 side_event_enable__my_provider_event_enum_bitmap = 1;
af6aa6e1
MD
1079 side_event_cond(my_provider_event_enum_bitmap) {
1080 side_arg_define_vec(myarray,
1081 side_arg_list(
1082 side_arg_u32(0),
1083 side_arg_u32(0),
1084 side_arg_u32(0),
1085 side_arg_u32(0),
1086 side_arg_u32(0x80000000), /* bit 159 */
1087 )
1088 );
1089 side_event_call(my_provider_event_enum_bitmap,
1090 side_arg_list(
bab5d6e4
MD
1091 side_arg_u32(1 << 0),
1092 side_arg_u32(1 << 1),
1093 side_arg_u8(1 << 2),
1094 side_arg_u8(1 << 3),
1095 side_arg_u32(1 << 30),
1096 side_arg_u32(1 << 31),
1097 side_arg_u64(1ULL << 63),
1098 side_arg_u64((1ULL << 1) | (1ULL << 63)),
4cc2880b 1099 side_arg_byte(1 << 2),
bab5d6e4
MD
1100 side_arg_array(&myarray),
1101 side_arg_vla(&myarray),
af6aa6e1
MD
1102 )
1103 );
1104 }
ea32e5fc
MD
1105}
1106
7aec0d09
MD
1107static uint8_t blob_fixint[] = { 0x55, 0x44, 0x33, 0x22, 0x11 };
1108
89747802 1109side_static_event_variadic(my_provider_event_blob, "myprovider", "myeventblob", SIDE_LOGLEVEL_DEBUG,
7aec0d09 1110 side_field_list(
f7653b43
MD
1111 side_field_byte("blobfield", side_attr_list()),
1112 side_field_array("arrayblob", side_elem(side_type_byte(side_attr_list())), 3, side_attr_list()),
1113 side_field_array("arrayblobfix", side_elem(side_type_byte(side_attr_list())), SIDE_ARRAY_SIZE(blob_fixint), side_attr_list()),
1114 side_field_vla("vlablobfix", side_elem(side_type_byte(side_attr_list())), side_attr_list()),
7aec0d09
MD
1115 ),
1116 side_attr_list()
1117);
1118
1119static
1120void test_blob(void)
1121{
89747802 1122 side_event_enable__my_provider_event_blob = 1;
d5cdb129 1123 side_event_cond(my_provider_event_blob) {
f7653b43 1124 side_arg_define_vec(myarray, side_arg_list(side_arg_byte(1), side_arg_byte(2), side_arg_byte(3)));
199e7aa9
MD
1125 side_arg_dynamic_define_vec(myvla,
1126 side_arg_list(
f7653b43
MD
1127 side_arg_dynamic_byte(0x22, side_attr_list()),
1128 side_arg_dynamic_byte(0x33, side_attr_list()),
8d20e708
MD
1129 ),
1130 side_attr_list()
199e7aa9 1131 );
d5cdb129 1132 side_event_call_variadic(my_provider_event_blob,
7aec0d09 1133 side_arg_list(
f7653b43 1134 side_arg_byte(0x55),
7aec0d09 1135 side_arg_array(&myarray),
f7653b43
MD
1136 side_arg_array_byte(blob_fixint),
1137 side_arg_vla_byte(blob_fixint, SIDE_ARRAY_SIZE(blob_fixint)),
199e7aa9
MD
1138 ),
1139 side_arg_list(
1140 side_arg_dynamic_field("varblobfield",
f7653b43 1141 side_arg_dynamic_byte(0x55, side_attr_list())
199e7aa9 1142 ),
8d20e708
MD
1143 side_arg_dynamic_field("varblobvla", side_arg_dynamic_vla(&myvla)),
1144 ),
1145 side_attr_list()
7aec0d09
MD
1146 );
1147 }
1148}
ea32e5fc 1149
89747802 1150side_static_event_variadic(my_provider_event_format_string,
71aa8975
MD
1151 "myprovider", "myeventformatstring", SIDE_LOGLEVEL_DEBUG,
1152 side_field_list(
1153 side_field_string("fmt", side_attr_list()),
1154 ),
1155 side_attr_list(
1156 side_attr("lang.c.format_string", side_attr_bool(true)),
1157 )
1158);
1159
1160static
1161void test_fmt_string(void)
1162{
89747802 1163 side_event_enable__my_provider_event_format_string = 1;
71aa8975
MD
1164 side_event_cond(my_provider_event_format_string) {
1165 side_arg_dynamic_define_vec(args,
1166 side_arg_list(
1167 side_arg_dynamic_string("blah", side_attr_list()),
1168 side_arg_dynamic_s32(123, side_attr_list()),
1169 ),
1170 side_attr_list()
1171 );
1172 side_event_call_variadic(my_provider_event_format_string,
1173 side_arg_list(
1174 side_arg_string("This is a formatted string with str: %s int: %d"),
1175 ),
1176 side_arg_list(
1177 side_arg_dynamic_field("arguments", side_arg_dynamic_vla(&args)),
1178 ),
1179 side_attr_list()
1180 );
1181 }
1182}
1183
f611d0c3
MD
1184int main()
1185{
1186 test_fields();
89747802
MD
1187 test_event_hidden();
1188 test_event_export();
c7a14585 1189 test_struct_literal();
f611d0c3
MD
1190 test_struct();
1191 test_array();
1192 test_vla();
1193 test_vla_visitor();
cdd6e858 1194 test_vla_visitor_2d();
ba845af5 1195 test_array_fixint();
1533629f 1196 test_vla_fixint();
a2e2357e
MD
1197 test_dynamic_basic_type();
1198 test_dynamic_vla();
465e5e7e 1199 test_dynamic_null();
c208889e
MD
1200 test_dynamic_struct();
1201 test_dynamic_nested_struct();
1202 test_dynamic_vla_struct();
1203 test_dynamic_struct_vla();
948e3e72 1204 test_dynamic_nested_vla();
19fa6aa2 1205 test_variadic();
41c4d119 1206 test_static_variadic();
4f40d951
MD
1207 test_bool();
1208 test_dynamic_bool();
8ceca0cd 1209 test_dynamic_vla_with_visitor();
2b359235 1210 test_dynamic_struct_with_visitor();
65010f43 1211 test_event_user_attribute();
a848763d 1212 test_field_user_attribute();
808bd9bf
MD
1213 test_variadic_attr();
1214 test_variadic_vla_attr();
1215 test_variadic_struct_attr();
fb25b355
MD
1216 test_float();
1217 test_variadic_float();
79f677ba 1218 test_enum();
ea32e5fc 1219 test_enum_bitmap();
7aec0d09 1220 test_blob();
71aa8975 1221 test_fmt_string();
f611d0c3
MD
1222 return 0;
1223}
This page took 0.084254 seconds and 4 git commands to generate.