Change dwarf2_per_objfile::type_unit_groups to htab_up
This changes dwarf2_per_objfile::type_unit_groups to be an htab_up, again allowing us to move the memory used by the hash table from the objfile obstack to the heap. 2020-02-08 Tom Tromey <tom@tromey.com> * dwarf2/read.c (allocate_type_unit_groups_table): Return htab_up. Don't allocate on obstack. (get_type_unit_group, dwarf2_build_psymtabs_hard): Update. * dwarf2/read.h (struct dwarf2_per_objfile) <type_unit_groups>: Change type to htab_up. Change-Id: Ia045df0ff3ec30aac813da5a9a2314a607ef7ec8
This commit is contained in:
parent
b0b6a9878a
commit
eaa5fa8b29
|
@ -1,3 +1,11 @@
|
||||||
|
2020-02-08 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* dwarf2/read.c (allocate_type_unit_groups_table): Return
|
||||||
|
htab_up. Don't allocate on obstack.
|
||||||
|
(get_type_unit_group, dwarf2_build_psymtabs_hard): Update.
|
||||||
|
* dwarf2/read.h (struct dwarf2_per_objfile) <type_unit_groups>:
|
||||||
|
Change type to htab_up.
|
||||||
|
|
||||||
2020-02-08 Tom Tromey <tom@tromey.com>
|
2020-02-08 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* dwarf2/read.h (struct dwarf2_per_objfile) <signatured_types>:
|
* dwarf2/read.h (struct dwarf2_per_objfile) <signatured_types>:
|
||||||
|
|
|
@ -7520,16 +7520,13 @@ eq_type_unit_group (const void *item_lhs, const void *item_rhs)
|
||||||
|
|
||||||
/* Allocate a hash table for type unit groups. */
|
/* Allocate a hash table for type unit groups. */
|
||||||
|
|
||||||
static htab_t
|
static htab_up
|
||||||
allocate_type_unit_groups_table (struct objfile *objfile)
|
allocate_type_unit_groups_table (struct objfile *objfile)
|
||||||
{
|
{
|
||||||
return htab_create_alloc_ex (3,
|
return htab_up (htab_create_alloc (3,
|
||||||
hash_type_unit_group,
|
hash_type_unit_group,
|
||||||
eq_type_unit_group,
|
eq_type_unit_group,
|
||||||
NULL,
|
NULL, xcalloc, xfree));
|
||||||
&objfile->objfile_obstack,
|
|
||||||
hashtab_obstack_allocate,
|
|
||||||
dummy_obstack_deallocate);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Type units that don't have DW_AT_stmt_list are grouped into their own
|
/* Type units that don't have DW_AT_stmt_list are grouped into their own
|
||||||
|
@ -7625,7 +7622,7 @@ get_type_unit_group (struct dwarf2_cu *cu, const struct attribute *stmt_list)
|
||||||
|
|
||||||
type_unit_group_for_lookup.hash.dwo_unit = cu->dwo_unit;
|
type_unit_group_for_lookup.hash.dwo_unit = cu->dwo_unit;
|
||||||
type_unit_group_for_lookup.hash.line_sect_off = (sect_offset) line_offset;
|
type_unit_group_for_lookup.hash.line_sect_off = (sect_offset) line_offset;
|
||||||
slot = htab_find_slot (dwarf2_per_objfile->type_unit_groups,
|
slot = htab_find_slot (dwarf2_per_objfile->type_unit_groups.get (),
|
||||||
&type_unit_group_for_lookup, INSERT);
|
&type_unit_group_for_lookup, INSERT);
|
||||||
if (*slot != NULL)
|
if (*slot != NULL)
|
||||||
{
|
{
|
||||||
|
@ -8193,7 +8190,7 @@ dwarf2_build_psymtabs_hard (struct dwarf2_per_objfile *dwarf2_per_objfile)
|
||||||
/* Now that all TUs have been processed we can fill in the dependencies. */
|
/* Now that all TUs have been processed we can fill in the dependencies. */
|
||||||
if (dwarf2_per_objfile->type_unit_groups != NULL)
|
if (dwarf2_per_objfile->type_unit_groups != NULL)
|
||||||
{
|
{
|
||||||
htab_traverse_noresize (dwarf2_per_objfile->type_unit_groups,
|
htab_traverse_noresize (dwarf2_per_objfile->type_unit_groups.get (),
|
||||||
build_type_psymtab_dependencies, dwarf2_per_objfile);
|
build_type_psymtab_dependencies, dwarf2_per_objfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -153,7 +153,7 @@ public:
|
||||||
|
|
||||||
/* Table of struct type_unit_group objects.
|
/* Table of struct type_unit_group objects.
|
||||||
The hash key is the DW_AT_stmt_list value. */
|
The hash key is the DW_AT_stmt_list value. */
|
||||||
htab_t type_unit_groups {};
|
htab_up type_unit_groups;
|
||||||
|
|
||||||
/* A table mapping .debug_types signatures to its signatured_type entry.
|
/* A table mapping .debug_types signatures to its signatured_type entry.
|
||||||
This is NULL if the .debug_types section hasn't been read in yet. */
|
This is NULL if the .debug_types section hasn't been read in yet. */
|
||||||
|
|
Loading…
Reference in New Issue