[binutils-gdb] MIPS/GAS: Use the module level ISA setting for R6 relaxation
Maciej W.Rozycki
macro@sourceware.org
Tue Jun 21 17:07:00 GMT 2016
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=912815f079a8f3c40c0968ba5140619de079e199
commit 912815f079a8f3c40c0968ba5140619de079e199
Author: Maciej W. Rozycki <macro@imgtec.com>
Date: Tue Jun 21 16:01:27 2016 +0100
MIPS/GAS: Use the module level ISA setting for R6 relaxation
Use the module level ISA setting rather than the last ISA selected with
a `.set' directive in the source file in determination as to whether to
keep PC-relative relocations and then with the original symbol referred,
for the purpose of R6 linker relaxation.
This is so that with e.g. code like this:
b foo
.set mips32r2
...
it's the command line options or any `.module' directive that decides
how to encode any relocation for `foo' rather than the presence of `.set
mips32r2'.
gas/
* config/tc-mips.c (mips_force_relocation): Use `file_mips_opts'
rather than `mips_opts' for the R6 ISA check.
(mips_fix_adjustable): Likewise.
* testsuite/gas/mips/pcrel-reloc-1.d: New test.
* testsuite/gas/mips/pcrel-reloc-1-r6.d: New test.
* testsuite/gas/mips/pcrel-reloc-2.d: New test.
* testsuite/gas/mips/pcrel-reloc-2-r6.d: New test.
* testsuite/gas/mips/pcrel-reloc-3.d: New test.
* testsuite/gas/mips/pcrel-reloc-3-r6.d: New test.
* testsuite/gas/mips/pcrel-reloc-1.s: New test source.
* testsuite/gas/mips/mips.exp: Run the new tests.
Diff:
---
gas/ChangeLog | 14 ++++++++++++++
gas/config/tc-mips.c | 4 ++--
gas/testsuite/gas/mips/mips.exp | 7 +++++++
gas/testsuite/gas/mips/pcrel-reloc-1-r6.d | 21 +++++++++++++++++++++
gas/testsuite/gas/mips/pcrel-reloc-1.d | 17 +++++++++++++++++
gas/testsuite/gas/mips/pcrel-reloc-1.s | 31 +++++++++++++++++++++++++++++++
gas/testsuite/gas/mips/pcrel-reloc-2-r6.d | 5 +++++
gas/testsuite/gas/mips/pcrel-reloc-2.d | 5 +++++
gas/testsuite/gas/mips/pcrel-reloc-3-r6.d | 5 +++++
gas/testsuite/gas/mips/pcrel-reloc-3.d | 5 +++++
10 files changed, 112 insertions(+), 2 deletions(-)
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 4672d15..1e88b21 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,17 @@
+2016-06-21 Maciej W. Rozycki <macro@imgtec.com>
+
+ * config/tc-mips.c (mips_force_relocation): Use `file_mips_opts'
+ rather than `mips_opts' for the R6 ISA check.
+ (mips_fix_adjustable): Likewise.
+ * testsuite/gas/mips/pcrel-reloc-1.d: New test.
+ * testsuite/gas/mips/pcrel-reloc-1-r6.d: New test.
+ * testsuite/gas/mips/pcrel-reloc-2.d: New test.
+ * testsuite/gas/mips/pcrel-reloc-2-r6.d: New test.
+ * testsuite/gas/mips/pcrel-reloc-3.d: New test.
+ * testsuite/gas/mips/pcrel-reloc-3-r6.d: New test.
+ * testsuite/gas/mips/pcrel-reloc-1.s: New test source.
+ * testsuite/gas/mips/mips.exp: Run the new tests.
+
2016-06-21 Graham Markall <graham.markall@embecosm.com>
* config/tc-arc.c (check_cpu_feature, md_parse_option):
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index 1a472a3..ed64b68 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -14768,7 +14768,7 @@ mips_force_relocation (fixS *fixp)
return 1;
/* We want all PC-relative relocations to be kept for R6 relaxation. */
- if (ISA_IS_R6 (mips_opts.isa)
+ if (ISA_IS_R6 (file_mips_opts.isa)
&& (fixp->fx_r_type == BFD_RELOC_16_PCREL_S2
|| fixp->fx_r_type == BFD_RELOC_MIPS_21_PCREL_S2
|| fixp->fx_r_type == BFD_RELOC_MIPS_26_PCREL_S2
@@ -17137,7 +17137,7 @@ mips_fix_adjustable (fixS *fixp)
Also, PC relative relocations for MIPS R6 need to be symbol rather than
section relative to allow linker relaxations to be performed later on. */
if (limited_pcrel_reloc_p (fixp->fx_r_type)
- && (HAVE_IN_PLACE_ADDENDS || ISA_IS_R6 (mips_opts.isa)))
+ && (HAVE_IN_PLACE_ADDENDS || ISA_IS_R6 (file_mips_opts.isa)))
return 0;
/* R_MIPS16_26 relocations against non-MIPS16 functions might resolve
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index 4071434..12ac64e 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -1316,6 +1316,13 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test "pcrel-4-64"
}
+ run_dump_test "pcrel-reloc-1"
+ run_dump_test "pcrel-reloc-1-r6"
+ run_dump_test "pcrel-reloc-2"
+ run_dump_test "pcrel-reloc-2-r6"
+ run_dump_test "pcrel-reloc-3"
+ run_dump_test "pcrel-reloc-3-r6"
+
run_dump_test_arches "attr-gnu-4-0" "-32" \
[mips_arch_list_matching mips1]
run_dump_test_arches "attr-gnu-4-0" "-64" \
diff --git a/gas/testsuite/gas/mips/pcrel-reloc-1-r6.d b/gas/testsuite/gas/mips/pcrel-reloc-1-r6.d
new file mode 100644
index 0000000..26348f4
--- /dev/null
+++ b/gas/testsuite/gas/mips/pcrel-reloc-1-r6.d
@@ -0,0 +1,21 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS R6 local PC-relative relocations 1
+#as: -32 -mips32r6
+#source: pcrel-reloc-1.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 1000ffff b 00000000 <foo>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
+[0-9a-f]+ <[^>]*> 1000ffff b 00000004 <foo\+0x4>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
+[0-9a-f]+ <[^>]*> 1000ffff b 00000008 <foo\+0x8>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
+[0-9a-f]+ <[^>]*> 1000ffff b 0000000c <foo\+0xc>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
+[0-9a-f]+ <[^>]*> 00000000 nop
+ \.\.\.
+[0-9a-f]+ <[^>]*> 03e00009 jr ra
+[0-9a-f]+ <[^>]*> 00000000 nop
+ \.\.\.
diff --git a/gas/testsuite/gas/mips/pcrel-reloc-1.d b/gas/testsuite/gas/mips/pcrel-reloc-1.d
new file mode 100644
index 0000000..4d4d21f
--- /dev/null
+++ b/gas/testsuite/gas/mips/pcrel-reloc-1.d
@@ -0,0 +1,17 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS local PC-relative relocations 1
+#as: -32
+#source: pcrel-reloc-1.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 10000007 b 00000020 <bar>
+[0-9a-f]+ <[^>]*> 10000006 b 00000020 <bar>
+[0-9a-f]+ <[^>]*> 10000005 b 00000020 <bar>
+[0-9a-f]+ <[^>]*> 10000004 b 00000020 <bar>
+[0-9a-f]+ <[^>]*> 00000000 nop
+ \.\.\.
+[0-9a-f]+ <[^>]*> 03e00009 jalr zero,ra
+[0-9a-f]+ <[^>]*> 00000000 nop
+ \.\.\.
diff --git a/gas/testsuite/gas/mips/pcrel-reloc-1.s b/gas/testsuite/gas/mips/pcrel-reloc-1.s
new file mode 100644
index 0000000..7ca8f30
--- /dev/null
+++ b/gas/testsuite/gas/mips/pcrel-reloc-1.s
@@ -0,0 +1,31 @@
+ .text
+ .align 4, 0
+ .globl foo
+ .ent foo
+ .set noreorder
+foo:
+ b bar
+ b bar
+ b bar
+ b bar
+ .set reorder
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
+
+ .ent bar
+ .ifdef setmips3
+ .set mips3
+ .endif
+ .ifdef setmips64r6
+ .set mips64r6
+ .endif
+bar:
+ jalr $0, $ra
+ .end bar
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 16, 0
+ .space 16
diff --git a/gas/testsuite/gas/mips/pcrel-reloc-2-r6.d b/gas/testsuite/gas/mips/pcrel-reloc-2-r6.d
new file mode 100644
index 0000000..1a56084
--- /dev/null
+++ b/gas/testsuite/gas/mips/pcrel-reloc-2-r6.d
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS R6 local PC-relative relocations 2
+#as: -32 -mips32r6 --defsym setmips3=1
+#source: pcrel-reloc-1.s
+#dump: pcrel-reloc-1-r6.d
diff --git a/gas/testsuite/gas/mips/pcrel-reloc-2.d b/gas/testsuite/gas/mips/pcrel-reloc-2.d
new file mode 100644
index 0000000..25f7f7b
--- /dev/null
+++ b/gas/testsuite/gas/mips/pcrel-reloc-2.d
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS local PC-relative relocations 2
+#as: -32 --defsym setmips3=1
+#source: pcrel-reloc-1.s
+#dump: pcrel-reloc-1.d
diff --git a/gas/testsuite/gas/mips/pcrel-reloc-3-r6.d b/gas/testsuite/gas/mips/pcrel-reloc-3-r6.d
new file mode 100644
index 0000000..9211a0e
--- /dev/null
+++ b/gas/testsuite/gas/mips/pcrel-reloc-3-r6.d
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS R6 local PC-relative relocations 3
+#as: -32 -mips32r6 --defsym setmips64r6=1
+#source: pcrel-reloc-1.s
+#dump: pcrel-reloc-1-r6.d
diff --git a/gas/testsuite/gas/mips/pcrel-reloc-3.d b/gas/testsuite/gas/mips/pcrel-reloc-3.d
new file mode 100644
index 0000000..cb587b9
--- /dev/null
+++ b/gas/testsuite/gas/mips/pcrel-reloc-3.d
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS local PC-relative relocations 3
+#as: -32 --defsym setmips64r6=1
+#source: pcrel-reloc-1.s
+#dump: pcrel-reloc-1.d
More information about the Binutils-cvs
mailing list