From 506f5c41cab71dbc3e562ba367d2dc6b355b64a6 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Wed, 18 Jul 2018 18:33:07 +0200 Subject: [PATCH] [gdb/symtab] Warn about unresolved DW_AT_upper_bound/DW_AT_count This patch generates a warning if DW_AT_upper_bound or DW_AT_count is defined, but can't be translated. This is triggered for current gcc in lto mode for vla test-cases. Build and reg-tested on x86_64-linux. 2018-07-26 Tom de Vries * dwarf2read.c (read_subrange_type): Warn if DW_AT_upper_bound or DW_AT_count can't be translated to a dynamic prop. --- gdb/ChangeLog | 5 +++++ gdb/dwarf2read.c | 19 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d6d96db..ee5c9ea 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2018-07-26 Tom de Vries + + * dwarf2read.c (read_subrange_type): Warn if DW_AT_upper_bound or + DW_AT_count can't be translated to a dynamic prop. + 2018-07-25 Tom de Vries * dwarf2loc.c (dwarf2_locexpr_baton_eval): Wrap ctx.eval call in diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 45280fe..de6b9f1 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -17626,10 +17626,11 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) sect_offset_str (die->sect_off), objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - attr = dwarf2_attr (die, DW_AT_upper_bound, cu); + struct attribute *attr_ub, *attr_count; + attr = attr_ub = dwarf2_attr (die, DW_AT_upper_bound, cu); if (!attr_to_dynamic_prop (attr, die, cu, &high)) { - attr = dwarf2_attr (die, DW_AT_count, cu); + attr = attr_count = dwarf2_attr (die, DW_AT_count, cu); if (attr_to_dynamic_prop (attr, die, cu, &high)) { /* If bounds are constant do the final calculation here. */ @@ -17638,6 +17639,20 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) else high_bound_is_count = 1; } + else + { + if (attr_ub != NULL) + complaint (_("Unresolved DW_AT_upper_bound " + "- DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); + if (attr_count != NULL) + complaint (_("Unresolved DW_AT_count " + "- DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); + } + } /* Dwarf-2 specifications explicitly allows to create subrange types -- 2.7.4