aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2004-03-31 10:20:12 +0000
committerPaul Brook <paul@codesourcery.com>2004-03-31 10:20:12 +0000
commit8375c36b6a3109a031774b89f1f98e7bdf499109 (patch)
tree2abff0efd2de2d439024cfbf4e62bfebd39693fa
parenta56b48eb0fa6568864c2e3adc4dd70ab23b84611 (diff)
downloadfsf-binutils-gdb-8375c36b6a3109a031774b89f1f98e7bdf499109.zip
fsf-binutils-gdb-8375c36b6a3109a031774b89f1f98e7bdf499109.tar.gz
fsf-binutils-gdb-8375c36b6a3109a031774b89f1f98e7bdf499109.tar.bz2
* elf32-arm.h (elf32_arm_final_link_relocate): Add R_ARM_ALU*.
* elfarm-nabi.c (elf32_arm_howto_table): Ditto.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf32-arm.h25
-rw-r--r--bfd/elfarm-nabi.c41
3 files changed, 71 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 1fac59a..54fca8b 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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'
diff --git a/bfd/elf32-arm.h b/bfd/elf32-arm.h
index 97753a8..bc6904a 100644
--- a/bfd/elf32-arm.h
+++ b/bfd/elf32-arm.h
@@ -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;
diff --git a/bfd/elfarm-nabi.c b/bfd/elfarm-nabi.c
index 5ecbe8e..961a52a 100644
--- a/bfd/elfarm-nabi.c
+++ b/bfd/elfarm-nabi.c
@@ -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 */