* elf32-arm.h (elf32_arm_final_link_relocate): Add R_ARM_ALU*.
authorPaul Brook <paul@codesourcery.com>
Wed, 31 Mar 2004 10:20:12 +0000 (10:20 +0000)
committerPaul Brook <paul@codesourcery.com>
Wed, 31 Mar 2004 10:20:12 +0000 (10:20 +0000)
* elfarm-nabi.c (elf32_arm_howto_table): Ditto.

bfd/ChangeLog
bfd/elf32-arm.h
bfd/elfarm-nabi.c

index 1fac59a2544c524ef04ffeee1b33a3978ff3b048..54fca8badde0a49d58bfd3176d734325038fb21e 100644 (file)
@@ -1,3 +1,8 @@
+2004-03-31  Paul Brook  <paul@codesourcery.com>
+
+       * elf32-arm.h (elf32_arm_final_link_relocate): Add R_ARM_ALU*.
+       * elfarm-nabi.c (elf32_arm_howto_table): Ditto.
+
 2004-03-31  Andy Chittenden <achittenden@bluearc.com>
 
        * stabs.c (struct stab_link_includes_totals): Rename field 'total'
index 97753a831ff17bf7d221cca8d7207bff0b51dd19..bc6904a26edca65633c11dc64b6043b306f74350 100644 (file)
@@ -1732,6 +1732,31 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
        return bfd_reloc_ok;
       }
 
+    case R_ARM_ALU_PCREL7_0:
+    case R_ARM_ALU_PCREL15_8:
+    case R_ARM_ALU_PCREL23_15:
+      {
+       bfd_vma insn;
+       bfd_vma relocation;
+
+       insn = bfd_get_32 (input_bfd, hit_data);
+#if USE_REL
+       /* Extract the addend.  */
+       addend = (insn & 0xff) << ((insn & 0xf00) >> 7);
+       signed_addend = addend;
+#endif
+       relocation = value + signed_addend;
+
+       relocation -= (input_section->output_section->vma
+                      + input_section->output_offset
+                      + rel->r_offset);
+       insn = (insn & ~0xfff)
+              | ((howto->bitpos << 7) & 0xf00)
+              | ((relocation >> howto->bitpos) & 0xff);
+       bfd_put_32 (input_bfd, value, hit_data);
+      }
+      return bfd_reloc_ok;
+
     case R_ARM_GNU_VTINHERIT:
     case R_ARM_GNU_VTENTRY:
       return bfd_reloc_ok;
index 5ecbe8e3e62d67aad19e05ca1d668f07a56669c2..961a52a0ccbfcbdfc5c1e4eab4c0e282e2bd528c 100644 (file)
@@ -516,6 +516,47 @@ static reloc_howto_type elf32_arm_howto_table[] =
         0,                     /* dst_mask */
         FALSE),                /* pcrel_offset */
 
+  HOWTO (R_ARM_ALU_PCREL7_0,   /* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        12,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_dont,/* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_ARM_ALU_PCREL_7_0", /* name */
+        FALSE,                 /* partial_inplace */
+        0x00000fff,            /* src_mask */
+        0x00000fff,            /* dst_mask */
+        TRUE),                 /* pcrel_offset */
+
+  HOWTO (R_ARM_ALU_PCREL15_8,  /* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        12,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        8,                     /* bitpos */
+        complain_overflow_dont,/* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_ARM_ALU_PCREL_15_8",/* name */
+        FALSE,                 /* partial_inplace */
+        0x00000fff,            /* src_mask */
+        0x00000fff,            /* dst_mask */
+        TRUE),                 /* pcrel_offset */
+
+  HOWTO (R_ARM_ALU_PCREL23_15, /* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        12,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        16,                    /* bitpos */
+        complain_overflow_dont,/* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_ARM_ALU_PCREL_23_15",/* name */
+        FALSE,                 /* partial_inplace */
+        0x00000fff,            /* src_mask */
+        0x00000fff,            /* dst_mask */
+        TRUE),                 /* pcrel_offset */
 };
 
   /* GNU extension to record C++ vtable hierarchy */