gdb: remove objfile parameter from get_objfile_bfd_data
I noticed it was unused. I think that makes sense, as it shows that
objfile_per_bfd_storage is not specific to one objfile (it can be shared
by multiple objfiles that have the same bfd).
There is one thing I wonder though, maybe I'm missing something. If
the BFD doesn't require relocation, get_objfile_bfd_data stores the
newly allocated object in objfiles_bfd_data, so we can assume that
objfiles_bfd_data is the owner of the object. When the bfd's refcount
drops to 0, the corresponding objfile_per_bfd_storage object in
objfiles_bfd_data is deleted.
But if the BFD requires relocation, get_objfile_bfd_data returns a newly
allocated object that isn't kept anywhere else (and isn't shared). So
the objfile becomes the owner of the objfile_per_bfd_storage object. In
objfile::~objfile, we have this:
if (obfd)
gdb_bfd_unref (obfd);
else
delete per_bfd;
I'm thinking that obfd could be non-nullptr, and it could require
relocation. In that case, it would never be freed. Anyway, that's not
really connected to this patch.
gdb/ChangeLog:
* objfiles.c (get_objfile_bfd_data): Remove objfile parameter,
adjust callers.
Change-Id: Ifa3158074ea6b42686780ba09d0c964b0cf14cf1
This commit is contained in:
parent
0072c87379
commit
9161c89ad8
@ -1,3 +1,8 @@
|
|||||||
|
2021-04-02 Simon Marchi <simon.marchi@polymtl.ca>
|
||||||
|
|
||||||
|
* objfiles.c (get_objfile_bfd_data): Remove objfile parameter,
|
||||||
|
adjust callers.
|
||||||
|
|
||||||
2021-04-02 Simon Marchi <simon.marchi@polymtl.ca>
|
2021-04-02 Simon Marchi <simon.marchi@polymtl.ca>
|
||||||
|
|
||||||
* psympriv.h (struct partial_symtab) <partial_symtab>: Change
|
* psympriv.h (struct partial_symtab) <partial_symtab>: Change
|
||||||
|
|||||||
@ -120,12 +120,10 @@ objfile_per_bfd_storage::~objfile_per_bfd_storage ()
|
|||||||
|
|
||||||
/* Create the per-BFD storage object for OBJFILE. If ABFD is not
|
/* Create the per-BFD storage object for OBJFILE. If ABFD is not
|
||||||
NULL, and it already has a per-BFD storage object, use that.
|
NULL, and it already has a per-BFD storage object, use that.
|
||||||
Otherwise, allocate a new per-BFD storage object. Note that it is
|
Otherwise, allocate a new per-BFD storage object. */
|
||||||
not safe to call this multiple times for a given OBJFILE -- it can
|
|
||||||
only be called when allocating or re-initializing OBJFILE. */
|
|
||||||
|
|
||||||
static struct objfile_per_bfd_storage *
|
static struct objfile_per_bfd_storage *
|
||||||
get_objfile_bfd_data (struct objfile *objfile, struct bfd *abfd)
|
get_objfile_bfd_data (bfd *abfd)
|
||||||
{
|
{
|
||||||
struct objfile_per_bfd_storage *storage = NULL;
|
struct objfile_per_bfd_storage *storage = NULL;
|
||||||
|
|
||||||
@ -154,7 +152,7 @@ get_objfile_bfd_data (struct objfile *objfile, struct bfd *abfd)
|
|||||||
void
|
void
|
||||||
set_objfile_per_bfd (struct objfile *objfile)
|
set_objfile_per_bfd (struct objfile *objfile)
|
||||||
{
|
{
|
||||||
objfile->per_bfd = get_objfile_bfd_data (objfile, objfile->obfd);
|
objfile->per_bfd = get_objfile_bfd_data (objfile->obfd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the objfile's per-BFD notion of the "main" name and
|
/* Set the objfile's per-BFD notion of the "main" name and
|
||||||
@ -363,7 +361,7 @@ objfile::objfile (bfd *abfd, const char *name, objfile_flags flags_)
|
|||||||
build_objfile_section_table (this);
|
build_objfile_section_table (this);
|
||||||
}
|
}
|
||||||
|
|
||||||
per_bfd = get_objfile_bfd_data (this, abfd);
|
per_bfd = get_objfile_bfd_data (abfd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If there is a valid and known entry point, function fills *ENTRY_P with it
|
/* If there is a valid and known entry point, function fills *ENTRY_P with it
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user