Make objfile::static_links an htab_up

This changes objfile::static_links to be an htab_up, so that ~objfile
no longer has to explicitly destroy it.

Tested by the buildbot.

gdb/ChangeLog
2019-04-19  Tom Tromey  <tom@tromey.com>

	* symfile.c (reread_symbols): Update.
	* objfiles.c (objfile_register_static_link)
	(objfile_lookup_static_link): Update
	(~objfile) Don't delete static_links.
	* objfiles.h (struct objfile) <static_links>: Now an htab_up.
This commit is contained in:
Tom Tromey
2019-04-07 15:39:37 -06:00
parent 61f4b35041
commit cf250e3679
4 changed files with 15 additions and 13 deletions

@ -1,3 +1,11 @@
2019-04-19 Tom Tromey <tom@tromey.com>
* symfile.c (reread_symbols): Update.
* objfiles.c (objfile_register_static_link)
(objfile_lookup_static_link): Update
(~objfile) Don't delete static_links.
* objfiles.h (struct objfile) <static_links>: Now an htab_up.
2019-04-19 Tom Tromey <tom@tromey.com> 2019-04-19 Tom Tromey <tom@tromey.com>
* type-stack.h (struct type_stack) <insert>: Constify string. * type-stack.h (struct type_stack) <insert>: Constify string.

@ -231,14 +231,14 @@ objfile_register_static_link (struct objfile *objfile,
struct static_link_htab_entry *entry; struct static_link_htab_entry *entry;
if (objfile->static_links == NULL) if (objfile->static_links == NULL)
objfile->static_links = htab_create_alloc objfile->static_links.reset (htab_create_alloc
(1, &static_link_htab_entry_hash, static_link_htab_entry_eq, NULL, (1, &static_link_htab_entry_hash, static_link_htab_entry_eq, NULL,
xcalloc, xfree); xcalloc, xfree));
/* Create a slot for the mapping, make sure it's the first mapping for this /* Create a slot for the mapping, make sure it's the first mapping for this
block and then create the mapping itself. */ block and then create the mapping itself. */
lookup_entry.block = block; lookup_entry.block = block;
slot = htab_find_slot (objfile->static_links, &lookup_entry, INSERT); slot = htab_find_slot (objfile->static_links.get (), &lookup_entry, INSERT);
gdb_assert (*slot == NULL); gdb_assert (*slot == NULL);
entry = XOBNEW (&objfile->objfile_obstack, static_link_htab_entry); entry = XOBNEW (&objfile->objfile_obstack, static_link_htab_entry);
@ -260,9 +260,8 @@ objfile_lookup_static_link (struct objfile *objfile,
if (objfile->static_links == NULL) if (objfile->static_links == NULL)
return NULL; return NULL;
lookup_entry.block = block; lookup_entry.block = block;
entry entry = ((struct static_link_htab_entry *)
= (struct static_link_htab_entry *) htab_find (objfile->static_links, htab_find (objfile->static_links.get (), &lookup_entry));
&lookup_entry);
if (entry == NULL) if (entry == NULL)
return NULL; return NULL;
@ -691,11 +690,6 @@ objfile::~objfile ()
/* Rebuild section map next time we need it. */ /* Rebuild section map next time we need it. */
get_objfile_pspace_data (pspace)->section_map_dirty = 1; get_objfile_pspace_data (pspace)->section_map_dirty = 1;
/* Free the map for static links. There's no need to free static link
themselves since they were allocated on the objstack. */
if (static_links != NULL)
htab_delete (static_links);
} }
/* Free all the object files at once and clean up their users. */ /* Free all the object files at once and clean up their users. */

@ -615,7 +615,7 @@ struct objfile
Very few blocks have a static link, so it's more memory efficient to Very few blocks have a static link, so it's more memory efficient to
store these here rather than in struct block. Static links must be store these here rather than in struct block. Static links must be
allocated on the objfile's obstack. */ allocated on the objfile's obstack. */
htab_t static_links {}; htab_up static_links;
}; };
/* Declarations for functions defined in objfiles.c */ /* Declarations for functions defined in objfiles.c */

@ -2549,7 +2549,7 @@ reread_symbols (void)
objfile->sections = NULL; objfile->sections = NULL;
objfile->compunit_symtabs = NULL; objfile->compunit_symtabs = NULL;
objfile->template_symbols = NULL; objfile->template_symbols = NULL;
objfile->static_links = NULL; objfile->static_links.reset (nullptr);
/* obstack_init also initializes the obstack so it is /* obstack_init also initializes the obstack so it is
empty. We could use obstack_specify_allocation but empty. We could use obstack_specify_allocation but