* elfxx-mips.h: Include "elf/mips.h".
authorMaciej W. Rozycki <macro@linux-mips.org>
Tue, 27 Jul 2010 21:18:52 +0000 (21:18 +0000)
committerMaciej W. Rozycki <macro@linux-mips.org>
Tue, 27 Jul 2010 21:18:52 +0000 (21:18 +0000)
(gprel16_reloc_p): New static inline function.
* elfxx-mips.c (_bfd_mips_elf_check_relocs)
[R_MIPS16_GOT16, R_MIPS_GOT16, R_MIPS_GOT_HI16, R_MIPS_GOT_LO16]:
Use got16_reloc_p.
(_bfd_mips_elf_relocate_section)[bfd_reloc_overflow]: Use
gprel16_reloc_p.
* elf32-mips.c (mips_info_to_howto_rel): Likewise.
* elfn32-mips.c (mips_info_to_howto_rel): Likewise.

bfd/ChangeLog
bfd/elf32-mips.c
bfd/elfn32-mips.c
bfd/elfxx-mips.c
bfd/elfxx-mips.h

index 4a26186203a67fed47f2e0ab981fdccca9bfd5ed..cc36cfab873ce8fb802a8f1d018f33be57162d1f 100644 (file)
@@ -1,3 +1,15 @@
+2010-07-27  Maciej W. Rozycki  <macro@codesourcery.com>
+
+       * elfxx-mips.h: Include "elf/mips.h".
+       (gprel16_reloc_p): New static inline function.
+       * elfxx-mips.c (_bfd_mips_elf_check_relocs)
+       [R_MIPS16_GOT16, R_MIPS_GOT16, R_MIPS_GOT_HI16, R_MIPS_GOT_LO16]:
+       Use got16_reloc_p.
+       (_bfd_mips_elf_relocate_section)[bfd_reloc_overflow]: Use
+       gprel16_reloc_p.
+       * elf32-mips.c (mips_info_to_howto_rel): Likewise.
+       * elfn32-mips.c (mips_info_to_howto_rel): Likewise.
+
 2010-07-27  Maciej W. Rozycki  <macro@codesourcery.com>
 
        * elf64-mips.c (mips_elf64_howto_table_rela)
index c987ff9b24942c8e08378ca187f54dcbb70f7fae..5155557913754ab4c42832392fe42d75a4719e86 100644 (file)
@@ -1422,8 +1422,7 @@ mips_info_to_howto_rel (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)
      when we do the relocation, because the symbol manipulations done
      by the linker may cause us to lose track of the input BFD.  */
   if (((*cache_ptr->sym_ptr_ptr)->flags & BSF_SECTION_SYM) != 0
-      && (r_type == (unsigned int) R_MIPS_GPREL16
-         || r_type == (unsigned int) R_MIPS_LITERAL))
+      && (gprel16_reloc_p (r_type) || r_type == (unsigned int) R_MIPS_LITERAL))
     cache_ptr->addend = elf_gp (abfd);
 }
 
index d48046aa09e8ca24516642bfd3b15cb1b15fea43..a0725943e54502ea4ca643884b9be6345de0495d 100644 (file)
@@ -2259,8 +2259,7 @@ mips_info_to_howto_rel (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)
      when we do the relocation, because the symbol manipulations done
      by the linker may cause us to lose track of the input BFD.  */
   if (((*cache_ptr->sym_ptr_ptr)->flags & BSF_SECTION_SYM) != 0
-      && (r_type == (unsigned int) R_MIPS_GPREL16
-         || r_type == (unsigned int) R_MIPS_LITERAL))
+      && (gprel16_reloc_p (r_type) || r_type == (unsigned int) R_MIPS_LITERAL))
     cache_ptr->addend = elf_gp (abfd);
 }
 
index a94e60945a1bf47e3f013dc1e3ac5270030d709c..7b89a83c615340e82bd0fef5716fb107d0a0bcc2 100644 (file)
@@ -7727,7 +7727,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
                  howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
                  addend = mips_elf_read_rel_addend (abfd, rel,
                                                     howto, contents);
-                 if (r_type == R_MIPS_GOT16)
+                 if (got16_reloc_p (r_type))
                    mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
                                                  contents, &addend);
                  else
@@ -9196,7 +9196,7 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
              BFD_ASSERT (htab != NULL);
              BFD_ASSERT (name != NULL);
              if (!htab->small_data_overflow_reported
-                 && (howto->type == R_MIPS_GPREL16
+                 && (gprel16_reloc_p (howto->type)
                      || howto->type == R_MIPS_LITERAL))
                {
                  msg = _("small-data section exceeds 64KB;"
index 0b2226d26cdde1c44fed3642ba36d0e4d187f021..096bd132478aa51a00a2ee60107b016d80cb7777 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "elf/common.h"
 #include "elf/internal.h"
+#include "elf/mips.h"
 
 extern bfd_boolean _bfd_mips_elf_new_section_hook
   (bfd *, asection *);
@@ -153,6 +154,12 @@ extern const struct bfd_elf_special_section _bfd_mips_elf_special_sections [];
 
 extern bfd_boolean _bfd_mips_elf_common_definition (Elf_Internal_Sym *);
 
+static inline bfd_boolean
+gprel16_reloc_p (unsigned int r_type)
+{
+  return r_type == R_MIPS_GPREL16 || r_type == R_MIPS16_GPREL;
+}
+
 #define elf_backend_common_definition   _bfd_mips_elf_common_definition
 #define elf_backend_name_local_section_symbols \
   _bfd_mips_elf_name_local_section_symbols