TCF Agent: Symbols service: new symbol attribute: BitStride
diff --git a/agent/tcf/services/symbols.c b/agent/tcf/services/symbols.c
index df7b978..d146d7c 100644
--- a/agent/tcf/services/symbols.c
+++ b/agent/tcf/services/symbols.c
@@ -296,6 +296,13 @@
             write_stream(&c->out, ',');
         }
 
+        if (props.bit_stride != 0) {
+            json_write_string(&c->out, "BitStride");
+            write_stream(&c->out, ':');
+            json_write_ulong(&c->out, props.bit_stride);
+            write_stream(&c->out, ',');
+        }
+
         if (value != NULL) {
             json_write_string(&c->out, "Value");
             write_stream(&c->out, ':');
diff --git a/agent/tcf/services/symbols.h b/agent/tcf/services/symbols.h
index 63ff076..143e9ac 100644
--- a/agent/tcf/services/symbols.h
+++ b/agent/tcf/services/symbols.h
@@ -91,6 +91,7 @@
 typedef struct SymbolProperties {
     int binary_scale;   /* The exponent of the base two scale factor to be applied to an instance of the type */
     int decimal_scale;  /* The exponent of the base ten scale factor to be applied to an instance of the type */
+    unsigned bit_stride;
 } SymbolProperties;
 
 /* Symbol properties update policies */
diff --git a/agent/tcf/services/symbols_elf.c b/agent/tcf/services/symbols_elf.c
index 02d7f55..6797de4 100644
--- a/agent/tcf/services/symbols_elf.c
+++ b/agent/tcf/services/symbols_elf.c
@@ -4151,10 +4151,15 @@
     memset(props, 0, sizeof(SymbolProperties));
     if (sym->base || is_std_type_pseudo_symbol(sym)) return 0;
     if (unpack(sym) < 0) return -1;
-    if (obj != NULL && obj->mTag == TAG_base_type) {
+    if (obj != NULL) {
         U8_T n = 0;
-        if (get_num_prop(obj, AT_binary_scale, &n)) props->binary_scale = (int)n;
-        if (get_num_prop(obj, AT_decimal_scale, &n)) props->decimal_scale = (int)n;
+        if (obj->mTag == TAG_base_type) {
+            if (get_num_prop(obj, AT_binary_scale, &n)) props->binary_scale = (int)n;
+            if (get_num_prop(obj, AT_decimal_scale, &n)) props->decimal_scale = (int)n;
+        }
+        if (obj->mTag == TAG_array_type) {
+            if (get_num_prop(obj, AT_stride_size, &n)) props->bit_stride = (unsigned)n;
+        }
     }
     return 0;
 }
diff --git a/agent/tcf/services/symbols_proxy.c b/agent/tcf/services/symbols_proxy.c
index 1b6705a..bc398e8 100644
--- a/agent/tcf/services/symbols_proxy.c
+++ b/agent/tcf/services/symbols_proxy.c
@@ -670,6 +670,7 @@
     else if (strcmp(name, "LowerBound") == 0) { s->lower_bound = json_read_int64(inp); s->has_lower_bound = 1; }
     else if (strcmp(name, "BinaryScale") == 0) s->props.binary_scale = (int)json_read_long(inp);
     else if (strcmp(name, "DecimalScale") == 0) s->props.decimal_scale = (int)json_read_long(inp);
+    else if (strcmp(name, "BitStride") == 0) s->props.bit_stride = (unsigned)json_read_ulong(inp);
     else if (strcmp(name, "Flags") == 0) s->flags = json_read_ulong(inp);
     else if (strcmp(name, "Frame") == 0) s->frame = (int)json_read_long(inp);
     else json_skip_object(inp);