summaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2016-06-14 13:12:00 +0930
committerAlan Modra <amodra@gmail.com>2016-06-14 13:12:00 +0930
commitb0cffb47671ffbaac559c1f17a9f248256ea6c42 (patch)
tree8a671e9057ebcd1cc30e15f0caedc9b6bcad32ac /binutils
parent57bc0e78e9d1fc318e1265f22280e1c3b7527d65 (diff)
downloadbinutils-gdb-b0cffb47671ffbaac559c1f17a9f248256ea6c42.tar.gz
Set my_archive for thin archives
LTO plugin support in plugin_maybe_claim wants to close the IR bfd after replacing it with the recompiled object, but can't do so for archive elements due to various pointers that access the archive bfd. Thin archives have the same problem. They too cannot have their element bfds closed. PR ld/20241 bfd/ * archive.c (open_nested_file): Set my_archive. * bfd.c (_bfd_default_error_handler <%B>): Exclude archive file name for thin archives. * bfdio.c (bfd_tell): Don't adjust origin for thin archives. (bfd_seek): Likewise. * bfdwin.c (bfd_get_file_window): Likewise. * cache.c (cache_bmmap): Likewise. (bfd_cache_lookup_worker): Don't look in my_archive for thin archives. * mach-o.c (bfd_mach_o_follow_dsym): Don't open my_archive for thin archives. * plugin.c (try_claim): Likewise. * xcofflink.c (xcoff_link_add_dynamic_symbols): Use import path of file within thin archive, not the archive. binutils/ * bucomm.c (bfd_get_archive_filename): Return file name within thin archive. ld/ * ldmain.c (add_archive_element): Just print file name of file within thin archives. * ldmisc.c (vfinfo): Likewise. * plugin.c (plugin_object_p): Open file within thin archives. (plugin_maybe_claim): Expand comment.
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog6
-rw-r--r--binutils/bucomm.c3
2 files changed, 8 insertions, 1 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index f8e7c769ebc..77a66044875 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,9 @@
+2016-06-14 Alan Modra <amodra@gmail.com>
+
+ PR ld/20241
+ * bucomm.c (bfd_get_archive_filename): Return file name within thin
+ archive.
+
2016-06-02 Nick Clifton <nickc@redhat.com>
PR 20089
diff --git a/binutils/bucomm.c b/binutils/bucomm.c
index da7cfad41cc..8ecd7f26dfc 100644
--- a/binutils/bucomm.c
+++ b/binutils/bucomm.c
@@ -605,7 +605,8 @@ bfd_get_archive_filename (const bfd *abfd)
assert (abfd != NULL);
- if (!abfd->my_archive)
+ if (abfd->my_archive == NULL
+ || bfd_is_thin_archive (abfd->my_archive))
return bfd_get_filename (abfd);
needed = (strlen (bfd_get_filename (abfd->my_archive))