From: Simon Marchi <simon.marchi@efficios.com>
To: gdb-patches@sourceware.org
Subject: [PATCH 3/4] gdb: pass objfile_per_bfd_storage instead of objfile to partial_symtab
Date: Mon, 22 Mar 2021 15:34:16 -0400 [thread overview]
Message-ID: <20210322193417.2376788-4-simon.marchi@efficios.com> (raw)
In-Reply-To: <20210322193417.2376788-1-simon.marchi@efficios.com>
From: Simon Marchi <simon.marchi@polymtl.ca>
Since partial_symtab is supposed to be objfile-independent (since series
[1]), I think it would make sense for partial_symtab to not take an
objfile as a parameter in its constructor.
This patch replaces that parameter with an objfile_per_bfd_storage
parameter.
The objfile is used for two things:
- to get the objfile_name, for debug messages. We can get that name
from the bfd instead.
- to intern the partial symtab filename. Even though it goes through
an objfile method, the request is actually forwarded to the
underlying objfile_per_bfd_storage. So we can ask the new
objfile_per_bfd_storage instead.
In order to get a reference to the BFD from the objfile_per_bfd_storage,
the BFD is saved in the objfile_per_bfd_storage object.
[1] https://sourceware.org/pipermail/gdb-patches/2021-February/176625.html
gdb/ChangeLog:
* psympriv.h (struct partial_symtab) <partial_symtab>: Change
objfile parameter for objfile_per_bfd_storage, adjust callers.
(struct standard_psymtab) <standard_psymtab>: Likewise.
(struct legacy_psymtab) <legacy_psymtab>: Likewise.
* psymtab.c (partial_symtab::partial_symtab): Likewise.
* ctfread.c (struct ctf_psymtab): Likewise.
* dwarf2/read.h (struct dwarf2_psymtab): Likewise.
* dwarf2/read.c (struct dwarf2_include_psymtab): Likewise.
(dwarf2_create_include_psymtab): Likewise.
* objfiles.h (struct objfile_per_bfd_storage)
<objfile_per_bfd_storage>: Add bfd parameter, adjust callers.
<bfd_>: New method.
<m_bfd>: New field.
* objfiles.c (get_objfile_bfd_data):
Change-Id: I2ed3ab5d2e6f27d034bd4dc26ae2fae7b0b8a2b9
---
gdb/ctfread.c | 6 +++---
gdb/dbxread.c | 4 ++--
gdb/dwarf2/read.c | 18 ++++++++----------
gdb/dwarf2/read.h | 4 ++--
gdb/mdebugread.c | 6 +++---
gdb/objfiles.c | 2 +-
gdb/objfiles.h | 16 ++++++++++++++--
gdb/psympriv.h | 23 ++++++++++++-----------
gdb/psymtab.c | 20 ++++++++++----------
gdb/xcoffread.c | 4 ++--
10 files changed, 57 insertions(+), 46 deletions(-)
diff --git a/gdb/ctfread.c b/gdb/ctfread.c
index 616464c77df..fae244d4481 100644
--- a/gdb/ctfread.c
+++ b/gdb/ctfread.c
@@ -125,9 +125,9 @@ struct ctf_psymtab : public standard_psymtab
{
ctf_psymtab (const char *filename,
psymtab_storage *partial_symtabs,
- struct objfile *objfile,
+ objfile_per_bfd_storage *objfile_per_bfd,
CORE_ADDR addr)
- : standard_psymtab (filename, partial_symtabs, objfile, addr)
+ : standard_psymtab (filename, partial_symtabs, objfile_per_bfd, addr)
{
}
@@ -1369,7 +1369,7 @@ create_partial_symtab (const char *name,
ctf_psymtab *pst;
struct ctf_context *ccx;
- pst = new ctf_psymtab (name, partial_symtabs, objfile, 0);
+ pst = new ctf_psymtab (name, partial_symtabs, objfile->per_bfd, 0);
ccx = XOBNEW (&objfile->objfile_obstack, struct ctf_context);
ccx->fp = cfp;
diff --git a/gdb/dbxread.c b/gdb/dbxread.c
index 99a36cafa15..5cf77e9c08a 100644
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -1917,7 +1917,7 @@ start_psymtab (psymtab_storage *partial_symtabs, struct objfile *objfile,
const char *filename, CORE_ADDR textlow, int ldsymoff)
{
legacy_psymtab *result = new legacy_psymtab (filename, partial_symtabs,
- objfile, textlow);
+ objfile->per_bfd, textlow);
result->read_symtab_private =
XOBNEW (&objfile->objfile_obstack, struct symloc);
@@ -2040,7 +2040,7 @@ dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs,
for (i = 0; i < num_includes; i++)
{
legacy_psymtab *subpst =
- new legacy_psymtab (include_list[i], partial_symtabs, objfile);
+ new legacy_psymtab (include_list[i], partial_symtabs, objfile->per_bfd);
subpst->read_symtab_private =
XOBNEW (&objfile->objfile_obstack, struct symloc);
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 2bfb13d6d0e..58b370ecd4a 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -6245,8 +6245,8 @@ struct dwarf2_include_psymtab : public partial_symtab
{
dwarf2_include_psymtab (const char *filename,
psymtab_storage *partial_symtabs,
- struct objfile *objfile)
- : partial_symtab (filename, partial_symtabs, objfile)
+ objfile_per_bfd_storage *objfile_per_bfd)
+ : partial_symtab (filename, partial_symtabs, objfile_per_bfd)
{
}
@@ -6302,10 +6302,10 @@ dwarf2_create_include_psymtab (dwarf2_per_bfd *per_bfd,
const char *name,
dwarf2_psymtab *pst,
psymtab_storage *partial_symtabs,
- struct objfile *objfile)
+ objfile_per_bfd_storage *objfile_per_bfd)
{
dwarf2_include_psymtab *subpst
- = new dwarf2_include_psymtab (name, partial_symtabs, objfile);
+ = new dwarf2_include_psymtab (name, partial_symtabs, objfile_per_bfd);
if (!IS_ABSOLUTE_PATH (subpst->filename))
subpst->dirname = pst->dirname;
@@ -7557,11 +7557,9 @@ create_partial_symtab (dwarf2_per_cu_data *per_cu,
dwarf2_per_objfile *per_objfile,
const char *name)
{
- struct objfile *objfile = per_objfile->objfile;
- dwarf2_psymtab *pst;
-
- pst = new dwarf2_psymtab (name, per_objfile->per_bfd->partial_symtabs.get (),
- objfile, per_cu);
+ dwarf2_psymtab *pst
+ = new dwarf2_psymtab (name, per_objfile->per_bfd->partial_symtabs.get (),
+ per_objfile->objfile->per_bfd, per_cu);
pst->psymtabs_addrmap_supported = true;
@@ -22008,7 +22006,7 @@ dwarf_decode_lines (struct line_header *lh, const char *comp_dir,
dwarf2_create_include_psymtab
(cu->per_objfile->per_bfd, include_name, pst,
cu->per_objfile->per_bfd->partial_symtabs.get (),
- objfile);
+ objfile->per_bfd);
}
}
else
diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h
index 82ab3879a5b..416d8eae959 100644
--- a/gdb/dwarf2/read.h
+++ b/gdb/dwarf2/read.h
@@ -408,9 +408,9 @@ struct dwarf2_psymtab : public partial_symtab
{
dwarf2_psymtab (const char *filename,
psymtab_storage *partial_symtabs,
- struct objfile *objfile,
+ objfile_per_bfd_storage *objfile_per_bfd,
dwarf2_per_cu_data *per_cu)
- : partial_symtab (filename, partial_symtabs, objfile, 0),
+ : partial_symtab (filename, partial_symtabs, objfile_per_bfd, 0),
per_cu_data (per_cu)
{
}
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index 7bf4564aecb..026f2ff20da 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -2605,8 +2605,8 @@ parse_partial_symbols (minimal_symbol_reader &reader,
textlow = fh->adr;
else
textlow = 0;
- pst = new legacy_psymtab (fdr_name (fh), partial_symtabs, objfile,
- textlow);
+ pst = new legacy_psymtab (fdr_name (fh), partial_symtabs,
+ objfile->per_bfd, textlow);
pst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, symloc);
memset (pst->read_symtab_private, 0, sizeof (struct symloc));
@@ -4646,7 +4646,7 @@ new_psymtab (const char *name, psymtab_storage *partial_symtabs,
{
legacy_psymtab *psymtab;
- psymtab = new legacy_psymtab (name, partial_symtabs, objfile);
+ psymtab = new legacy_psymtab (name, partial_symtabs, objfile->per_bfd);
/* Keep a backpointer to the file's symbols. */
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index ed51c31c8b9..702900761f3 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -134,7 +134,7 @@ get_objfile_bfd_data (struct objfile *objfile, struct bfd *abfd)
if (storage == NULL)
{
- storage = new objfile_per_bfd_storage;
+ storage = new objfile_per_bfd_storage (abfd);
/* If the object requires gdb to do relocations, we simply fall
back to not sharing data across users. These cases are rare
enough that this seems reasonable. */
diff --git a/gdb/objfiles.h b/gdb/objfiles.h
index d9aa06636f5..e8833794c14 100644
--- a/gdb/objfiles.h
+++ b/gdb/objfiles.h
@@ -264,8 +264,8 @@ struct minimal_symbol_iterator
struct objfile_per_bfd_storage
{
- objfile_per_bfd_storage ()
- : minsyms_read (false)
+ objfile_per_bfd_storage (bfd *bfd)
+ : minsyms_read (false), m_bfd (bfd)
{}
~objfile_per_bfd_storage ();
@@ -278,6 +278,13 @@ struct objfile_per_bfd_storage
return (const char *) string_cache.insert (str.data (), str.size () + 1);
}
+ /* Get the BFD this object is associated to. */
+
+ bfd *bfd_ () const
+ {
+ return m_bfd;
+ }
+
/* The storage has an obstack of its own. */
auto_obstack storage_obstack;
@@ -355,6 +362,11 @@ struct objfile_per_bfd_storage
/* All the different languages of symbols found in the demangled
hash table. */
std::bitset<nr_languages> demangled_hash_languages;
+
+private:
+ /* The BFD this object is associated to. */
+
+ bfd *m_bfd;
};
/* An iterator that first returns a parent objfile, and then each
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index bbae2fc90e4..f6e7feaf3f4 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -111,7 +111,8 @@ enum class psymbol_placement
struct partial_symtab
{
- /* Allocate a new partial symbol table associated with OBJFILE.
+ /* Allocate a new partial symbol table.
+
FILENAME (which must be non-NULL) is the filename of this partial
symbol table; it is copied into the appropriate storage. The
partial symtab will also be installed using
@@ -119,7 +120,7 @@ struct partial_symtab
partial_symtab (const char *filename,
psymtab_storage *partial_symtabs,
- struct objfile *objfile)
+ objfile_per_bfd_storage *objfile_per_bfd)
ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (3);
/* Like the above, but also sets the initial text low and text high
@@ -128,7 +129,7 @@ struct partial_symtab
partial_symtab (const char *filename,
psymtab_storage *partial_symtabs,
- struct objfile *objfile,
+ objfile_per_bfd_storage *objfile_per_bfd,
CORE_ADDR addr)
ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (3);
@@ -369,16 +370,16 @@ struct standard_psymtab : public partial_symtab
{
standard_psymtab (const char *filename,
psymtab_storage *partial_symtabs,
- struct objfile *objfile)
- : partial_symtab (filename, partial_symtabs, objfile)
+ objfile_per_bfd_storage *objfile_per_bfd)
+ : partial_symtab (filename, partial_symtabs, objfile_per_bfd)
{
}
standard_psymtab (const char *filename,
psymtab_storage *partial_symtabs,
- struct objfile *objfile,
+ objfile_per_bfd_storage *objfile_per_bfd,
CORE_ADDR addr)
- : partial_symtab (filename, partial_symtabs, objfile, addr)
+ : partial_symtab (filename, partial_symtabs, objfile_per_bfd, addr)
{
}
@@ -411,16 +412,16 @@ struct legacy_psymtab : public standard_psymtab
{
legacy_psymtab (const char *filename,
psymtab_storage *partial_symtabs,
- struct objfile *objfile)
- : standard_psymtab (filename, partial_symtabs, objfile)
+ objfile_per_bfd_storage *objfile_per_bfd)
+ : standard_psymtab (filename, partial_symtabs, objfile_per_bfd)
{
}
legacy_psymtab (const char *filename,
psymtab_storage *partial_symtabs,
- struct objfile *objfile,
+ objfile_per_bfd_storage *objfile_per_bfd,
CORE_ADDR addr)
- : standard_psymtab (filename, partial_symtabs, objfile, addr)
+ : standard_psymtab (filename, partial_symtabs, objfile_per_bfd, addr)
{
}
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index 2ee05ec415b..93e2a5c8a01 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -1437,9 +1437,9 @@ psymbol_functions::find_compunit_symtab_by_address (struct objfile *objfile,
partial_symtab::partial_symtab (const char *filename,
psymtab_storage *partial_symtabs,
- struct objfile *objfile,
+ objfile_per_bfd_storage *objfile_per_bfd,
CORE_ADDR textlow)
- : partial_symtab (filename, partial_symtabs, objfile)
+ : partial_symtab (filename, partial_symtabs, objfile_per_bfd)
{
set_text_low (textlow);
set_text_high (raw_text_low ()); /* default */
@@ -1562,28 +1562,28 @@ partial_symtab::add_psymbol (gdb::string_view name, bool copy_name,
partial_symtab::partial_symtab (const char *filename_,
psymtab_storage *partial_symtabs,
- struct objfile *objfile)
+ objfile_per_bfd_storage *objfile_per_bfd)
: searched_flag (PST_NOT_SEARCHED),
text_low_valid (0),
text_high_valid (0)
{
partial_symtabs->install_psymtab (this);
- filename = objfile->intern (filename_);
+ filename = objfile_per_bfd->intern (filename_);
if (symtab_create_debug)
{
/* Be a bit clever with debugging messages, and don't print objfile
every time, only when it changes. */
- static std::string last_objfile_name;
- const char *this_objfile_name = objfile_name (objfile);
+ static std::string last_bfd_name;
+ const char *this_bfd_name = bfd_get_filename (objfile_per_bfd->bfd_ ());
- if (last_objfile_name.empty () || last_objfile_name != this_objfile_name)
+ if (last_bfd_name.empty () || last_bfd_name != this_bfd_name)
{
- last_objfile_name = this_objfile_name;
+ last_bfd_name = this_bfd_name;
fprintf_filtered (gdb_stdlog,
- "Creating one or more psymtabs for objfile %s ...\n",
- this_objfile_name);
+ "Creating one or more psymtabs for %s ...\n",
+ this_bfd_name);
}
fprintf_filtered (gdb_stdlog,
"Created psymtab %s for module %s.\n",
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index 30ac876e8e3..368572797f6 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -1966,7 +1966,7 @@ xcoff_start_psymtab (psymtab_storage *partial_symtabs,
{
/* We fill in textlow later. */
legacy_psymtab *result = new legacy_psymtab (filename, partial_symtabs,
- objfile, 0);
+ objfile->per_bfd, 0);
result->read_symtab_private =
XOBNEW (&objfile->objfile_obstack, struct symloc);
@@ -2022,7 +2022,7 @@ xcoff_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs,
for (i = 0; i < num_includes; i++)
{
legacy_psymtab *subpst =
- new legacy_psymtab (include_list[i], partial_symtabs, objfile);
+ new legacy_psymtab (include_list[i], partial_symtabs, objfile->per_bfd);
subpst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, symloc);
((struct symloc *) subpst->read_symtab_private)->first_symnum = 0;
--
2.30.0
next prev parent reply other threads:[~2021-03-22 19:34 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-22 19:34 [PATCH 0/4] Small Misc psymtabs / objfile cleanups Simon Marchi
2021-03-22 19:34 ` [PATCH 1/4] gdb: add intern method to objfile_per_bfd_storage Simon Marchi
2021-03-23 14:47 ` Christian Biesinger
2021-03-23 15:48 ` Simon Marchi
2021-03-23 15:53 ` Christian Biesinger
2021-03-23 16:08 ` Simon Marchi
2021-04-01 17:44 ` Tom Tromey
2021-04-02 15:38 ` Simon Marchi
2021-03-22 19:34 ` [PATCH 2/4] gdb: use std::string in partial_symtab::partial_symtab / allocate_symtab Simon Marchi
2021-04-01 17:43 ` Tom Tromey
2021-03-22 19:34 ` Simon Marchi [this message]
2021-04-01 17:47 ` [PATCH 3/4] gdb: pass objfile_per_bfd_storage instead of objfile to partial_symtab Tom Tromey
2021-04-02 15:42 ` Simon Marchi
2021-03-22 19:34 ` [PATCH 4/4] gdb: remove objfile parameter from get_objfile_bfd_data Simon Marchi
2021-04-01 17:52 ` Tom Tromey
2021-04-02 15:52 ` Simon Marchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210322193417.2376788-4-simon.marchi@efficios.com \
--to=simon.marchi@efficios.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).