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);