From 5c0df4846e5e0f668376c153ff69fd8bf1461df3 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 22 Mar 2013 15:53:36 +0000 Subject: [PATCH] PR ld/14902 * elf32-h8300.c (elf32_h8_relax_delete_bytes): Fix off by one errors adjusting relocs and symbols. --- bfd/ChangeLog | 6 ++++++ 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 + + 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 * 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; -- 2.34.1