|
@@ -297,10 +297,13 @@ static int convert_variable_type(Dwarf_Die *vr_die,
|
|
|
char sbuf[STRERR_BUFSIZE];
|
|
|
int bsize, boffs, total;
|
|
|
int ret;
|
|
|
+ char sign;
|
|
|
|
|
|
/* TODO: check all types */
|
|
|
- if (cast && strcmp(cast, "string") != 0) {
|
|
|
+ if (cast && strcmp(cast, "string") != 0 &&
|
|
|
+ strcmp(cast, "s") != 0 && strcmp(cast, "u") != 0) {
|
|
|
/* Non string type is OK */
|
|
|
+ /* and respect signedness cast */
|
|
|
tvar->type = strdup(cast);
|
|
|
return (tvar->type == NULL) ? -ENOMEM : 0;
|
|
|
}
|
|
@@ -361,6 +364,13 @@ static int convert_variable_type(Dwarf_Die *vr_die,
|
|
|
return (tvar->type == NULL) ? -ENOMEM : 0;
|
|
|
}
|
|
|
|
|
|
+ if (cast && (strcmp(cast, "u") == 0))
|
|
|
+ sign = 'u';
|
|
|
+ else if (cast && (strcmp(cast, "s") == 0))
|
|
|
+ sign = 's';
|
|
|
+ else
|
|
|
+ sign = die_is_signed_type(&type) ? 's' : 'u';
|
|
|
+
|
|
|
ret = dwarf_bytesize(&type);
|
|
|
if (ret <= 0)
|
|
|
/* No size ... try to use default type */
|
|
@@ -373,8 +383,7 @@ static int convert_variable_type(Dwarf_Die *vr_die,
|
|
|
dwarf_diename(&type), MAX_BASIC_TYPE_BITS);
|
|
|
ret = MAX_BASIC_TYPE_BITS;
|
|
|
}
|
|
|
- ret = snprintf(buf, 16, "%c%d",
|
|
|
- die_is_signed_type(&type) ? 's' : 'u', ret);
|
|
|
+ ret = snprintf(buf, 16, "%c%d", sign, ret);
|
|
|
|
|
|
formatted:
|
|
|
if (ret < 0 || ret >= 16) {
|