aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2read.c
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@adacore.com>2014-04-19 20:41:56 -0700
committerJoel Brobecker <brobecker@adacore.com>2014-04-28 15:46:29 -0400
commit11c1ba785203f7f121324fa9727c2adbbc2119c2 (patch)
tree5ad12628ba2da66507b0f0134ca482482d18edf0 /gdb/dwarf2read.c
parent8739bc53cd91cc38287432b1fb880be327c9435c (diff)
downloadgdb-11c1ba785203f7f121324fa9727c2adbbc2119c2.zip
gdb-11c1ba785203f7f121324fa9727c2adbbc2119c2.tar.gz
gdb-11c1ba785203f7f121324fa9727c2adbbc2119c2.tar.bz2
dwarf2read.c::read_subrange_type: Handle dynamic lower bounds
Currently, read_subrange_type handles dynamicity only in the case of the upper bound, and assumes that the lower bound is always static. That's rooted in the fact that dynamicity was added to support C99 variable-length arrays, where the lower bound is always zero, and therefore never dynamic. But the lower bound can, in fact, be dynamic in other languages such as Ada. Consider for instance the following declaration in Ada... type Array_Type is array (L .. U) of Natural; ... where L and U are parameters of the function where the declaration above was made, and whose value are 5 and 10. Currently, the debugger is able to print the value of the upper bound correctly, but not the lower bound: (gdb) ptype array_type type = array (1 .. 10) of natural After this patch, the debugger now prints: (gdb) ptype array_type type = array (5 .. 10) of natural gdb/ChangeLog: * dwarf2read.c (read_subrange_type): Handle dynamic DW_AT_lower_bound attributes.
Diffstat (limited to 'gdb/dwarf2read.c')
-rw-r--r--gdb/dwarf2read.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index e72cc4b..bf1e3d0 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -14572,13 +14572,9 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
break;
}
- /* FIXME: For variable sized arrays either of these could be
- a variable rather than a constant value. We'll allow it,
- but we don't know how to handle it. */
attr = dwarf2_attr (die, DW_AT_lower_bound, cu);
if (attr)
- low.data.const_val
- = dwarf2_get_attr_constant_value (attr, low.data.const_val);
+ attr_to_dynamic_prop (attr, die, cu, &low);
else if (!low_default_is_valid)
complaint (&symfile_complaints, _("Missing DW_AT_lower_bound "
"- DIE at 0x%x [in module %s]"),