aboutsummaryrefslogtreecommitdiff
path: root/gdb/solib-svr4.c
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2008-03-07 19:31:38 +0000
committerJoel Brobecker <brobecker@gnat.com>2008-03-07 19:31:38 +0000
commit4d7b2d5b9d56cb1122b58b411368dbf6630c84c9 (patch)
tree2bc7346e541f0e7bc1aed187c843c205e10e62a5 /gdb/solib-svr4.c
parentfee2edb1e43c9cf2f5b042ceb099322fc315adbb (diff)
downloadgdb-4d7b2d5b9d56cb1122b58b411368dbf6630c84c9.zip
gdb-4d7b2d5b9d56cb1122b58b411368dbf6630c84c9.tar.gz
gdb-4d7b2d5b9d56cb1122b58b411368dbf6630c84c9.tar.bz2
* solib-svr4.c (svr4_same_1): New function, originally extracted
from svr4_same and expanded to handle the sparc64 case. (svr4_same): Move up and reimplement using svr4_same_1. (enable_break): Use svr4_same_1 to do shared library name comparisons.
Diffstat (limited to 'gdb/solib-svr4.c')
-rw-r--r--gdb/solib-svr4.c55
1 files changed, 35 insertions, 20 deletions
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
index d71f177..d4d3213 100644
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -103,6 +103,40 @@ static char *main_name_list[] =
NULL
};
+/* Return non-zero if GDB_SO_NAME and INFERIOR_SO_NAME represent
+ the same shared library. */
+
+static int
+svr4_same_1 (const char *gdb_so_name, const char *inferior_so_name)
+{
+ if (strcmp (gdb_so_name, inferior_so_name) == 0)
+ return 1;
+
+ /* On Solaris, when starting inferior we think that dynamic linker is
+ /usr/lib/ld.so.1, but later on, the table of loaded shared libraries
+ contains /lib/ld.so.1. Sometimes one file is a link to another, but
+ sometimes they have identical content, but are not linked to each
+ other. We don't restrict this check for Solaris, but the chances
+ of running into this situation elsewhere are very low. */
+ if (strcmp (gdb_so_name, "/usr/lib/ld.so.1") == 0
+ && strcmp (inferior_so_name, "/lib/ld.so.1") == 0)
+ return 1;
+
+ /* Similarly, we observed the same issue with sparc64, but with
+ different locations. */
+ if (strcmp (gdb_so_name, "/usr/lib/sparcv9/ld.so.1") == 0
+ && strcmp (inferior_so_name, "/lib/sparcv9/ld.so.1") == 0)
+ return 1;
+
+ return 0;
+}
+
+static int
+svr4_same (struct so_list *gdb, struct so_list *inferior)
+{
+ return (svr4_same_1 (gdb->so_original_name, inferior->so_original_name));
+}
+
/* link map access functions */
static CORE_ADDR
@@ -1095,7 +1129,7 @@ enable_break (void)
so = master_so_list ();
while (so)
{
- if (strcmp (buf, so->so_original_name) == 0)
+ if (svr4_same_1 (buf, so->so_original_name))
{
load_addr_found = 1;
loader_found_in_list = 1;
@@ -1634,25 +1668,6 @@ elf_lookup_lib_symbol (const struct objfile *objfile,
(objfile, name, linkage_name, domain, symtab);
}
-static int
-svr4_same (struct so_list *gdb, struct so_list *inferior)
-{
- if (! strcmp (gdb->so_original_name, inferior->so_original_name))
- return 1;
-
- /* On Solaris, when starting inferior we think that dynamic linker is
- /usr/lib/ld.so.1, but later on, the table of loaded shared libraries
- contains /lib/ld.so.1. Sometimes one file is a link to another, but
- sometimes they have identical content, but are not linked to each
- other. We don't restrict this check for Solaris, but the chances
- of running into this situation elsewhere are very low. */
- if (strcmp (gdb->so_original_name, "/usr/lib/ld.so.1") == 0
- && strcmp (inferior->so_original_name, "/lib/ld.so.1") == 0)
- return 1;
-
- return 0;
-}
-
extern initialize_file_ftype _initialize_svr4_solib; /* -Wmissing-prototypes */
void