From 199e7aa9b7210e7a19df45a303110df0bfb6f0dd Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Fri, 21 Oct 2022 12:15:18 -0400 Subject: [PATCH] Dynamic type blob Signed-off-by: Mathieu Desnoyers --- include/side/trace.h | 11 +++++++++++ src/test.c | 18 ++++++++++++++++-- src/tracer.c | 4 ++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/include/side/trace.h b/include/side/trace.h index 3b1283d..6a18ec8 100644 --- a/include/side/trace.h +++ b/include/side/trace.h @@ -104,6 +104,7 @@ enum side_dynamic_type { SIDE_DYNAMIC_TYPE_S16, SIDE_DYNAMIC_TYPE_S32, SIDE_DYNAMIC_TYPE_S64, + SIDE_DYNAMIC_TYPE_BLOB, SIDE_DYNAMIC_TYPE_FLOAT_BINARY16, SIDE_DYNAMIC_TYPE_FLOAT_BINARY32, @@ -292,6 +293,7 @@ struct side_arg_dynamic_vec { int16_t side_s16; int32_t side_s32; int64_t side_s64; + uint8_t side_blob; #if __HAVE_FLOAT16 _Float16 side_float_binary16; @@ -725,6 +727,15 @@ struct side_tracer_dynamic_vla_visitor_ctx { .side_s64 = (_val), \ }, \ } +#define side_arg_dynamic_blob(_val, _attr) \ + { \ + .dynamic_type = SIDE_DYNAMIC_TYPE_BLOB, \ + .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \ + .attr = _attr, \ + .u = { \ + .side_blob = (_val), \ + }, \ + } #define side_arg_dynamic_float_binary16(_val, _attr) \ { \ diff --git a/src/test.c b/src/test.c index bfa30ee..0be274c 100644 --- a/src/test.c +++ b/src/test.c @@ -1002,7 +1002,7 @@ void test_enum_bitmap(void) static uint8_t blob_fixint[] = { 0x55, 0x44, 0x33, 0x22, 0x11 }; -static side_define_event(my_provider_event_blob, "myprovider", "myeventblob", SIDE_LOGLEVEL_DEBUG, +static side_define_event_variadic(my_provider_event_blob, "myprovider", "myeventblob", SIDE_LOGLEVEL_DEBUG, side_field_list( side_field_blob("blobfield", side_attr_list()), side_field_array("arrayblob", side_elem(side_type_blob(side_attr_list())), 3, side_attr_list()), @@ -1018,12 +1018,26 @@ void test_blob(void) my_provider_event_blob.enabled = 1; side_event_cond(&my_provider_event_blob) { side_arg_define_vec(myarray, side_arg_list(side_arg_blob(1), side_arg_blob(2), side_arg_blob(3))); - side_event_call(&my_provider_event_blob, + side_arg_dynamic_define_vec(myvla, + side_arg_list( + side_arg_dynamic_blob(0x22, side_attr_list()), + side_arg_dynamic_blob(0x33, side_attr_list()), + ) + ); + side_event_call_variadic(&my_provider_event_blob, side_arg_list( side_arg_blob(0x55), side_arg_array(&myarray), side_arg_array_blob(blob_fixint), side_arg_vla_blob(blob_fixint, SIDE_ARRAY_SIZE(blob_fixint)), + ), + side_arg_list( + side_arg_dynamic_field("varblobfield", + side_arg_dynamic_blob(0x55, side_attr_list()) + ), + side_arg_dynamic_field("varblobvla", + side_arg_dynamic_vla(&myvla, side_attr_list()) + ), ) ); } diff --git a/src/tracer.c b/src/tracer.c index 9a90de8..40d7fa4 100644 --- a/src/tracer.c +++ b/src/tracer.c @@ -832,6 +832,10 @@ void tracer_print_dynamic(const struct side_arg_dynamic_vec *item) case SIDE_DYNAMIC_TYPE_S64: printf("%" PRId64, item->u.side_s64); break; + case SIDE_DYNAMIC_TYPE_BLOB: + printf("0x%" PRIx8, item->u.side_blob); + break; + case SIDE_DYNAMIC_TYPE_FLOAT_BINARY16: #if __HAVE_FLOAT16 printf("%g", (double) item->u.side_float_binary16); -- 2.34.1