diff options
author | Maciej W. Rozycki <macro@imgtec.com> | 2016-05-24 13:54:31 +0100 |
---|---|---|
committer | Maciej W. Rozycki <macro@imgtec.com> | 2016-05-24 14:11:50 +0100 |
commit | 44d3da2338157ad7acfd6facbcfb38ed6ec94fa1 (patch) | |
tree | 58d2bfee6de323bf7aa36f75d3906119d18ade52 /gas/testsuite | |
parent | 4512dafa508c4b148996f2d67222a82dd018cdd3 (diff) | |
download | gdb-44d3da2338157ad7acfd6facbcfb38ed6ec94fa1.zip gdb-44d3da2338157ad7acfd6facbcfb38ed6ec94fa1.tar.gz gdb-44d3da2338157ad7acfd6facbcfb38ed6ec94fa1.tar.bz2 |
MIPS/GAS: Treat local jump relocs the same no matter if REL or RELA
Do not convert jump relocs against local MIPS16 or microMIPS symbols to
refer to a section symbol instead even on RELA targets, as it makes it
impossible for the linker to make a JAL to JALX conversion based on ISA
symbol annotation, breaking regular and compressed MIPS interlinking.
gas/
* config/tc-mips.c (mips_fix_adjustable): Also return 0 for
jump relocations against MIPS16 or microMIPS symbols on RELA
targets.
* testsuite/gas/mips/jalx-local.d: New test.
* testsuite/gas/mips/jalx-local-n32.d: New test.
* testsuite/gas/mips/jalx-local-n64.d: New test.
* testsuite/gas/mips/jalx-local.s: New test source.
* testsuite/gas/mips/mips.exp: Run the new tests.
ld/
* testsuite/ld-mips-elf/jalx-local.d: New test.
* testsuite/ld-mips-elf/jalx-local-n32.d: New test.
* testsuite/ld-mips-elf/jalx-local-n64.d: New test.
* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
Diffstat (limited to 'gas/testsuite')
-rw-r--r-- | gas/testsuite/gas/mips/jalx-local-n32.d | 29 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/jalx-local-n64.d | 37 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/jalx-local.d | 28 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/jalx-local.s | 33 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips.exp | 3 |
5 files changed, 130 insertions, 0 deletions
diff --git a/gas/testsuite/gas/mips/jalx-local-n32.d b/gas/testsuite/gas/mips/jalx-local-n32.d new file mode 100644 index 0000000..5db4ddb --- /dev/null +++ b/gas/testsuite/gas/mips/jalx-local-n32.d @@ -0,0 +1,29 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: MIPS JALX local symbol relocation (n32) +#as: -n32 -march=from-abi +#source: jalx-local.s + +.*: +file format .*mips.* + +Disassembly of section \.text: + \.\.\. +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> f400 0000 jal 00000000 <foo-0x1000> +[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 \.text\+0x1020 +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> f000 0000 jalx 00000000 <foo-0x1000> +[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 \.text\+0x1020 +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 001f 0f3c jr ra +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 0000 0000 nop +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 0c000000 jal 00000000 <foo-0x1000> +[ ]*[0-9a-f]+: R_MIPS_26 foo +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 74000000 jalx 00000000 <foo-0x1000> +[ ]*[0-9a-f]+: R_MIPS_26 foo +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 03e00009 jalr zero,ra +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero + \.\.\. diff --git a/gas/testsuite/gas/mips/jalx-local-n64.d b/gas/testsuite/gas/mips/jalx-local-n64.d new file mode 100644 index 0000000..6e592f8 --- /dev/null +++ b/gas/testsuite/gas/mips/jalx-local-n64.d @@ -0,0 +1,37 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: MIPS JALX local symbol relocation (n64) +#as: -64 -march=from-abi +#source: jalx-local.s + +.*: +file format .*mips.* + +Disassembly of section \.text: + \.\.\. +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> f400 0000 jal 0000000000000000 <foo-0x1000> +[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 \.text\+0x1020 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1020 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1020 +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> f000 0000 jalx 0000000000000000 <foo-0x1000> +[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 \.text\+0x1020 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1020 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1020 +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 001f 0f3c jr ra +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 0000 0000 nop +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 0c000000 jal 0000000000000000 <foo-0x1000> +[ ]*[0-9a-f]+: R_MIPS_26 foo +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\* +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\* +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 74000000 jalx 0000000000000000 <foo-0x1000> +[ ]*[0-9a-f]+: R_MIPS_26 foo +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\* +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\* +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 03e00009 jalr zero,ra +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero + \.\.\. diff --git a/gas/testsuite/gas/mips/jalx-local.d b/gas/testsuite/gas/mips/jalx-local.d new file mode 100644 index 0000000..e380160 --- /dev/null +++ b/gas/testsuite/gas/mips/jalx-local.d @@ -0,0 +1,28 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: MIPS JALX local symbol relocation +#as: -32 + +.*: +file format .*mips.* + +Disassembly of section \.text: + \.\.\. +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> f400 0810 jal 00001020 <bar> +[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 \.text +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> f000 0408 jalx 00001020 <bar> +[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 \.text +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 001f 0f3c jr ra +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 0000 0000 nop +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 0c000000 jal 00000000 <foo-0x1000> +[ ]*[0-9a-f]+: R_MIPS_26 foo +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 74000000 jalx 00000000 <foo-0x1000> +[ ]*[0-9a-f]+: R_MIPS_26 foo +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 03e00009 jalr zero,ra +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero + \.\.\. diff --git a/gas/testsuite/gas/mips/jalx-local.s b/gas/testsuite/gas/mips/jalx-local.s new file mode 100644 index 0000000..fc345f6 --- /dev/null +++ b/gas/testsuite/gas/mips/jalx-local.s @@ -0,0 +1,33 @@ + .text + .set noreorder + .space 0x1000 + + .align 4 + .set micromips + .ent foo +foo: + nor $0, $0 + jal bar + nor $0, $0 + jalx bar + nor $0, $0 + jalr $0, $ra + nor $0, $0 + .end foo + + .align 4 + .set nomicromips + .ent bar +bar: + nor $0, $0 + jal foo + nor $0, $0 + jalx foo + 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 diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index 1b1ac02..f5ed674 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -796,11 +796,14 @@ if { [istarget mips*-*-vxworks*] } { run_dump_test "mips-jalx-2" run_dump_test "jalx-imm" run_dump_test "jalx-addend" + run_dump_test "jalx-local" if $has_newabi { run_dump_test "jalx-imm-n32" run_dump_test "jalx-addend-n32" + run_dump_test "jalx-local-n32" run_dump_test "jalx-imm-n64" run_dump_test "jalx-addend-n64" + run_dump_test "jalx-local-n64" } # Check MIPS16 HI16/LO16 relocations run_dump_test "mips16-hilo" |