patches/binutils/2.19/100-ppc64-pie.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Oct 03 23:10:46 2010 +0200 (2010-10-03)
changeset 2130 b46ecc90d3ab
permissions -rw-r--r--
complibs: better deduce whether to backup complibs or not

To decide whether we need to backup the companion libraries,
do not rely on the !shared case. In the future other cases
may require not to save the companion libraries (eg. if using
the ones provided by the host distro).

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@1069
     1
Original patch from Gentoo:
yann@1069
     2
gentoo/src/patchsets/binutils/2.19/03_all_binutils-2.15.92.0.2-ppc64-pie.patch
yann@1069
     3
yann@1069
     4
diff -durN binutils-2.19.orig/bfd/elf64-ppc.c binutils-2.19/bfd/elf64-ppc.c
yann@1069
     5
--- binutils-2.19.orig/bfd/elf64-ppc.c	2008-10-09 14:18:24.000000000 +0200
yann@1069
     6
+++ binutils-2.19/bfd/elf64-ppc.c	2008-11-23 16:16:11.000000000 +0100
yann@1069
     7
@@ -11294,7 +11294,12 @@
yann@1069
     8
 	      else if (!SYMBOL_REFERENCES_LOCAL (info, &h->elf)
yann@1069
     9
 		       && !is_opd
yann@1069
    10
 		       && r_type != R_PPC64_TOC)
yann@1069
    11
-		outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type);
yann@1069
    12
+		{
yann@1069
    13
+		  outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type);
yann@1069
    14
+		  if (h->elf.dynindx == -1
yann@1069
    15
+		      && h->elf.root.type == bfd_link_hash_undefweak)
yann@1069
    16
+		  memset (&outrel, 0, sizeof outrel);
yann@1069
    17
+		}
yann@1069
    18
 	      else
yann@1069
    19
 		{
yann@1069
    20
 		  /* This symbol is local, or marked to become local,