Browse Source
Fix internal errors like: ld: BFD (GNU Binutils) 2.26.51.20160526 internal error, aborting at .../bfd/elfxx-mips.c:10278 in _bfd_mips_elf_relocate_section ld: Please report this bug. triggered by the `bfd_reloc_outofrange' condition on branch relocations. bfd/ * elfxx-mips.c (b_reloc_p): New function. (_bfd_mips_elf_relocate_section) <bfd_reloc_outofrange>: Handle branch relocations. ld/ * testsuite/ld-mips-elf/unaligned-branch.d: New test. * testsuite/ld-mips-elf/unaligned-branch.s: New test source. * testsuite/ld-mips-elf/unaligned-text.s: New test source. * testsuite/ld-mips-elf/mips-elf.exp: Run the new test.binutils-2_27-branch
7 changed files with 85 additions and 0 deletions
@ -0,0 +1,23 @@ |
|||
#name: MIPS branch to unaligned symbol |
|||
#source: unaligned-branch.s |
|||
#source: unaligned-text.s |
|||
#as: -EB -32 -mips32r6 |
|||
#ld: -EB -Ttext 0x10000000 -e 0x10000000 |
|||
#error: \A[^\n]*: In function `foo':\n |
|||
#error: \(\.text\+0x14\): Branch to a non-instruction-aligned address\n |
|||
#error: [^\n]*: In function `foo':\n |
|||
#error: \(\.text\+0x1c\): Branch to a non-instruction-aligned address\n |
|||
#error: [^\n]*: In function `foo':\n |
|||
#error: \(\.text\+0x24\): Branch to a non-instruction-aligned address\n |
|||
#error: [^\n]*: In function `foo':\n |
|||
#error: \(\.text\+0x28\): Branch to a non-instruction-aligned address\n |
|||
#error: [^\n]*: In function `foo':\n |
|||
#error: \(\.text\+0x30\): Branch to a non-instruction-aligned address\n |
|||
#error: [^\n]*: In function `foo':\n |
|||
#error: \(\.text\+0x38\): Branch to a non-instruction-aligned address\n |
|||
#error: [^\n]*: In function `foo':\n |
|||
#error: \(\.text\+0x3c\): Branch to a non-instruction-aligned address\n |
|||
#error: [^\n]*: In function `foo':\n |
|||
#error: \(\.text\+0x44\): Branch to a non-instruction-aligned address\n |
|||
#error: [^\n]*: In function `foo':\n |
|||
#error: \(\.text\+0x4c\): Branch to a non-instruction-aligned address\Z |
|||
@ -0,0 +1,21 @@ |
|||
.text |
|||
.align 4 |
|||
.globl foo |
|||
.ent foo |
|||
foo: |
|||
b bar0 |
|||
beqzc $2, bar0 |
|||
bc bar0 |
|||
b bar1 |
|||
beqzc $2, bar1 |
|||
bc bar1 |
|||
b bar2 |
|||
beqzc $2, bar2 |
|||
bc bar2 |
|||
b bar3 |
|||
beqzc $2, bar3 |
|||
bc bar3 |
|||
b bar4 |
|||
beqzc $2, bar4 |
|||
bc bar4 |
|||
.end foo |
|||
@ -0,0 +1,15 @@ |
|||
.macro sym n:req |
|||
.if \n |
|||
.globl bar\@ |
|||
.type bar\@, @object |
|||
bar\@ : |
|||
.byte 0 |
|||
.size bar\@, . - bar\@ |
|||
sym \n - 1 |
|||
.endif |
|||
.endm |
|||
|
|||
.text |
|||
.align 4 |
|||
.space 32 |
|||
sym 16 |
|||
Loading…
Reference in new issue