From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 75356 invoked by alias); 1 Apr 2015 11:22:36 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 75338 invoked by uid 89); 1 Apr 2015 11:22:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Wed, 01 Apr 2015 11:22:34 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t31BMXri005430 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Wed, 1 Apr 2015 07:22:33 -0400 Received: from blade.nx (ovpn-116-118.ams2.redhat.com [10.36.116.118]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t31BMWOA030356 for ; Wed, 1 Apr 2015 07:22:32 -0400 Received: from blade.nx (localhost [127.0.0.1]) by blade.nx (Postfix) with ESMTP id AFADC26410D for ; Wed, 1 Apr 2015 12:22:31 +0100 (BST) From: Gary Benson To: gdb-patches@sourceware.org Subject: [PATCH 3/7] Use gdb_sysroot for main executable on attach Date: Wed, 01 Apr 2015 11:22:00 -0000 Message-Id: <1427887341-31819-4-git-send-email-gbenson@redhat.com> In-Reply-To: <1427887341-31819-1-git-send-email-gbenson@redhat.com> References: <1427887341-31819-1-git-send-email-gbenson@redhat.com> X-IsSubscribed: yes X-SW-Source: 2015-04/txt/msg00016.txt.bz2 This commit updates exec_file_locate_attach to use exec_file_find to compute the full pathname of the main executable in some cases. The net effect of this is that the main executable's path will be prefixed with gdb_sysroot in the same way that shared library paths currently are. gdb/ChangeLog: * exec.c (solist.h): New include. (exec_file_locate_attach): Prefix absolute executable paths with gdb_sysroot if set. * NEWS: Mention that executable paths may be prepended with sysroot on attach. gdb/doc/ChangeLog: * gdb.texinfo (set sysroot): Document that "set sysroot" also applies to executable paths if supplied to GDB as absolute. --- gdb/ChangeLog | 8 ++++++++ gdb/NEWS | 5 +++++ gdb/doc/ChangeLog | 5 +++++ gdb/doc/gdb.texinfo | 22 ++++++++++++---------- gdb/exec.c | 32 ++++++++++++++++++++++++-------- 5 files changed, 54 insertions(+), 18 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index f2a51a4..dec60cb 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -16,6 +16,11 @@ system, be it local or remote. This replaces the prefix "remote:". The default sysroot has been changed from "" to "target:". +* Paths specified by "set sysroot" will be prepended to the path of + the main executable when attaching to already-running processes + (local and remote) if the path of the main executable is reported + to GDB as absolute by the operating system. + * Python Scripting ** gdb.Objfile objects have a new attribute "username", diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 93e7e87..692d70e 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -17800,18 +17800,20 @@ may try to load the host's libraries. @value{GDBN} has two variables to specify the search directories for target libraries. @table @code -@cindex prefix for shared library file names +@cindex prefix for executable and shared library file names @cindex system root, alternate @kindex set solib-absolute-prefix @kindex set sysroot @item set sysroot @var{path} Use @var{path} as the system root for the program being debugged. Any -absolute shared library paths will be prefixed with @var{path}; many -runtime loaders store the absolute paths to the shared library in the -target program's memory. If you use @code{set sysroot} to find shared -libraries, they need to be laid out in the same way that they are on -the target, with e.g.@: a @file{/lib} and @file{/usr/lib} hierarchy -under @var{path}. +shared library paths will be prefixed with @var{path}; many runtime +loaders store the absolute paths to the shared library in the target +program's memory. When attaching to already-running processes, their +paths will be prefixed with @var{path} if reported to @value{GDBN} as +absolute by the operating system. If you use @code{set sysroot} to +find executables and shared libraries, they need to be laid out in +the same way that they are on the target, with e.g.@: a @file{/bin}, +@file{/lib} and @file{/usr/lib} hierarchy under @var{path}. If @var{path} starts with the sequence @file{target:} and the target system is remote then @value{GDBN} will retrieve the target binaries @@ -17846,7 +17848,7 @@ system: c:/foo/bar.dll @result{} /path/to/sysroot/c:/foo/bar.dll @end smallexample -If that does not find the shared library, @value{GDBN} tries removing +If that does not find the binary, @value{GDBN} tries removing the @samp{:} character from the drive spec, both for convenience, and, for the case of the host file system not supporting file names with colons: @@ -17871,7 +17873,7 @@ and point the system root at @file{/path/to/sysroot}, so that @value{GDBN} can find the correct copies of both @file{c:\sys\bin\foo.dll}, and @file{z:\sys\bin\bar.dll}. -If that still does not find the shared library, @value{GDBN} tries +If that still does not find the binary, @value{GDBN} tries removing the whole drive spec from the target file name: @smallexample @@ -17895,7 +17897,7 @@ location. @kindex show sysroot @item show sysroot -Display the current shared library prefix. +Display the current executable and shared library prefix. @kindex set solib-search-path @item set solib-search-path @var{path} diff --git a/gdb/exec.c b/gdb/exec.c index ab7fcbb..99c0cd4 100644 --- a/gdb/exec.c +++ b/gdb/exec.c @@ -42,6 +42,7 @@ #include #include +#include "solist.h" void (*deprecated_file_changed_hook) (char *); @@ -151,15 +152,30 @@ exec_file_locate_attach (int pid, int from_tty) if (exec_file == NULL) return; - /* It's possible we don't have a full path, but rather just a - filename. Some targets, such as HP-UX, don't provide the - full path, sigh. + /* If gdb_sysroot is not empty and the discovered filename + is absolute then prefix the filename with gdb_sysroot. */ + if (gdb_sysroot != NULL && *gdb_sysroot != '\0' + && IS_ABSOLUTE_PATH (exec_file)) + { + int fd = -1; + + full_exec_path = exec_file_find (exec_file, &fd); + if (fd >= 0) + close (fd); + } - Attempt to qualify the filename against the source path. - (If that fails, we'll just fall back on the original - filename. Not much more we can do...) */ - if (!source_full_path_of (exec_file, &full_exec_path)) - full_exec_path = xstrdup (exec_file); + if (full_exec_path == NULL) + { + /* It's possible we don't have a full path, but rather just a + filename. Some targets, such as HP-UX, don't provide the + full path, sigh. + + Attempt to qualify the filename against the source path. + (If that fails, we'll just fall back on the original + filename. Not much more we can do...) */ + if (!source_full_path_of (exec_file, &full_exec_path)) + full_exec_path = xstrdup (exec_file); + } exec_file_attach (full_exec_path, from_tty); symbol_file_add_main (full_exec_path, from_tty); -- 1.7.1