Introduce program_space::remove_objfile
This introduces a new method, program_space::remove_objfile, and changes the objfile destructor not to unlink an objfile from the program space's list. This is cleaner because, like the previous patch, it treats the program space more like a container for objfiles. Also, this makes it possible to keep an objfile alive even though it has been unlinked from the program space's list, which is important for processing in a worker thread. gdb/ChangeLog 2019-12-12 Tom Tromey <tom@tromey.com> * progspace.h (struct program_space) <remove_objfile>: Declare. * progspace.c (program_space::remove_objfile): New method. * objfiles.c (unlink_objfile): Remove. (objfile::unlink): Call remove_objfile. (objfile): Don't call unlink_objfile. Change-Id: I22f768827723dce21886fae9b3664532c8349e68
This commit is contained in:
parent
7cac64af7b
commit
234529260a
4 changed files with 36 additions and 28 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2019-12-12 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* progspace.h (struct program_space) <remove_objfile>: Declare.
|
||||||
|
* progspace.c (program_space::remove_objfile): New method.
|
||||||
|
* objfiles.c (unlink_objfile): Remove.
|
||||||
|
(objfile::unlink): Call remove_objfile.
|
||||||
|
(objfile): Don't call unlink_objfile.
|
||||||
|
|
||||||
2019-12-12 Tom Tromey <tom@tromey.com>
|
2019-12-12 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* progspace.h (struct program_space) <add_objfile>: Declare
|
* progspace.h (struct program_space) <add_objfile>: Declare
|
||||||
|
|
|
@ -456,27 +456,6 @@ separate_debug_iterator::operator++ ()
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unlink OBJFILE from the list of known objfiles. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
unlink_objfile (struct objfile *objfile)
|
|
||||||
{
|
|
||||||
struct objfile **objpp;
|
|
||||||
|
|
||||||
for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
|
|
||||||
{
|
|
||||||
if (*objpp == objfile)
|
|
||||||
{
|
|
||||||
*objpp = (*objpp)->next;
|
|
||||||
objfile->next = NULL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal_error (__FILE__, __LINE__,
|
|
||||||
_("unlink_objfile: objfile already unlinked"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add OBJFILE as a separate debug objfile of PARENT. */
|
/* Add OBJFILE as a separate debug objfile of PARENT. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -519,6 +498,7 @@ objfile::make (bfd *bfd_, const char *name_, objfile_flags flags_,
|
||||||
void
|
void
|
||||||
objfile::unlink ()
|
objfile::unlink ()
|
||||||
{
|
{
|
||||||
|
current_program_space->remove_objfile (this);
|
||||||
delete this;
|
delete this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -609,13 +589,6 @@ objfile::~objfile ()
|
||||||
else
|
else
|
||||||
delete per_bfd;
|
delete per_bfd;
|
||||||
|
|
||||||
/* Remove it from the chain of all objfiles. */
|
|
||||||
|
|
||||||
unlink_objfile (this);
|
|
||||||
|
|
||||||
if (this == symfile_objfile)
|
|
||||||
symfile_objfile = NULL;
|
|
||||||
|
|
||||||
/* Before the symbol table code was redone to make it easier to
|
/* Before the symbol table code was redone to make it easier to
|
||||||
selectively load and remove information particular to a specific
|
selectively load and remove information particular to a specific
|
||||||
linkage unit, gdb used to do these things whenever the monolithic
|
linkage unit, gdb used to do these things whenever the monolithic
|
||||||
|
|
|
@ -175,6 +175,31 @@ program_space::add_objfile (struct objfile *objfile, struct objfile *before)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* See progspace.h. */
|
||||||
|
|
||||||
|
void
|
||||||
|
program_space::remove_objfile (struct objfile *objfile)
|
||||||
|
{
|
||||||
|
struct objfile **objpp;
|
||||||
|
|
||||||
|
for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
|
||||||
|
{
|
||||||
|
if (*objpp == objfile)
|
||||||
|
{
|
||||||
|
*objpp = (*objpp)->next;
|
||||||
|
objfile->next = NULL;
|
||||||
|
|
||||||
|
if (objfile == symfile_object_file)
|
||||||
|
symfile_object_file = NULL;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal_error (__FILE__, __LINE__,
|
||||||
|
_("remove_objfile: objfile already unlinked"));
|
||||||
|
}
|
||||||
|
|
||||||
/* Copies program space SRC to DEST. Copies the main executable file,
|
/* Copies program space SRC to DEST. Copies the main executable file,
|
||||||
and the main symbol file. Returns DEST. */
|
and the main symbol file. Returns DEST. */
|
||||||
|
|
||||||
|
|
|
@ -170,6 +170,8 @@ struct program_space
|
||||||
list. */
|
list. */
|
||||||
void add_objfile (struct objfile *objfile, struct objfile *before);
|
void add_objfile (struct objfile *objfile, struct objfile *before);
|
||||||
|
|
||||||
|
/* Remove OBJFILE from the list of objfiles. */
|
||||||
|
void remove_objfile (struct objfile *objfile);
|
||||||
|
|
||||||
/* Pointer to next in linked list. */
|
/* Pointer to next in linked list. */
|
||||||
struct program_space *next = NULL;
|
struct program_space *next = NULL;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue