[PATCH 2/2] x86: don't allow pseudo-prefixes to be overridden by legacy suffixes

Jan Beulich jbeulich@suse.com
Tue Nov 7 10:07:29 GMT 2023


On 07.11.2023 09:47, Cui, Lili wrote:
>> --- a/gas/config/tc-i386.c
>> +++ b/gas/config/tc-i386.c
>> @@ -5899,16 +5899,32 @@ parse_insn (const char *line, char *mnem
>>  	 Check if we should swap operand or force 32bit displacement in
>>  	 encoding.  */
>>        if (mnem_p - 2 == dot_p && dot_p[1] == 's')
>> -	i.dir_encoding = dir_encoding_swap;
>> +	{
>> +	  if (i.dir_encoding == dir_encoding_default)
>> +	    i.dir_encoding = dir_encoding_swap;
>> +	  else
>> +	    as_warn (_("ignoring `.s' suffix due to earlier `{%s}'"),
>> +		     i.dir_encoding == dir_encoding_load ? "load" : "store");
>> +	}
>>        else if (mnem_p - 3 == dot_p
>>  	       && dot_p[1] == 'd'
>>  	       && dot_p[2] == '8')
>> -	i.disp_encoding = disp_encoding_8bit;
>> +	{
>> +	  if (i.disp_encoding == disp_encoding_default)
>> +	    i.disp_encoding = disp_encoding_8bit;
>> +	  else if (i.disp_encoding != disp_encoding_8bit)
>> +	    as_warn (_("ignoring `.d8' suffix due to earlier `{disp<N>}'"));
>> +	}
>>        else if (mnem_p - 4 == dot_p
>>  	       && dot_p[1] == 'd'
>>  	       && dot_p[2] == '3'
>>  	       && dot_p[3] == '2')
>> -	i.disp_encoding = disp_encoding_32bit;
>> +	{
>> +	  if (i.disp_encoding == disp_encoding_default)
>> +	    i.disp_encoding = disp_encoding_32bit;
>> +	  else if (i.disp_encoding != disp_encoding_32bit)
>> +	    as_warn (_("ignoring `.d32' suffix due to earlier `{disp<N>}'"));
>> +	}
>>        else
>>  	goto check_suffix;
>>        mnem_p = dot_p;
> 
> Do we use disp like this "{disp8}{disp32}" now?

I think this is permitted, and the last one wins. No need to disallow imo.

Jan


More information about the Binutils mailing list