From 60dac29966ebf4a075b7d70257f008c53756e3fb Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 10 Jun 1999 20:59:54 +0000 Subject: [PATCH] Jakub Jelinek * elf64_sparc.c (sparc64_elf_relocate_section): Use R_SPARC_max_std instead of R_SPARC_max. (sparc64_elf_info_to_howto): Likewise. * elf32_sparc.c (elf32_sparc_relocate_section): Likewise. (elf32_sparc_info_to_howto): Likewise; handle vtable relocations. --- bfd/ChangeLog | 8 ++++++++ bfd/elf32-sparc.c | 18 +++++++++++++++--- bfd/elf64-sparc.c | 4 ++-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e5fd81d2ac2..bc1607879f4 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +1999-06-10 Jakub Jelinek + + * elf64_sparc.c (sparc64_elf_relocate_section): Use R_SPARC_max_std + instead of R_SPARC_max. + (sparc64_elf_info_to_howto): Likewise. + * elf32_sparc.c (elf32_sparc_relocate_section): Likewise. + (elf32_sparc_info_to_howto): Likewise; handle vtable relocations. + 1999-06-07 Richard Henderson * section.c (_bfd_strip_section_from_output): Remove output diff --git a/bfd/elf32-sparc.c b/bfd/elf32-sparc.c index ec57c8cb35f..f02702c919e 100644 --- a/bfd/elf32-sparc.c +++ b/bfd/elf32-sparc.c @@ -215,8 +215,20 @@ elf32_sparc_info_to_howto (abfd, cache_ptr, dst) arelent *cache_ptr; Elf_Internal_Rela *dst; { - BFD_ASSERT (ELF32_R_TYPE(dst->r_info) < (unsigned int) R_SPARC_max); - cache_ptr->howto = &_bfd_sparc_elf_howto_table[ELF32_R_TYPE(dst->r_info)]; + switch (ELF32_R_TYPE(dst->r_info)) + { + case R_SPARC_GNU_VTINHERIT: + cache_ptr->howto = &elf32_sparc_vtinherit_howto; + break; + + case R_SPARC_GNU_VTENTRY: + cache_ptr->howto = &elf32_sparc_vtentry_howto; + break; + + default: + BFD_ASSERT (ELF32_R_TYPE(dst->r_info) < (unsigned int) R_SPARC_max_std); + cache_ptr->howto = &_bfd_sparc_elf_howto_table[ELF32_R_TYPE(dst->r_info)]; + } } /* For unsupported relocs. */ @@ -1134,7 +1146,7 @@ elf32_sparc_relocate_section (output_bfd, info, input_bfd, input_section, || r_type == R_SPARC_GNU_VTENTRY) continue; - if (r_type < 0 || r_type >= (int) R_SPARC_max) + if (r_type < 0 || r_type >= (int) R_SPARC_max_std) { bfd_set_error (bfd_error_bad_value); return false; diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c index 17fe98dafc2..def6bce6762 100644 --- a/bfd/elf64-sparc.c +++ b/bfd/elf64-sparc.c @@ -213,7 +213,7 @@ sparc64_elf_info_to_howto (abfd, cache_ptr, dst) arelent *cache_ptr; Elf64_Internal_Rela *dst; { - BFD_ASSERT (ELF64_R_TYPE (dst->r_info) < (unsigned int) R_SPARC_max); + BFD_ASSERT (ELF64_R_TYPE (dst->r_info) < (unsigned int) R_SPARC_max_std); cache_ptr->howto = &sparc64_elf_howto_table[ELF64_R_TYPE (dst->r_info)]; } @@ -1246,7 +1246,7 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section, bfd_reloc_status_type r; r_type = ELF64_R_TYPE (rel->r_info); - if (r_type < 0 || r_type >= (int) R_SPARC_max) + if (r_type < 0 || r_type >= (int) R_SPARC_max_std) { bfd_set_error (bfd_error_bad_value); return false; -- 2.30.2