* solist.h (master_so_list): New function.

* solib.c (master_so_list): Likewise.
	* solib-svr4.c (enable_break): Iterate over so_list entries
	obtained from master list instead of entries obtained directly
	via svr4_current_sos().
This commit is contained in:
Kevin Buettner
2004-03-11 17:04:40 +00:00
parent 9e07f89d62
commit f8766ec100
4 changed files with 29 additions and 13 deletions

View File

@ -1,3 +1,11 @@
2004-03-11 Kevin Buettner <kevinb@redhat.com>
* solist.h (master_so_list): New function.
* solib.c (master_so_list): Likewise.
* solib-svr4.c (enable_break): Iterate over so_list entries
obtained from master list instead of entries obtained directly
via svr4_current_sos().
2004-03-10 Ben Elliston <bje@gnu.org> 2004-03-10 Ben Elliston <bje@gnu.org>
* MAINTAINERS: Update my mail address. * MAINTAINERS: Update my mail address.

View File

@ -1004,7 +1004,7 @@ enable_break (void)
char *buf; char *buf;
CORE_ADDR load_addr = 0; CORE_ADDR load_addr = 0;
int load_addr_found = 0; int load_addr_found = 0;
struct so_list *inferior_sos; struct so_list *so;
bfd *tmp_bfd = NULL; bfd *tmp_bfd = NULL;
struct target_ops *tmp_bfd_target; struct target_ops *tmp_bfd_target;
int tmp_fd = -1; int tmp_fd = -1;
@ -1047,23 +1047,19 @@ enable_break (void)
target will also close the underlying bfd. */ target will also close the underlying bfd. */
tmp_bfd_target = target_bfd_reopen (tmp_bfd); tmp_bfd_target = target_bfd_reopen (tmp_bfd);
/* If the entry in _DYNAMIC for the dynamic linker has already /* On a running target, we can get the dynamic linker's base
been filled in, we can read its base address from there. */ address from the shared library table. */
inferior_sos = svr4_current_sos (); solib_add (NULL, 0, NULL, auto_solib_add);
if (inferior_sos) so = master_so_list ();
while (so)
{ {
/* Connected to a running target. Update our shared library table. */ if (strcmp (buf, so->so_original_name) == 0)
solib_add (NULL, 0, NULL, auto_solib_add);
}
while (inferior_sos)
{
if (strcmp (buf, inferior_sos->so_original_name) == 0)
{ {
load_addr_found = 1; load_addr_found = 1;
load_addr = LM_ADDR (inferior_sos); load_addr = LM_ADDR (so);
break; break;
} }
inferior_sos = inferior_sos->next; so = so->next;
} }
/* Otherwise we find the dynamic linker's base address by examining /* Otherwise we find the dynamic linker's base address by examining

View File

@ -333,6 +333,14 @@ free_so (struct so_list *so)
} }
/* Return address of first so_list entry in master shared object list. */
struct so_list *
master_so_list (void)
{
return so_list_head;
}
/* A small stub to get us past the arg-passing pinhole of catch_errors. */ /* A small stub to get us past the arg-passing pinhole of catch_errors. */
static int static int

View File

@ -107,8 +107,12 @@ struct target_so_ops
}; };
/* Free the memory associated with a (so_list *). */
void free_so (struct so_list *so); void free_so (struct so_list *so);
/* Return address of first so_list entry in master shared object list. */
struct so_list *master_so_list (void);
/* Find solib binary file and open it. */ /* Find solib binary file and open it. */
extern int solib_open (char *in_pathname, char **found_pathname); extern int solib_open (char *in_pathname, char **found_pathname);