mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-06 23:50:09 +08:00
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.
This commit is contained in:
@ -1,3 +1,14 @@
|
|||||||
|
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>
|
2021-03-02 Tom Tromey <tromey@adacore.com>
|
||||||
|
|
||||||
* ada-lang.c (add_nonlocal_symbols): Handle case where objfile->sf
|
* ada-lang.c (add_nonlocal_symbols): Handle case where objfile->sf
|
||||||
|
@ -283,14 +283,12 @@ struct cache_entry
|
|||||||
struct ada_symbol_cache
|
struct ada_symbol_cache
|
||||||
{
|
{
|
||||||
/* An obstack used to store the entries in our 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. */
|
/* 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. */
|
/* Maximum-sized dynamic type. */
|
||||||
static unsigned int varsize_limit;
|
static unsigned int varsize_limit;
|
||||||
|
|
||||||
@ -385,14 +383,8 @@ ada_inferior_exit (struct inferior *inf)
|
|||||||
/* This module's per-program-space data. */
|
/* This module's per-program-space data. */
|
||||||
struct ada_pspace_data
|
struct ada_pspace_data
|
||||||
{
|
{
|
||||||
~ada_pspace_data ()
|
|
||||||
{
|
|
||||||
if (sym_cache != NULL)
|
|
||||||
ada_free_symbol_cache (sym_cache);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The Ada symbol 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. */
|
/* 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
|
even in this case, some expensive name-based symbol searches are still
|
||||||
sometimes necessary - to find an XVZ variable, mostly. */
|
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.
|
/* Return the symbol cache associated to the given program space PSPACE.
|
||||||
If not allocated for this PSPACE yet, allocate and initialize one. */
|
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);
|
struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
|
||||||
|
|
||||||
if (pspace_data->sym_cache == NULL)
|
if (pspace_data->sym_cache == nullptr)
|
||||||
{
|
pspace_data->sym_cache.reset (new ada_symbol_cache);
|
||||||
pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
|
|
||||||
ada_init_symbol_cache (pspace_data->sym_cache);
|
|
||||||
}
|
|
||||||
|
|
||||||
return pspace_data->sym_cache;
|
return pspace_data->sym_cache.get ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clear all entries from the symbol cache. */
|
/* Clear all entries from the symbol cache. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ada_clear_symbol_cache (void)
|
ada_clear_symbol_cache ()
|
||||||
{
|
{
|
||||||
struct ada_symbol_cache *sym_cache
|
struct ada_pspace_data *pspace_data
|
||||||
= ada_get_symbol_cache (current_program_space);
|
= get_ada_pspace_data (current_program_space);
|
||||||
|
|
||||||
obstack_free (&sym_cache->cache_space, NULL);
|
if (pspace_data->sym_cache != nullptr)
|
||||||
ada_init_symbol_cache (sym_cache);
|
pspace_data->sym_cache.reset ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Search our cache for an entry matching NAME and DOMAIN.
|
/* Search our cache for an entry matching NAME and DOMAIN.
|
||||||
|
Reference in New Issue
Block a user