This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] MIPS/GAS: Disable PIC pseudo-ops in the MIPS16 mode


On Tue, 15 Nov 2011, Richard Sandiford wrote:

> > 	gas/
> > 	* config/tc-mips.c (s_cpload, s_cpsetup): Fail if MIPS16 mode.
> > 	(s_cplocal, s_cprestore, s_cpreturn): Likewise.
> 
> I think these as_bad()s should be followed by a "return;".  OK with
> that change.

 That results in e.g.:

$ cat cpload16.s
	.set	mips16
	.set	noreorder
foo:
	.cpload	$25
$ mips-linux-gnu-as -KPIC cpload16.s
cpload16.s: Assembler messages:
cpload16.s:4: Error: .cpload not supported in MIPS16 mode
cpload16.s:4: Error: unknown opcode `$25'
$ 

 I have updated the patch as follows, this now just discards any following 
arguments.  I think there's little sense in bending backwards and parsing 
them properly, we don't do that for some other cases either -- see 
existing code nearby (that however uses s_ignore instead for a reason 
unknown to me, and) that doesn't even bail out (also for unknown reason -- 
I find it silly as finding these macros in non-PIC or wrong-ABI code is 
usually a sign of a user error).

 No regressions in the 23 MIPS targets.  OK to apply?

2012-08-09  Maciej W. Rozycki  <macro@codesourcery.com>

	gas/
	* config/tc-mips.c (s_cpload, s_cpsetup): Fail if MIPS16 mode.
	(s_cplocal, s_cprestore, s_cpreturn): Likewise.

  Maciej

binutils-gas-cpmips16-fix.diff
Index: binutils-fsf-trunk-quilt/gas/config/tc-mips.c
===================================================================
--- binutils-fsf-trunk-quilt.orig/gas/config/tc-mips.c	2012-08-09 00:44:38.000000000 +0100
+++ binutils-fsf-trunk-quilt/gas/config/tc-mips.c	2012-08-09 00:56:48.261195291 +0100
@@ -16439,6 +16439,13 @@ s_cpload (int ignore ATTRIBUTE_UNUSED)
       return;
     }
 
+  if (mips_opts.mips16)
+    {
+      as_bad (_("%s not supported in MIPS16 mode"), ".cpload");
+      ignore_rest_of_line ();
+      return;
+    }
+
   /* .cpload should be in a .set noreorder section.  */
   if (mips_opts.noreorder == 0)
     as_warn (_(".cpload not in noreorder section"));
@@ -16505,6 +16512,13 @@ s_cpsetup (int ignore ATTRIBUTE_UNUSED)
       return;
     }
 
+  if (mips_opts.mips16)
+    {
+      as_bad (_("%s not supported in MIPS16 mode"), ".cpsetup");
+      ignore_rest_of_line ();
+      return;
+    }
+
   reg1 = tc_get_register (0);
   SKIP_WHITESPACE ();
   if (*input_line_pointer != ',')
@@ -16597,6 +16611,13 @@ s_cplocal (int ignore ATTRIBUTE_UNUSED)
       return;
     }
 
+  if (mips_opts.mips16)
+    {
+      as_bad (_("%s not supported in MIPS16 mode"), ".cplocal");
+      ignore_rest_of_line ();
+      return;
+    }
+
   mips_gp_register = tc_get_register (0);
   demand_empty_rest_of_line ();
 }
@@ -16618,6 +16639,13 @@ s_cprestore (int ignore ATTRIBUTE_UNUSED
       return;
     }
 
+  if (mips_opts.mips16)
+    {
+      as_bad (_("%s not supported in MIPS16 mode"), ".cprestore");
+      ignore_rest_of_line ();
+      return;
+    }
+
   mips_cprestore_offset = get_absolute_expression ();
   mips_cprestore_valid = 1;
 
@@ -16654,6 +16682,13 @@ s_cpreturn (int ignore ATTRIBUTE_UNUSED)
       return;
     }
 
+  if (mips_opts.mips16)
+    {
+      as_bad (_("%s not supported in MIPS16 mode"), ".cpreturn");
+      ignore_rest_of_line ();
+      return;
+    }
+
   macro_start ();
   if (mips_cpreturn_register == -1)
     {


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]