summaryrefslogtreecommitdiffstats
path: root/binutils-2.23.52.0.1-check-regular-ifunc-refs.patch
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2013-06-04 21:00:22 +0100
committerDavid Howells <dhowells@redhat.com>2013-06-05 13:41:56 +0100
commitc6dd967422664f358ac366c443b91bb33f929f60 (patch)
treedf1261a8e462ee46f5024c19af61e1190a08e7c3 /binutils-2.23.52.0.1-check-regular-ifunc-refs.patch
parented831d0361ca82944da808e550103d526fa94a2f (diff)
downloadcross-binutils-c6dd967422664f358ac366c443b91bb33f929f60.tar.gz
cross-binutils-c6dd967422664f358ac366c443b91bb33f929f60.tar.xz
cross-binutils-c6dd967422664f358ac366c443b91bb33f929f60.zip
Move to binutils-2.23.88.0.1 to fix texinfo problem [BZ 913931]
Move to binutils-2.23.88.0.1 to fix a problem in F19 where texinfo compilation fails [BZ 913931]: ../../../binutils-2.23.51.0.3/bfd/doc/bfd.texinfo:325: unknown command `colophon' ../../../binutils-2.23.51.0.3/bfd/doc/bfd.texinfo:336: unknown command `cygnus'
Diffstat (limited to 'binutils-2.23.52.0.1-check-regular-ifunc-refs.patch')
-rw-r--r--binutils-2.23.52.0.1-check-regular-ifunc-refs.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/binutils-2.23.52.0.1-check-regular-ifunc-refs.patch b/binutils-2.23.52.0.1-check-regular-ifunc-refs.patch
new file mode 100644
index 0000000..c9bfd64
--- /dev/null
+++ b/binutils-2.23.52.0.1-check-regular-ifunc-refs.patch
@@ -0,0 +1,48 @@
+*** ../binutils-2.23.52.0.1.orig/bfd/elf-ifunc.c 2013-04-17 15:53:49.662586029 +0100
+--- bfd/elf-ifunc.c 2013-04-17 15:55:55.269589511 +0100
+*************** _bfd_elf_allocate_ifunc_dyn_relocs (stru
+*** 187,209 ****
+
+ htab = elf_hash_table (info);
+
+ /* Support garbage collection against STT_GNU_IFUNC symbols. */
+ if (h->plt.refcount <= 0 && h->got.refcount <= 0)
+ {
+- /* When building shared library, we need to handle the case
+- where it is marked with regular reference, but not non-GOT
+- reference. It may happen if we didn't see STT_GNU_IFUNC
+- symbol at the time when checking relocations. */
+- if (info->shared
+- && !h->non_got_ref
+- && h->ref_regular)
+- for (p = *head; p != NULL; p = p->next)
+- if (p->count)
+- {
+- h->non_got_ref = 1;
+- goto keep;
+- }
+-
+ h->got = htab->init_got_offset;
+ h->plt = htab->init_plt_offset;
+ *head = NULL;
+--- 187,206 ----
+
+ htab = elf_hash_table (info);
+
++ /* When building a shared library, we need to handle the case where it is
++ marked with a regular reference, but not a non-GOT reference since the
++ non-GOT reference bit may not be set here. */
++ if (info->shared && !h->non_got_ref && h->ref_regular)
++ for (p = *head; p != NULL; p = p->next)
++ if (p->count)
++ {
++ h->non_got_ref = 1;
++ goto keep;
++ }
++
+ /* Support garbage collection against STT_GNU_IFUNC symbols. */
+ if (h->plt.refcount <= 0 && h->got.refcount <= 0)
+ {
+ h->got = htab->init_got_offset;
+ h->plt = htab->init_plt_offset;
+ *head = NULL;