public inbox for gdb-testers@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Store objfiles on a std::list
@ 2019-12-13  0:56 gdb-buildbot
  2019-12-13  1:00 ` *** COMPILATION FAILED *** Failures on Solaris11-sparcv9-m64, branch master *** BREAKAGE *** gdb-buildbot
                   ` (13 more replies)
  0 siblings, 14 replies; 15+ messages in thread
From: gdb-buildbot @ 2019-12-13  0:56 UTC (permalink / raw)
  To: gdb-testers

*** TEST RESULTS FOR COMMIT d0801dd8f22a3e739c6a7d126d45829df981794d ***

commit d0801dd8f22a3e739c6a7d126d45829df981794d
Author:     Tom Tromey <tom@tromey.com>
AuthorDate: Sun Mar 10 06:56:33 2019 -0600
Commit:     Tom Tromey <tom@tromey.com>
CommitDate: Thu Dec 12 15:50:55 2019 -0700

    Store objfiles on a std::list
    
    This removes objfile::next and changes objfiles to be stored in a
    std::list.
    
    gdb/ChangeLog
    2019-12-12  Tom Tromey  <tom@tromey.com>
    
            * progspace.c (program_space::add_objfile)
            (program_space::remove_objfile): Update.
            (program_space::multi_objfile_p): Remove.
            * objfiles.h (struct objfile) <next>: Remove.
            * objfiles.c (objfile::objfile): Update.
            (put_objfile_before): Update.
            (unlink_objfile): Update.
            * progspace.h (object_files): Remove.
            (struct program_space) <objfiles_head>: Remove.
            <objfiles_list>: New member.
            <objfiles_range, objfiles_safe_range>: Change type.
            (objfiles): Change return type.
            (objfiles_safe): Update.
            (multi_objfile_p): Rewrite and inline.
            (object_files): Remove macro.
    
    Change-Id: Ib4430e3db6f9a390399924379a5c10426c514853

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 368d7f0231..9b96f3d8fd 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,21 @@
+2019-12-12  Tom Tromey  <tom@tromey.com>
+
+	* progspace.c (program_space::add_objfile)
+	(program_space::remove_objfile): Update.
+	(program_space::multi_objfile_p): Remove.
+	* objfiles.h (struct objfile) <next>: Remove.
+	* objfiles.c (objfile::objfile): Update.
+	(put_objfile_before): Update.
+	(unlink_objfile): Update.
+	* progspace.h (object_files): Remove.
+	(struct program_space) <objfiles_head>: Remove.
+	<objfiles_list>: New member.
+	<objfiles_range, objfiles_safe_range>: Change type.
+	(objfiles): Change return type.
+	(objfiles_safe): Update.
+	(multi_objfile_p): Rewrite and inline.
+	(object_files): Remove macro.
+
 2019-12-12  Tom Tromey  <tom@tromey.com>
 
 	* gdbsupport/safe-iterator.h (basic_safe_iterator): Simplify.  Add
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index 34f6a29387..31265c1653 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -54,6 +54,7 @@
 #include "btrace.h"
 #include "gdbsupport/pathstuff.h"
 
+#include <algorithm>
 #include <vector>
 
 /* Keep a registry of per-objfile data-pointers required by other GDB
diff --git a/gdb/objfiles.h b/gdb/objfiles.h
index 0656cfe4a1..f9bf102bc8 100644
--- a/gdb/objfiles.h
+++ b/gdb/objfiles.h
@@ -486,12 +486,6 @@ public:
   }
 
 
-  /* All struct objfile's are chained together by their next pointers.
-     The program space field "objfiles"  (frequently referenced via
-     the macro "object_files") points to the first link in this chain.  */
-
-  struct objfile *next = nullptr;
-
   /* The object file's original name as specified by the user,
      made absolute, and tilde-expanded.  However, it is not canonicalized
      (i.e., it has not been passed through gdb_realpath).
diff --git a/gdb/progspace.c b/gdb/progspace.c
index a39b34c923..d1bf0c6aba 100644
--- a/gdb/progspace.c
+++ b/gdb/progspace.c
@@ -25,6 +25,7 @@
 #include "solib.h"
 #include "gdbthread.h"
 #include "inferior.h"
+#include <algorithm>
 
 /* The last program space number assigned.  */
 int last_program_space_num = 0;
@@ -158,21 +159,15 @@ program_space::~program_space ()
 void
 program_space::add_objfile (struct objfile *objfile, struct objfile *before)
 {
-  for (struct objfile **objp = &objfiles_head;
-       *objp != NULL;
-       objp = &((*objp)->next))
+  if (before == nullptr)
+    objfiles_list.push_back (objfile);
+  else
     {
-      if (*objp == before)
-	{
-	  objfile->next = *objp;
-	  *objp = objfile;
-	  return;
-	}
+      auto iter = std::find (objfiles_list.begin (), objfiles_list.end (),
+			     before);
+      gdb_assert (iter != objfiles_list.end ());
+      objfiles_list.insert (iter, objfile);
     }
-
-  internal_error (__FILE__, __LINE__,
-		  _("put_objfile_before: before objfile not in list"));
-
 }
 
 /* See progspace.h.  */
@@ -180,32 +175,13 @@ program_space::add_objfile (struct objfile *objfile, struct objfile *before)
 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;
+  auto iter = std::find (objfiles_list.begin (), objfiles_list.end (),
+			 objfile);
+  gdb_assert (iter != objfiles_list.end ());
+  objfiles_list.erase (iter);
 
-	  return;
-	}
-    }
-
-  internal_error (__FILE__, __LINE__,
-		  _("remove_objfile: objfile already unlinked"));
-}
-
-/* See progspace.h.  */
-
-bool
-program_space::multi_objfile_p () const
-{
-  return objfiles_head != nullptr && objfiles_head->next != nullptr;
+  if (objfile == symfile_object_file)
+    symfile_object_file = NULL;
 }
 
 /* Copies program space SRC to DEST.  Copies the main executable file,
diff --git a/gdb/progspace.h b/gdb/progspace.h
index 86bc22acc2..a731eb6e24 100644
--- a/gdb/progspace.h
+++ b/gdb/progspace.h
@@ -27,6 +27,7 @@
 #include "registry.h"
 #include "gdbsupport/next-iterator.h"
 #include "gdbsupport/safe-iterator.h"
+#include <list>
 
 struct target_ops;
 struct bfd;
@@ -138,20 +139,18 @@ struct program_space
   program_space (address_space *aspace_);
   ~program_space ();
 
-  typedef next_adapter<struct objfile> objfiles_range;
+  typedef std::list<struct objfile *> objfiles_range;
 
   /* Return an iterable object that can be used to iterate over all
      objfiles.  The basic use is in a foreach, like:
 
      for (objfile *objf : pspace->objfiles ()) { ... }  */
-  objfiles_range objfiles ()
+  objfiles_range &objfiles ()
   {
-    return objfiles_range (objfiles_head);
+    return objfiles_list;
   }
 
-  typedef next_adapter<struct objfile,
-		       basic_safe_iterator<next_iterator<objfile>>>
-    objfiles_safe_range;
+  typedef basic_safe_range<objfiles_range> objfiles_safe_range;
 
   /* An iterable object that can be used to iterate over all objfiles.
      The basic use is in a foreach, like:
@@ -162,7 +161,7 @@ struct program_space
      deleted during iteration.  */
   objfiles_safe_range objfiles_safe ()
   {
-    return objfiles_safe_range (objfiles_head);
+    return objfiles_safe_range (objfiles_list);
   }
 
   /* Add OBJFILE to the list of objfiles, putting it just before
@@ -175,7 +174,10 @@ struct program_space
 
   /* Return true if there is more than one object file loaded; false
      otherwise.  */
-  bool multi_objfile_p () const;
+  bool multi_objfile_p () const
+  {
+    return objfiles_list.size () > 1;
+  }
 
 
   /* Pointer to next in linked list.  */
@@ -228,9 +230,8 @@ struct program_space
      (e.g. the argument to the "symbol-file" or "file" command).  */
   struct objfile *symfile_object_file = NULL;
 
-  /* All known objfiles are kept in a linked list.  This points to
-     the head of this list.  */
-  struct objfile *objfiles_head = NULL;
+  /* All known objfiles are kept in a linked list.  */
+  std::list<struct objfile *> objfiles_list;
 
   /* The set of target sections matching the sections mapped into
      this program space.  Managed by both exec_ops and solib.c.  */
@@ -271,10 +272,6 @@ struct address_space
 
 #define symfile_objfile current_program_space->symfile_object_file
 
-/* All known objfiles are kept in a linked list.  This points to the
-   root of this list.  */
-#define object_files current_program_space->objfiles_head
-
 /* The set of target sections matching the sections mapped into the
    current program space.  */
 #define current_target_sections (&current_program_space->target_sections)


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2019-12-17  2:41 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-13  0:56 [binutils-gdb] Store objfiles on a std::list gdb-buildbot
2019-12-13  1:00 ` *** COMPILATION FAILED *** Failures on Solaris11-sparcv9-m64, branch master *** BREAKAGE *** gdb-buildbot
2019-12-13  1:17 ` *** COMPILATION FAILED *** Failures on Solaris11-amd64-m64, " gdb-buildbot
2019-12-15 23:30 ` *** COMPILATION FAILED *** Failures on Ubuntu-Aarch64-m64, " gdb-buildbot
2019-12-15 23:33 ` *** COMPILATION FAILED *** Failures on Ubuntu-Aarch64-native-extended-gdbserver-m64, " gdb-buildbot
2019-12-15 23:36 ` *** COMPILATION FAILED *** Failures on Ubuntu-Aarch64-native-gdbserver-m64, " gdb-buildbot
2019-12-16 23:24 ` *** COMPILATION FAILED *** Failures on Fedora-i686, " gdb-buildbot
2019-12-16 23:38 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-cc-with-index, " gdb-buildbot
2019-12-16 23:49 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-m32, " gdb-buildbot
2019-12-16 23:58 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-m64, " gdb-buildbot
2019-12-17  0:05 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-native-extended-gdbserver-m32, " gdb-buildbot
2019-12-17  0:12 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-w64-mingw32, " gdb-buildbot
2019-12-17  1:42 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-native-gdbserver-m32, " gdb-buildbot
2019-12-17  1:50 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-native-extended-gdbserver-m64, " gdb-buildbot
2019-12-17  2:45 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-native-gdbserver-m64, " gdb-buildbot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).