diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/objfiles.c | 51 | ||||
-rw-r--r-- | gdb/progspace.c | 22 | ||||
-rw-r--r-- | gdb/progspace.h | 6 |
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; |