This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: solist - internals: when ldd is in libc
- From: Joel Brobecker <brobecker at adacore dot com>
- To: Aleksandar Ristovski <aristovski at qnx dot com>
- Cc: gdb at sources dot redhat dot com
- Date: Fri, 15 Aug 2008 19:58:42 +0400
- Subject: Re: solist - internals: when ldd is in libc
- References: <g844ms$3jf$1@ger.gmane.org>
> And this is, finally, my question: is there a mechanism in gdb to handle
> such situation, or would supporting this scenario be a new feature?
Would the same routine in the target_ops object be what you are looking
for? Specifically, it is set to the following function for svr4:
/* 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;
}
--
Joel