mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-24 02:24:46 +08:00
Make psymtab_storage::free_psymtabs private
This adds a new psymtab allocation method to psymtab_storage and changes the free_psymtabs member to be private. While not strictly necessary, this seems like a decent cleanup, and also makes it simpler to move psymtabs off of obstacks entirely, should that prove desirable. gdb/ChangeLog 2019-01-10 Tom Tromey <tom@tromey.com> * psymtab.h (psymtab_storage::allocate_psymtab): New method. <free_psymtabs>: Now private. * psymtab.c (psymtab_storage::allocate_psymtab): Implement. (allocate_psymtab): Use new method.
This commit is contained in:
parent
a9342b6288
commit
b596a3c77d
@ -1,3 +1,10 @@
|
||||
2019-01-10 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* psymtab.h (psymtab_storage::allocate_psymtab): New method.
|
||||
<free_psymtabs>: Now private.
|
||||
* psymtab.c (psymtab_storage::allocate_psymtab): Implement.
|
||||
(allocate_psymtab): Use new method.
|
||||
|
||||
2019-01-10 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* xcoffread.c (xcoff_end_psymtab): Use allocate_dependencies.
|
||||
|
@ -78,6 +78,29 @@ psymtab_storage::~psymtab_storage ()
|
||||
psymbol_bcache_free (psymbol_cache);
|
||||
}
|
||||
|
||||
/* See psymtab.h. */
|
||||
|
||||
struct partial_symtab *
|
||||
psymtab_storage::allocate_psymtab ()
|
||||
{
|
||||
struct partial_symtab *psymtab;
|
||||
|
||||
if (free_psymtabs != nullptr)
|
||||
{
|
||||
psymtab = free_psymtabs;
|
||||
free_psymtabs = psymtab->next;
|
||||
}
|
||||
else
|
||||
psymtab = XOBNEW (obstack (), struct partial_symtab);
|
||||
|
||||
memset (psymtab, 0, sizeof (struct partial_symtab));
|
||||
|
||||
psymtab->next = psymtabs;
|
||||
psymtabs = psymtab;
|
||||
|
||||
return psymtab;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* See psymtab.h. */
|
||||
@ -1715,29 +1738,14 @@ init_psymbol_list (struct objfile *objfile, int total_symbols)
|
||||
struct partial_symtab *
|
||||
allocate_psymtab (const char *filename, struct objfile *objfile)
|
||||
{
|
||||
struct partial_symtab *psymtab;
|
||||
struct partial_symtab *psymtab
|
||||
= objfile->partial_symtabs->allocate_psymtab ();
|
||||
|
||||
if (objfile->partial_symtabs->free_psymtabs)
|
||||
{
|
||||
psymtab = objfile->partial_symtabs->free_psymtabs;
|
||||
objfile->partial_symtabs->free_psymtabs = psymtab->next;
|
||||
}
|
||||
else
|
||||
psymtab = XOBNEW (objfile->partial_symtabs->obstack (), partial_symtab);
|
||||
|
||||
memset (psymtab, 0, sizeof (struct partial_symtab));
|
||||
psymtab->filename
|
||||
= (const char *) bcache (filename, strlen (filename) + 1,
|
||||
objfile->per_bfd->filename_cache);
|
||||
psymtab->compunit_symtab = NULL;
|
||||
|
||||
/* Prepend it to the psymtab list for the objfile it belongs to.
|
||||
Psymtabs are searched in most recent inserted -> least recent
|
||||
inserted order. */
|
||||
|
||||
psymtab->next = objfile->partial_symtabs->psymtabs;
|
||||
objfile->partial_symtabs->psymtabs = psymtab;
|
||||
|
||||
if (symtab_create_debug)
|
||||
{
|
||||
/* Be a bit clever with debugging messages, and don't print objfile
|
||||
|
@ -71,6 +71,12 @@ public:
|
||||
return OBSTACK_CALLOC (obstack (), number, struct partial_symtab *);
|
||||
}
|
||||
|
||||
/* Allocate a new psymtab on the psymtab obstack. The new psymtab
|
||||
will be linked in to the "psymtabs" list, but otherwise all other
|
||||
fields will be zero. */
|
||||
|
||||
struct partial_symtab *allocate_psymtab ();
|
||||
|
||||
|
||||
/* Each objfile points to a linked list of partial symtabs derived from
|
||||
this file, one partial symtab structure for each compilation unit
|
||||
@ -85,10 +91,6 @@ public:
|
||||
|
||||
struct addrmap *psymtabs_addrmap = nullptr;
|
||||
|
||||
/* List of freed partial symtabs, available for re-use. */
|
||||
|
||||
struct partial_symtab *free_psymtabs = nullptr;
|
||||
|
||||
/* A byte cache where we can stash arbitrary "chunks" of bytes that
|
||||
will not change. */
|
||||
|
||||
@ -102,6 +104,10 @@ public:
|
||||
|
||||
private:
|
||||
|
||||
/* List of freed partial symtabs, available for re-use. */
|
||||
|
||||
struct partial_symtab *free_psymtabs = nullptr;
|
||||
|
||||
/* The obstack where allocations are made. */
|
||||
|
||||
struct obstack *m_obstack;
|
||||
|
Loading…
Reference in New Issue
Block a user