Introduce new add_psymbol_to_list overload

This adds a new overload of add_psymbol_to_list.  This one takes an
already constructed psymbol and adds it to the bcache and the
appropriate list.

This seemed cleaner than continuing to add parameters to the existing
add_psymbol_to_list, and is more in line with how full symbols are
constructed.

gdb/ChangeLog
2020-04-24  Tom Tromey  <tom@tromey.com>

	* psymtab.c (add_psymbol_to_bcache): Simplify calling convention.
	(add_psymbol_to_list): New overload.  Make old overload call new
	one.
	* psympriv.h (add_psymbol_to_list): New overload.
This commit is contained in:
Tom Tromey 2020-04-24 15:35:01 -06:00 committed by Tom Tromey
parent e61108c92d
commit 2467f4f6a5
3 changed files with 44 additions and 24 deletions

View File

@ -1,3 +1,10 @@
2020-04-24 Tom Tromey <tom@tromey.com>
* psymtab.c (add_psymbol_to_bcache): Simplify calling convention.
(add_psymbol_to_list): New overload. Make old overload call new
one.
* psympriv.h (add_psymbol_to_list): New overload.
2020-04-24 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (partial_die_info::read) <case

View File

@ -424,6 +424,14 @@ extern void add_psymbol_to_list (gdb::string_view name,
enum language language,
struct objfile *objfile);
/* Add a symbol to the partial symbol table of OBJFILE. The psymbol
must be fully constructed, and the names must be set and intern'd
as appropriate. */
extern void add_psymbol_to_list (const partial_symbol &psym,
psymbol_placement where,
struct objfile *objfile);
/* Initialize storage for partial symbols. If partial symbol storage
has already been initialized, this does nothing. TOTAL_SYMBOLS is
an estimate of how many symbols there will be. */

View File

@ -1590,24 +1590,10 @@ psymbol_compare (const void *addr1, const void *addr2, int length)
different domain (or address) is possible and correct. */
static struct partial_symbol *
add_psymbol_to_bcache (gdb::string_view name, bool copy_name,
domain_enum domain,
enum address_class theclass,
short section,
CORE_ADDR coreaddr,
enum language language, struct objfile *objfile,
add_psymbol_to_bcache (const partial_symbol &psymbol,
struct objfile *objfile,
int *added)
{
struct partial_symbol psymbol;
memset (&psymbol, 0, sizeof (psymbol));
psymbol.set_unrelocated_address (coreaddr);
psymbol.ginfo.section = section;
psymbol.domain = domain;
psymbol.aclass = theclass;
psymbol.ginfo.set_language (language, objfile->partial_symtabs->obstack ());
psymbol.ginfo.compute_and_set_names (name, copy_name, objfile->per_bfd);
/* Stash the partial symbol away in the cache. */
return ((struct partial_symbol *)
objfile->partial_symtabs->psymbol_cache.insert
@ -1628,21 +1614,16 @@ append_psymbol_to_list (std::vector<partial_symbol *> *list,
/* See psympriv.h. */
void
add_psymbol_to_list (gdb::string_view name, bool copy_name,
domain_enum domain,
enum address_class theclass,
short section,
add_psymbol_to_list (const partial_symbol &psymbol,
psymbol_placement where,
CORE_ADDR coreaddr,
enum language language, struct objfile *objfile)
struct objfile *objfile)
{
struct partial_symbol *psym;
int added;
/* Stash the partial symbol away in the cache. */
psym = add_psymbol_to_bcache (name, copy_name, domain, theclass,
section, coreaddr, language, objfile, &added);
psym = add_psymbol_to_bcache (psymbol, objfile, &added);
/* Do not duplicate global partial symbols. */
if (where == psymbol_placement::GLOBAL && !added)
@ -1658,6 +1639,30 @@ add_psymbol_to_list (gdb::string_view name, bool copy_name,
/* See psympriv.h. */
void
add_psymbol_to_list (gdb::string_view name, bool copy_name,
domain_enum domain,
enum address_class theclass,
short section,
psymbol_placement where,
CORE_ADDR coreaddr,
enum language language, struct objfile *objfile)
{
struct partial_symbol psymbol;
memset (&psymbol, 0, sizeof (psymbol));
psymbol.set_unrelocated_address (coreaddr);
psymbol.ginfo.section = section;
psymbol.domain = domain;
psymbol.aclass = theclass;
psymbol.ginfo.set_language (language, objfile->partial_symtabs->obstack ());
psymbol.ginfo.compute_and_set_names (name, copy_name, objfile->per_bfd);
add_psymbol_to_list (psymbol, where, objfile);
}
/* See psympriv.h. */
void
init_psymbol_list (struct objfile *objfile, int total_symbols)
{