diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elf32-h8300.c | 11 |
2 files changed, 11 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 8439b55..cef68c6 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2013-03-22 Achille Fouilleul <achille.fouilleul+binutils@gadz.org> + + PR ld/14902 + * elf32-h8300.c (elf32_h8_relax_delete_bytes): Fix off by one + errors adjusting relocs and symbols. + 2013-03-21 Michael Schewe <michael.schewe@gmx.net> * elf32-h8300 (h8_relax_section): Add new relaxation of mov diff --git a/bfd/elf32-h8300.c b/bfd/elf32-h8300.c index 4cfc30e..67bca3f 100644 --- a/bfd/elf32-h8300.c +++ b/bfd/elf32-h8300.c @@ -1518,7 +1518,7 @@ elf32_h8_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, int count) { /* Get the new reloc address. */ if ((irel->r_offset > addr - && irel->r_offset < toaddr)) + && irel->r_offset <= toaddr)) irel->r_offset -= count; } @@ -1530,7 +1530,7 @@ elf32_h8_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, int count) { if (isym->st_shndx == sec_shndx && isym->st_value > addr - && isym->st_value < toaddr) + && isym->st_value <= toaddr) isym->st_value -= count; } @@ -1542,14 +1542,13 @@ elf32_h8_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, int count) for (; sym_hashes < end_hashes; sym_hashes++) { struct elf_link_hash_entry *sym_hash = *sym_hashes; + if ((sym_hash->root.type == bfd_link_hash_defined || sym_hash->root.type == bfd_link_hash_defweak) && sym_hash->root.u.def.section == sec && sym_hash->root.u.def.value > addr - && sym_hash->root.u.def.value < toaddr) - { - sym_hash->root.u.def.value -= count; - } + && sym_hash->root.u.def.value <= toaddr) + sym_hash->root.u.def.value -= count; } return TRUE; |