Add NULL static type
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 4 Nov 2022 18:17:57 +0000 (14:17 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 4 Nov 2022 18:17:57 +0000 (14:17 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
include/side/trace.h
src/test.c
src/tracer.c

index e9958008a40ffc06f2ba7e2d7a93ab7347ae030b..9e06cee6b00d48045ea008fb5cd6b2758e4345c0 100644 (file)
@@ -36,6 +36,7 @@ struct side_events_register_handle;
 
 enum side_type {
        /* Basic types */
+       SIDE_TYPE_NULL,
        SIDE_TYPE_BOOL,
        SIDE_TYPE_U8,
        SIDE_TYPE_U16,
@@ -142,6 +143,7 @@ enum side_attr_type {
 };
 
 enum side_type_sg {
+       SIDE_TYPE_SG_NULL,
        SIDE_TYPE_SG_UNSIGNED_INT,
        SIDE_TYPE_SG_SIGNED_INT,
 };
@@ -318,6 +320,7 @@ struct side_type_sg_description {
        uint64_t offset;        /* bytes */
        uint32_t type;          /* enum side_type_sg */
        union {
+               struct side_type_null side_null;
                struct {
                        struct side_type_integer type;
                        uint16_t offset_bits;           /* bits */
@@ -342,6 +345,7 @@ struct side_type_description {
        uint32_t type;  /* enum side_type */
        union {
                /* Basic types */
+               struct side_type_null side_null;
                struct side_type_bool side_bool;
                struct side_type_byte side_byte;
                struct side_type_dynamic side_dynamic;
@@ -422,7 +426,7 @@ struct side_event_description {
 struct side_arg_dynamic_vec {
        uint32_t dynamic_type;  /* enum side_dynamic_type */
        union {
-               struct side_type_null side_null_type;
+               struct side_type_null side_null;
 
                /* Basic types */
                struct {
@@ -588,6 +592,17 @@ struct side_tracer_dynamic_vla_visitor_ctx {
 
 /* Static field definition */
 
+#define side_type_null(_attr) \
+       { \
+               .type = SIDE_TYPE_NULL, \
+               .u = { \
+                       .side_null = { \
+                               .attr = _attr, \
+                               .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+                       }, \
+               }, \
+       }
+
 #define side_type_bool(_attr) \
        { \
                .type = SIDE_TYPE_BOOL, \
@@ -682,6 +697,7 @@ struct side_tracer_dynamic_vla_visitor_ctx {
 #define side_type_float_binary64(_attr)                        _side_type_float(SIDE_TYPE_FLOAT_BINARY64, SIDE_TYPE_FLOAT_WORD_ORDER_HOST, 64, SIDE_PARAM(_attr))
 #define side_type_float_binary128(_attr)               _side_type_float(SIDE_TYPE_FLOAT_BINARY128, SIDE_TYPE_FLOAT_WORD_ORDER_HOST, 128, SIDE_PARAM(_attr))
 
+#define side_field_null(_name, _attr)                  _side_field(_name, side_type_null(SIDE_PARAM(_attr)))
 #define side_field_bool(_name, _attr)                  _side_field(_name, side_type_bool(SIDE_PARAM(_attr)))
 #define side_field_u8(_name, _attr)                    _side_field(_name, side_type_u8(SIDE_PARAM(_attr)))
 #define side_field_u16(_name, _attr)                   _side_field(_name, side_type_u16(SIDE_PARAM(_attr)))
@@ -805,6 +821,27 @@ struct side_tracer_dynamic_vla_visitor_ctx {
 
 /* Scatter-gather struct */
 
+#define _side_field_sg(_name, _type) \
+       { \
+               .field_name = _name, \
+               .side_type = _type, \
+       }
+
+#define side_type_sg_null(_attr) \
+       { \
+               .offset = 0, \
+               .type = SIDE_TYPE_SG_NULL, \
+               .u = { \
+                       .side_null = { \
+                               .attr = _attr, \
+                               .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+                       }, \
+               }, \
+       }
+
+#define side_field_sg_null(_name, _attr) \
+       _side_field_sg(_name, side_type_sg_null(SIDE_PARAM(_attr)))
+
 #define _side_type_sg_integer(_type, _signedness, _byte_order, _offset, _integer_size_bits, _offset_bits, _len_bits, _attr) \
        { \
                .offset = _offset, \
@@ -824,12 +861,6 @@ struct side_tracer_dynamic_vla_visitor_ctx {
                }, \
        }
 
-#define _side_field_sg(_name, _type) \
-       { \
-               .field_name = _name, \
-               .side_type = _type, \
-       }
-
 #define side_type_sg_unsigned_integer(_integer_offset, _integer_size_bits, _offset_bits, _len_bits, _attr) \
        _side_type_sg_integer(SIDE_TYPE_SG_UNSIGNED_INT, false,  SIDE_TYPE_BYTE_ORDER_HOST, \
                        _integer_offset, _integer_size_bits, _offset_bits, _len_bits, SIDE_PARAM(_attr))
@@ -922,6 +953,7 @@ struct side_tracer_dynamic_vla_visitor_ctx {
 
 /* Static field arguments */
 
+#define side_arg_null(_val)            { .type = SIDE_TYPE_NULL }
 #define side_arg_bool(_val)            { .type = SIDE_TYPE_BOOL, .u = { .bool_value = !!(_val) } }
 #define side_arg_byte(_val)            { .type = SIDE_TYPE_BYTE, .u = { .byte_value = (_val) } }
 #define side_arg_string(_val)          { .type = SIDE_TYPE_STRING, .u = { .string_value = (uintptr_t) (_val) } }
@@ -981,7 +1013,7 @@ struct side_tracer_dynamic_vla_visitor_ctx {
        { \
                .dynamic_type = SIDE_DYNAMIC_TYPE_NULL, \
                .u = { \
-                       .side_null_type = { \
+                       .side_null = { \
                                .attr = _attr, \
                                .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
                        }, \
index 3ce7caf5826debc0b7fe9c1b2b4d03f25ec693bf..30b5424b6d1db2724b93ffc032ee7f163095ded3 100644 (file)
@@ -22,6 +22,7 @@ side_static_event(my_provider_event, "myprovider", "myevent", SIDE_LOGLEVEL_DEBU
                side_field_pointer("ptr", side_attr_list()),
                side_field_dynamic("dynamic", side_attr_list()),
                side_field_dynamic("dynamic_pointer", side_attr_list()),
+               side_field_null("null", side_attr_list()),
        ),
        side_attr_list()
 );
@@ -39,6 +40,7 @@ void test_fields(void)
                        side_arg_pointer((void *) 0x1),
                        side_arg_dynamic(side_arg_dynamic_string("zzz", side_attr_list())),
                        side_arg_dynamic(side_arg_dynamic_pointer((void *) 0x1, side_attr_list())),
+                       side_arg_null(),
                )
        );
 }
@@ -1539,6 +1541,7 @@ static side_define_struct_sg(mystructsgdef,
                side_field_sg_signed_integer("k", offsetof(struct test, k),
                        side_struct_field_sizeof_bit(struct test, k), 1, 63,
                        side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
+               side_field_sg_null("null", side_attr_list()),
        ),
        side_attr_list()
 );
index 24f321a534e2ca706f1cc2cfd647fb2272d88551..1fb5fab1fee4dc62ed1c56ce62f1284c9e3e1302 100644 (file)
@@ -811,6 +811,11 @@ void tracer_print_type(const struct side_type_description *type_desc, const stru
 
        printf("{ ");
        switch (type) {
+       case SIDE_TYPE_NULL:
+               tracer_print_type_header(":", type_desc->u.side_null.attr, type_desc->u.side_null.nr_attr);
+               printf("<NULL TYPE>");
+               break;
+
        case SIDE_TYPE_BOOL:
                tracer_print_type_header(":", type_desc->u.side_bool.attr, type_desc->u.side_bool.nr_attr);
                printf("%s", item->u.bool_value ? "true" : "false");
@@ -947,6 +952,11 @@ void tracer_print_sg_type(const struct side_type_sg_description *sg_type, void *
 
        printf("{ ");
        switch (sg_type->type) {
+       case SIDE_TYPE_SG_NULL:
+               tracer_print_type_header(":", sg_type->u.side_null.attr, sg_type->u.side_null.nr_attr);
+               printf("<NULL TYPE>");
+               break;
+
        case SIDE_TYPE_SG_UNSIGNED_INT:
        case SIDE_TYPE_SG_SIGNED_INT:
                switch (sg_type->u.side_integer.type.integer_size_bits) {
@@ -958,10 +968,14 @@ void tracer_print_sg_type(const struct side_type_sg_description *sg_type, void *
                default:
                        abort();
                }
+               memcpy(&value, ptr + sg_type->offset, sg_type->u.side_integer.type.integer_size_bits >> 3);
+               tracer_print_type_integer(":", &sg_type->u.side_integer.type, &value,
+                               sg_type->u.side_integer.offset_bits, TRACER_DISPLAY_BASE_10);
+               break;
+       default:
+               fprintf(stderr, "<UNKNOWN TYPE>");
+               abort();
        }
-       memcpy(&value, ptr + sg_type->offset, sg_type->u.side_integer.type.integer_size_bits >> 3);
-       tracer_print_type_integer(":", &sg_type->u.side_integer.type, &value,
-                       sg_type->u.side_integer.offset_bits, TRACER_DISPLAY_BASE_10);
        printf(" }");
 }
 
@@ -1438,7 +1452,7 @@ void tracer_print_dynamic(const struct side_arg_dynamic_vec *item)
        printf("{ ");
        switch (item->dynamic_type) {
        case SIDE_DYNAMIC_TYPE_NULL:
-               tracer_print_type_header("::", item->u.side_null_type.attr, item->u.side_null_type.nr_attr);
+               tracer_print_type_header("::", item->u.side_null.attr, item->u.side_null.nr_attr);
                printf("<NULL TYPE>");
                break;
        case SIDE_DYNAMIC_TYPE_BOOL:
This page took 0.02704 seconds and 4 git commands to generate.