This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fix search of debug files for remote debuggee


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=5d36dfb949751663bcb814b3cc780ed8f47442b4

commit 5d36dfb949751663bcb814b3cc780ed8f47442b4
Author: Andrey Utkin <autkin@undo.io>
Date:   Fri Nov 9 19:09:40 2018 +0000

    Fix search of debug files for remote debuggee
    
    When using remote debugging server, and when debuggee filename is
    inferred via qXfer:exec-file:read request, or sysroot starts with
    "target:", this "target:" prefix of filepaths is not treated correctly
    during debug file search - it appears in the middle of the looked up
    paths.
    
    In the following example, unpatched GDB can't find separate debug files for
    neither the executable, nor standard libraries:
    
         $ gdb -ex 'set debug separate-debug-file 1' -ex 'set sysroot target:/' -ex 'set debug-file-directory /usr/lib/debug:/home/j/hide' -ex 'target remote :3333' -ex 'break main' -ex 'continue' -ex 'bt' -ex 'info sharedlibrary' -ex 'set confirm off' -ex 'quit'
        GNU gdb (Gentoo 9999 vanilla) 8.2.50.20181109-git
        Copyright (C) 2018 Free Software Foundation, Inc.
        License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
        This is free software: you are free to change and redistribute it.
        There is NO WARRANTY, to the extent permitted by law.
        Type "show copying" and "show warranty" for details.
        This GDB was configured as "x86_64-pc-linux-gnu".
        Type "show configuration" for configuration details.
        For bug reporting instructions, please see:
        <https://bugs.gentoo.org/>.
        Find the GDB manual and other documentation resources online at:
            <http://www.gnu.org/software/gdb/documentation/>.
    
        For help, type "help".
        Type "apropos word" to search for commands related to "word".
        Remote debugging using :3333
        Reading /home/j/test from remote target...
        warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
        Reading /home/j/test from remote target...
        Reading symbols from target:/home/j/test...
    
        Looking for separate debug info (debug link) for target:/home/j/test
          Trying target:/home/j/test.debug
        Reading /home/j/test.debug from remote target...
          Trying target:/home/j/.debug/test.debug
        Reading /home/j/.debug/test.debug from remote target...
          Trying /usr/lib/debug/target:/home/j/test.debug
          Trying /home/j/hide/target:/home/j/test.debug
        (No debugging symbols found in target:/home/j/test)
        Reading /lib64/ld-linux-x86-64.so.2 from remote target...
        Reading /lib64/ld-linux-x86-64.so.2 from remote target...
        Reading symbols from target:/lib64/ld-linux-x86-64.so.2...
    
        Looking for separate debug info (debug link) for target:/lib64/ld-linux-x86-64.so.2
          Trying target:/lib64/ld-2.27.so.debug
        Reading /lib64/ld-2.27.so.debug from remote target...
          Trying target:/lib64/.debug/ld-2.27.so.debug
        Reading /lib64/.debug/ld-2.27.so.debug from remote target...
          Trying /usr/lib/debug/target:/lib64/ld-2.27.so.debug
          Trying /home/j/hide/target:/lib64/ld-2.27.so.debug
        (No debugging symbols found in target:/lib64/ld-linux-x86-64.so.2)
    
        Looking for separate debug info (build-id) for system-supplied DSO at 0x7ffff7ffa000
          Trying /usr/lib/debug/.build-id/fd/03d584bc1a90ba28be457635a02662c9f9c1f2.debug
          Trying /home/j/hide/.build-id/fd/03d584bc1a90ba28be457635a02662c9f9c1f2.debug
        0x00007ffff7dd7000 in ?? () from target:/lib64/ld-linux-x86-64.so.2
        Breakpoint 1 at 0x4005eb
        Continuing.
        Reading /lib64/libpthread.so.0 from remote target...
        Reading /lib64/libc.so.6 from remote target...
    
        Looking for separate debug info (debug link) for target:/lib64/libpthread.so.0
          Trying target:/lib64/libpthread-2.27.so.debug
        Reading /lib64/libpthread-2.27.so.debug from remote target...
          Trying target:/lib64/.debug/libpthread-2.27.so.debug
        Reading /lib64/.debug/libpthread-2.27.so.debug from remote target...
          Trying /usr/lib/debug/target:/lib64/libpthread-2.27.so.debug
          Trying /home/j/hide/target:/lib64/libpthread-2.27.so.debug
    
        Looking for separate debug info (debug link) for target:/lib64/libc.so.6
          Trying target:/lib64/libc-2.27.so.debug
        Reading /lib64/libc-2.27.so.debug from remote target...
          Trying target:/lib64/.debug/libc-2.27.so.debug
        Reading /lib64/.debug/libc-2.27.so.debug from remote target...
          Trying /usr/lib/debug/target:/lib64/libc-2.27.so.debug
          Trying /home/j/hide/target:/lib64/libc-2.27.so.debug
    
        Breakpoint 1, 0x00000000004005eb in main ()
        #0  0x00000000004005eb in main ()
        From                To                  Syms Read   Shared Object Library
        0x00007ffff7dd6e80  0x00007ffff7df4650  Yes (*)     target:/lib64/ld-linux-x86-64.so.2
        0x00007ffff7bbbb70  0x00007ffff7bcbfee  Yes (*)     target:/lib64/libpthread.so.0
        0x00007ffff780f200  0x00007ffff7962d7c  Yes (*)     target:/lib64/libc.so.6
        (*): Shared library is missing debugging information.
    
    With current fix, the paths used always have target: in the beginning
    and this helps to find all debug files:
    
         $ gdb -ex 'set debug separate-debug-file 1' -ex 'set sysroot target:/' -ex 'set debug-file-directory /usr/lib/debug:/home/j/hide' -ex 'target remote :3333' -ex 'break main' -ex 'continue' -ex 'bt' -ex 'info sharedlibrary' -ex 'set confirm off' -ex 'quit'
        GNU gdb (Gentoo 9999 vanilla) 8.2.50.20181109-git
        Copyright (C) 2018 Free Software Foundation, Inc.
        License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
        This is free software: you are free to change and redistribute it.
        There is NO WARRANTY, to the extent permitted by law.
        Type "show copying" and "show warranty" for details.
        This GDB was configured as "x86_64-pc-linux-gnu".
        Type "show configuration" for configuration details.
        For bug reporting instructions, please see:
        <https://bugs.gentoo.org/>.
        Find the GDB manual and other documentation resources online at:
            <http://www.gnu.org/software/gdb/documentation/>.
    
        For help, type "help".
        Type "apropos word" to search for commands related to "word".
        Remote debugging using :3333
        Reading /home/j/test from remote target...
        warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
        Reading /home/j/test from remote target...
        Reading symbols from target:/home/j/test...
    
        Looking for separate debug info (debug link) for target:/home/j/test
          Trying target:/home/j/test.debug
        Reading /home/j/test.debug from remote target...
          Trying target:/home/j/.debug/test.debug
        Reading /home/j/.debug/test.debug from remote target...
          Trying target:/usr/lib/debug//home/j/test.debug
        Reading /usr/lib/debug//home/j/test.debug from remote target...
          Trying target:/home/j/hide//home/j/test.debug
        Reading /home/j/hide//home/j/test.debug from remote target...
        Reading /home/j/hide//home/j/test.debug from remote target...
        Reading symbols from target:/home/j/hide//home/j/test.debug...
        Reading /lib64/ld-linux-x86-64.so.2 from remote target...
        Reading /lib64/ld-linux-x86-64.so.2 from remote target...
        Reading symbols from target:/lib64/ld-linux-x86-64.so.2...
    
        Looking for separate debug info (debug link) for target:/lib64/ld-linux-x86-64.so.2
          Trying target:/lib64/ld-2.27.so.debug
        Reading /lib64/ld-2.27.so.debug from remote target...
          Trying target:/lib64/.debug/ld-2.27.so.debug
        Reading /lib64/.debug/ld-2.27.so.debug from remote target...
          Trying target:/usr/lib/debug//lib64/ld-2.27.so.debug
        Reading /usr/lib/debug//lib64/ld-2.27.so.debug from remote target...
        Reading /usr/lib/debug//lib64/ld-2.27.so.debug from remote target...
        Reading symbols from target:/usr/lib/debug//lib64/ld-2.27.so.debug...
    
        Looking for separate debug info (build-id) for system-supplied DSO at 0x7ffff7ffa000
          Trying /usr/lib/debug/.build-id/fd/03d584bc1a90ba28be457635a02662c9f9c1f2.debug
          Trying /home/j/hide/.build-id/fd/03d584bc1a90ba28be457635a02662c9f9c1f2.debug
        0x00007ffff7dd7000 in _start () from target:/lib64/ld-linux-x86-64.so.2
        Breakpoint 1 at 0x4005ef: file test/test16.c, line 13.
        Continuing.
        Reading /lib64/libpthread.so.0 from remote target...
        Reading /lib64/libc.so.6 from remote target...
    
        Looking for separate debug info (debug link) for target:/lib64/libpthread.so.0
          Trying target:/lib64/libpthread-2.27.so.debug
        Reading /lib64/libpthread-2.27.so.debug from remote target...
          Trying target:/lib64/.debug/libpthread-2.27.so.debug
        Reading /lib64/.debug/libpthread-2.27.so.debug from remote target...
          Trying target:/usr/lib/debug//lib64/libpthread-2.27.so.debug
        Reading /usr/lib/debug//lib64/libpthread-2.27.so.debug from remote target...
        Reading /usr/lib/debug//lib64/libpthread-2.27.so.debug from remote target...
    
        Looking for separate debug info (debug link) for target:/lib64/libc.so.6
          Trying target:/lib64/libc-2.27.so.debug
        Reading /lib64/libc-2.27.so.debug from remote target...
          Trying target:/lib64/.debug/libc-2.27.so.debug
        Reading /lib64/.debug/libc-2.27.so.debug from remote target...
          Trying target:/usr/lib/debug//lib64/libc-2.27.so.debug
        Reading /usr/lib/debug//lib64/libc-2.27.so.debug from remote target...
        Reading /usr/lib/debug//lib64/libc-2.27.so.debug from remote target...
    
        Breakpoint 1, main () at test/test16.c:13
        13          for ( i=0; i<10; ++i)
        #0  main () at test/test16.c:13
        From                To                  Syms Read   Shared Object Library
        0x00007ffff7dd6e80  0x00007ffff7df4650  Yes         target:/lib64/ld-linux-x86-64.so.2
        0x00007ffff7bbbb70  0x00007ffff7bcbfee  Yes         target:/lib64/libpthread.so.0
        0x00007ffff780f200  0x00007ffff7962d7c  Yes         target:/lib64/libc.so.6
    
    gdb/ChangeLog:
    
    2018-11-09  Andrey Utkin  <autkin@undo.io>
    
            * symfile.c (find_separate_debug_file): Fix search of debug files for
            remote debuggee.
    
    Signed-off-by: Andrey Utkin <autkin@undo.io>

Diff:
---
 gdb/ChangeLog |  5 +++++
 gdb/symfile.c | 10 +++++++---
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 23503ae..3ec0d95 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2019-01-02  Andrey Utkin  <autkin@undo.io>
+
+	* symfile.c (find_separate_debug_file): Fix search of debug files for
+	remote debuggee.
+
 2019-01-02  Tom Tromey  <tom@tromey.com>
 
 	* python/py-inferior.c (gdbpy_initialize_inferior): Fix
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 259b272..8858098 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -1433,14 +1433,17 @@ find_separate_debug_file (const char *dir,
      Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
      cause "/..." lookups.  */
 
+  bool target_prefix = startswith (dir, "target:");
+  const char *dir_notarget = target_prefix ? dir + strlen ("target:") : dir;
   std::vector<gdb::unique_xmalloc_ptr<char>> debugdir_vec
     = dirnames_to_char_ptr_vec (debug_file_directory);
 
   for (const gdb::unique_xmalloc_ptr<char> &debugdir : debugdir_vec)
     {
-      debugfile = debugdir.get ();
+      debugfile = target_prefix ? "target:" : "";
+      debugfile += debugdir.get ();
       debugfile += "/";
-      debugfile += dir;
+      debugfile += dir_notarget;
       debugfile += debuglink;
 
       if (separate_debug_file_exists (debugfile, crc32, objfile))
@@ -1453,7 +1456,8 @@ find_separate_debug_file (const char *dir,
 			    strlen (gdb_sysroot)) == 0
 	  && IS_DIR_SEPARATOR (canon_dir[strlen (gdb_sysroot)]))
 	{
-	  debugfile = debugdir.get ();
+	  debugfile = target_prefix ? "target:" : "";
+	  debugfile += debugdir.get ();
 	  debugfile += (canon_dir + strlen (gdb_sysroot));
 	  debugfile += "/";
 	  debugfile += debuglink;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]