mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 19:09:31 +08:00
gdb/
Fix DW_AT_lower_bound defaults for DWARF-4+. * dwarf2read.c (read_subrange_type): Remove initialization of low and high. New variable low_default_is_valid. Implement DWARF-4+ DW_AT_lower_bound defaults. Print complaint for DW_AT_lower_bound with no default by the DWARF standard.
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2012-04-26 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
Fix DW_AT_lower_bound defaults for DWARF-4+.
|
||||||
|
* dwarf2read.c (read_subrange_type): Remove initialization of low and
|
||||||
|
high. New variable low_default_is_valid. Implement DWARF-4+
|
||||||
|
DW_AT_lower_bound defaults. Print complaint for DW_AT_lower_bound with
|
||||||
|
no default by the DWARF standard.
|
||||||
|
|
||||||
2012-04-26 Maciej W. Rozycki <macro@mips.com>
|
2012-04-26 Maciej W. Rozycki <macro@mips.com>
|
||||||
Maciej W. Rozycki <macro@codesourcery.com>
|
Maciej W. Rozycki <macro@codesourcery.com>
|
||||||
|
|
||||||
|
@ -9086,8 +9086,8 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
|
|||||||
struct type *base_type;
|
struct type *base_type;
|
||||||
struct type *range_type;
|
struct type *range_type;
|
||||||
struct attribute *attr;
|
struct attribute *attr;
|
||||||
LONGEST low = 0;
|
LONGEST low, high;
|
||||||
LONGEST high = -1;
|
int low_default_is_valid;
|
||||||
char *name;
|
char *name;
|
||||||
LONGEST negative_mask;
|
LONGEST negative_mask;
|
||||||
|
|
||||||
@ -9100,10 +9100,35 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
|
|||||||
if (range_type)
|
if (range_type)
|
||||||
return range_type;
|
return range_type;
|
||||||
|
|
||||||
if (cu->language == language_fortran)
|
/* Set LOW_DEFAULT_IS_VALID if current language and DWARF version allow
|
||||||
|
omitting DW_AT_lower_bound. */
|
||||||
|
switch (cu->language)
|
||||||
{
|
{
|
||||||
/* FORTRAN implies a lower bound of 1, if not given. */
|
case language_c:
|
||||||
|
case language_cplus:
|
||||||
|
low = 0;
|
||||||
|
low_default_is_valid = 1;
|
||||||
|
break;
|
||||||
|
case language_fortran:
|
||||||
low = 1;
|
low = 1;
|
||||||
|
low_default_is_valid = 1;
|
||||||
|
break;
|
||||||
|
case language_d:
|
||||||
|
case language_java:
|
||||||
|
case language_objc:
|
||||||
|
low = 0;
|
||||||
|
low_default_is_valid = (cu->header.version >= 4);
|
||||||
|
break;
|
||||||
|
case language_ada:
|
||||||
|
case language_m2:
|
||||||
|
case language_pascal:
|
||||||
|
low = 1;
|
||||||
|
low_default_is_valid = (cu->header.version >= 4);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
low = 0;
|
||||||
|
low_default_is_valid = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: For variable sized arrays either of these could be
|
/* FIXME: For variable sized arrays either of these could be
|
||||||
@ -9111,7 +9136,11 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
|
|||||||
but we don't know how to handle it. */
|
but we don't know how to handle it. */
|
||||||
attr = dwarf2_attr (die, DW_AT_lower_bound, cu);
|
attr = dwarf2_attr (die, DW_AT_lower_bound, cu);
|
||||||
if (attr)
|
if (attr)
|
||||||
low = dwarf2_get_attr_constant_value (attr, 0);
|
low = dwarf2_get_attr_constant_value (attr, low);
|
||||||
|
else if (!low_default_is_valid)
|
||||||
|
complaint (&symfile_complaints, _("Missing DW_AT_lower_bound "
|
||||||
|
"- DIE at 0x%x [in module %s]"),
|
||||||
|
die->offset.sect_off, cu->objfile->name);
|
||||||
|
|
||||||
attr = dwarf2_attr (die, DW_AT_upper_bound, cu);
|
attr = dwarf2_attr (die, DW_AT_upper_bound, cu);
|
||||||
if (attr)
|
if (attr)
|
||||||
|
Reference in New Issue
Block a user