From 234529260a90b6ac6ed38ddac45d6ed15149e8f8 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 1 Nov 2019 16:42:29 -0600 Subject: 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 * progspace.h (struct program_space) : 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 --- gdb/objfiles.c | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) (limited to 'gdb/objfiles.c') diff --git a/gdb/objfiles.c b/gdb/objfiles.c index b4fb6f2..34f6a29 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -456,27 +456,6 @@ separate_debug_iterator::operator++ () 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. */ static void @@ -519,6 +498,7 @@ objfile::make (bfd *bfd_, const char *name_, objfile_flags flags_, void objfile::unlink () { + current_program_space->remove_objfile (this); delete this; } @@ -609,13 +589,6 @@ objfile::~objfile () else 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 selectively load and remove information particular to a specific linkage unit, gdb used to do these things whenever the monolithic -- cgit v1.1