[PATCH 05/10] Introduce new add_psymbol_to_list overload
Tom Tromey
tom@tromey.com
Wed Mar 25 20:07:10 GMT 2020
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-03-25 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.
---
gdb/ChangeLog | 7 +++++++
gdb/psympriv.h | 8 ++++++++
gdb/psymtab.c | 53 +++++++++++++++++++++++++++-----------------------
3 files changed, 44 insertions(+), 24 deletions(-)
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index 0effedc4ec2..cf3f43f0e01 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -414,6 +414,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. */
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index 8aa9c6e87bb..36321856368 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -1588,24 +1588,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
@@ -1626,21 +1612,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)
@@ -1656,6 +1637,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)
{
--
2.17.2
More information about the Gdb-patches
mailing list