Jakub Jelinek <jj@ultra.linux.cz>
authorRichard Henderson <rth@redhat.com>
Thu, 10 Jun 1999 20:59:54 +0000 (20:59 +0000)
committerRichard Henderson <rth@redhat.com>
Thu, 10 Jun 1999 20:59:54 +0000 (20:59 +0000)
        * 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
bfd/elf32-sparc.c
bfd/elf64-sparc.c

index e5fd81d..bc16078 100644 (file)
@@ -1,3 +1,11 @@
+1999-06-10  Jakub Jelinek  <jj@ultra.linux.cz>
+
+       * 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  <rth@cygnus.com>
 
        * section.c (_bfd_strip_section_from_output): Remove output
index ec57c8c..f02702c 100644 (file)
@@ -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)];
+    }
 }
 \f
 /* 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;
index 17fe98d..def6bce 100644 (file)
@@ -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)];
 }
 \f
@@ -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;