* solist.h (master_so_list): New function.
authorKevin Buettner <kevinb@redhat.com>
Thu, 11 Mar 2004 17:04:40 +0000 (17:04 +0000)
committerKevin Buettner <kevinb@redhat.com>
Thu, 11 Mar 2004 17:04:40 +0000 (17:04 +0000)
* 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
gdb/solib-svr4.c
gdb/solib.c
gdb/solist.h

index 1ef8c42..be7fc14 100644 (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>
 
        * MAINTAINERS: Update my mail address.
index 4f4664c..020a55c 100644 (file)
@@ -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
index a98c3bd..137fc70 100644 (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.  */
 
 static int
index 8e5c432..7977c54 100644 (file)
@@ -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);