diff options
author | Vladimir Prus <vladimir@codesourcery.com> | 2008-01-07 15:19:58 +0000 |
---|---|---|
committer | Vladimir Prus <vladimir@codesourcery.com> | 2008-01-07 15:19:58 +0000 |
commit | a7c02bc8e11894a2c8ac3f834961f214229a4d51 (patch) | |
tree | 966dda90f1fa480b7e9b4648f5c559f85ca3e02d /gdb/solib-svr4.c | |
parent | 2dd3e587bdab39d73086c35be60399e096d48b46 (diff) | |
download | gdb-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.c | 20 |
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; } |