aboutsummaryrefslogtreecommitdiff
path: root/gdb/objfiles.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-11-01 16:31:28 -0600
committerTom Tromey <tom@tromey.com>2019-12-12 15:50:52 -0700
commit7cac64af7bc6a7f7a86f90a1465f7c3d2b6f07e8 (patch)
tree0ecbee9d6d1b2c03b4a49bc551ae11ade6b1c1b0 /gdb/objfiles.c
parent268e4f09144c48e02f01d82ab3aab359457df214 (diff)
downloadfsf-binutils-gdb-7cac64af7bc6a7f7a86f90a1465f7c3d2b6f07e8.zip
fsf-binutils-gdb-7cac64af7bc6a7f7a86f90a1465f7c3d2b6f07e8.tar.gz
fsf-binutils-gdb-7cac64af7bc6a7f7a86f90a1465f7c3d2b6f07e8.tar.bz2
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 <tom@tromey.com> * progspace.h (struct program_space) <add_objfile>: 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
Diffstat (limited to 'gdb/objfiles.c')
-rw-r--r--gdb/objfiles.c51
1 files changed, 6 insertions, 45 deletions
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 @@ objfile::objfile (bfd *abfd, const char *name, objfile_flags flags_)
}
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 (struct objfile *objfile)
_("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 @@ add_separate_debug_objfile (struct objfile *objfile, struct objfile *parent)
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::make (bfd *bfd_, const char *name_, objfile_flags flags_,
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;
}