]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
bfd/ChangeLog binutils-2_21-branch
authorYufeng Zhang <yufeng.zhang@arm.com>
Fri, 16 Nov 2012 18:54:07 +0000 (18:54 +0000)
committerYufeng Zhang <yufeng.zhang@arm.com>
Fri, 16 Nov 2012 18:54:07 +0000 (18:54 +0000)
2012-11-16  Joey Ye  <joey.ye@arm.com>

* elf32-arm.c (elf32_arm_final_link_relocate,
case R_ARM_THM_ALU_PREL_11_0, case R_ARM_THM_PC12): Align address of
the place being relocated.
(elf32_arm_final_link_relocate, case R_ARM_THM_PC8): Align address
of the place being relocated and truncate addend.
(Pa): New macro.

bfd/ChangeLog
bfd/elf32-arm.c

index 6bcef2fd71118a9e038655328d93a57e5d950f37..301847084b90968e7c3937f98d3980cc4ef4f328 100644 (file)
@@ -1,3 +1,12 @@
+2012-11-16  Joey Ye  <joey.ye@arm.com>
+
+       * elf32-arm.c (elf32_arm_final_link_relocate, 
+       case R_ARM_THM_ALU_PREL_11_0, case R_ARM_THM_PC12): Align address of
+       the place being relocated.
+       (elf32_arm_final_link_relocate, case R_ARM_THM_PC8): Align address
+       of the place being relocated and truncate addend.
+       (Pa): New macro.
+
 2011-06-27  Tristan Gingold  <gingold@adacore.com>
 
        * Makefile.am (RELEASE): Unset.
index e03ce0e0a740b263fc30bb15d7408fbc0b915408..c94f5146a9f5aa8e1b79f726e91a2bdc1ffd994a 100644 (file)
@@ -1,6 +1,6 @@
 /* 32-bit ELF support for ARM
    Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-   2008, 2009, 2010  Free Software Foundation, Inc.
+   2008, 2009, 2010, 2011, 2012  Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -61,6 +61,9 @@
 #define ARM_ELF_ABI_VERSION            0
 #define ARM_ELF_OS_ABI_VERSION         ELFOSABI_ARM
 
+/* The Adjusted Place, as defined by AAELF.  */
+#define Pa(X) ((X) & 0xfffffffc)
+
 static bfd_boolean elf32_arm_write_section (bfd *output_bfd,
                                            struct bfd_link_info *link_info,
                                            asection *sec,
@@ -7390,9 +7393,9 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
           }
 
        relocation = value + signed_addend;
-       relocation -= (input_section->output_section->vma
-                      + input_section->output_offset
-                      + rel->r_offset);
+       relocation -= Pa (input_section->output_section->vma
+                         + input_section->output_offset
+                         + rel->r_offset);
 
         value = abs (relocation);
 
@@ -7422,12 +7425,12 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
        insn = bfd_get_16 (input_bfd, hit_data);
 
         if (globals->use_rel)
-         addend = (insn & 0x00ff) << 2;
+         addend = ((((insn & 0x00ff) << 2) + 4) & 0x3ff) -4;
 
        relocation = value + addend;
-       relocation -= (input_section->output_section->vma
-                      + input_section->output_offset
-                      + rel->r_offset);
+       relocation -= Pa (input_section->output_section->vma
+                         + input_section->output_offset
+                         + rel->r_offset);
 
         value = abs (relocation);
 
@@ -7462,9 +7465,9 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
           }
 
        relocation = value + signed_addend;
-       relocation -= (input_section->output_section->vma
-                      + input_section->output_offset
-                      + rel->r_offset);
+       relocation -= Pa (input_section->output_section->vma
+                         + input_section->output_offset
+                         + rel->r_offset);
 
         value = abs (relocation);