forked from Imagelibrary/binutils-gdb
Move die_type_hash to dwarf2_per_objfile
The die_type_hash field can't be shared between multiple obfiles, as it holds `struct type` objects, which are objfile-specific. Move it from dwarf2_per_bfd to dwarf2_per_objfile and update all references. gdb/ChangeLog: * dwarf2/read.h (struct dwarf2_per_bfd) <die_type_hash>: Move to struct dwarf2_per_objfile. (struct dwarf2_per_objfile) <die_type_hash>: Move from struct dwarf2_per_bfd. * dwarf2/read.c (set_die_type): Update. (get_die_type_at_offset): Update.
This commit is contained in:
@@ -23717,8 +23717,8 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
|
|||||||
cu->per_cu->addr_type ()))
|
cu->per_cu->addr_type ()))
|
||||||
type->add_dyn_prop (DYN_PROP_DATA_LOCATION, prop);
|
type->add_dyn_prop (DYN_PROP_DATA_LOCATION, prop);
|
||||||
|
|
||||||
if (dwarf2_per_objfile->per_bfd->die_type_hash == NULL)
|
if (dwarf2_per_objfile->die_type_hash == NULL)
|
||||||
dwarf2_per_objfile->per_bfd->die_type_hash
|
dwarf2_per_objfile->die_type_hash
|
||||||
= htab_up (htab_create_alloc (127,
|
= htab_up (htab_create_alloc (127,
|
||||||
per_cu_offset_and_type_hash,
|
per_cu_offset_and_type_hash,
|
||||||
per_cu_offset_and_type_eq,
|
per_cu_offset_and_type_eq,
|
||||||
@@ -23728,7 +23728,7 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
|
|||||||
ofs.sect_off = die->sect_off;
|
ofs.sect_off = die->sect_off;
|
||||||
ofs.type = type;
|
ofs.type = type;
|
||||||
slot = (struct dwarf2_per_cu_offset_and_type **)
|
slot = (struct dwarf2_per_cu_offset_and_type **)
|
||||||
htab_find_slot (dwarf2_per_objfile->per_bfd->die_type_hash.get (), &ofs, INSERT);
|
htab_find_slot (dwarf2_per_objfile->die_type_hash.get (), &ofs, INSERT);
|
||||||
if (*slot)
|
if (*slot)
|
||||||
complaint (_("A problem internal to GDB: DIE %s has type already set"),
|
complaint (_("A problem internal to GDB: DIE %s has type already set"),
|
||||||
sect_offset_str (die->sect_off));
|
sect_offset_str (die->sect_off));
|
||||||
@@ -23748,13 +23748,13 @@ get_die_type_at_offset (sect_offset sect_off,
|
|||||||
struct dwarf2_per_cu_offset_and_type *slot, ofs;
|
struct dwarf2_per_cu_offset_and_type *slot, ofs;
|
||||||
struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile;
|
struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile;
|
||||||
|
|
||||||
if (dwarf2_per_objfile->per_bfd->die_type_hash == NULL)
|
if (dwarf2_per_objfile->die_type_hash == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
ofs.per_cu = per_cu;
|
ofs.per_cu = per_cu;
|
||||||
ofs.sect_off = sect_off;
|
ofs.sect_off = sect_off;
|
||||||
slot = ((struct dwarf2_per_cu_offset_and_type *)
|
slot = ((struct dwarf2_per_cu_offset_and_type *)
|
||||||
htab_find (dwarf2_per_objfile->per_bfd->die_type_hash.get (), &ofs));
|
htab_find (dwarf2_per_objfile->die_type_hash.get (), &ofs));
|
||||||
if (slot)
|
if (slot)
|
||||||
return slot->type;
|
return slot->type;
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -229,11 +229,6 @@ public:
|
|||||||
symbols. */
|
symbols. */
|
||||||
bool reading_partial_symbols = false;
|
bool reading_partial_symbols = false;
|
||||||
|
|
||||||
/* Table mapping type DIEs to their struct type *.
|
|
||||||
This is NULL if not allocated yet.
|
|
||||||
The mapping is done via (CU/TU + DIE offset) -> type. */
|
|
||||||
htab_up die_type_hash;
|
|
||||||
|
|
||||||
/* The CUs we recently read. */
|
/* The CUs we recently read. */
|
||||||
std::vector<dwarf2_per_cu_data *> just_read_cus;
|
std::vector<dwarf2_per_cu_data *> just_read_cus;
|
||||||
|
|
||||||
@@ -310,6 +305,11 @@ struct dwarf2_per_objfile
|
|||||||
other objfiles backed by the same BFD. */
|
other objfiles backed by the same BFD. */
|
||||||
struct dwarf2_per_bfd *per_bfd;
|
struct dwarf2_per_bfd *per_bfd;
|
||||||
|
|
||||||
|
/* Table mapping type DIEs to their struct type *.
|
||||||
|
This is nullptr if not allocated yet.
|
||||||
|
The mapping is done via (CU/TU + DIE offset) -> type. */
|
||||||
|
htab_up die_type_hash;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* Hold the corresponding compunit_symtab for each CU or TU. This
|
/* Hold the corresponding compunit_symtab for each CU or TU. This
|
||||||
is indexed by dwarf2_per_cu_data::index. A NULL value means
|
is indexed by dwarf2_per_cu_data::index. A NULL value means
|
||||||
|
|||||||
Reference in New Issue
Block a user