summaryrefslogtreecommitdiff
path: root/bfd/elf32-arm.h
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
commit1f910fcd4bf377750a163a246bb6fe27fed29bb2 (patch)
tree1c582e0d5999eb01308f5029dcb0730f0cf738a7 /bfd/elf32-arm.h
parent0ba75efce7021f6ab455b566a1a9e21d07bb19a6 (diff)
downloadgdb-1f910fcd4bf377750a163a246bb6fe27fed29bb2.tar.gz
* elf32-arm.h (elf32_arm_final_link_relocate): Add R_ARM_ALU*.
* elfarm-nabi.c (elf32_arm_howto_table): Ditto.
Diffstat (limited to 'bfd/elf32-arm.h')
-rw-r--r--bfd/elf32-arm.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/bfd/elf32-arm.h b/bfd/elf32-arm.h
index 97753a831ff..bc6904a26ed 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;