diff options
author | Nick Clifton <nickc@redhat.com> | 2013-03-22 15:53:36 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2013-03-22 15:53:36 +0000 |
commit | 7e9542cf6a4e43d508e07c1a9dd46bad0a23366e (patch) | |
tree | 2d5523d97a014c11435dbe51a8256bd4dd2a89d5 | |
parent | d6abf299b557ad50f93079c13225dca805fbbf1b (diff) | |
download | binutils-redhat-7e9542cf6a4e43d508e07c1a9dd46bad0a23366e.tar.gz |
PR ld/14902
* elf32-h8300.c (elf32_h8_relax_delete_bytes): Fix off by one
errors adjusting relocs and symbols.
-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 8439b55c65..cef68c6f62 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 4cfc30e3ad..67bca3f573 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; |