aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog11
-rw-r--r--gdb/objfiles.c51
-rw-r--r--gdb/progspace.c22
-rw-r--r--gdb/progspace.h6
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 <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.
+
+2019-12-12 Tom Tromey <tom@tromey.com>
+
* 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 @@ 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;
}
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::~program_space ()
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 @@ struct program_space
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;