diff options
author | Maciej W. Rozycki <macro@linux-mips.org> | 2012-04-16 11:45:56 +0000 |
---|---|---|
committer | Maciej W. Rozycki <macro@linux-mips.org> | 2012-04-16 11:45:56 +0000 |
commit | cb4437b8911d52a7a4189597f0d349a9a2b777eb (patch) | |
tree | dc6c5aeafaab12cd006e700e5233aca19bb15239 | |
parent | c0d4d1c0f81b3452286bdb9e30ede03706ba0a9f (diff) | |
download | binutils-cb4437b8911d52a7a4189597f0d349a9a2b777eb.zip binutils-cb4437b8911d52a7a4189597f0d349a9a2b777eb.tar.gz binutils-cb4437b8911d52a7a4189597f0d349a9a2b777eb.tar.bz2 |
* elfxx-mips.c (mips16_stub_symndx): Handle n64 compound relocs.
(_bfd_mips_elf_check_relocs): Update accordingly.
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elfxx-mips.c | 13 |
2 files changed, 13 insertions, 5 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ab5fd6f..32e6601 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2012-04-16 Maciej W. Rozycki <macro@linux-mips.org> + + * elfxx-mips.c (mips16_stub_symndx): Handle n64 compound relocs. + (_bfd_mips_elf_check_relocs): Update accordingly. + 2012-04-13 Alan Modra <amodra@gmail.com> PR ld/13947 diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 7401d1f..17c007a 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -1460,14 +1460,17 @@ section_allows_mips16_refs_p (asection *section) function, or 0 if we can't decide which function that is. */ static unsigned long -mips16_stub_symndx (asection *sec ATTRIBUTE_UNUSED, +mips16_stub_symndx (const struct elf_backend_data *bed, + asection *sec ATTRIBUTE_UNUSED, const Elf_Internal_Rela *relocs, const Elf_Internal_Rela *relend) { + int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel; const Elf_Internal_Rela *rel; - /* Trust the first R_MIPS_NONE relocation, if any. */ - for (rel = relocs; rel < relend; rel++) + /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent + one in a compound relocation. */ + for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel) if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE) return ELF_R_SYM (sec->owner, rel->r_info); @@ -7569,7 +7572,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, /* Look at the relocation information to figure out which symbol this is for. */ - r_symndx = mips16_stub_symndx (sec, relocs, rel_end); + r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end); if (r_symndx == 0) { (*_bfd_error_handler) @@ -7694,7 +7697,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, /* Look at the relocation information to figure out which symbol this is for. */ - r_symndx = mips16_stub_symndx (sec, relocs, rel_end); + r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end); if (r_symndx == 0) { (*_bfd_error_handler) |