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

Jan Beulich JBeulich@novell.com
Thu Jun 10 07:06:00 GMT 2010


>>> On 09.06.10 at 18:02, "H.J. Lu" <hjl.tools@gmail.com> wrote:
> On Wed, Jun 9, 2010 at 8:36 AM, Jan Beulich <JBeulich@novell.com> wrote:
>> 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-09  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().
>>
>> --- 2010-06-09/gas/config/tc-i386.c     2010-06-09 17:04:12.000000000 +0200
>> +++ 2010-06-09/gas/config/tc-i386.c     2010-06-09 17:24:59.000000000 +0200
>> @@ -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,13 @@ show_arch (FILE *stream, int ext)
>>          /* It is an processor.  Skip if we show only extension.  */
>>          continue;
>>        }
>> +      else if (check && ! (strcmp (default_arch, "i386")
>> +                          ? cpu_arch[j].flags.bitfield.cpulm
>> +                          : cpu_arch[j].flags.bitfield.cpui386))
>> +       {
>> +         /* It is an impossible processor - skip.  */
>> +         continue;
>> +       }
>>
>>
> 
> Do we need to check cpu_arch[j].flags.bitfield.cpulm? Can we
> just check cpu_arch[j].flags.bitfield.cpui386 like
> 
> if (check && !cpu_arch[j].flags.bitfield.cpui386)
>   continue?
> 

I'm of the opinion that when the assembler is in 64-bit mode it
should reject those architectures that aren't 64-bit capable,
otherwise specifying e.g. -march=i386 has the same ugly effect
as has passing -march=i8086 in 32-bit mode. And if we reject
them, we should also not display them as available.

Jan



More information about the Binutils mailing list