aboutsummaryrefslogtreecommitdiff
path: root/gdb/solib.c
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2006-10-19 19:58:23 +0000
committerJoel Brobecker <brobecker@gnat.com>2006-10-19 19:58:23 +0000
commit6612ad7f9f2fb352fc1bb76a669d2b64fa0b24e2 (patch)
tree8b52617bd8839509cd3c9aaf57ff1b72de5e8b61 /gdb/solib.c
parentd674a25c2bff6d69229a91f50c9c54b4ce94fef2 (diff)
downloadgdb-6612ad7f9f2fb352fc1bb76a669d2b64fa0b24e2.zip
gdb-6612ad7f9f2fb352fc1bb76a669d2b64fa0b24e2.tar.gz
gdb-6612ad7f9f2fb352fc1bb76a669d2b64fa0b24e2.tar.bz2
* solib.c (libpthread_solib_p): New function.
(solib_add): Always read the symbols from the libpthread library.
Diffstat (limited to 'gdb/solib.c')
-rw-r--r--gdb/solib.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/gdb/solib.c b/gdb/solib.c
index c26a000..4fa9fce 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -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;
}