[PATCH, GCC/ARM] Remove ARMv8-M code for D17-D31

Thomas Preudhomme thomas.preudhomme@foss.arm.com
Thu Jun 29 08:44:00 GMT 2017


Hi Richard,

On 28/06/17 16:56, Richard Earnshaw (lists) wrote:
> On 20/06/17 16:01, Thomas Preudhomme wrote:
>> Hi,
>>
>> Function cmse_nonsecure_entry_clear_before_return has code to deal with
>> high VFP register (D16-D31) while ARMv8-M Baseline and Mainline both do
>> not support more than 16 double VFP registers (D0-D15). This makes this
>> security-sensitive code harder to read for not much benefit since
>> libcall for cmse_nonsecure_call functions do not deal with those high
>> VFP registers anyway.
>>
>> This commit gets rid of this code for simplicity and fixes 2 issues in
>> the same function:
>>
>> - stop the first loop when reaching maxregno to avoid dealing with VFP
>>    registers if targetting Thumb-1 or using -mfloat-abi=soft
>> - include maxregno in that loop
>>
> 
> This is silently baking in dangerous assumptions about GCC's internal
> numbering of the registers.  That's not a good idea from a long-term
> portability perspective.
> 
> At the very least you need to assert that all the interesting registers
> are numbered in the range 0..63; but ideally the code should just handle
> pretty much any assignment of internal register numbers.

Well there is already this:

gcc_assert ((unsigned) maxregno <= sizeof (to_clear_mask) * __CHAR_BIT__);

> 
> Did you consider using sbitmaps rather than doing all the multi-word
> stuff by steam?

No but am happy to. I'll respin the patch.

Best regards,

Thomas



More information about the Gcc-patches mailing list