Change two more functions to be methods on die_info
This changes lookup_addr_base and lookup_ranges_base to be methods on die_info. gdb/ChangeLog 2020-03-26 Tom Tromey <tom@tromey.com> * dwarf2/die.h (struct die_info) <addr_base, ranges_base>: New methods. * dwarf2/read.c (lookup_addr_base): Move to die.h. (lookup_ranges_base): Likewise. (read_cutu_die_from_dwo, read_full_die_1): Update.
This commit is contained in:
parent
436c571c6a
commit
a39fdb411d
|
@ -1,3 +1,11 @@
|
|||
2020-03-26 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* dwarf2/die.h (struct die_info) <addr_base, ranges_base>: New
|
||||
methods.
|
||||
* dwarf2/read.c (lookup_addr_base): Move to die.h.
|
||||
(lookup_ranges_base): Likewise.
|
||||
(read_cutu_die_from_dwo, read_full_die_1): Update.
|
||||
|
||||
2020-03-26 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* dwarf2/read.c (read_import_statement, read_file_scope)
|
||||
|
|
|
@ -33,6 +33,32 @@ struct die_info
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* Return the address base of the compile unit, which, if exists, is
|
||||
stored either at the attribute DW_AT_GNU_addr_base, or
|
||||
DW_AT_addr_base. */
|
||||
gdb::optional<ULONGEST> addr_base ()
|
||||
{
|
||||
struct attribute *attr = this->attr (DW_AT_addr_base);
|
||||
if (attr == nullptr)
|
||||
attr = this->attr (DW_AT_GNU_addr_base);
|
||||
if (attr == nullptr)
|
||||
return gdb::optional<ULONGEST> ();
|
||||
return DW_UNSND (attr);
|
||||
}
|
||||
|
||||
/* Return range lists base of the compile unit, which, if exists, is
|
||||
stored either at the attribute DW_AT_rnglists_base or
|
||||
DW_AT_GNU_ranges_base. */
|
||||
ULONGEST ranges_base ()
|
||||
{
|
||||
struct attribute *attr = this->attr (DW_AT_rnglists_base);
|
||||
if (attr == nullptr)
|
||||
attr = this->attr (DW_AT_GNU_ranges_base);
|
||||
if (attr == nullptr)
|
||||
return 0;
|
||||
return DW_UNSND (attr);
|
||||
}
|
||||
|
||||
|
||||
/* DWARF-2 tag for this DIE. */
|
||||
ENUM_BITFIELD(dwarf_tag) tag : 16;
|
||||
|
|
|
@ -6386,34 +6386,6 @@ lookup_signatured_type (struct dwarf2_cu *cu, ULONGEST sig)
|
|||
}
|
||||
}
|
||||
|
||||
/* Return the address base of the compile unit, which, if exists, is stored
|
||||
either at the attribute DW_AT_GNU_addr_base, or DW_AT_addr_base. */
|
||||
static gdb::optional<ULONGEST>
|
||||
lookup_addr_base (struct die_info *comp_unit_die)
|
||||
{
|
||||
struct attribute *attr;
|
||||
attr = comp_unit_die->attr (DW_AT_addr_base);
|
||||
if (attr == nullptr)
|
||||
attr = comp_unit_die->attr (DW_AT_GNU_addr_base);
|
||||
if (attr == nullptr)
|
||||
return gdb::optional<ULONGEST> ();
|
||||
return DW_UNSND (attr);
|
||||
}
|
||||
|
||||
/* Return range lists base of the compile unit, which, if exists, is stored
|
||||
either at the attribute DW_AT_rnglists_base or DW_AT_GNU_ranges_base. */
|
||||
static ULONGEST
|
||||
lookup_ranges_base (struct die_info *comp_unit_die)
|
||||
{
|
||||
struct attribute *attr;
|
||||
attr = comp_unit_die->attr (DW_AT_rnglists_base);
|
||||
if (attr == nullptr)
|
||||
attr = comp_unit_die->attr (DW_AT_GNU_ranges_base);
|
||||
if (attr == nullptr)
|
||||
return 0;
|
||||
return DW_UNSND (attr);
|
||||
}
|
||||
|
||||
/* Low level DIE reading support. */
|
||||
|
||||
/* Initialize a die_reader_specs struct from a dwarf2_cu struct. */
|
||||
|
@ -6502,12 +6474,12 @@ read_cutu_die_from_dwo (struct dwarf2_per_cu_data *this_cu,
|
|||
ranges = dwarf2_attr (stub_comp_unit_die, DW_AT_ranges, cu);
|
||||
comp_dir = dwarf2_attr (stub_comp_unit_die, DW_AT_comp_dir, cu);
|
||||
|
||||
cu->addr_base = lookup_addr_base (stub_comp_unit_die);
|
||||
cu->addr_base = stub_comp_unit_die->addr_base ();
|
||||
|
||||
/* There should be a DW_AT_rnglists_base (DW_AT_GNU_ranges_base) attribute
|
||||
here (if needed). We need the value before we can process
|
||||
DW_AT_ranges. */
|
||||
cu->ranges_base = lookup_ranges_base (stub_comp_unit_die);
|
||||
cu->ranges_base = stub_comp_unit_die->ranges_base ();
|
||||
}
|
||||
else if (stub_comp_dir != NULL)
|
||||
{
|
||||
|
@ -17538,7 +17510,7 @@ read_full_die_1 (const struct die_reader_specs *reader,
|
|||
if (attr != nullptr)
|
||||
cu->str_offsets_base = DW_UNSND (attr);
|
||||
|
||||
auto maybe_addr_base = lookup_addr_base(die);
|
||||
auto maybe_addr_base = die->addr_base ();
|
||||
if (maybe_addr_base.has_value ())
|
||||
cu->addr_base = *maybe_addr_base;
|
||||
for (int index : indexes_that_need_reprocess)
|
||||
|
|
Loading…
Reference in New Issue