From 9cdf98207c5bab668e3734d11d5a24d6b5375b54 Mon Sep 17 00:00:00 2001 From: Alok Kumar Sharma Date: Wed, 1 Jul 2020 11:53:09 +0530 Subject: [PATCH] Allow reference form for DW_AT_associated and DW_AT_allocated attributes Currently, GDB rejects the (die) reference form while it accepts exprloc form. It is allowed in DWARF standard. "Table 7.5: Attribute encodings" in DWARF5 standard. Flang compiler assigns (die) reference to DW_AT_associated and DW_AT_allocated for some cases. gdb/ChangeLog * dwarf2/read.c (set_die_type): Removed conditions to restrict forms for DW_AT_associated and DW_AT_allocated attributes, which is already checked in function attr_to_dynamic_prop. --- gdb/ChangeLog | 6 ++++++ gdb/dwarf2/read.c | 16 ++-------------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d64f572e071..404ee406678 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2020-07-01 Alok Kumar Sharma + + * dwarf2/read.c (set_die_type): Removed conditions to restrict + forms for DW_AT_associated and DW_AT_allocated attributes, + which is already checked in function attr_to_dynamic_prop. + 2020-06-30 Tom Tromey * dwarf2/read.c (quirk_rust_enum): Correctly call diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index b097f624b6c..4622d14a05c 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -23859,33 +23859,21 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu) /* Read DW_AT_allocated and set in type. */ attr = dwarf2_attr (die, DW_AT_allocated, cu); - if (attr != NULL && attr->form_is_block ()) + if (attr != NULL) { struct type *prop_type = cu->addr_sized_int_type (false); if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type)) type->add_dyn_prop (DYN_PROP_ALLOCATED, prop); } - else if (attr != NULL) - { - complaint (_("DW_AT_allocated has the wrong form (%s) at DIE %s"), - (attr != NULL ? dwarf_form_name (attr->form) : "n/a"), - sect_offset_str (die->sect_off)); - } /* Read DW_AT_associated and set in type. */ attr = dwarf2_attr (die, DW_AT_associated, cu); - if (attr != NULL && attr->form_is_block ()) + if (attr != NULL) { struct type *prop_type = cu->addr_sized_int_type (false); if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type)) type->add_dyn_prop (DYN_PROP_ASSOCIATED, prop); } - else if (attr != NULL) - { - complaint (_("DW_AT_associated has the wrong form (%s) at DIE %s"), - (attr != NULL ? dwarf_form_name (attr->form) : "n/a"), - sect_offset_str (die->sect_off)); - } /* Read DW_AT_data_location and set in type. */ attr = dwarf2_attr (die, DW_AT_data_location, cu); -- 2.30.2