From de341542a60f7d3a80cc339db7d341b615cfa52f Mon Sep 17 00:00:00 2001 From: "Maciej W. Rozycki" Date: Wed, 25 May 2016 20:59:37 +0100 Subject: [PATCH] MIPS/BFD: Report `bfd_reloc_outofrange' errors as such A `bfd_reloc_outofrange' condition from `mips_elf_calculate_relocation' currently triggers the warning callback, which in the case of LD prints messages like: foo.o: In function `foo': (.text+0x0): warning: JALX to a non-word-aligned address or: foo.o: In function `foo': (.text+0x0): warning: PC-relative load from unaligned address and nothing else, which suggests this is a benign condition and link has otherwise successfully run to completion. This is however not the case, the link terminates right away with no further messages and no output produced. Use the general error or warning info callback then, preserving the message format. Also set a BFD error condition so that a failure is unambiguously reported. Complement the change with a set of suitable test suite additions. bfd/ * elfxx-mips.c (_bfd_mips_elf_relocate_section) : Call `->einfo' rather than `->warning'. Call `bfd_set_error'. ld/ * testsuite/ld-mips-elf/unaligned-jalx-0.d: New test. * testsuite/ld-mips-elf/unaligned-jalx-1.d: New test. * testsuite/ld-mips-elf/unaligned-jalx-2.d: New test. * testsuite/ld-mips-elf/unaligned-jalx-mips16-0.d: New test. * testsuite/ld-mips-elf/unaligned-jalx-mips16-1.d: New test. * testsuite/ld-mips-elf/unaligned-jalx-mips16-2.d: New test. * testsuite/ld-mips-elf/unaligned-jalx-micromips-0.d: New test. * testsuite/ld-mips-elf/unaligned-jalx-micromips-1.d: New test. * testsuite/ld-mips-elf/unaligned-jalx-micromips-2.d: New test. * testsuite/ld-mips-elf/unaligned-lwpc-0.d: New test. * testsuite/ld-mips-elf/unaligned-lwpc-1.d: New test. * testsuite/ld-mips-elf/unaligned-lwpc-2.d: New test. * testsuite/ld-mips-elf/unaligned-lwpc-3.d: New test. * testsuite/ld-mips-elf/unaligned-ldpc-0.d: New test. * testsuite/ld-mips-elf/unaligned-ldpc-1.d: New test. * testsuite/ld-mips-elf/unaligned-ldpc-2.d: New test. * testsuite/ld-mips-elf/unaligned-ldpc-3.d: New test. * testsuite/ld-mips-elf/unaligned-ldpc-4.d: New test. * testsuite/ld-mips-elf/unaligned-jalx-0.s: New test source. * testsuite/ld-mips-elf/unaligned-jalx-1.s: New test source. * testsuite/ld-mips-elf/unaligned-jalx-2.s: New test source. * testsuite/ld-mips-elf/unaligned-insn.s: New test source. * testsuite/ld-mips-elf/unaligned-lwpc-0.s: New test source. * testsuite/ld-mips-elf/unaligned-lwpc-1.s: New test source. * testsuite/ld-mips-elf/unaligned-lwpc-2.s: New test source. * testsuite/ld-mips-elf/unaligned-lwpc-3.s: New test source. * testsuite/ld-mips-elf/unaligned-ldpc-0.s: New test source. * testsuite/ld-mips-elf/unaligned-ldpc-1.s: New test source. * testsuite/ld-mips-elf/unaligned-ldpc-2.s: New test source. * testsuite/ld-mips-elf/unaligned-ldpc-3.s: New test source. * testsuite/ld-mips-elf/unaligned-ldpc-4.s: New test source. * testsuite/ld-mips-elf/unaligned-syms.s: New test source. * testsuite/ld-mips-elf/mips-elf.exp: Run the new tests. --- bfd/ChangeLog | 6 ++++ bfd/elfxx-mips.c | 5 +-- ld/ChangeLog | 36 +++++++++++++++++++ ld/testsuite/ld-mips-elf/mips-elf.exp | 20 +++++++++++ ld/testsuite/ld-mips-elf/unaligned-insn.s | 15 ++++++++ ld/testsuite/ld-mips-elf/unaligned-jalx-0.d | 21 +++++++++++ ld/testsuite/ld-mips-elf/unaligned-jalx-0.s | 11 ++++++ ld/testsuite/ld-mips-elf/unaligned-jalx-1.d | 8 +++++ ld/testsuite/ld-mips-elf/unaligned-jalx-1.s | 11 ++++++ ld/testsuite/ld-mips-elf/unaligned-jalx-2.d | 21 +++++++++++ ld/testsuite/ld-mips-elf/unaligned-jalx-2.s | 11 ++++++ .../ld-mips-elf/unaligned-jalx-micromips-0.d | 21 +++++++++++ .../ld-mips-elf/unaligned-jalx-micromips-1.d | 8 +++++ .../ld-mips-elf/unaligned-jalx-micromips-2.d | 21 +++++++++++ .../ld-mips-elf/unaligned-jalx-mips16-0.d | 21 +++++++++++ .../ld-mips-elf/unaligned-jalx-mips16-1.d | 8 +++++ .../ld-mips-elf/unaligned-jalx-mips16-2.d | 21 +++++++++++ ld/testsuite/ld-mips-elf/unaligned-ldpc-0.d | 12 +++++++ ld/testsuite/ld-mips-elf/unaligned-ldpc-0.s | 11 ++++++ ld/testsuite/ld-mips-elf/unaligned-ldpc-1.d | 8 +++++ ld/testsuite/ld-mips-elf/unaligned-ldpc-1.s | 11 ++++++ ld/testsuite/ld-mips-elf/unaligned-ldpc-2.d | 8 +++++ ld/testsuite/ld-mips-elf/unaligned-ldpc-2.s | 11 ++++++ ld/testsuite/ld-mips-elf/unaligned-ldpc-3.d | 8 +++++ ld/testsuite/ld-mips-elf/unaligned-ldpc-3.s | 11 ++++++ ld/testsuite/ld-mips-elf/unaligned-ldpc-4.d | 12 +++++++ ld/testsuite/ld-mips-elf/unaligned-ldpc-4.s | 11 ++++++ ld/testsuite/ld-mips-elf/unaligned-lwpc-0.d | 12 +++++++ ld/testsuite/ld-mips-elf/unaligned-lwpc-0.s | 11 ++++++ ld/testsuite/ld-mips-elf/unaligned-lwpc-1.d | 8 +++++ ld/testsuite/ld-mips-elf/unaligned-lwpc-1.s | 11 ++++++ ld/testsuite/ld-mips-elf/unaligned-lwpc-2.d | 8 +++++ ld/testsuite/ld-mips-elf/unaligned-lwpc-2.s | 11 ++++++ ld/testsuite/ld-mips-elf/unaligned-lwpc-3.d | 12 +++++++ ld/testsuite/ld-mips-elf/unaligned-lwpc-3.s | 11 ++++++ ld/testsuite/ld-mips-elf/unaligned-syms.s | 15 ++++++++ 36 files changed, 465 insertions(+), 2 deletions(-) create mode 100644 ld/testsuite/ld-mips-elf/unaligned-insn.s create mode 100644 ld/testsuite/ld-mips-elf/unaligned-jalx-0.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-jalx-0.s create mode 100644 ld/testsuite/ld-mips-elf/unaligned-jalx-1.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-jalx-1.s create mode 100644 ld/testsuite/ld-mips-elf/unaligned-jalx-2.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-jalx-2.s create mode 100644 ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-0.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-1.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-2.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-0.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-1.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-2.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-ldpc-0.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-ldpc-0.s create mode 100644 ld/testsuite/ld-mips-elf/unaligned-ldpc-1.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-ldpc-1.s create mode 100644 ld/testsuite/ld-mips-elf/unaligned-ldpc-2.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-ldpc-2.s create mode 100644 ld/testsuite/ld-mips-elf/unaligned-ldpc-3.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-ldpc-3.s create mode 100644 ld/testsuite/ld-mips-elf/unaligned-ldpc-4.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-ldpc-4.s create mode 100644 ld/testsuite/ld-mips-elf/unaligned-lwpc-0.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-lwpc-0.s create mode 100644 ld/testsuite/ld-mips-elf/unaligned-lwpc-1.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-lwpc-1.s create mode 100644 ld/testsuite/ld-mips-elf/unaligned-lwpc-2.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-lwpc-2.s create mode 100644 ld/testsuite/ld-mips-elf/unaligned-lwpc-3.d create mode 100644 ld/testsuite/ld-mips-elf/unaligned-lwpc-3.s create mode 100644 ld/testsuite/ld-mips-elf/unaligned-syms.s diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e478afbd5c..3250acc72c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2016-05-25 Maciej W. Rozycki + + * elfxx-mips.c (_bfd_mips_elf_relocate_section) + : Call `->einfo' rather than `->warning'. + Call `bfd_set_error'. + 2016-05-25 H.J. Lu PR binutils/14625 diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index d09cbf1222..c695278e52 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -10266,8 +10266,9 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, msg = _("PC-relative load from unaligned address"); if (msg) { - info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); + info->callbacks->einfo + ("%C: %s\n", input_bfd, input_section, rel->r_offset, msg); + bfd_set_error (bfd_error_bad_value); return FALSE; } /* Fall through. */ diff --git a/ld/ChangeLog b/ld/ChangeLog index 181eec8f3a..dabaf553fc 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,39 @@ +2016-05-25 Maciej W. Rozycki + + * testsuite/ld-mips-elf/unaligned-jalx-0.d: New test. + * testsuite/ld-mips-elf/unaligned-jalx-1.d: New test. + * testsuite/ld-mips-elf/unaligned-jalx-2.d: New test. + * testsuite/ld-mips-elf/unaligned-jalx-mips16-0.d: New test. + * testsuite/ld-mips-elf/unaligned-jalx-mips16-1.d: New test. + * testsuite/ld-mips-elf/unaligned-jalx-mips16-2.d: New test. + * testsuite/ld-mips-elf/unaligned-jalx-micromips-0.d: New test. + * testsuite/ld-mips-elf/unaligned-jalx-micromips-1.d: New test. + * testsuite/ld-mips-elf/unaligned-jalx-micromips-2.d: New test. + * testsuite/ld-mips-elf/unaligned-lwpc-0.d: New test. + * testsuite/ld-mips-elf/unaligned-lwpc-1.d: New test. + * testsuite/ld-mips-elf/unaligned-lwpc-2.d: New test. + * testsuite/ld-mips-elf/unaligned-lwpc-3.d: New test. + * testsuite/ld-mips-elf/unaligned-ldpc-0.d: New test. + * testsuite/ld-mips-elf/unaligned-ldpc-1.d: New test. + * testsuite/ld-mips-elf/unaligned-ldpc-2.d: New test. + * testsuite/ld-mips-elf/unaligned-ldpc-3.d: New test. + * testsuite/ld-mips-elf/unaligned-ldpc-4.d: New test. + * testsuite/ld-mips-elf/unaligned-jalx-0.s: New test source. + * testsuite/ld-mips-elf/unaligned-jalx-1.s: New test source. + * testsuite/ld-mips-elf/unaligned-jalx-2.s: New test source. + * testsuite/ld-mips-elf/unaligned-insn.s: New test source. + * testsuite/ld-mips-elf/unaligned-lwpc-0.s: New test source. + * testsuite/ld-mips-elf/unaligned-lwpc-1.s: New test source. + * testsuite/ld-mips-elf/unaligned-lwpc-2.s: New test source. + * testsuite/ld-mips-elf/unaligned-lwpc-3.s: New test source. + * testsuite/ld-mips-elf/unaligned-ldpc-0.s: New test source. + * testsuite/ld-mips-elf/unaligned-ldpc-1.s: New test source. + * testsuite/ld-mips-elf/unaligned-ldpc-2.s: New test source. + * testsuite/ld-mips-elf/unaligned-ldpc-3.s: New test source. + * testsuite/ld-mips-elf/unaligned-ldpc-4.s: New test source. + * testsuite/ld-mips-elf/unaligned-syms.s: New test source. + * testsuite/ld-mips-elf/mips-elf.exp: Run the new tests. + 2016-05-25 H.J. Lu PR ld/20103 diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp index 615f173e74..ceb588d44f 100644 --- a/ld/testsuite/ld-mips-elf/mips-elf.exp +++ b/ld/testsuite/ld-mips-elf/mips-elf.exp @@ -177,6 +177,26 @@ if $has_newabi { run_dump_test "jalx-local-n64" [list [list ld $abi_ldflags(n64)]] } +run_dump_test "unaligned-jalx-0" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-jalx-1" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-jalx-2" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-jalx-mips16-0" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-jalx-mips16-1" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-jalx-mips16-2" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-jalx-micromips-0" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-jalx-micromips-1" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-jalx-micromips-2" [list [list ld $abi_ldflags(o32)]] + +run_dump_test "unaligned-lwpc-0" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-lwpc-1" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-lwpc-2" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-lwpc-3" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-ldpc-0" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-ldpc-1" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-ldpc-2" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-ldpc-3" [list [list ld $abi_ldflags(o32)]] +run_dump_test "unaligned-ldpc-4" [list [list ld $abi_ldflags(o32)]] + # Test multi-got link. We only do this on GNU/Linux because it requires # the "traditional" emulations. if { $linux_gnu } { diff --git a/ld/testsuite/ld-mips-elf/unaligned-insn.s b/ld/testsuite/ld-mips-elf/unaligned-insn.s new file mode 100644 index 0000000000..10649de918 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-insn.s @@ -0,0 +1,15 @@ + .macro sym n:req + .if \n + .globl bar\@ + .type bar\@, @function +bar\@ : + .insn + .hword 0 + .size bar\@, . - bar\@ + sym \n - 1 + .endif + .endm + + .text + .align 4 + sym 8 diff --git a/ld/testsuite/ld-mips-elf/unaligned-jalx-0.d b/ld/testsuite/ld-mips-elf/unaligned-jalx-0.d new file mode 100644 index 0000000000..571a293efc --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-jalx-0.d @@ -0,0 +1,21 @@ +#name: MIPS JALX to unaligned symbol 0 +#source: unaligned-jalx-0.s +#source: unaligned-insn.s -mips16 +#as: -EB -32 +#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format .*mips.* + +Disassembly of section \.text: +[0-9a-f]+ <[^>]*> 77000008 jalx 1c000020 +[0-9a-f]+ <[^>]*> 00000000 nop + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. diff --git a/ld/testsuite/ld-mips-elf/unaligned-jalx-0.s b/ld/testsuite/ld-mips-elf/unaligned-jalx-0.s new file mode 100644 index 0000000000..11e874a28a --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-jalx-0.s @@ -0,0 +1,11 @@ + .text + .align 4 + .globl foo + .ent foo +foo: + jal bar0 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 diff --git a/ld/testsuite/ld-mips-elf/unaligned-jalx-1.d b/ld/testsuite/ld-mips-elf/unaligned-jalx-1.d new file mode 100644 index 0000000000..9cbf6540da --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-jalx-1.d @@ -0,0 +1,8 @@ +#name: MIPS JALX to unaligned symbol 1 +#source: unaligned-jalx-1.s +#source: unaligned-insn.s -mips16 +#as: -EB -32 +#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 +#error: \A[^\n]*: In function `foo':\n +#error: \(\.text\+0x[0-9a-f]+\): JALX to a non-word-aligned address\n +#error: [^\n]*: final link failed: Bad value\Z diff --git a/ld/testsuite/ld-mips-elf/unaligned-jalx-1.s b/ld/testsuite/ld-mips-elf/unaligned-jalx-1.s new file mode 100644 index 0000000000..d3ccfb4530 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-jalx-1.s @@ -0,0 +1,11 @@ + .text + .align 4 + .globl foo + .ent foo +foo: + jal bar1 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 diff --git a/ld/testsuite/ld-mips-elf/unaligned-jalx-2.d b/ld/testsuite/ld-mips-elf/unaligned-jalx-2.d new file mode 100644 index 0000000000..c401cfe0a5 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-jalx-2.d @@ -0,0 +1,21 @@ +#name: MIPS JALX to unaligned symbol 2 +#source: unaligned-jalx-2.s +#source: unaligned-insn.s -mips16 +#as: -EB -32 +#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format .*mips.* + +Disassembly of section \.text: +[0-9a-f]+ <[^>]*> 77000009 jalx 1c000024 +[0-9a-f]+ <[^>]*> 00000000 nop + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. diff --git a/ld/testsuite/ld-mips-elf/unaligned-jalx-2.s b/ld/testsuite/ld-mips-elf/unaligned-jalx-2.s new file mode 100644 index 0000000000..34de1396a7 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-jalx-2.s @@ -0,0 +1,11 @@ + .text + .align 4 + .globl foo + .ent foo +foo: + jal bar2 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 diff --git a/ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-0.d b/ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-0.d new file mode 100644 index 0000000000..5b3dea1072 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-0.d @@ -0,0 +1,21 @@ +#name: microMIPS JALX to unaligned symbol 0 +#source: unaligned-jalx-0.s -mmicromips +#source: unaligned-insn.s +#as: -EB -32 +#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format .*mips.* + +Disassembly of section \.text: +[0-9a-f]+ <[^>]*> f300 0008 jalx 1c000020 +[0-9a-f]+ <[^>]*> 0000 0000 nop + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. diff --git a/ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-1.d b/ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-1.d new file mode 100644 index 0000000000..a63fa310a7 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-1.d @@ -0,0 +1,8 @@ +#name: microMIPS JALX to unaligned symbol 1 +#source: unaligned-jalx-1.s -mmicromips +#source: unaligned-insn.s +#as: -EB -32 +#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 +#error: \A[^\n]*: In function `foo':\n +#error: \(\.text\+0x[0-9a-f]+\): JALX to a non-word-aligned address\n +#error: [^\n]*: final link failed: Bad value\Z diff --git a/ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-2.d b/ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-2.d new file mode 100644 index 0000000000..8c0702323a --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-2.d @@ -0,0 +1,21 @@ +#name: microMIPS JALX to unaligned symbol 2 +#source: unaligned-jalx-2.s -mmicromips +#source: unaligned-insn.s +#as: -EB -32 +#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format .*mips.* + +Disassembly of section \.text: +[0-9a-f]+ <[^>]*> f300 0009 jalx 1c000024 +[0-9a-f]+ <[^>]*> 0000 0000 nop + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. diff --git a/ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-0.d b/ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-0.d new file mode 100644 index 0000000000..9609736967 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-0.d @@ -0,0 +1,21 @@ +#name: MIPS16 JALX to unaligned symbol 0 +#source: unaligned-jalx-0.s -mips16 +#source: unaligned-insn.s +#as: -EB -32 +#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format .*mips.* + +Disassembly of section \.text: +[0-9a-f]+ <[^>]*> 1c18 0008 jalx 1c000020 +[0-9a-f]+ <[^>]*> 6500 nop + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. diff --git a/ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-1.d b/ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-1.d new file mode 100644 index 0000000000..45188e0e46 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-1.d @@ -0,0 +1,8 @@ +#name: MIPS16 JALX to unaligned symbol 1 +#source: unaligned-jalx-1.s -mips16 +#source: unaligned-insn.s +#as: -EB -32 +#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 +#error: \A[^\n]*: In function `foo':\n +#error: \(\.text\+0x[0-9a-f]+\): JALX to a non-word-aligned address\n +#error: [^\n]*: final link failed: Bad value\Z diff --git a/ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-2.d b/ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-2.d new file mode 100644 index 0000000000..d406651321 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-2.d @@ -0,0 +1,21 @@ +#name: MIPS16 JALX to unaligned symbol 2 +#source: unaligned-jalx-2.s -mips16 +#source: unaligned-insn.s +#as: -EB -32 +#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format .*mips.* + +Disassembly of section \.text: +[0-9a-f]+ <[^>]*> 1c18 0009 jalx 1c000024 +[0-9a-f]+ <[^>]*> 6500 nop + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. + \.\.\. diff --git a/ld/testsuite/ld-mips-elf/unaligned-ldpc-0.d b/ld/testsuite/ld-mips-elf/unaligned-ldpc-0.d new file mode 100644 index 0000000000..126c1b1f04 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-ldpc-0.d @@ -0,0 +1,12 @@ +#name: MIPS LDPC from unaligned symbol 0 +#source: unaligned-ldpc-0.s +#source: unaligned-syms.s +#as: -EB -32 -mips64r6 +#ld: -EB -Ttext 0x1c000000 -Tdata 0x1c080000 -e 0x1c000000 +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format .*mips.* + +Disassembly of section \.text: +[0-9a-f]+ <[^>]*> ec590004 ldpc v0,1c080020 + \.\.\. diff --git a/ld/testsuite/ld-mips-elf/unaligned-ldpc-0.s b/ld/testsuite/ld-mips-elf/unaligned-ldpc-0.s new file mode 100644 index 0000000000..c99b4b7b96 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-ldpc-0.s @@ -0,0 +1,11 @@ + .text + .align 4 + .globl foo + .ent foo +foo: + ldpc $2, bar0 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 diff --git a/ld/testsuite/ld-mips-elf/unaligned-ldpc-1.d b/ld/testsuite/ld-mips-elf/unaligned-ldpc-1.d new file mode 100644 index 0000000000..1213cd0d5c --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-ldpc-1.d @@ -0,0 +1,8 @@ +#name: MIPS LDPC from unaligned symbol 1 +#source: unaligned-ldpc-1.s +#source: unaligned-syms.s +#as: -EB -32 -mips64r6 +#ld: -EB -Ttext 0x1c000000 -Tdata 0x1c080000 -e 0x1c000000 +#error: \A[^\n]*: In function `foo':\n +#error: \(\.text\+0x[0-9a-f]+\): PC-relative load from unaligned address\n +#error: [^\n]*: final link failed: Bad value\Z diff --git a/ld/testsuite/ld-mips-elf/unaligned-ldpc-1.s b/ld/testsuite/ld-mips-elf/unaligned-ldpc-1.s new file mode 100644 index 0000000000..4afe84975c --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-ldpc-1.s @@ -0,0 +1,11 @@ + .text + .align 4 + .globl foo + .ent foo +foo: + ldpc $2, bar1 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 diff --git a/ld/testsuite/ld-mips-elf/unaligned-ldpc-2.d b/ld/testsuite/ld-mips-elf/unaligned-ldpc-2.d new file mode 100644 index 0000000000..6c0176caae --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-ldpc-2.d @@ -0,0 +1,8 @@ +#name: MIPS LDPC from unaligned symbol 2 +#source: unaligned-ldpc-2.s +#source: unaligned-syms.s +#as: -EB -32 -mips64r6 +#ld: -EB -Ttext 0x1c000000 -Tdata 0x1c080000 -e 0x1c000000 +#error: \A[^\n]*: In function `foo':\n +#error: \(\.text\+0x[0-9a-f]+\): PC-relative load from unaligned address\n +#error: [^\n]*: final link failed: Bad value\Z diff --git a/ld/testsuite/ld-mips-elf/unaligned-ldpc-2.s b/ld/testsuite/ld-mips-elf/unaligned-ldpc-2.s new file mode 100644 index 0000000000..11e88f6131 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-ldpc-2.s @@ -0,0 +1,11 @@ + .text + .align 4 + .globl foo + .ent foo +foo: + ldpc $2, bar2 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 diff --git a/ld/testsuite/ld-mips-elf/unaligned-ldpc-3.d b/ld/testsuite/ld-mips-elf/unaligned-ldpc-3.d new file mode 100644 index 0000000000..7a95d1c912 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-ldpc-3.d @@ -0,0 +1,8 @@ +#name: MIPS LDPC from unaligned symbol 3 +#source: unaligned-ldpc-3.s +#source: unaligned-syms.s +#as: -EB -32 -mips64r6 +#ld: -EB -Ttext 0x1c000000 -Tdata 0x1c080000 -e 0x1c000000 +#error: \A[^\n]*: In function `foo':\n +#error: \(\.text\+0x[0-9a-f]+\): PC-relative load from unaligned address\n +#error: [^\n]*: final link failed: Bad value\Z diff --git a/ld/testsuite/ld-mips-elf/unaligned-ldpc-3.s b/ld/testsuite/ld-mips-elf/unaligned-ldpc-3.s new file mode 100644 index 0000000000..dac870f21c --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-ldpc-3.s @@ -0,0 +1,11 @@ + .text + .align 4 + .globl foo + .ent foo +foo: + ldpc $2, bar4 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 diff --git a/ld/testsuite/ld-mips-elf/unaligned-ldpc-4.d b/ld/testsuite/ld-mips-elf/unaligned-ldpc-4.d new file mode 100644 index 0000000000..d5610a7f10 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-ldpc-4.d @@ -0,0 +1,12 @@ +#name: MIPS LDPC from unaligned symbol 4 +#source: unaligned-ldpc-4.s +#source: unaligned-syms.s +#as: -EB -32 -mips64r6 +#ld: -EB -Ttext 0x1c000000 -Tdata 0x1c080000 -e 0x1c000000 +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format .*mips.* + +Disassembly of section \.text: +[0-9a-f]+ <[^>]*> ec590005 ldpc v0,1c080028 + \.\.\. diff --git a/ld/testsuite/ld-mips-elf/unaligned-ldpc-4.s b/ld/testsuite/ld-mips-elf/unaligned-ldpc-4.s new file mode 100644 index 0000000000..596cccb1e0 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-ldpc-4.s @@ -0,0 +1,11 @@ + .text + .align 4 + .globl foo + .ent foo +foo: + ldpc $2, bar8 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 diff --git a/ld/testsuite/ld-mips-elf/unaligned-lwpc-0.d b/ld/testsuite/ld-mips-elf/unaligned-lwpc-0.d new file mode 100644 index 0000000000..89c56c8a11 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-lwpc-0.d @@ -0,0 +1,12 @@ +#name: MIPS LWPC from unaligned symbol 0 +#source: unaligned-lwpc-0.s +#source: unaligned-syms.s +#as: -EB -32 -mips32r6 +#ld: -EB -Ttext 0x1c000000 -Tdata 0x1c080000 -e 0x1c000000 +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format .*mips.* + +Disassembly of section \.text: +[0-9a-f]+ <[^>]*> ec4a0008 lwpc v0,1c080020 + \.\.\. diff --git a/ld/testsuite/ld-mips-elf/unaligned-lwpc-0.s b/ld/testsuite/ld-mips-elf/unaligned-lwpc-0.s new file mode 100644 index 0000000000..5d997f52ea --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-lwpc-0.s @@ -0,0 +1,11 @@ + .text + .align 4 + .globl foo + .ent foo +foo: + lwpc $2, bar0 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 diff --git a/ld/testsuite/ld-mips-elf/unaligned-lwpc-1.d b/ld/testsuite/ld-mips-elf/unaligned-lwpc-1.d new file mode 100644 index 0000000000..f4cf317422 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-lwpc-1.d @@ -0,0 +1,8 @@ +#name: MIPS LWPC from unaligned symbol 1 +#source: unaligned-lwpc-1.s +#source: unaligned-syms.s +#as: -EB -32 -mips32r6 +#ld: -EB -Ttext 0x1c000000 -Tdata 0x1c080000 -e 0x1c000000 +#error: \A[^\n]*: In function `foo':\n +#error: \(\.text\+0x[0-9a-f]+\): PC-relative load from unaligned address\n +#error: [^\n]*: final link failed: Bad value\Z diff --git a/ld/testsuite/ld-mips-elf/unaligned-lwpc-1.s b/ld/testsuite/ld-mips-elf/unaligned-lwpc-1.s new file mode 100644 index 0000000000..595ebb9bed --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-lwpc-1.s @@ -0,0 +1,11 @@ + .text + .align 4 + .globl foo + .ent foo +foo: + lwpc $2, bar1 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 diff --git a/ld/testsuite/ld-mips-elf/unaligned-lwpc-2.d b/ld/testsuite/ld-mips-elf/unaligned-lwpc-2.d new file mode 100644 index 0000000000..287582827c --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-lwpc-2.d @@ -0,0 +1,8 @@ +#name: MIPS LWPC from unaligned symbol 2 +#source: unaligned-lwpc-2.s +#source: unaligned-syms.s +#as: -EB -32 -mips32r6 +#ld: -EB -Ttext 0x1c000000 -Tdata 0x1c080000 -e 0x1c000000 +#error: \A[^\n]*: In function `foo':\n +#error: \(\.text\+0x[0-9a-f]+\): PC-relative load from unaligned address\n +#error: [^\n]*: final link failed: Bad value\Z diff --git a/ld/testsuite/ld-mips-elf/unaligned-lwpc-2.s b/ld/testsuite/ld-mips-elf/unaligned-lwpc-2.s new file mode 100644 index 0000000000..1debe4d164 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-lwpc-2.s @@ -0,0 +1,11 @@ + .text + .align 4 + .globl foo + .ent foo +foo: + lwpc $2, bar2 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 diff --git a/ld/testsuite/ld-mips-elf/unaligned-lwpc-3.d b/ld/testsuite/ld-mips-elf/unaligned-lwpc-3.d new file mode 100644 index 0000000000..bda99c3d34 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-lwpc-3.d @@ -0,0 +1,12 @@ +#name: MIPS LWPC from unaligned symbol 3 +#source: unaligned-lwpc-3.s +#source: unaligned-syms.s +#as: -EB -32 -mips32r6 +#ld: -EB -Ttext 0x1c000000 -Tdata 0x1c080000 -e 0x1c000000 +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format .*mips.* + +Disassembly of section \.text: +[0-9a-f]+ <[^>]*> ec4a0009 lwpc v0,1c080024 + \.\.\. diff --git a/ld/testsuite/ld-mips-elf/unaligned-lwpc-3.s b/ld/testsuite/ld-mips-elf/unaligned-lwpc-3.s new file mode 100644 index 0000000000..667d7d987e --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-lwpc-3.s @@ -0,0 +1,11 @@ + .text + .align 4 + .globl foo + .ent foo +foo: + lwpc $2, bar4 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 diff --git a/ld/testsuite/ld-mips-elf/unaligned-syms.s b/ld/testsuite/ld-mips-elf/unaligned-syms.s new file mode 100644 index 0000000000..e865a13123 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/unaligned-syms.s @@ -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 + + .data + .align 4 + .space 32 + sym 16