aboutsummaryrefslogtreecommitdiff
path: root/gdb/solib-svr4.c
diff options
context:
space:
mode:
authorVladimir Prus <vladimir@codesourcery.com>2008-01-07 15:19:58 +0000
committerVladimir Prus <vladimir@codesourcery.com>2008-01-07 15:19:58 +0000
commita7c02bc8e11894a2c8ac3f834961f214229a4d51 (patch)
tree966dda90f1fa480b7e9b4648f5c559f85ca3e02d /gdb/solib-svr4.c
parent2dd3e587bdab39d73086c35be60399e096d48b46 (diff)
downloadgdb-a7c02bc8e11894a2c8ac3f834961f214229a4d51.zip
gdb-a7c02bc8e11894a2c8ac3f834961f214229a4d51.tar.gz
gdb-a7c02bc8e11894a2c8ac3f834961f214229a4d51.tar.bz2
Ignore change in name of dynamic linker during
execution, on Solaris. This also unbreaks pending breakpoints. * solist.h (struct target_so_ops): New field same. * solib-svr4.c (svr4_same): New. (_initialize_svr4_solib): Register svr4_same. * solib.c (update_solib_list): Use ops->same, if available.
Diffstat (limited to 'gdb/solib-svr4.c')
-rw-r--r--gdb/solib-svr4.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
index ef460aa..4c9e82d 100644
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -1569,6 +1569,25 @@ 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
@@ -1585,4 +1604,5 @@ _initialize_svr4_solib (void)
svr4_so_ops.open_symbol_file_object = open_symbol_file_object;
svr4_so_ops.in_dynsym_resolve_code = svr4_in_dynsym_resolve_code;
svr4_so_ops.lookup_lib_global_symbol = elf_lookup_lib_symbol;
+ svr4_so_ops.same = svr4_same;
}