From 52c14d112840423f0515f7334063f532ec3950b1 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 29 Sep 2020 18:49:08 -0600 Subject: [PATCH] Change die_info methods to check the attribute's form This changes two die_info methods to check the form of the attribute before using it. gdb/ChangeLog 2020-09-29 Tom Tromey * dwarf2/die.h (struct die_info) : Check the attribute's form. --- gdb/ChangeLog | 5 +++++ gdb/dwarf2/die.h | 22 +++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index dbbd0caa146..02f686ea43e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2020-09-29 Tom Tromey + + * dwarf2/die.h (struct die_info) : Check + the attribute's form. + 2020-09-29 Tom Tromey * dwarf2/read.c (is_valid_DW_AT_defaulted): Move to attribute.c. diff --git a/gdb/dwarf2/die.h b/gdb/dwarf2/die.h index 5522ebdf311..4bc15d631e3 100644 --- a/gdb/dwarf2/die.h +++ b/gdb/dwarf2/die.h @@ -20,6 +20,8 @@ #ifndef GDB_DWARF2_DIE_H #define GDB_DWARF2_DIE_H +#include "complaints.h" + /* This data structure holds a complete die structure. */ struct die_info { @@ -40,10 +42,15 @@ struct die_info { for (unsigned i = 0; i < num_attrs; ++i) if (attrs[i].name == DW_AT_addr_base - || attrs[i].name == DW_AT_GNU_addr_base) + || attrs[i].name == DW_AT_GNU_addr_base) { - /* If both exist, just use the first one. */ - return DW_UNSND (&attrs[i]); + if (attrs[i].form_is_unsigned ()) + { + /* If both exist, just use the first one. */ + return attrs[i].as_unsigned (); + } + complaint (_("address base attribute (offset %s) as wrong form"), + sect_offset_str (sect_off)); } return gdb::optional (); } @@ -57,8 +64,13 @@ struct die_info if (attrs[i].name == DW_AT_rnglists_base || attrs[i].name == DW_AT_GNU_ranges_base) { - /* If both exist, just use the first one. */ - return DW_UNSND (&attrs[i]); + if (attrs[i].form_is_unsigned ()) + { + /* If both exist, just use the first one. */ + return attrs[i].as_unsigned (); + } + complaint (_("ranges base attribute (offset %s) as wrong form"), + sect_offset_str (sect_off)); } return 0; } -- 2.30.2