diff options
author | Tom Tromey <tromey@adacore.com> | 2021-03-02 13:00:45 -0700 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2021-03-02 13:00:45 -0700 |
commit | bdcccc56393c26b86265f94d4fcf55c20c938ab7 (patch) | |
tree | 9818ccbb3b290953aaee11b1828d5baf62084698 /gdb | |
parent | 1228719f312c22a3ce4ade10d175b80ac5cedb08 (diff) | |
download | gdb-bdcccc56393c26b86265f94d4fcf55c20c938ab7.zip gdb-bdcccc56393c26b86265f94d4fcf55c20c938ab7.tar.gz gdb-bdcccc56393c26b86265f94d4fcf55c20c938ab7.tar.bz2 |
Use new for ada_symbol_cache
This changes the ada_symbol_cache to be allocated with 'new' and
managed via unique_ptr. This simplifies the code somewhat. Also,
ada_clear_symbol_cache is changed so that it does not allocate a
symbol cache just to clear it.
gdb/ChangeLog
2021-03-02 Tom Tromey <tromey@adacore.com>
* ada-lang.c (struct ada_symbol_cache) <cache_space>: Now an
auto_obstack.
<root>: Initialize.
(ada_pspace_data): Remove destructor.
<sym_cache>: Now a unique_ptr.
(ada_init_symbol_cache, ada_free_symbol_cache): Remove.
(ada_get_symbol_cache): Use 'new'.
(ada_clear_symbol_cache): Rewrite.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/ada-lang.c | 51 |
2 files changed, 22 insertions, 40 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d9d5b4f..8f5bc1d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,16 @@ 2021-03-02 Tom Tromey <tromey@adacore.com> + * ada-lang.c (struct ada_symbol_cache) <cache_space>: Now an + auto_obstack. + <root>: Initialize. + (ada_pspace_data): Remove destructor. + <sym_cache>: Now a unique_ptr. + (ada_init_symbol_cache, ada_free_symbol_cache): Remove. + (ada_get_symbol_cache): Use 'new'. + (ada_clear_symbol_cache): Rewrite. + +2021-03-02 Tom Tromey <tromey@adacore.com> + * ada-lang.c (add_nonlocal_symbols): Handle case where objfile->sf is null. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 91a2a5c..7ab423b 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -283,14 +283,12 @@ struct cache_entry struct ada_symbol_cache { /* An obstack used to store the entries in our cache. */ - struct obstack cache_space; + struct auto_obstack cache_space; /* The root of the hash table used to implement our symbol cache. */ - struct cache_entry *root[HASH_SIZE]; + struct cache_entry *root[HASH_SIZE] {}; }; -static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache); - /* Maximum-sized dynamic type. */ static unsigned int varsize_limit; @@ -385,14 +383,8 @@ ada_inferior_exit (struct inferior *inf) /* This module's per-program-space data. */ struct ada_pspace_data { - ~ada_pspace_data () - { - if (sym_cache != NULL) - ada_free_symbol_cache (sym_cache); - } - /* The Ada symbol cache. */ - struct ada_symbol_cache *sym_cache = nullptr; + std::unique_ptr<ada_symbol_cache> sym_cache; }; /* Key to our per-program-space data. */ @@ -4604,24 +4596,6 @@ make_array_descriptor (struct type *type, struct value *arr) even in this case, some expensive name-based symbol searches are still sometimes necessary - to find an XVZ variable, mostly. */ -/* Initialize the contents of SYM_CACHE. */ - -static void -ada_init_symbol_cache (struct ada_symbol_cache *sym_cache) -{ - obstack_init (&sym_cache->cache_space); - memset (sym_cache->root, '\000', sizeof (sym_cache->root)); -} - -/* Free the memory used by SYM_CACHE. */ - -static void -ada_free_symbol_cache (struct ada_symbol_cache *sym_cache) -{ - obstack_free (&sym_cache->cache_space, NULL); - xfree (sym_cache); -} - /* Return the symbol cache associated to the given program space PSPACE. If not allocated for this PSPACE yet, allocate and initialize one. */ @@ -4630,25 +4604,22 @@ ada_get_symbol_cache (struct program_space *pspace) { struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace); - if (pspace_data->sym_cache == NULL) - { - pspace_data->sym_cache = XCNEW (struct ada_symbol_cache); - ada_init_symbol_cache (pspace_data->sym_cache); - } + if (pspace_data->sym_cache == nullptr) + pspace_data->sym_cache.reset (new ada_symbol_cache); - return pspace_data->sym_cache; + return pspace_data->sym_cache.get (); } /* Clear all entries from the symbol cache. */ static void -ada_clear_symbol_cache (void) +ada_clear_symbol_cache () { - struct ada_symbol_cache *sym_cache - = ada_get_symbol_cache (current_program_space); + struct ada_pspace_data *pspace_data + = get_ada_pspace_data (current_program_space); - obstack_free (&sym_cache->cache_space, NULL); - ada_init_symbol_cache (sym_cache); + if (pspace_data->sym_cache != nullptr) + pspace_data->sym_cache.reset (); } /* Search our cache for an entry matching NAME and DOMAIN. |