+2016-04-13 Maciej W. Rozycki <macro@imgtec.com>
+ Andrew Bennett <andrew.bennett@imgtec.com>
+
+ * config/tc-mips.c (relaxed_branch_length): Use the long
+ sequence where the target is a weak symbol.
+ (relaxed_micromips_32bit_branch_length): Likewise.
+ (relaxed_micromips_16bit_branch_length): Likewise.
+ * testsuite/gas/mips/branch-weak-1.d: New test.
+ * testsuite/gas/mips/branch-weak-2.d: New test.
+ * testsuite/gas/mips/branch-weak-3.d: New test.
+ * testsuite/gas/mips/branch-weak-4.d: New test.
+ * testsuite/gas/mips/branch-weak-5.d: New test.
+ * testsuite/gas/mips/branch-weak.l: New stderr output.
+ * testsuite/gas/mips/branch-weak.s: New test source.
+ * testsuite/gas/mips/mips.exp: Run the new tests.
+
2016-04-13 Maciej W. Rozycki <macro@imgtec.com>
* config/tc-mips.c (relaxed_branch_length): Use the long
if (fragp
&& S_IS_DEFINED (fragp->fr_symbol)
+ && !S_IS_WEAK (fragp->fr_symbol)
&& sec == S_GET_SEGMENT (fragp->fr_symbol))
{
addressT addr;
if (fragp
&& S_IS_DEFINED (fragp->fr_symbol)
+ && !S_IS_WEAK (fragp->fr_symbol)
&& sec == S_GET_SEGMENT (fragp->fr_symbol))
{
addressT addr;
if (fragp
&& S_IS_DEFINED (fragp->fr_symbol)
+ && !S_IS_WEAK (fragp->fr_symbol)
&& sec == S_GET_SEGMENT (fragp->fr_symbol))
{
addressT addr;
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS branch to a weak symbol
+#as: -32 --defsym align=12
+#source: branch-weak.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]+ <[^>]*> 00000000 nop
+ \.\.\.
+[0-9a-f]+ <[^>]*> 03e00008 jr ra
+[0-9a-f]+ <[^>]*> 00000000 nop
+ \.\.\.
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: microMIPS branch to a weak symbol
+#as: -32 -mmicromips --defsym align=12
+#source: branch-weak.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 9400 fffe b 00000000 <foo>
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar
+[0-9a-f]+ <[^>]*> 0c00 nop
+ \.\.\.
+[0-9a-f]+ <[^>]*> 459f jr ra
+[0-9a-f]+ <[^>]*> 0c00 nop
+ \.\.\.
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS relaxed branch to a weak symbol
+#as: -32 --relax-branch --defsym align=12
+#source: branch-weak.s
+#stderr: branch-weak.l
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 08000000 j 00000000 <foo>
+[ ]*[0-9a-f]+: R_MIPS_26 bar
+[0-9a-f]+ <[^>]*> 00000000 nop
+ \.\.\.
+[0-9a-f]+ <[^>]*> 03e00008 jr ra
+[0-9a-f]+ <[^>]*> 00000000 nop
+ \.\.\.
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: microMIPS relaxed branch to a weak symbol
+#as: -32 -mmicromips --relax-branch --defsym align=12
+#source: branch-weak.s
+#stderr: branch-weak.l
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> d400 0000 j 00000000 <foo>
+[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 bar
+[0-9a-f]+ <[^>]*> 0c00 nop
+ \.\.\.
+[0-9a-f]+ <[^>]*> 459f jr ra
+[0-9a-f]+ <[^>]*> 0c00 nop
+ \.\.\.
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: microMIPS short branch to a weak symbol
+#as: -32 -mmicromips --defsym align=4
+#source: branch-weak.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 9400 fffe b 00000000 <foo>
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar
+[0-9a-f]+ <[^>]*> 0c00 nop
+ \.\.\.
+[0-9a-f]+ <[^>]*> 459f jr ra
+[0-9a-f]+ <[^>]*> 0c00 nop
+ \.\.\.
--- /dev/null
+.*: Assembler messages:
+.*:6: Warning: relaxed out-of-range branch into a jump
--- /dev/null
+ .text
+ .align 4, 0
+ .globl foo
+ .ent foo
+foo:
+ b bar
+ .end foo
+
+ .align align, 0
+ .globl bar
+ .weak bar
+ .ent bar
+bar:
+ jr $ra
+ .end bar
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
run_dump_test "branch-extern-2"
run_dump_test "branch-extern-3"
run_dump_test "branch-extern-4"
+ run_dump_test "branch-weak-1"
+ run_dump_test "branch-weak-2"
+ run_dump_test "branch-weak-3"
+ run_dump_test "branch-weak-4"
+ run_dump_test "branch-weak-5"
run_dump_test "compact-eh-eb-1"
run_dump_test "compact-eh-eb-2"