From 8375c36b6a3109a031774b89f1f98e7bdf499109 Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Wed, 31 Mar 2004 10:20:12 +0000 Subject: [PATCH] * elf32-arm.h (elf32_arm_final_link_relocate): Add R_ARM_ALU*. * elfarm-nabi.c (elf32_arm_howto_table): Ditto. --- bfd/ChangeLog | 5 +++++ bfd/elf32-arm.h | 25 +++++++++++++++++++++++++ bfd/elfarm-nabi.c | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 1fac59a2544..54fca8badde 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2004-03-31 Paul Brook + + * 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 * stabs.c (struct stab_link_includes_totals): Rename field 'total' 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; diff --git a/bfd/elfarm-nabi.c b/bfd/elfarm-nabi.c index 5ecbe8e3e62..961a52a0ccb 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 */ -- 2.30.2