From patchwork Thu Dec 12 23:50:07 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: 36804 Received: (qmail 100207 invoked by alias); 12 Dec 2019 23:50:19 -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 100101 invoked by uid 89); 12 Dec 2019 23:50:18 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-21.7 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= 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; Thu, 12 Dec 2019 23:50:16 +0000 Received: by mx1.osci.io (Postfix, from userid 994) id 5782B20480; Thu, 12 Dec 2019 18:50:13 -0500 (EST) Received: from gnutoolchain-gerrit.osci.io (gnutoolchain-gerrit.osci.io [8.43.85.239]) by mx1.osci.io (Postfix) with ESMTP id 254D52068F; Thu, 12 Dec 2019 18:50:09 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by gnutoolchain-gerrit.osci.io (Postfix) with ESMTP id 13C8825BB4; Thu, 12 Dec 2019 18:50:09 -0500 (EST) X-Gerrit-PatchSet: 2 Date: Thu, 12 Dec 2019 18:50:07 -0500 From: "Sourceware to Gerrit sync (Code Review)" To: Tom Tromey , gdb-patches@sourceware.org Cc: Christian Biesinger Auto-Submitted: auto-generated X-Gerrit-MessageType: newpatchset Subject: [pushed] Introduce program_space::add_objfile X-Gerrit-Change-Id: I93e8525dda631cb89dcc2046a5c51c7c9f34ccfd X-Gerrit-Change-Number: 495 X-Gerrit-ChangeURL: X-Gerrit-Commit: 7cac64af7bc6a7f7a86f90a1465f7c3d2b6f07e8 In-Reply-To: References: Reply-To: noreply@gnutoolchain-gerrit.osci.io, tromey@sourceware.org, cbiesinger@google.com, gdb-patches@sourceware.org MIME-Version: 1.0 Content-Disposition: inline User-Agent: Gerrit/3.0.3-79-g83ff7f88f1 Message-Id: <20191212235009.13C8825BB4@gnutoolchain-gerrit.osci.io> The original change was created by Tom Tromey. Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/495 ...................................................................... Introduce program_space::add_objfile This introduces a new method, program_space::add_objfile, that adds an objfile to the program space's list of objfiles. It also changes the obfile's constructor so that linking an objfile into this list is not done here. The former is an improvement because it makes more sense to treat the program space as a container holding objfiles -- so manipulation of the list belongs there. The latter is not strictly needed, but seemed better both because it is removing a global side effect from a constructor, and for symmetry reasons, as a subsequent patch will remove unlinking from the destructor. gdb/ChangeLog 2019-12-12 Tom Tromey * progspace.h (struct program_space) : Declare method. * progspace.c (program_space::add_objfile): New method. * objfiles.c (~objfile): Don't unlink objfile. (put_objfile_before): Remove. (add_separate_debug_objfile): Don't call put_objfile_before. (objfile::make): Call add_objfile. Set new_objfiles_available on the per-program-space data. Change-Id: I93e8525dda631cb89dcc2046a5c51c7c9f34ccfd --- M gdb/ChangeLog M gdb/objfiles.c M gdb/progspace.c M gdb/progspace.h 4 files changed, 45 insertions(+), 45 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 07d679b..0163611 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,16 @@ 2019-12-12 Tom Tromey + * progspace.h (struct program_space) : Declare + method. + * progspace.c (program_space::add_objfile): New method. + * objfiles.c (~objfile): Don't unlink objfile. + (put_objfile_before): Remove. + (add_separate_debug_objfile): Don't call put_objfile_before. + (objfile::make): Call add_objfile. Set new_objfiles_available on + the per-program-space data. + +2019-12-12 Tom Tromey + * symfile.c (syms_from_objfile_1): Use objfile_up. (syms_from_objfile_1, remove_symbol_file_command): Call unlink method. diff --git a/gdb/objfiles.c b/gdb/objfiles.c index a635f77..b4fb6f2 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -371,23 +371,6 @@ } per_bfd = get_objfile_bfd_data (this, abfd); - - /* Add this file onto the tail of the linked list of other such files. */ - - if (object_files == NULL) - object_files = this; - else - { - struct objfile *last_one; - - for (last_one = object_files; - last_one->next; - last_one = last_one->next); - last_one->next = this; - } - - /* Rebuild section map next time we need it. */ - get_objfile_pspace_data (pspace)->new_objfiles_available = 1; } /* Retrieve the gdbarch associated with OBJFILE. */ @@ -494,30 +477,6 @@ _("unlink_objfile: objfile already unlinked")); } -/* Put one object file before a specified on in the global list. - This can be used to make sure an object file is destroyed before - another when using objfiles_safe to free all objfiles. */ -static void -put_objfile_before (struct objfile *objfile, struct objfile *before_this) -{ - struct objfile **objp; - - unlink_objfile (objfile); - - for (objp = &object_files; *objp != NULL; objp = &((*objp)->next)) - { - if (*objp == before_this) - { - objfile->next = *objp; - *objp = objfile; - return; - } - } - - internal_error (__FILE__, __LINE__, - _("put_objfile_before: before objfile not in list")); -} - /* Add OBJFILE as a separate debug objfile of PARENT. */ static void @@ -535,10 +494,6 @@ objfile->separate_debug_objfile_backlink = parent; objfile->separate_debug_objfile_link = parent->separate_debug_objfile; parent->separate_debug_objfile = objfile; - - /* Put the separate debug object before the normal one, this is so that - usage of objfiles_safe will stay safe. */ - put_objfile_before (objfile, parent); } /* See objfiles.h. */ @@ -550,6 +505,12 @@ objfile *result = new objfile (bfd_, name_, flags_); if (parent != nullptr) add_separate_debug_objfile (result, parent); + + current_program_space->add_objfile (result, parent); + + /* Rebuild section map next time we need it. */ + get_objfile_pspace_data (current_program_space)->new_objfiles_available = 1; + return result; } diff --git a/gdb/progspace.c b/gdb/progspace.c index 366de54..5aa7a3d 100644 --- a/gdb/progspace.c +++ b/gdb/progspace.c @@ -153,6 +153,28 @@ program_space_free_data (this); } +/* See progspace.h. */ + +void +program_space::add_objfile (struct objfile *objfile, struct objfile *before) +{ + for (struct objfile **objp = &objfiles_head; + *objp != NULL; + objp = &((*objp)->next)) + { + if (*objp == before) + { + objfile->next = *objp; + *objp = objfile; + return; + } + } + + internal_error (__FILE__, __LINE__, + _("put_objfile_before: before objfile not in list")); + +} + /* 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 c281648..bb10c4b 100644 --- a/gdb/progspace.h +++ b/gdb/progspace.h @@ -165,6 +165,12 @@ return objfiles_safe_range (objfiles_head); } + /* Add OBJFILE to the list of objfiles, putting it just before + BEFORE. If BEFORE is nullptr, it will go at the end of the + list. */ + void add_objfile (struct objfile *objfile, struct objfile *before); + + /* Pointer to next in linked list. */ struct program_space *next = NULL;