From d0801dd8f22a3e739c6a7d126d45829df981794d Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sun, 10 Mar 2019 06:56:33 -0600 Subject: 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 * progspace.c (program_space::add_objfile) (program_space::remove_objfile): Update. (program_space::multi_objfile_p): Remove. * objfiles.h (struct objfile) : Remove. * objfiles.c (objfile::objfile): Update. (put_objfile_before): Update. (unlink_objfile): Update. * progspace.h (object_files): Remove. (struct program_space) : Remove. : New member. : Change type. (objfiles): Change return type. (objfiles_safe): Update. (multi_objfile_p): Rewrite and inline. (object_files): Remove macro. Change-Id: Ib4430e3db6f9a390399924379a5c10426c514853 --- gdb/progspace.c | 52 ++++++++++++++-------------------------------------- 1 file changed, 14 insertions(+), 38 deletions(-) (limited to 'gdb/progspace.c') 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 /* 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, -- cgit v1.1