diff options
author | Tom Tromey <tom@tromey.com> | 2018-05-10 16:23:56 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-01-10 07:08:14 -0700 |
commit | b596a3c77da2387d7e5a3855717d65ce33bdfb58 (patch) | |
tree | 8031414899706c82056f981b6811beb2c06e8e3f /gdb/psymtab.c | |
parent | a9342b62885d5119593fa4330924e031e14c6406 (diff) | |
download | gdb-b596a3c77da2387d7e5a3855717d65ce33bdfb58.zip gdb-b596a3c77da2387d7e5a3855717d65ce33bdfb58.tar.gz gdb-b596a3c77da2387d7e5a3855717d65ce33bdfb58.tar.bz2 |
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.
Diffstat (limited to 'gdb/psymtab.c')
-rw-r--r-- | gdb/psymtab.c | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 4119e83..7ead0eb 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -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; - - 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); + struct partial_symtab *psymtab + = objfile->partial_symtabs->allocate_psymtab (); - 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 |