solist - internals: when ldd is in libc

Joel Brobecker brobecker@adacore.com
Fri Aug 15 20:28:00 GMT 2008


> 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



More information about the Gdb mailing list