aboutsummaryrefslogtreecommitdiff
path: root/gdb/progspace.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-03-10 06:56:33 -0600
committerTom Tromey <tom@tromey.com>2019-12-12 15:50:55 -0700
commitd0801dd8f22a3e739c6a7d126d45829df981794d (patch)
treebe0659729b37d9464c10d7991b1d250b4a785465 /gdb/progspace.c
parent13bff72615e5a93a6e5f28e83a594125e66ccced (diff)
downloadgdb-d0801dd8f22a3e739c6a7d126d45829df981794d.zip
gdb-d0801dd8f22a3e739c6a7d126d45829df981794d.tar.gz
gdb-d0801dd8f22a3e739c6a7d126d45829df981794d.tar.bz2
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
Diffstat (limited to 'gdb/progspace.c')
-rw-r--r--gdb/progspace.c52
1 files changed, 14 insertions, 38 deletions
diff --git a/gdb/progspace.c b/gdb/progspace.c
index a39b34c..d1bf0c6 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,