patches/binutils/2.20/290-ld-stub-crash.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Feb 17 21:54:07 2011 +0100 (2011-02-17)
changeset 2301 a3818c3b03e0
permissions -rw-r--r--
internals: fix stripping host binaries

The gcc used by linaro has a version number specific to Linaro, but
identifies itself with its upstream version numbering scheme.

This breaks the strip in the finish step, because the actual gcc version
is not the same as the configured one (eg. 4.5.2 vs. linaro-4.5-2011.02-0).

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
jocke@1700
     1
diff -p -c -u -r1.196 elf32-arm.c
jocke@1700
     2
--- a/bfd/elf32-arm.c	22 May 2009 11:58:44 -0000	1.196
jocke@1700
     3
+++ b/bfd/elf32-arm.c	12 Jun 2009 13:18:20 -0000
jocke@1700
     4
@@ -3175,11 +3175,15 @@ arm_type_of_stub (struct bfd_link_info *
jocke@1700
     5
 
jocke@1700
     6
 	  /* We have an extra 2-bytes reach because of
jocke@1700
     7
 	     the mode change (bit 24 (H) of BLX encoding).  */
jocke@1700
     8
+	  /* A stub is needed only if this call is not throught a PLT
jocke@1700
     9
+	     entry, because PLT stubs handle mode switching
jocke@1700
    10
+	     already.  */
jocke@1700
    11
 	  if (branch_offset > (ARM_MAX_FWD_BRANCH_OFFSET + 2)
jocke@1700
    12
 	      || (branch_offset < ARM_MAX_BWD_BRANCH_OFFSET)
jocke@1700
    13
-	      || ((r_type == R_ARM_CALL) && !globals->use_blx)
jocke@1700
    14
-	      || (r_type == R_ARM_JUMP24)
jocke@1700
    15
-	      || (r_type == R_ARM_PLT32))
jocke@1700
    16
+	      || ( (((r_type == R_ARM_CALL) && !globals->use_blx)
jocke@1700
    17
+		    || (r_type == R_ARM_JUMP24)
jocke@1700
    18
+		    || (r_type == R_ARM_PLT32))
jocke@1700
    19
+		   && !use_plt))
jocke@1700
    20
 	    {
jocke@1700
    21
 	      stub_type = (info->shared | globals->pic_veneer)
jocke@1700
    22
 		/* PIC stubs.  */