MIPS/GAS: Disallow `.option picX' with VxWorks PIC
authorMaciej W. Rozycki <macro@imgtec.com>
Sat, 9 Apr 2016 20:23:40 +0000 (21:23 +0100)
committerMaciej W. Rozycki <macro@imgtec.com>
Sat, 9 Apr 2016 20:23:40 +0000 (21:23 +0100)
gas/
* config/tc-mips.c (s_option): Reject `.option picX' if VxWorks
PIC.
* testsuite/gas/mips/option-pic-vxworks-1.l: New list test.
* testsuite/gas/mips/option-pic-vxworks-2.l: New list test.
* testsuite/gas/mips/option-pic-vxworks-1.s: New test source.
* testsuite/gas/mips/option-pic-vxworks-2.s: New test source.
* testsuite/gas/mips/mips.exp: Run the new tests.

gas/ChangeLog
gas/config/tc-mips.c
gas/testsuite/gas/mips/mips.exp
gas/testsuite/gas/mips/option-pic-vxworks-1.l [new file with mode: 0644]
gas/testsuite/gas/mips/option-pic-vxworks-1.s [new file with mode: 0644]
gas/testsuite/gas/mips/option-pic-vxworks-2.l [new file with mode: 0644]
gas/testsuite/gas/mips/option-pic-vxworks-2.s [new file with mode: 0644]

index ee54c5ce5ce7f9fc657ba5a7bdb1eade940ef948..da02325fd5e228738c3832eef08e926eb23ac412 100644 (file)
@@ -1,3 +1,13 @@
+2016-04-09  Maciej W. Rozycki  <macro@imgtec.com>
+
+       * config/tc-mips.c (s_option): Reject `.option picX' if VxWorks
+       PIC.
+       * testsuite/gas/mips/option-pic-vxworks-1.l: New list test.
+       * testsuite/gas/mips/option-pic-vxworks-2.l: New list test.
+       * testsuite/gas/mips/option-pic-vxworks-1.s: New test source.
+       * testsuite/gas/mips/option-pic-vxworks-2.s: New test source.
+       * testsuite/gas/mips/mips.exp: Run the new tests.
+
 2016-04-09  Maciej W. Rozycki  <macro@imgtec.com>
 
        * config/tc-mips.c (can_swap_branch_p): Correct call formatting.
index dff78ac29351fa70bc6a77e35fcf184be81f111b..701744476f5f2895da400b52a668c08222ffcd2a 100644 (file)
@@ -15477,15 +15477,17 @@ s_option (int x ATTRIBUTE_UNUSED)
       int i;
 
       i = atoi (opt + 3);
-      if (i == 0)
+      if (i != 0 && i != 2)
+       as_bad (_(".option pic%d not supported"), i);
+      else if (mips_pic == VXWORKS_PIC)
+       as_bad (_(".option pic%d not supported in VxWorks PIC mode"), i);
+      else if (i == 0)
        mips_pic = NO_PIC;
       else if (i == 2)
        {
          mips_pic = SVR4_PIC;
          mips_abicalls = TRUE;
        }
-      else
-       as_bad (_(".option pic%d not supported"), i);
 
       if (mips_pic == SVR4_PIC)
        {
index d30b3b5595a4de266e3513644b5f28b203eb3b84..02f76cc09cdcd515cb143b985796937ec2ae071c 100644 (file)
@@ -513,6 +513,11 @@ if { [istarget mips*-*-vxworks*] } {
     run_dump_test "vxworks1-xgot"
     run_dump_test "vxworks1-el"
     run_dump_test "vxworks1-xgot-el"
+
+    run_list_test "option-pic-vxworks-1" "-mvxworks-pic" \
+       "MIPS invalid PIC option in VxWorks PIC"
+    run_list_test "option-pic-vxworks-2" "-mvxworks-pic" \
+       "MIPS invalid switch to SVR4 PIC from VxWorks PIC"
 } elseif { [istarget mips*-*-*] } {
     set addr32 [expr [istarget mipstx39*-*-*] || [istarget mips-*-linux*] || [istarget mipsel-*-linux*] \
                     || [istarget mipsisa32-*-linux*] || [istarget mipsisa32el-*-linux*]]
@@ -1469,6 +1474,11 @@ if { [istarget mips*-*-vxworks*] } {
 
     run_dump_test "li-d"
 
+    run_list_test "option-pic-vxworks-1" "-mvxworks-pic" \
+       "MIPS invalid PIC option in VxWorks PIC"
+    run_list_test "option-pic-vxworks-2" "-mvxworks-pic" \
+       "MIPS invalid switch to SVR4 PIC from VxWorks PIC"
+
     run_dump_test_arches "r6"          [mips_arch_list_matching mips32r6]
     if $has_newabi {
        run_dump_test_arches "r6-n32"   [mips_arch_list_matching mips64r6]
diff --git a/gas/testsuite/gas/mips/option-pic-vxworks-1.l b/gas/testsuite/gas/mips/option-pic-vxworks-1.l
new file mode 100644 (file)
index 0000000..c88f7c0
--- /dev/null
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*:1: Error: \.option pic1 not supported
+.*:2: Error: \.option pic3 not supported
diff --git a/gas/testsuite/gas/mips/option-pic-vxworks-1.s b/gas/testsuite/gas/mips/option-pic-vxworks-1.s
new file mode 100644 (file)
index 0000000..62530cc
--- /dev/null
@@ -0,0 +1,2 @@
+       .option pic1
+       .option pic3
diff --git a/gas/testsuite/gas/mips/option-pic-vxworks-2.l b/gas/testsuite/gas/mips/option-pic-vxworks-2.l
new file mode 100644 (file)
index 0000000..8c18b1b
--- /dev/null
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*:1: Error: \.option pic0 not supported in VxWorks PIC mode
+.*:2: Error: \.option pic2 not supported in VxWorks PIC mode
diff --git a/gas/testsuite/gas/mips/option-pic-vxworks-2.s b/gas/testsuite/gas/mips/option-pic-vxworks-2.s
new file mode 100644 (file)
index 0000000..96b85c8
--- /dev/null
@@ -0,0 +1,2 @@
+       .option pic0
+       .option pic2