This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[committed] MIPS/BFD: Correct microMIPS cross-mode BAL to JALX relaxation


Fix a bug in commit a6ebf6169a1b ("MIPS: Convert cross-mode BAL to 
JALX") and in BFD linker relaxation correct the microMIPS interpretation 
of the branch offset, which is supposed to be shifted by 1 bit, rather 
than 2 as in the regular MIPS case.

	bfd/
	* elfxx-mips.c (mips_elf_perform_relocation): Correct microMIPS
	branch offset interpretation.

	gas/
	* testsuite/gas/mips/branch-addend-micromips.d: New test.
	* testsuite/gas/mips/branch-addend-micromips-n32.d: New test.
	* testsuite/gas/mips/branch-addend-micromips-n64.d: New test.
	* testsuite/gas/mips/branch-addend-micromips.s: New test source.
	* testsuite/gas/mips/mips.exp: Run the new tests.

	ld/
	* testsuite/ld-mips-elf/bal-jalx-addend-micromips.d: New test.
	* testsuite/ld-mips-elf/bal-jalx-addend-micromips-n32.d: New
	test.
	* testsuite/ld-mips-elf/bal-jalx-addend-micromips-n64.d: New
	test.
	* testsuite/ld-mips-elf/bal-jalx-local-micromips.d: New test.
	* testsuite/ld-mips-elf/bal-jalx-local-micromips-n32.d: New
	test.
	* testsuite/ld-mips-elf/bal-jalx-local-micromips-n64.d: New
	test.
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips.d: New test.
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips-n32.d: New test.
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips-n64.d: New test.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips.d: New
	test.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips-n32.d: New
	test.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips-n64.d: New
	test.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
---
 Fixed in master, and backported to 2.29 and 2.28.

  Maciej

---
 bfd/elfxx-mips.c                                             |    6 +-
 gas/testsuite/gas/mips/branch-addend-micromips-n32.d         |   23 ++++++++
 gas/testsuite/gas/mips/branch-addend-micromips-n64.d         |   27 +++++++++
 gas/testsuite/gas/mips/branch-addend-micromips.d             |   22 +++++++
 gas/testsuite/gas/mips/branch-addend-micromips.s             |   31 +++++++++++
 gas/testsuite/gas/mips/mips.exp                              |    3 +
 ld/testsuite/ld-mips-elf/bal-jalx-addend-micromips-n32.d     |    6 ++
 ld/testsuite/ld-mips-elf/bal-jalx-addend-micromips-n64.d     |    6 ++
 ld/testsuite/ld-mips-elf/bal-jalx-addend-micromips.d         |   22 +++++++
 ld/testsuite/ld-mips-elf/bal-jalx-local-micromips-n32.d      |    6 ++
 ld/testsuite/ld-mips-elf/bal-jalx-local-micromips-n64.d      |    6 ++
 ld/testsuite/ld-mips-elf/bal-jalx-local-micromips.d          |   20 +++++++
 ld/testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips-n32.d |    6 ++
 ld/testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips-n64.d |    6 ++
 ld/testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips.d     |   22 +++++++
 ld/testsuite/ld-mips-elf/bal-jalx-pic-micromips-n32.d        |    6 ++
 ld/testsuite/ld-mips-elf/bal-jalx-pic-micromips-n64.d        |    6 ++
 ld/testsuite/ld-mips-elf/bal-jalx-pic-micromips.d            |    6 ++
 ld/testsuite/ld-mips-elf/mips-elf.exp                        |   21 +++++++
 19 files changed, 250 insertions(+), 1 deletion(-)

binutils-umips-ld-bal-jalx.diff
Index: binutils/bfd/elfxx-mips.c
===================================================================
--- binutils.orig/bfd/elfxx-mips.c	2017-08-30 12:32:13.138166074 +0100
+++ binutils/bfd/elfxx-mips.c	2017-08-30 12:53:49.001709500 +0100
@@ -6414,6 +6414,7 @@ mips_elf_perform_relocation (struct bfd_
       bfd_boolean ok = FALSE;
       bfd_vma opcode = x >> 16;
       bfd_vma jalx_opcode = 0;
+      bfd_vma sign_bit = 0;
       bfd_vma addr;
       bfd_vma dest;
 
@@ -6421,12 +6422,14 @@ mips_elf_perform_relocation (struct bfd_
 	{
 	  ok = opcode == 0x4060;
 	  jalx_opcode = 0x3c;
+	  sign_bit = 0x10000;
 	  value <<= 1;
 	}
       else if (r_type == R_MIPS_PC16 || r_type == R_MIPS_GNU_REL16_S2)
 	{
 	  ok = opcode == 0x411;
 	  jalx_opcode = 0x1d;
+	  sign_bit = 0x20000;
 	  value <<= 2;
 	}
 
@@ -6436,7 +6439,8 @@ mips_elf_perform_relocation (struct bfd_
 		  + input_section->output_offset
 		  + relocation->r_offset
 		  + 4);
-	  dest = addr + (((value & 0x3ffff) ^ 0x20000) - 0x20000);
+	  dest = (addr
+		  + (((value & ((sign_bit << 1) - 1)) ^ sign_bit) - sign_bit));
 
 	  if ((addr >> 28) << 28 != (dest >> 28) << 28)
 	    {
Index: binutils/gas/testsuite/gas/mips/branch-addend-micromips-n32.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/branch-addend-micromips-n32.d	2017-08-30 12:53:49.075640841 +0100
@@ -0,0 +1,23 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: microMIPS BAL addend encoding (n32)
+#as: -n32 -march=from-abi
+#source: branch-addend-micromips.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+	\.\.\.
+[0-9a-f]+ <[^>]*> 00000027 	nor	zero,zero,zero
+[0-9a-f]+ <[^>]*> 03e00009 	jalr	zero,ra
+[0-9a-f]+ <[^>]*> 00000027 	nor	zero,zero,zero
+[0-9a-f]+ <[^>]*> 00000000 	nop
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 4060 0000 	bal	00001018 <bar\+0x8>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	foo\+0xfffc
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 4060 0000 	bal	00001020 <bar\+0x10>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	bar\+0xfffc
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 001f 0f3c 	jr	ra
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+	\.\.\.
Index: binutils/gas/testsuite/gas/mips/branch-addend-micromips-n64.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/branch-addend-micromips-n64.d	2017-08-30 12:53:49.078791629 +0100
@@ -0,0 +1,27 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: microMIPS BAL addend encoding (n64)
+#as: -64 -march=from-abi
+#source: branch-addend-micromips.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+	\.\.\.
+[0-9a-f]+ <[^>]*> 00000027 	nor	zero,zero,zero
+[0-9a-f]+ <[^>]*> 03e00009 	jalr	zero,ra
+[0-9a-f]+ <[^>]*> 00000027 	nor	zero,zero,zero
+[0-9a-f]+ <[^>]*> 00000000 	nop
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 4060 0000 	bal	0000000000001018 <bar\+0x8>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	foo\+0xfffc
+[ 	]*[0-9a-f]+: R_MIPS_NONE	\*ABS\*\+0xfffc
+[ 	]*[0-9a-f]+: R_MIPS_NONE	\*ABS\*\+0xfffc
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 4060 0000 	bal	0000000000001020 <bar\+0x10>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	bar\+0xfffc
+[ 	]*[0-9a-f]+: R_MIPS_NONE	\*ABS\*\+0xfffc
+[ 	]*[0-9a-f]+: R_MIPS_NONE	\*ABS\*\+0xfffc
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 001f 0f3c 	jr	ra
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+	\.\.\.
Index: binutils/gas/testsuite/gas/mips/branch-addend-micromips.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/branch-addend-micromips.d	2017-08-30 12:53:49.098348408 +0100
@@ -0,0 +1,22 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: microMIPS BAL addend encoding
+#as: -32
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+	\.\.\.
+[0-9a-f]+ <[^>]*> 00000027 	nor	zero,zero,zero
+[0-9a-f]+ <[^>]*> 03e00009 	jalr	zero,ra
+[0-9a-f]+ <[^>]*> 00000027 	nor	zero,zero,zero
+[0-9a-f]+ <[^>]*> 00000000 	nop
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 4060 7ffe 	bal	00011014 <bar\+0x10004>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	foo
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 4060 7ffe 	bal	0001101c <bar\+0x1000c>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	bar
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 001f 0f3c 	jr	ra
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+	\.\.\.
Index: binutils/gas/testsuite/gas/mips/branch-addend-micromips.s
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/branch-addend-micromips.s	2017-08-30 12:53:49.111438439 +0100
@@ -0,0 +1,31 @@
+	.text
+	.set	noreorder
+	.space	0x1000
+
+	.align	4
+	.set	nomicromips
+	.globl	foo
+	.ent	foo
+foo:
+	nor	$0, $0
+	jalr	$0, $ra
+	 nor	$0, $0
+	.end	foo
+
+	.align	4
+	.set	micromips
+	.globl	bar
+	.ent	bar
+bar:
+	nor	$0, $0
+	bal	foo + 0x10000
+	 nor	$0, $0
+	bal	bar + 0x10000
+	 nor	$0, $0
+	jalr	$0, $ra
+	 nor	$0, $0
+	.end	bar
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+	.align	4, 0
+	.space	16
Index: binutils/gas/testsuite/gas/mips/mips.exp
===================================================================
--- binutils.orig/gas/testsuite/gas/mips/mips.exp	2017-08-25 18:34:56.000000000 +0100
+++ binutils/gas/testsuite/gas/mips/mips.exp	2017-08-30 14:12:09.006828518 +0100
@@ -678,9 +678,12 @@ if { [istarget mips*-*-vxworks*] } {
 	run_dump_test "branch-local-n64-7"
     }
     run_dump_test "branch-addend"
+    run_dump_test "branch-addend-micromips"
     if $has_newabi {
 	run_dump_test "branch-addend-n32"
+	run_dump_test "branch-addend-micromips-n32"
 	run_dump_test "branch-addend-n64"
+	run_dump_test "branch-addend-micromips-n64"
     }
     run_dump_test "branch-absolute"
     run_dump_test "branch-absolute-addend"
Index: binutils/ld/testsuite/ld-mips-elf/bal-jalx-addend-micromips-n32.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/bal-jalx-addend-micromips-n32.d	2017-08-30 12:53:49.173877560 +0100
@@ -0,0 +1,6 @@
+#name: microMIPS BAL/JALX addend calculation (n32)
+#source: ../../../gas/testsuite/gas/mips/branch-addend-micromips.s
+#as: -EB -n32 -march=from-abi
+#ld: -EB -Ttext 0x1c000000 -e 0x1c000000
+#objdump: -dr --prefix-addresses --show-raw-insn
+#dump: bal-jalx-addend-micromips.d
Index: binutils/ld/testsuite/ld-mips-elf/bal-jalx-addend-micromips-n64.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/bal-jalx-addend-micromips-n64.d	2017-08-30 12:53:49.180937633 +0100
@@ -0,0 +1,6 @@
+#name: microMIPS BAL/JALX addend calculation (n64)
+#source: ../../../gas/testsuite/gas/mips/branch-addend-micromips.s
+#as: -EB -64 -march=from-abi
+#ld: -EB -Ttext 0x1c000000 -e 0x1c000000
+#objdump: -dr --prefix-addresses --show-raw-insn
+#dump: bal-jalx-addend-micromips.d
Index: binutils/ld/testsuite/ld-mips-elf/bal-jalx-addend-micromips.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/bal-jalx-addend-micromips.d	2017-08-30 12:53:49.194011206 +0100
@@ -0,0 +1,22 @@
+#name: microMIPS BAL/JALX addend calculation
+#source: ../../../gas/testsuite/gas/mips/branch-addend-micromips.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]+ <[^>]*> 00000027 	nor	zero,zero,zero
+[0-9a-f]+ <[^>]*> 03e00009 	jalr	zero,ra
+[0-9a-f]+ <[^>]*> 00000027 	nor	zero,zero,zero
+[0-9a-f]+ <[^>]*> 00000000 	nop
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> f300 4400 	jalx	0*1c011000 <.*>
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 4060 7ff8 	bal	0*1c011010 <.*>
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 001f 0f3c 	jr	ra
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+	\.\.\.
Index: binutils/ld/testsuite/ld-mips-elf/bal-jalx-local-micromips-n32.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/bal-jalx-local-micromips-n32.d	2017-08-30 12:53:49.210157784 +0100
@@ -0,0 +1,6 @@
+#name: microMIPS BAL to JALX conversion for local symbol (n32)
+#source: ../../../gas/testsuite/gas/mips/branch-local-7.s
+#as: -EB -n32 -march=from-abi
+#ld: -EB -Ttext 0x1c000000 -e 0x1c000000
+#objdump: -dr --prefix-addresses --show-raw-insn
+#dump: bal-jalx-local-micromips.d
Index: binutils/ld/testsuite/ld-mips-elf/bal-jalx-local-micromips-n64.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/bal-jalx-local-micromips-n64.d	2017-08-30 12:53:49.229286707 +0100
@@ -0,0 +1,6 @@
+#name: microMIPS BAL to JALX conversion for local symbol (n64)
+#source: ../../../gas/testsuite/gas/mips/branch-local-7.s
+#as: -EB -64 -march=from-abi
+#ld: -EB -Ttext 0x1c000000 -e 0x1c000000
+#objdump: -dr --prefix-addresses --show-raw-insn
+#dump: bal-jalx-local-micromips.d
Index: binutils/ld/testsuite/ld-mips-elf/bal-jalx-local-micromips.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/bal-jalx-local-micromips.d	2017-08-30 12:53:49.246402459 +0100
@@ -0,0 +1,20 @@
+#name: microMIPS BAL to JALX conversion for local symbol
+#source: ../../../gas/testsuite/gas/mips/branch-local-7.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]+ <[^>]*> 00000027 	nor	zero,zero,zero
+[0-9a-f]+ <[^>]*> 03e00009 	jalr	zero,ra
+[0-9a-f]+ <[^>]*> 00000027 	nor	zero,zero,zero
+[0-9a-f]+ <[^>]*> 00000000 	nop
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> f300 0400 	jalx	0*1c001000 <foo>
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 001f 0f3c 	jr	ra
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+	\.\.\.
Index: binutils/ld/testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips-n32.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips-n32.d	2017-08-30 12:53:49.249423580 +0100
@@ -0,0 +1,6 @@
+#name: microMIPS BAL/JALX in PIC mode (ignore branch ISA, n32)
+#source: ../../../gas/testsuite/gas/mips/branch-addend-micromips.s
+#as: -EB -n32 -march=from-abi
+#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 -shared --ignore-branch-isa
+#objdump: -dr --prefix-addresses --show-raw-insn
+#dump: bal-jalx-pic-ignore-micromips.d
Index: binutils/ld/testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips-n64.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips-n64.d	2017-08-30 12:53:49.261489639 +0100
@@ -0,0 +1,6 @@
+#name: microMIPS BAL/JALX in PIC mode (ignore branch ISA, n64)
+#source: ../../../gas/testsuite/gas/mips/branch-addend-micromips.s
+#as: -EB -64 -march=from-abi
+#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 -shared --ignore-branch-isa
+#objdump: -dr --prefix-addresses --show-raw-insn
+#dump: bal-jalx-pic-ignore-micromips.d
Index: binutils/ld/testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips.d	2017-08-30 12:53:49.272679427 +0100
@@ -0,0 +1,22 @@
+#name: microMIPS BAL/JALX in PIC mode (ignore branch ISA)
+#source: ../../../gas/testsuite/gas/mips/branch-addend-micromips.s
+#as: -EB -32
+#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 -shared --ignore-branch-isa
+#objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+	\.\.\.
+[0-9a-f]+ <[^>]*> 00000027 	nor	zero,zero,zero
+[0-9a-f]+ <[^>]*> 03e00009 	jalr	zero,ra
+[0-9a-f]+ <[^>]*> 00000027 	nor	zero,zero,zero
+[0-9a-f]+ <[^>]*> 00000000 	nop
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 4060 7ff4 	bal	0*1c011000 <.*>
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 4060 7ff8 	bal	0*1c011010 <.*>
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+[0-9a-f]+ <[^>]*> 001f 0f3c 	jr	ra
+[0-9a-f]+ <[^>]*> 0000 02d0 	not	zero,zero
+	\.\.\.
Index: binutils/ld/testsuite/ld-mips-elf/bal-jalx-pic-micromips-n32.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/bal-jalx-pic-micromips-n32.d	2017-08-30 12:53:49.301981771 +0100
@@ -0,0 +1,6 @@
+#name: microMIPS BAL/JALX in PIC mode (n32)
+#source: ../../../gas/testsuite/gas/mips/branch-addend-micromips.s
+#as: -EB -n32 -march=from-abi
+#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 -shared
+#error: \A[^\n]*: In function `bar':\n
+#error:   \(\.text\+0x1014\): Unsupported branch between ISA modes\Z
Index: binutils/ld/testsuite/ld-mips-elf/bal-jalx-pic-micromips-n64.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/bal-jalx-pic-micromips-n64.d	2017-08-30 12:53:49.308123908 +0100
@@ -0,0 +1,6 @@
+#name: microMIPS BAL/JALX in PIC mode (n64)
+#source: ../../../gas/testsuite/gas/mips/branch-addend-micromips.s
+#as: -EB -64 -march=from-abi
+#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 -shared
+#error: \A[^\n]*: In function `bar':\n
+#error:   \(\.text\+0x1014\): Unsupported branch between ISA modes\Z
Index: binutils/ld/testsuite/ld-mips-elf/bal-jalx-pic-micromips.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/bal-jalx-pic-micromips.d	2017-08-30 12:53:49.330358086 +0100
@@ -0,0 +1,6 @@
+#name: microMIPS BAL/JALX in PIC mode
+#source: ../../../gas/testsuite/gas/mips/branch-addend-micromips.s
+#as: -EB -32
+#ld: -EB -Ttext 0x1c000000 -e 0x1c000000 -shared
+#error: \A[^\n]*: In function `bar':\n
+#error:   \(\.text\+0x1014\): Unsupported branch between ISA modes\Z
Index: binutils/ld/testsuite/ld-mips-elf/mips-elf.exp
===================================================================
--- binutils.orig/ld/testsuite/ld-mips-elf/mips-elf.exp	2017-08-30 12:32:13.189718024 +0100
+++ binutils/ld/testsuite/ld-mips-elf/mips-elf.exp	2017-08-30 12:53:49.340467538 +0100
@@ -251,22 +251,43 @@ if { $linux_gnu } {
 run_dump_test "jalx-addend" [list [list ld $abi_ldflags(o32)]]
 run_dump_test "jalx-local" [list [list ld $abi_ldflags(o32)]]
 run_dump_test "bal-jalx-addend" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "bal-jalx-addend-micromips" [list [list ld $abi_ldflags(o32)]]
 run_dump_test "bal-jalx-local" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "bal-jalx-local-micromips" [list [list ld $abi_ldflags(o32)]]
 run_dump_test "bal-jalx-pic" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "bal-jalx-pic-micromips" [list [list ld $abi_ldflags(o32)]]
 run_dump_test "bal-jalx-pic-ignore" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "bal-jalx-pic-ignore-micromips" \
+					[list [list ld $abi_ldflags(o32)]]
 if $has_newabi {
     run_dump_test "jalx-addend-n32" [list [list ld $abi_ldflags(n32)]]
     run_dump_test "jalx-local-n32" [list [list ld $abi_ldflags(n32)]]
     run_dump_test "bal-jalx-addend-n32" [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "bal-jalx-addend-micromips-n32" \
+					[list [list ld $abi_ldflags(n32)]]
     run_dump_test "bal-jalx-local-n32" [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "bal-jalx-local-micromips-n32" \
+					[list [list ld $abi_ldflags(n32)]]
     run_dump_test "bal-jalx-pic-n32" [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "bal-jalx-pic-micromips-n32" \
+					[list [list ld $abi_ldflags(n32)]]
     run_dump_test "bal-jalx-pic-ignore-n32" [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "bal-jalx-pic-ignore-micromips-n32" \
+					[list [list ld $abi_ldflags(n32)]]
     run_dump_test "jalx-addend-n64" [list [list ld $abi_ldflags(n64)]]
     run_dump_test "jalx-local-n64" [list [list ld $abi_ldflags(n64)]]
     run_dump_test "bal-jalx-addend-n64" [list [list ld $abi_ldflags(n64)]]
+    run_dump_test "bal-jalx-addend-micromips-n64" \
+					[list [list ld $abi_ldflags(n64)]]
     run_dump_test "bal-jalx-local-n64" [list [list ld $abi_ldflags(n64)]]
+    run_dump_test "bal-jalx-local-micromips-n64" \
+					[list [list ld $abi_ldflags(n64)]]
     run_dump_test "bal-jalx-pic-n64" [list [list ld $abi_ldflags(n64)]]
+    run_dump_test "bal-jalx-pic-micromips-n64" \
+					[list [list ld $abi_ldflags(n64)]]
     run_dump_test "bal-jalx-pic-ignore-n64" [list [list ld $abi_ldflags(n64)]]
+    run_dump_test "bal-jalx-pic-ignore-micromips-n64" \
+					[list [list ld $abi_ldflags(n64)]]
 }
 
 run_dump_test "unaligned-jalx-0" [list [list ld $abi_ldflags(o32)]]


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]