[PATCH] x86: reject architecture settings that are invalid to be set from the command line (v2)

Jan Beulich JBeulich@novell.com
Thu Jun 10 15:13:00 GMT 2010


So far, options like -march=i8086 were accepted despite the assembler
subsequently choking on other consistency checks, leading to reasonably
cryptic error messages. This patch makes it so that impossible
architecure settings are neither accepted nor displayed (i.e. it is now
made sure that those settings can only be used via directives).

gas/
2010-06-10  Jan Beulich  <jbeulich@novell.com>

	* config/tc-i386.c (md_parse_option): Ignore impossible processor
	types.
	(show_arch): New parameter 'check'.
	(md_show_usage): Adjust calls to show_arch().

--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -8166,6 +8166,11 @@ md_parse_option (int c, char *arg)
 	      if (strcmp (arch, cpu_arch [j].name) == 0)
 		{
 		  /* Processor.  */
+		  if (! (strcmp (default_arch, "i386")
+			 ? cpu_arch[j].flags.bitfield.cpulm
+			 : cpu_arch[j].flags.bitfield.cpui386))
+		    continue;
+
 		  cpu_arch_name = cpu_arch[j].name;
 		  cpu_sub_arch_name = NULL;
 		  cpu_arch_flags = cpu_arch[j].flags;
@@ -8297,7 +8302,7 @@ md_parse_option (int c, char *arg)
 "                                                                                "
 
 static void
-show_arch (FILE *stream, int ext)
+show_arch (FILE *stream, int ext, int check)
 {
   static char message[] = MESSAGE_TEMPLATE;
   char *start = message + 27;
@@ -8334,6 +8339,11 @@ show_arch (FILE *stream, int ext)
 	  /* It is an processor.  Skip if we show only extension.  */
 	  continue;
 	}
+      else if (check && ! cpu_arch[j].flags.bitfield.cpui386)
+	{
+	  /* It is an impossible processor - skip.  */
+	  continue;
+	}
 
       /* Reserve 2 spaces for ", " or ",\0" */
       left -= len + 2;
@@ -8398,13 +8408,13 @@ md_show_usage (FILE *stream)
   fprintf (stream, _("\
   -march=CPU[,+EXTENSION...]\n\
                           generate code for CPU and EXTENSION, CPU is one of:\n"));
-  show_arch (stream, 0);
+  show_arch (stream, 0, 1);
   fprintf (stream, _("\
                           EXTENSION is combination of:\n"));
-  show_arch (stream, 1);
+  show_arch (stream, 1, 0);
   fprintf (stream, _("\
   -mtune=CPU              optimize for CPU, CPU is one of:\n"));
-  show_arch (stream, 0);
+  show_arch (stream, 0, 0);
   fprintf (stream, _("\
   -msse2avx               encode SSE instructions with VEX prefix\n"));
   fprintf (stream, _("\





More information about the Binutils mailing list