Avoid the use of gp-relative addressing when abicalls are in effect.
authorCatherine Moore <clm@codesourcery.com>
Mon, 25 Jan 2016 20:39:40 +0000 (12:39 -0800)
committerCatherine Moore <clm@codesourcery.com>
Mon, 25 Jan 2016 20:39:40 +0000 (12:39 -0800)
gas/ChangeLog
gas/config/tc-mips.c
gas/testsuite/gas/mips/mips.exp
gas/testsuite/gas/mips/sdata-gp.d [new file with mode: 0644]
gas/testsuite/gas/mips/sdata-gp.s [new file with mode: 0644]

index 3cb5f145ee5c2ebd35107319286464f77657bd44..910af9d97da88f976510df10a1007320bbbe24b1 100644 (file)
@@ -1,3 +1,11 @@
+2016-01-25  Catherine Moore  <clm@codesourcery.com>
+
+       * config/mips/tc-mips.c (md_begin): Avoid gp-relative addressing
+       if abicalls are in effect.
+       * testsuite/gas/mips/sdata-gp.s: New test.
+       * testsuite/gas/mips/sdata-gp.d: New expected output
+       * testsuite/gas/mips/mips.exp: Run new test.
+
 2016-01-25  Renlin Li  <renlin.li@arm.com>
 
        * testsuite/gas/arm/thumb2_it_search.d: New.
index d577774d6c6fddd60edede38964df732d62a6999..7b34a4b4f8b9caea8110e343f6d1cfa740116611 100644 (file)
@@ -3464,6 +3464,12 @@ md_begin (void)
        as_bad (_("-G may not be used in position-independent code"));
       g_switch_value = 0;
     }
+  else if (mips_abicalls)
+    {
+      if (g_switch_seen && g_switch_value != 0)
+       as_bad (_("-G may not be used with abicalls"));
+      g_switch_value = 0;
+    }
 
   if (! bfd_set_arch_mach (stdoutput, bfd_arch_mips, file_mips_opts.arch))
     as_warn (_("could not set architecture and machine"));
index 6645e83153fa92c22637eeb4bdc012460fd7b9ca..d30b3b5595a4de266e3513644b5f28b203eb3b84 100644 (file)
@@ -741,6 +741,7 @@ if { [istarget mips*-*-vxworks*] } {
     run_dump_test_arches "rol64-hw"    [mips_arch_list_matching gpr64 ror]
 
     run_dump_test "sb"
+    run_dump_test_arches "sdata-gp"    [mips_arch_list_matching mips1]
     run_dump_test "trunc"
     run_dump_test "ulh"
     run_dump_test_arches "ulh2-eb"     [mips_arch_list_matching mips1 !mips32r6]
diff --git a/gas/testsuite/gas/mips/sdata-gp.d b/gas/testsuite/gas/mips/sdata-gp.d
new file mode 100644 (file)
index 0000000..410d379
--- /dev/null
@@ -0,0 +1,11 @@
+#as: -call_nonpic -32
+#objdump: -D --section=.text --prefix-addresses
+#name: .sdata and abicalls
+
+.*:.*
+
+
+Disassembly of section .text:
+0+0000 <[^>]*> lui     v0,0x0
+0+0004 <[^>]*> lw      v0,0\(v0\)
+       \.\.\.
diff --git a/gas/testsuite/gas/mips/sdata-gp.s b/gas/testsuite/gas/mips/sdata-gp.s
new file mode 100644 (file)
index 0000000..fa4aa28
--- /dev/null
@@ -0,0 +1,7 @@
+       .sdata
+c0101: .word   0xabcd
+
+       .text
+       .align  4
+test:
+       lw      $2, c0101