aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog12
-rw-r--r--bfd/elf32-mips.c3
-rw-r--r--bfd/elfn32-mips.c3
-rw-r--r--bfd/elfxx-mips.c4
-rw-r--r--bfd/elfxx-mips.h7
5 files changed, 23 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 4a26186..cc36cfa 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,17 @@
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)
[R_MIPS_TLS_DTPMOD64]: Clear partial_inplace.
[R_MIPS_TLS_DTPREL64, R_MIPS_TLS_GD, R_MIPS_TLS_LDM]: Likewise.
diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c
index c987ff9..5155557 100644
--- a/bfd/elf32-mips.c
+++ b/bfd/elf32-mips.c
@@ -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);
}
diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c
index d48046a..a072594 100644
--- a/bfd/elfn32-mips.c
+++ b/bfd/elfn32-mips.c
@@ -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);
}
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index a94e609..7b89a83 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -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;"
diff --git a/bfd/elfxx-mips.h b/bfd/elfxx-mips.h
index 0b2226d..096bd13 100644
--- a/bfd/elfxx-mips.h
+++ b/bfd/elfxx-mips.h
@@ -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