From 5ce0edb79ecb9f04f4537a4565554a7e6d96f66d Mon Sep 17 00:00:00 2001 From: Catherine Moore Date: Wed, 3 Feb 1999 02:20:12 +0000 Subject: [PATCH] * elf32-arm.h (elf32_arm_reloc_map): Removed. (elf32_arm_reloc_type_lookup): Removed * elfarm-nabi.c (elf32_arm_reloc_map): New. (elf32_arm_reloc_type_lookup): New. * elfarm-oabi.c (elf32_arm_reloc_map): New. (elf32_arm_reloc_type_lookup): New. --- bfd/ChangeLog | 9 ++++++++ bfd/elf32-arm.h | 45 --------------------------------------- bfd/elfarm-nabi.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ bfd/elfarm-oabi.c | 43 +++++++++++++++++++++++++++++++++++++ 4 files changed, 115 insertions(+), 45 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 38950ab..540e669 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +Tue Feb 2 18:16:43 1999 Catherine Moore + + * elf32-arm.h (elf32_arm_reloc_map): Removed. + (elf32_arm_reloc_type_lookup): Removed + * elfarm-nabi.c (elf32_arm_reloc_map): New. + (elf32_arm_reloc_type_lookup): New. + * elfarm-oabi.c (elf32_arm_reloc_map): New. + (elf32_arm_reloc_type_lookup): New. + Mon Feb 1 19:49:21 1999 Catherine Moore * elfarm-nabi.c: Renamed from elf32-arm-newabi.c. diff --git a/bfd/elf32-arm.h b/bfd/elf32-arm.h index 857fe38..d5afec4 100644 --- a/bfd/elf32-arm.h +++ b/bfd/elf32-arm.h @@ -21,8 +21,6 @@ typedef unsigned long int insn32; typedef unsigned short int insn16; -static reloc_howto_type *elf32_arm_reloc_type_lookup - PARAMS ((bfd * abfd, bfd_reloc_code_real_type code)); static void elf32_arm_info_to_howto PARAMS ((bfd *, arelent *, Elf32_Internal_Rela *)); static boolean elf32_arm_set_private_flags @@ -622,49 +620,6 @@ error_return: } -struct elf32_arm_reloc_map - { - unsigned char bfd_reloc_val; - unsigned char elf_reloc_val; - }; - -static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] = -{ - {BFD_RELOC_NONE, R_ARM_NONE,}, - {BFD_RELOC_ARM_PCREL_BRANCH, R_ARM_PC24,}, - {BFD_RELOC_32, R_ARM_ABS32,}, - {BFD_RELOC_32_PCREL, R_ARM_REL32,}, - {BFD_RELOC_8, R_ARM_ABS8,}, - {BFD_RELOC_16, R_ARM_ABS16,}, - {BFD_RELOC_ARM_OFFSET_IMM, R_ARM_ABS12,}, - {BFD_RELOC_ARM_THUMB_OFFSET, R_ARM_THM_ABS5,}, - {BFD_RELOC_THUMB_PCREL_BRANCH23, R_ARM_THM_PC22,}, - {BFD_RELOC_VTABLE_INHERIT, R_ARM_GNU_VTINHERIT }, - {BFD_RELOC_VTABLE_ENTRY, R_ARM_GNU_VTENTRY }, - {BFD_RELOC_NONE, R_ARM_SBREL32,}, - {BFD_RELOC_NONE, R_ARM_AMP_VCALL9,}, - {BFD_RELOC_THUMB_PCREL_BRANCH12, R_ARM_THM_PC11,}, - {BFD_RELOC_THUMB_PCREL_BRANCH9, R_ARM_THM_PC9,} -}; - -static reloc_howto_type * -elf32_arm_reloc_type_lookup (abfd, code) - bfd *abfd; - bfd_reloc_code_real_type code; -{ - unsigned int i; - - for (i = 0; - i < sizeof (elf32_arm_reloc_map) / sizeof (struct elf32_arm_reloc_map); - i++) - { - if (elf32_arm_reloc_map[i].bfd_reloc_val == code) - return &elf32_arm_howto_table[elf32_arm_reloc_map[i].elf_reloc_val]; - } - - return NULL; -} - /* The thumb form of a long branch is a bit finicky, because the offset encoding is split over two fields, each in it's own instruction. They can occur in any order. So given a thumb form of long branch, and an diff --git a/bfd/elfarm-nabi.c b/bfd/elfarm-nabi.c index 0278a47..f5fd413 100644 --- a/bfd/elfarm-nabi.c +++ b/bfd/elfarm-nabi.c @@ -33,6 +33,9 @@ #define elf_info_to_howto_rel elf32_arm_info_to_howto_rel +static reloc_howto_type *elf32_arm_reloc_type_lookup + PARAMS ((bfd * abfd, bfd_reloc_code_real_type code)); + static reloc_howto_type elf32_arm_howto_table[] = { /* No relocation */ @@ -395,4 +398,64 @@ elf32_arm_info_to_howto_rel (abfd, bfd_reloc, elf_reloc) else bfd_reloc->howto = &elf32_arm_howto_table[r_type]; } + +struct elf32_arm_reloc_map + { + unsigned char bfd_reloc_val; + unsigned char elf_reloc_val; + }; + +static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] = +{ + {BFD_RELOC_NONE, R_ARM_NONE,}, + {BFD_RELOC_ARM_PCREL_BRANCH, R_ARM_PC24,}, + {BFD_RELOC_32, R_ARM_ABS32,}, + {BFD_RELOC_32_PCREL, R_ARM_REL32,}, + {BFD_RELOC_8, R_ARM_ABS8,}, + {BFD_RELOC_16, R_ARM_ABS16,}, + {BFD_RELOC_ARM_OFFSET_IMM, R_ARM_ABS12,}, + {BFD_RELOC_ARM_THUMB_OFFSET, R_ARM_THM_ABS5,}, + {BFD_RELOC_THUMB_PCREL_BRANCH23, R_ARM_THM_PC22,}, + {BFD_RELOC_VTABLE_INHERIT, R_ARM_GNU_VTINHERIT }, + {BFD_RELOC_VTABLE_ENTRY, R_ARM_GNU_VTENTRY }, + {BFD_RELOC_NONE, R_ARM_SBREL32,}, + {BFD_RELOC_NONE, R_ARM_AMP_VCALL9,}, + {BFD_RELOC_THUMB_PCREL_BRANCH12, R_ARM_THM_PC11,}, + {BFD_RELOC_THUMB_PCREL_BRANCH9, R_ARM_THM_PC9,} +}; + +static reloc_howto_type * +elf32_arm_reloc_type_lookup (abfd, code) + bfd *abfd; + bfd_reloc_code_real_type code; +{ + unsigned int i; + + switch (code) + { + case BFD_RELOC_VTABLE_INHERIT: + return &elf32_arm_vtinherit_howto; + + case BFD_RELOC_VTABLE_ENTRY: + return &elf32_arm_vtentry_howto; + + case BFD_RELOC_THUMB_PCREL_BRANCH12: + return &elf32_arm_thm_pc11_howto; + + case BFD_RELOC_THUMB_PCREL_BRANCH9: + return &elf32_arm_thm_pc9_howto; + + default: + for (i = 0; + i < sizeof (elf32_arm_reloc_map) / sizeof (struct elf32_arm_reloc_map); + i++) + { + if (elf32_arm_reloc_map[i].bfd_reloc_val == code) + return &elf32_arm_howto_table[elf32_arm_reloc_map[i].elf_reloc_val]; + } + + } + return NULL; +} + #include "elf32-arm.h" diff --git a/bfd/elfarm-oabi.c b/bfd/elfarm-oabi.c index dd49e01..f93893e 100644 --- a/bfd/elfarm-oabi.c +++ b/bfd/elfarm-oabi.c @@ -326,4 +326,47 @@ elf32_arm_info_to_howto (abfd, bfd_reloc, elf_reloc) /* BFD_ASSERT (r_type < (unsigned int) R_ELF32_ARM_MAX); */ bfd_reloc->howto = &elf32_arm_howto_table[r_type]; } + +struct elf32_arm_reloc_map + { + unsigned char bfd_reloc_val; + unsigned char elf_reloc_val; + }; + +static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] = +{ + {BFD_RELOC_NONE, R_ARM_NONE,}, + {BFD_RELOC_ARM_PCREL_BRANCH, R_ARM_PC24,}, + {BFD_RELOC_32, R_ARM_ABS32,}, + {BFD_RELOC_32_PCREL, R_ARM_REL32,}, + {BFD_RELOC_8, R_ARM_ABS8,}, + {BFD_RELOC_16, R_ARM_ABS16,}, + {BFD_RELOC_ARM_OFFSET_IMM, R_ARM_ABS12,}, + {BFD_RELOC_ARM_THUMB_OFFSET, R_ARM_THM_ABS5,}, + {BFD_RELOC_THUMB_PCREL_BRANCH23, R_ARM_THM_PC22,}, + {BFD_RELOC_VTABLE_INHERIT, R_ARM_GNU_VTINHERIT }, + {BFD_RELOC_VTABLE_ENTRY, R_ARM_GNU_VTENTRY }, + {BFD_RELOC_NONE, R_ARM_SBREL32,}, + {BFD_RELOC_NONE, R_ARM_AMP_VCALL9,}, + {BFD_RELOC_THUMB_PCREL_BRANCH12, R_ARM_THM_PC11,}, + {BFD_RELOC_THUMB_PCREL_BRANCH9, R_ARM_THM_PC9,} +}; + +static reloc_howto_type * +elf32_arm_reloc_type_lookup (abfd, code) + bfd *abfd; + bfd_reloc_code_real_type code; +{ + unsigned int i; + + for (i = 0; + i < sizeof (elf32_arm_reloc_map) / sizeof (struct elf32_arm_reloc_map); + i++) + { + if (elf32_arm_reloc_map[i].bfd_reloc_val == code) + return &elf32_arm_howto_table[elf32_arm_reloc_map[i].elf_reloc_val]; + } + + return NULL; +} #include "elf32-arm.h" -- 2.7.4