mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:54:41 +08:00
* solib.c (solib_used): New function.
(update_solib_list, reload_shared_libraries_1): Check if objfile is used by another so_list object before freeing it.
This commit is contained in:
parent
7b5b197e80
commit
59145f8cfb
@ -1,3 +1,9 @@
|
||||
2011-09-01 Aleksandar Ristovski <aristovski@qnx.com>
|
||||
|
||||
* solib.c (used): New function.
|
||||
(update_solib_list, reload_shared_libraries_1): Check if objfile is used
|
||||
by another so_list object before freeing it.
|
||||
|
||||
2011-09-11 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Code cleanup.
|
||||
|
20
gdb/solib.c
20
gdb/solib.c
@ -633,6 +633,20 @@ solib_read_symbols (struct so_list *so, int flags)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Return 1 if KNOWN->objfile is used by any other so_list object in the
|
||||
SO_LIST_HEAD list. Return 0 otherwise. */
|
||||
|
||||
static int
|
||||
solib_used (const struct so_list *const known)
|
||||
{
|
||||
const struct so_list *pivot;
|
||||
|
||||
for (pivot = so_list_head; pivot != NULL; pivot = pivot->next)
|
||||
if (pivot != known && pivot->objfile == known->objfile)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Synchronize GDB's shared object list with inferior's.
|
||||
|
||||
Extract the list of currently loaded shared objects from the
|
||||
@ -749,7 +763,8 @@ update_solib_list (int from_tty, struct target_ops *target)
|
||||
*gdb_link = gdb->next;
|
||||
|
||||
/* Unless the user loaded it explicitly, free SO's objfile. */
|
||||
if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED))
|
||||
if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED)
|
||||
&& !solib_used (gdb))
|
||||
free_objfile (gdb->objfile);
|
||||
|
||||
/* Some targets' section tables might be referring to
|
||||
@ -1225,7 +1240,8 @@ reload_shared_libraries_1 (int from_tty)
|
||||
|| (found_pathname != NULL
|
||||
&& filename_cmp (found_pathname, so->so_name) != 0))
|
||||
{
|
||||
if (so->objfile && ! (so->objfile->flags & OBJF_USERLOADED))
|
||||
if (so->objfile && ! (so->objfile->flags & OBJF_USERLOADED)
|
||||
&& !solib_used (so))
|
||||
free_objfile (so->objfile);
|
||||
remove_target_sections (so->abfd);
|
||||
free_so_symbols (so);
|
||||
|
Loading…
Reference in New Issue
Block a user