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 /bfd/elf32-h8300.c | |
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.
Diffstat (limited to 'bfd/elf32-h8300.c')
-rw-r--r-- | bfd/elf32-h8300.c | 11 |
1 files changed, 5 insertions, 6 deletions
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; |