Use gdb_sysroot for main executable on attach
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. gdb/doc/ChangeLog: * gdb.texinfo (set sysroot): Document that "set sysroot" also applies to executable paths if supplied to GDB as absolute.
This commit is contained in:
parent
af1900b01b
commit
a9a5a3d1d2
|
@ -1,3 +1,11 @@
|
||||||
|
2015-04-17 Gary Benson <gbenson@redhat.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
2015-04-17 Gary Benson <gbenson@redhat.com>
|
2015-04-17 Gary Benson <gbenson@redhat.com>
|
||||||
|
|
||||||
* solist.h (exec_file_find): New declaration.
|
* solist.h (exec_file_find): New declaration.
|
||||||
|
|
5
gdb/NEWS
5
gdb/NEWS
|
@ -31,6 +31,11 @@
|
||||||
"target:". "remote:" is automatically converted to "target:" for
|
"target:". "remote:" is automatically converted to "target:" for
|
||||||
backward compatibility.
|
backward compatibility.
|
||||||
|
|
||||||
|
* The system root specified by "set sysroot" will be prepended to the
|
||||||
|
filename of the main executable (if reported to GDB as absolute by
|
||||||
|
the operating system) when starting processes remotely, and when
|
||||||
|
attaching to already-running local or remote processes.
|
||||||
|
|
||||||
* Python Scripting
|
* Python Scripting
|
||||||
|
|
||||||
** gdb.Objfile objects have a new attribute "username",
|
** gdb.Objfile objects have a new attribute "username",
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2015-04-17 Gary Benson <gbenson@redhat.com>
|
||||||
|
|
||||||
|
* gdb.texinfo (set sysroot): Document that "set sysroot" also
|
||||||
|
applies to executable paths if supplied to GDB as absolute.
|
||||||
|
|
||||||
2015-04-11 Jan Kratochvil <jan.kratochvil@redhat.com>
|
2015-04-11 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
* gdb.texinfo (Mode Options): Remove -xdb.
|
* gdb.texinfo (Mode Options): Remove -xdb.
|
||||||
|
|
|
@ -17912,7 +17912,7 @@ may try to load the host's libraries. @value{GDBN} has two variables
|
||||||
to specify the search directories for target libraries.
|
to specify the search directories for target libraries.
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
@cindex prefix for shared library file names
|
@cindex prefix for executable and shared library file names
|
||||||
@cindex system root, alternate
|
@cindex system root, alternate
|
||||||
@kindex set solib-absolute-prefix
|
@kindex set solib-absolute-prefix
|
||||||
@kindex set sysroot
|
@kindex set sysroot
|
||||||
|
@ -17920,10 +17920,14 @@ to specify the search directories for target libraries.
|
||||||
Use @var{path} as the system root for the program being debugged. Any
|
Use @var{path} as the system root for the program being debugged. Any
|
||||||
absolute shared library paths will be prefixed with @var{path}; many
|
absolute shared library paths will be prefixed with @var{path}; many
|
||||||
runtime loaders store the absolute paths to the shared library in the
|
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
|
target program's memory. When starting processes remotely, and when
|
||||||
libraries, they need to be laid out in the same way that they are on
|
attaching to already-running processes (local or remote), their
|
||||||
the target, with e.g.@: a @file{/lib} and @file{/usr/lib} hierarchy
|
executable filenames will be prefixed with @var{path} if reported to
|
||||||
under @var{path}.
|
@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
|
If @var{path} starts with the sequence @file{target:} and the target
|
||||||
system is remote then @value{GDBN} will retrieve the target binaries
|
system is remote then @value{GDBN} will retrieve the target binaries
|
||||||
|
@ -17958,7 +17962,7 @@ system:
|
||||||
c:/foo/bar.dll @result{} /path/to/sysroot/c:/foo/bar.dll
|
c:/foo/bar.dll @result{} /path/to/sysroot/c:/foo/bar.dll
|
||||||
@end smallexample
|
@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,
|
the @samp{:} character from the drive spec, both for convenience, and,
|
||||||
for the case of the host file system not supporting file names with
|
for the case of the host file system not supporting file names with
|
||||||
colons:
|
colons:
|
||||||
|
@ -17983,7 +17987,7 @@ and point the system root at @file{/path/to/sysroot}, so that
|
||||||
@value{GDBN} can find the correct copies of both
|
@value{GDBN} can find the correct copies of both
|
||||||
@file{c:\sys\bin\foo.dll}, and @file{z:\sys\bin\bar.dll}.
|
@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:
|
removing the whole drive spec from the target file name:
|
||||||
|
|
||||||
@smallexample
|
@smallexample
|
||||||
|
@ -18007,7 +18011,7 @@ location.
|
||||||
|
|
||||||
@kindex show sysroot
|
@kindex show sysroot
|
||||||
@item show sysroot
|
@item show sysroot
|
||||||
Display the current shared library prefix.
|
Display the current executable and shared library prefix.
|
||||||
|
|
||||||
@kindex set solib-search-path
|
@kindex set solib-search-path
|
||||||
@item set solib-search-path @var{path}
|
@item set solib-search-path @var{path}
|
||||||
|
|
16
gdb/exec.c
16
gdb/exec.c
|
@ -42,6 +42,7 @@
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include "solist.h"
|
||||||
|
|
||||||
void (*deprecated_file_changed_hook) (char *);
|
void (*deprecated_file_changed_hook) (char *);
|
||||||
|
|
||||||
|
@ -151,6 +152,20 @@ exec_file_locate_attach (int pid, int from_tty)
|
||||||
if (exec_file == NULL)
|
if (exec_file == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (full_exec_path == NULL)
|
||||||
|
{
|
||||||
/* It's possible we don't have a full path, but rather just a
|
/* 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
|
filename. Some targets, such as HP-UX, don't provide the
|
||||||
full path, sigh.
|
full path, sigh.
|
||||||
|
@ -160,6 +175,7 @@ exec_file_locate_attach (int pid, int from_tty)
|
||||||
filename. Not much more we can do...) */
|
filename. Not much more we can do...) */
|
||||||
if (!source_full_path_of (exec_file, &full_exec_path))
|
if (!source_full_path_of (exec_file, &full_exec_path))
|
||||||
full_exec_path = xstrdup (exec_file);
|
full_exec_path = xstrdup (exec_file);
|
||||||
|
}
|
||||||
|
|
||||||
exec_file_attach (full_exec_path, from_tty);
|
exec_file_attach (full_exec_path, from_tty);
|
||||||
symbol_file_add_main (full_exec_path, from_tty);
|
symbol_file_add_main (full_exec_path, from_tty);
|
||||||
|
|
Loading…
Reference in New Issue