From f8766ec10093029c944914de6c048d015e8dd5db Mon Sep 17 00:00:00 2001 From: Kevin Buettner Date: Thu, 11 Mar 2004 17:04:40 +0000 Subject: [PATCH] * 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(). --- gdb/ChangeLog | 8 ++++++++ gdb/solib-svr4.c | 22 +++++++++------------- gdb/solib.c | 8 ++++++++ gdb/solist.h | 4 ++++ 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1ef8c4217f..be7fc1476f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2004-03-11 Kevin Buettner + + * 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 * MAINTAINERS: Update my mail address. diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index 4f4664cc01..020a55c284 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -1004,7 +1004,7 @@ enable_break (void) char *buf; CORE_ADDR load_addr = 0; int load_addr_found = 0; - struct so_list *inferior_sos; + struct so_list *so; bfd *tmp_bfd = NULL; struct target_ops *tmp_bfd_target; int tmp_fd = -1; @@ -1047,23 +1047,19 @@ enable_break (void) target will also close the underlying bfd. */ tmp_bfd_target = target_bfd_reopen (tmp_bfd); - /* If the entry in _DYNAMIC for the dynamic linker has already - been filled in, we can read its base address from there. */ - inferior_sos = svr4_current_sos (); - if (inferior_sos) + /* On a running target, we can get the dynamic linker's base + address from the shared library table. */ + solib_add (NULL, 0, NULL, auto_solib_add); + so = master_so_list (); + while (so) { - /* Connected to a running target. Update our shared library table. */ - solib_add (NULL, 0, NULL, auto_solib_add); - } - while (inferior_sos) - { - if (strcmp (buf, inferior_sos->so_original_name) == 0) + if (strcmp (buf, so->so_original_name) == 0) { load_addr_found = 1; - load_addr = LM_ADDR (inferior_sos); + load_addr = LM_ADDR (so); break; } - inferior_sos = inferior_sos->next; + so = so->next; } /* Otherwise we find the dynamic linker's base address by examining diff --git a/gdb/solib.c b/gdb/solib.c index a98c3bdfed..137fc709fd 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -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. */ static int diff --git a/gdb/solist.h b/gdb/solist.h index 8e5c432185..7977c541fc 100644 --- a/gdb/solist.h +++ b/gdb/solist.h @@ -107,8 +107,12 @@ struct target_so_ops }; +/* Free the memory associated with a (so_list *). */ 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. */ extern int solib_open (char *in_pathname, char **found_pathname); -- 2.34.1