diff options
author | Catherine Moore <clm@redhat.com> | 1999-02-03 02:20:12 +0000 |
---|---|---|
committer | Catherine Moore <clm@redhat.com> | 1999-02-03 02:20:12 +0000 |
commit | 5ce0edb79ecb9f04f4537a4565554a7e6d96f66d (patch) | |
tree | 9ab6516d21265c202e21721b32e998a2481b6403 /bfd | |
parent | f4355fa583f1a3fdd85db9f327e9ccb2345d158b (diff) | |
download | gdb-5ce0edb79ecb9f04f4537a4565554a7e6d96f66d.zip gdb-5ce0edb79ecb9f04f4537a4565554a7e6d96f66d.tar.gz gdb-5ce0edb79ecb9f04f4537a4565554a7e6d96f66d.tar.bz2 |
* 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.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 9 | ||||
-rw-r--r-- | bfd/elf32-arm.h | 45 | ||||
-rw-r--r-- | bfd/elfarm-nabi.c | 63 | ||||
-rw-r--r-- | 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 <clm@cygnus.com> + + * 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 <clm@cygnus.com> * 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" |