* solib.c (libpthread_solib_p): New function.
authorJoel Brobecker <brobecker@gnat.com>
Thu, 19 Oct 2006 19:58:23 +0000 (19:58 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Thu, 19 Oct 2006 19:58:23 +0000 (19:58 +0000)
        (solib_add): Always read the symbols from the libpthread library.

gdb/ChangeLog
gdb/solib.c

index 6de65e33b9cc631fc103305a9908e84f5fc68a37..1c11ec268f9a9e2007b748a3442cbae5213935bd 100644 (file)
@@ -1,3 +1,8 @@
+2006-10-19  Joel Brobecker  <brobecker@adacore.com>
+
+       * solib.c (libpthread_solib_p): New function.
+       (solib_add): Always read the symbols from the libpthread library.
+
 2006-10-19  Andrew Stubbs  <andrew.stubbs@st.com>
 
        * breakpoint.c (describe_other_breakpoints): Add thread parameter.
index c26a000e2b31890f4a1fbbbdcb5eb68fd97f79ba..4fa9fce65f6ce51712e9858edab16dbcf46c63a1 100644 (file)
@@ -615,6 +615,17 @@ update_solib_list (int from_tty, struct target_ops *target)
     }
 }
 
+/* Return non-zero if SO is the libpthread shared library.
+
+   Uses a fairly simplistic heuristic approach where we check
+   the file name against "/libpthread".  This can lead to false
+   positives, but this should be good enough in practice.  */
+
+static int
+libpthread_solib_p (struct so_list *so)
+{
+  return (strstr (so->so_name, "/libpthread") != NULL);
+}
 
 /* GLOBAL FUNCTION
 
@@ -661,8 +672,16 @@ solib_add (char *pattern, int from_tty, struct target_ops *target, int readsyms)
     for (gdb = so_list_head; gdb; gdb = gdb->next)
       if (! pattern || re_exec (gdb->so_name))
        {
+          /* Normally, we would read the symbols from that library
+             only if READSYMS is set.  However, we're making a small
+             exception for the pthread library, because we sometimes
+             need the library symbols to be loaded in order to provide
+             thread support (x86-linux for instance).  */
+          const int add_this_solib =
+            (readsyms || libpthread_solib_p (gdb));
+
          any_matches = 1;
-         if (readsyms && solib_read_symbols (gdb, from_tty))
+         if (add_this_solib && solib_read_symbols (gdb, from_tty))
            loaded_any_symbols = 1;
        }