gdb's debuglink support is broken

Radoslaw Zielinski radek at pld-linux.org
Wed May 6 12:29:49 CEST 2009


This path is correct:

  $ objdump -s -j .gnu_debuglink /usr/lib/perl5/vendor_perl/5.10.0/i686-pld-linux-thread-multi/auto/DBD/Pg/Pg.so

  /usr/lib/perl5/vendor_perl/5.10.0/i686-pld-linux-thread-multi/auto/DBD/Pg/Pg.so:     file format elf32-i386

  Contents of section .gnu_debuglink:
   0000 2f757372 2f6c6962 2f646562 75672f75  /usr/lib/debug/u
   0010 73722f6c 69622f70 65726c35 2f76656e  sr/lib/perl5/ven
   0020 646f725f 7065726c 2f352e31 302e302f  dor_perl/5.10.0/
   0030 69363836 2d706c64 2d6c696e 75782d74  i686-pld-linux-t
   0040 68726561 642d6d75 6c74692f 6175746f  hread-multi/auto
   0050 2f444244 2f50672f 50672e73 6f2e6465  /DBD/Pg/Pg.so.de
   0060 62756700 96e2872f                    bug..../        

...but gdb doesn't use it properly; neither of these makes sense:

  $ echo "set args -MDBD::Pg -e 'warn42'\nr" > /tmp/foo
  $ strace -etrace=file gdb -batch -x /tmp/foo perl 2>&1 | grep Pg.so.debug
  open("/usr/lib/perl5/vendor_perl/5.10.0/i686-pld-linux-thread-multi/auto/DBD/Pg//usr/lib/debug/usr/lib/perl5/vendor_perl/5.10.0/i686-pld-linux-thread-multi/auto/DBD/Pg/Pg.so.debug", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
  open("/usr/lib/perl5/vendor_perl/5.10.0/i686-pld-linux-thread-multi/auto/DBD/Pg/.debug//usr/lib/debug/usr/lib/perl5/vendor_perl/5.10.0/i686-pld-linux-thread-multi/auto/DBD/Pg/Pg.so.debug", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
  open("/usr/lib/debug//usr/lib/perl5/vendor_perl/5.10.0/i686-pld-linux-thread-multi/auto/DBD/Pg//usr/lib/debug/usr/lib/perl5/vendor_perl/5.10.0/i686-pld-linux-thread-multi/auto/DBD/Pg/Pg.so.debug", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
  open("/usr/lib/debug/usr/lib/perl5/vendor_perl/5.10.0/i686-pld-linux-thread-multi/auto/DBD/Pg//usr/lib/debug/usr/lib/perl5/vendor_perl/5.10.0/i686-pld-linux-thread-multi/auto/DBD/Pg/Pg.so.debug", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)

According to [1], the paths should be:

  /usr/lib/perl5/vendor_perl/5.10.0/i686-pld-linux-thread-multi/auto/DBD/Pg/Pg.so.debug
  /usr/lib/perl5/vendor_perl/5.10.0/i686-pld-linux-thread-multi/auto/DBD/Pg/.debug/Pg.so.debug
  /usr/lib/debug/usr/lib/perl5/vendor_perl/5.10.0/i686-pld-linux-thread-multi/auto/DBD/Pg/Pg.so.debug


I took a look at the 115 patches we have for gdb, but gave up.  Anyone
familiar with this code?


[1] http://sources.redhat.com/gdb/current/onlinedocs/gdb_17.html#SEC166

-- 
Radosław Zieliński <radek at pld-linux.org>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
Url : /mailman/pipermail/pld-devel-en/attachments/20090506/4e07c796/attachment.sig 


More information about the pld-devel-en mailing list