ppc476 patch area size miscalculation
authorAlan Modra <amodra@gmail.com>
Sat, 30 Aug 2014 00:14:47 +0000 (09:44 +0930)
committerAlan Modra <amodra@gmail.com>
Sat, 30 Aug 2014 00:42:44 +0000 (10:12 +0930)
ppc476 sections that end exactly on a page boundary need the
workaround applied when a function ends in "bctr", or when pasting
together code from multiple sections.  The space allocated for the
patch area didn't allow for this case, while the code in
relocate_section performing the patches did, leading to an assertion
failure.

* elf32-ppc.c (ppc_elf_relax_section): Fix off by one error.

bfd/ChangeLog
bfd/elf32-ppc.c

index fae94fd00a516584659f42e960be7bff3b44c325..8cbab99e3c1ca3d25cc03ce53bff87e126e230a6 100644 (file)
@@ -1,3 +1,7 @@
+2014-08-30  Alan Modra  <amodra@gmail.com>
+
+       * elf32-ppc.c (ppc_elf_relax_section): Fix off by one error.
+
 2014-08-29  Alan Modra  <amodra@gmail.com>
 
        * elf64-ppc.c (ppc64_elf_relocate_section): Report a different
index 97f47243302201bf16d8a134cbb4a791ad33e71c..6fb603d3aeadd7d0c87606bb870a3c7944c58fb4 100644 (file)
@@ -7165,7 +7165,7 @@ ppc_elf_relax_section (bfd *abfd,
       bfd_vma pagesize = (bfd_vma) 1 << htab->params->pagesize_p2;
 
       addr = isec->output_section->vma + isec->output_offset;
-      end_addr = addr + trampoff - 1;
+      end_addr = addr + trampoff;
       addr &= -pagesize;
       crossings = ((end_addr & -pagesize) - addr) >> htab->params->pagesize_p2;
       if (crossings != 0)