From patchwork Mon Nov 4 01:34:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Simon Marchi (Code Review)" X-Patchwork-Id: 35593 Received: (qmail 71269 invoked by alias); 4 Nov 2019 01:35:00 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 71188 invoked by uid 89); 4 Nov 2019 01:34:59 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-21.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.1 spammy=treats, __line__, __LINE__ X-HELO: mx1.osci.io Received: from polly.osci.io (HELO mx1.osci.io) (8.43.85.229) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 04 Nov 2019 01:34:57 +0000 Received: by mx1.osci.io (Postfix, from userid 994) id EFAEE20C06; Sun, 3 Nov 2019 20:34:55 -0500 (EST) Received: from gnutoolchain-gerrit.osci.io (gnutoolchain-gerrit.osci.io [8.43.85.239]) by mx1.osci.io (Postfix) with ESMTP id 2B9E820C06 for ; Sun, 3 Nov 2019 20:34:53 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by gnutoolchain-gerrit.osci.io (Postfix) with ESMTP id 152682816A for ; Sun, 3 Nov 2019 20:34:53 -0500 (EST) X-Gerrit-PatchSet: 1 Date: Sun, 3 Nov 2019 20:34:53 -0500 From: "Tom Tromey (Code Review)" To: gdb-patches@sourceware.org Message-ID: Auto-Submitted: auto-generated X-Gerrit-MessageType: newchange Subject: [review] Introduce program_space::remove_objfile X-Gerrit-Change-Id: I22f768827723dce21886fae9b3664532c8349e68 X-Gerrit-Change-Number: 496 X-Gerrit-ChangeURL: X-Gerrit-Commit: 561b2dcb61c969c3f59754be2c8d2b434a2fb3a4 References: Reply-To: tromey@sourceware.org, gdb-patches@sourceware.org MIME-Version: 1.0 Content-Disposition: inline User-Agent: Gerrit/3.0.3-75-g9005159e5d Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/496 ...................................................................... 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-11-03 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 --- M gdb/ChangeLog M gdb/objfiles.c M gdb/progspace.c M gdb/progspace.h 4 files changed, 36 insertions(+), 28 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9efaa24..d12cc21 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,13 @@ 2019-11-03 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. + +2019-11-03 Tom Tromey + * progspace.h (struct program_space) : Declare method. * progspace.c (program_space::add_objfile): New method. 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 @@ 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 @@ void objfile::unlink () { + current_program_space->remove_objfile (this); delete this; } @@ -609,13 +589,6 @@ 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 diff --git a/gdb/progspace.c b/gdb/progspace.c index 5aa7a3d..e6c4f55 100644 --- a/gdb/progspace.c +++ b/gdb/progspace.c @@ -175,6 +175,31 @@ } +/* 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, and the main symbol file. Returns DEST. */ diff --git a/gdb/progspace.h b/gdb/progspace.h index bb10c4b..e1fcc3c 100644 --- a/gdb/progspace.h +++ b/gdb/progspace.h @@ -170,6 +170,8 @@ list. */ 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. */ struct program_space *next = NULL;