mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-24 02:24:46 +08:00
Fix set sysroot command on AIX
set sysroot command on AIX has no effect if a program depends on shared library archives (.a). Fixed by using solib_find and solib_bfd_fopen instead of gdb_bfd_open in solib_aix_bfd_open. gdb/ 2016-10-14 Sangamesh Mallayya <sangamesh.swamy@in.ibm.com> Ulrich Weigand <uweigand@de.ibm.com> * solib-aix.c (solib_aix_bfd_open): Call solib_find so that sysroot path is set properly if program has a dependency on .a archive and sysroot is set via set sysroot command. Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
This commit is contained in:
parent
ab2c2251da
commit
754c39c2f3
@ -1,3 +1,10 @@
|
||||
2016-10-14 Sangamesh Mallayya <sangamesh.swamy@in.ibm.com>
|
||||
Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* solib-aix.c (solib_aix_bfd_open): Call solib_find so that sysroot
|
||||
path is set properly if program has a dependency on .a archive and
|
||||
sysroot is set via set sysroot command.
|
||||
|
||||
2016-10-14 Markus Metzger <markus.t.metzger@intel.com>
|
||||
|
||||
* nat/linux-btrace.c: Remove leftover comment.
|
||||
|
@ -648,6 +648,8 @@ solib_aix_bfd_open (char *pathname)
|
||||
char *member_name;
|
||||
bfd *archive_bfd, *object_bfd;
|
||||
struct cleanup *cleanup;
|
||||
int found_file;
|
||||
char *found_pathname;
|
||||
|
||||
if (pathname[path_len - 1] != ')')
|
||||
return solib_bfd_open (pathname);
|
||||
@ -669,7 +671,13 @@ solib_aix_bfd_open (char *pathname)
|
||||
member_name = xstrprintf ("%.*s", path_len - filename_len - 2, sep + 1);
|
||||
make_cleanup (xfree, member_name);
|
||||
|
||||
archive_bfd = gdb_bfd_open (filename, gnutarget, -1);
|
||||
/* Calling solib_find makes certain that sysroot path is set properly
|
||||
if program has a dependency on .a archive and sysroot is set via
|
||||
set sysroot command. */
|
||||
found_pathname = solib_find (filename, &found_file);
|
||||
if (found_pathname == NULL)
|
||||
perror_with_name (pathname);
|
||||
archive_bfd = solib_bfd_fopen (found_pathname, found_file);
|
||||
if (archive_bfd == NULL)
|
||||
{
|
||||
warning (_("Could not open `%s' as an executable file: %s"),
|
||||
@ -724,12 +732,13 @@ solib_aix_bfd_open (char *pathname)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Override the returned bfd's name with our synthetic name in order
|
||||
to allow commands listing all shared libraries to display that
|
||||
synthetic name. Otherwise, we would only be displaying the name
|
||||
of the archive member object. */
|
||||
/* Override the returned bfd's name with the name returned from solib_find
|
||||
along with appended parenthesized member name in order to allow commands
|
||||
listing all shared libraries to display. Otherwise, we would only be
|
||||
displaying the name of the archive member object. */
|
||||
xfree (bfd_get_filename (object_bfd));
|
||||
object_bfd->filename = xstrdup (pathname);
|
||||
object_bfd->filename = xstrprintf ("%s%s",
|
||||
bfd_get_filename (archive_bfd), sep);
|
||||
|
||||
gdb_bfd_unref (archive_bfd);
|
||||
do_cleanups (cleanup);
|
||||
|
Loading…
Reference in New Issue
Block a user