From: Gary Benson <gbenson@redhat.com>
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 [thread overview]
Message-ID: <1427887341-31819-4-git-send-email-gbenson@redhat.com> (raw)
In-Reply-To: <1427887341-31819-1-git-send-email-gbenson@redhat.com>
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 <ctype.h>
#include <sys/stat.h>
+#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
next prev parent reply other threads:[~2015-04-01 11:22 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-01 11:22 [PATCH 0/7] Do not require "file" commands for remote targets Gary Benson
2015-04-01 11:22 ` Gary Benson [this message]
2015-04-01 14:53 ` [PATCH 3/7] Use gdb_sysroot for main executable on attach Eli Zaretskii
2015-04-15 12:45 ` Gary Benson
2015-04-15 10:43 ` Pedro Alves
2015-04-01 11:22 ` [PATCH 1/7] Introduce exec_file_locate_attach Gary Benson
2015-04-01 11:22 ` [PATCH 2/7] Introduce exec_file_find Gary Benson
2015-04-01 11:27 ` [PATCH 4/7] Introduce linux_pid_to_exec_file Gary Benson
2015-04-06 16:41 ` Doug Evans
2015-04-07 9:07 ` Gary Benson
2015-04-08 3:15 ` Doug Evans
2015-04-08 8:06 ` Gary Benson
2015-04-15 9:37 ` Pedro Alves
2015-04-15 13:14 ` [PATCH 4/7 v2] Introduce linux_proc_pid_to_exec_file Gary Benson
2015-04-15 16:01 ` Pedro Alves
2015-04-01 11:29 ` [PATCH 5/7] Implement remote_pid_to_exec_file using qXfer:exec-file:read Gary Benson
2015-04-01 14:55 ` Eli Zaretskii
2015-04-06 17:00 ` Doug Evans
2015-04-06 17:21 ` Eli Zaretskii
2015-04-06 21:57 ` Doug Evans
2015-04-07 6:09 ` Eli Zaretskii
2015-04-07 9:08 ` Gary Benson
2015-04-08 1:57 ` Doug Evans
2015-04-08 6:00 ` Eli Zaretskii
2015-04-01 11:30 ` [PATCH 6/7] Implement qXfer:exec-file:read in gdbserver Gary Benson
2015-04-06 17:11 ` Doug Evans
2015-04-07 9:19 ` Gary Benson
2015-04-17 23:43 ` Possible regression on gdb.base/attach.exp when using native-extended-gdbserver (was: Re: [PATCH 6/7] Implement qXfer:exec-file:read in gdbserver) Sergio Durigan Junior
2015-04-20 9:13 ` Gary Benson
2015-04-20 10:41 ` [OB PATCH] Fix three test failures with extended remote targets Gary Benson
2015-04-01 11:39 ` [PATCH 7/7] Access executable from remote system when first inferior appears Gary Benson
2015-04-15 10:24 ` Pedro Alves
2015-04-15 13:56 ` Gary Benson
2015-04-15 14:06 ` Gary Benson
2015-04-15 16:15 ` Pedro Alves
2015-04-15 16:09 ` Pedro Alves
2015-04-16 8:23 ` Gary Benson
2015-04-15 16:13 ` Pedro Alves
2015-04-16 9:30 ` Gary Benson
2015-04-16 9:53 ` Pedro Alves
2015-04-16 11:47 ` Gary Benson
2015-04-16 15:06 ` Eli Zaretskii
2015-04-16 15:23 ` Pedro Alves
2015-04-16 15:05 ` Eli Zaretskii
2015-04-16 19:34 ` Gary Benson
2015-04-15 16:21 ` Eli Zaretskii
2015-04-15 10:47 ` [PATCH 0/7] Do not require "file" commands for remote targets Pedro Alves
2015-04-15 12:02 ` Gary Benson
2015-04-15 12:16 ` Pedro Alves
2015-04-15 14:16 ` Gary Benson
2015-04-15 16:20 ` Pedro Alves
2015-04-17 9:01 ` Gary Benson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1427887341-31819-4-git-send-email-gbenson@redhat.com \
--to=gbenson@redhat.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox