diff options
author | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2016-10-14 15:04:04 +0200 |
---|---|---|
committer | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2016-10-14 15:04:04 +0200 |
commit | 754c39c2f32a796ad9983836deb7c4429c808e48 (patch) | |
tree | a65f843e15c9d2ee139e597e95fec08e35ba1500 /gdb/solib-aix.c | |
parent | ab2c2251daf50e5ce733d33b803eb469b3ba1d80 (diff) | |
download | gdb-754c39c2f32a796ad9983836deb7c4429c808e48.zip gdb-754c39c2f32a796ad9983836deb7c4429c808e48.tar.gz gdb-754c39c2f32a796ad9983836deb7c4429c808e48.tar.bz2 |
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>
Diffstat (limited to 'gdb/solib-aix.c')
-rw-r--r-- | gdb/solib-aix.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/gdb/solib-aix.c b/gdb/solib-aix.c index 51ab93e..9daf7e1 100644 --- a/gdb/solib-aix.c +++ b/gdb/solib-aix.c @@ -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); |