This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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]

[arm-embedded][committed][PATCH 1/7] Add support for ARMv8-M's Secure Extensions flag and intrinsics


On 27/10/16 11:01, Kyrill Tkachov wrote:
> 
> On 27/10/16 10:53, Andre Vieira (lists) wrote:
>> On 26/10/16 14:00, Kyrill Tkachov wrote:
>>> On 26/10/16 10:12, Kyrill Tkachov wrote:
>>>> Hi Andre, thanks for resending them.
>>>>
>>>> On 25/10/16 17:26, Andre Vieira (lists) wrote:
>>>>> On 24/08/16 12:00, Andre Vieira (lists) wrote:
>>>>>> On 25/07/16 14:19, Andre Vieira (lists) wrote:
>>>>>>> This patch adds the support of the '-mcmse' option to enable
>>>>>>> ARMv8-M's
>>>>>>> Security Extensions and supports the following intrinsics:
>>>>>>> cmse_TT
>>>>>>> cmse_TT_fptr
>>>>>>> cmse_TTT
>>>>>>> cmse_TTT_fptr
>>>>>>> cmse_TTA
>>>>>>> cmse_TTA_fptr
>>>>>>> cmse_TTAT
>>>>>>> cmse_TTAT_fptr
>>>>>>> cmse_check_address_range
>>>>>>> cmse_check_pointed_object
>>>>>>> cmse_is_nsfptr
>>>>>>> cmse_nsfptr_create
>>>>>>>
>>>>>>> It also defines the mandatory cmse_address_info struct and the
>>>>>>> __ARM_FEATURE_CMSE macro.
>>>>>>> See Chapter 4, Sections 5.2, 5.3 and 5.6 of ARM®v8-M Security
>>>>>>> Extensions: Requirements on Development Tools
>>>>>>> (http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/index.html).
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> *** gcc/ChangeLog ***
>>>>>>> 2016-07-25  Andre Vieira <andre.simoesdiasvieira@arm.com>
>>>>>>>               Thomas Preud'homme <thomas.preudhomme@arm.com>
>>>>>>>
>>>>>>>           * config.gcc (extra_headers): Added arm_cmse.h.
>>>>>>>           * config/arm/arm-arches.def (ARM_ARCH):
>>>>>>>           (armv8-m): Add FL2_CMSE.
>>>>>>>           (armv8-m.main): Likewise.
>>>>>>>           (armv8-m.main+dsp): Likewise.
>>>>>>>           * config/arm/arm-c.c
>>>>>>>           (arm_cpu_builtins): Added __ARM_FEATURE_CMSE macro.
>>>>>>>           * config/arm/arm-protos.h
>>>>>>>           (arm_is_constant_pool_ref): Define FL2_CMSE.
>>>>>>>           * config/arm.c (arm_arch_cmse): New.
>>>>>>>           (arm_option_override): New error for unsupported cmse
>>>>>>> target.
>>>>>>>           * config/arm/arm.h (arm_arch_cmse): New.
>>>>>>>           * config/arm/arm.opt (mcmse): New.
>>>>>>>           * doc/invoke.texi (ARM Options): Add -mcmse.
>>>>>>>           * config/arm/arm_cmse.h: New file.
>>>>>>>
>>>>>>> *** libgcc/ChangeLog ***
>>>>>>> 2016-07-25  Andre Vieira <andre.simoesdiasvieira@arm.com>
>>>>>>>               Thomas Preud'homme <thomas.preudhomme@arm.com>
>>>>>>>
>>>>>>>           * config/arm/cmse.c: Likewise.
>>>>>>>           * config/arm/t-arm (HAVE_CMSE): New.
>>>>>>>
>>>>>>> *** gcc/testsuite/ChangeLog ***
>>>>>>> 2016-07-25  Andre Vieira <andre.simoesdiasvieira@arm.com>
>>>>>>>               Thomas Preud'homme <thomas.preudhomme@arm.com>
>>>>>>>
>>>>>>>           * gcc.target/arm/cmse/cmse.exp: New.
>>>>>>>           * gcc.target/arm/cmse/cmse-1.c: New.
>>>>>>>           * gcc.target/arm/cmse/cmse-12.c: New.
>>>>>>>           * lib/target-supports.exp
>>>>>>>           (check_effective_target_arm_cmse_ok): New.
>>>
>>> Just remembered, new effective target checks should be documented in
>>> sourcebuild.texi
>>> Kyrill
>>>
>>>>>> Added more documentation as requested.
>>>>>>
>>>>>> This patch adds the support of the '-mcmse' option to enable
>>>>>> ARMv8-M's
>>>>>> Security Extensions and supports the following intrinsics:
>>>>>> cmse_TT
>>>>>> cmse_TT_fptr
>>>>>> cmse_TTT
>>>>>> cmse_TTT_fptr
>>>>>> cmse_TTA
>>>>>> cmse_TTA_fptr
>>>>>> cmse_TTAT
>>>>>> cmse_TTAT_fptr
>>>>>> cmse_check_address_range
>>>>>> cmse_check_pointed_object
>>>>>> cmse_is_nsfptr
>>>>>> cmse_nsfptr_create
>>>>>>
>>>>>> It also defines the mandatory cmse_address_info struct and the
>>>>>> __ARM_FEATURE_CMSE macro.
>>>>>> See Chapter 4, Sections 5.2, 5.3 and 5.6 of ARM®v8-M Security
>>>>>> Extensions: Requirements on Development Tools
>>>>>> (http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/index.html).
>>>>>>
>>>>>>
>>>>>>
>>>>>> *** gcc/ChangeLog ***
>>>>>> 2016-07-xx  Andre Vieira <andre.simoesdiasvieira@arm.com>
>>>>>>               Thomas Preud'homme <thomas.preudhomme@arm.com>
>>>>>>
>>>>>>           * config.gcc (extra_headers): Added arm_cmse.h.
>>>>>>           * config/arm/arm-arches.def (ARM_ARCH):
>>>>>>           (armv8-m): Add FL2_CMSE.
>>>>>>           (armv8-m.main): Likewise.
>>>>>>           (armv8-m.main+dsp): Likewise.
>>>>>>           * config/arm/arm-c.c
>>>>>>           (arm_cpu_builtins): Added __ARM_FEATURE_CMSE macro.
>>>>>>           * config/arm/arm-protos.h
>>>>>>           (arm_is_constant_pool_ref): Define FL2_CMSE.
>>>>>>           * config/arm.c (arm_arch_cmse): New.
>>>>>>           (arm_option_override): New error for unsupported cmse
>>>>>> target.
>>>>>>           * config/arm/arm.h (arm_arch_cmse): New.
>>>>>>           * config/arm/arm.opt (mcmse): New.
>>>>>>           * doc/invoke.texi (ARM Options): Add -mcmse.
>>>>>>           * doc/extend.texi (ARM ARMv8-M Security Extensions): Add
>>>>>> section.
>>>>>>           * config/arm/arm_cmse.h: New file.
>>>>>>
>>>>>> *** libgcc/ChangeLog ***
>>>>>> 2016-07-xx  Andre Vieira <andre.simoesdiasvieira@arm.com>
>>>>>>               Thomas Preud'homme <thomas.preudhomme@arm.com>
>>>>>>           * config/arm/cmse.c: Likewise.
>>>>>>           * config/arm/t-arm (HAVE_CMSE): New.
>>>>>>
>>>>>>
>>>>>> *** gcc/testsuite/ChangeLog ***
>>>>>> 2016-07-xx  Andre Vieira <andre.simoesdiasvieira@arm.com>
>>>>>>               Thomas Preud'homme <thomas.preudhomme@arm.com>
>>>>>>
>>>>>>           * gcc.target/arm/cmse/cmse.exp: New.
>>>>>>           * gcc.target/arm/cmse/cmse-1.c: New.
>>>>>>           * gcc.target/arm/cmse/cmse-12.c: New.
>>>>>>           * lib/target-supports.exp
>>>>>>           (check_effective_target_arm_cmse_ok): New.
>>>>>>
>>>>> Hi,
>>>>>
>>>>> Rebased previous patch on top of trunk as requested. No changes to
>>>>> ChangeLog.
>>>>>
>>>>> Cheers,
>>>>> Andre
>>>> diff --git a/gcc/config/arm/arm_cmse.h b/gcc/config/arm/arm_cmse.h
>>>> new file mode 100644
>>>> index
>>>> 0000000000000000000000000000000000000000..b4232937c6ae04754a6bbc513b143672a4be5530
>>>>
>>>>
>>>> --- /dev/null
>>>> +++ b/gcc/config/arm/arm_cmse.h
>>>>
>>>> <snip>
>>>>
>>>> +
>>>> +#if __ARM_FEATURE_CMSE & 2
>>>> +
>>>> +#define cmse_TTA_fptr(p) (__cmse_TTA_fptr ((__cmse_fptr)(p)))
>>>> +
>>>> +__extension__ static __inline __attribute__ ((__always_inline__))
>>>> +cmse_address_info_t
>>>> +__cmse_TTA_fptr (__cmse_fptr __p)
>>>> +__CMSE_TT_ASM (a)
>>>> +
>>>> +__extension__ static __inline __attribute__ ((__always_inline__))
>>>> +cmse_address_info_t
>>>> +cmse_TTA (void *__p)
>>>> +__CMSE_TT_ASM (a)
>>>> +
>>>> +#define cmse_TTAT_fptr(p) (__cmse_TTAT_fptr ((__cmse_fptr)(p)))
>>>> +
>>>> +__extension__ static __inline cmse_address_info_t
>>>> +__attribute__ ((__always_inline__))
>>>> +__cmse_TTAT_fptr (__cmse_fptr __p)
>>>> +__CMSE_TT_ASM (at)
>>>> +
>>>> +__extension__ static __inline cmse_address_info_t
>>>> +__attribute__ ((__always_inline__))
>>>> +cmse_TTAT (void *__p)
>>>> +__CMSE_TT_ASM (at)
>>>> +
>>>> +#define CMSE_AU_NONSECURE    2
>>>> +#define CMSE_MPU_NONSECURE    16
>>>> +#define CMSE_NONSECURE        18
>>>> +
>>>> +#endif /* __ARM_FEATURE_CMSE & 2 */
>>>> +
>>>> +#define CMSE_MPU_UNPRIV        4
>>>> +#define CMSE_MPU_READWRITE    1
>>>> +#define CMSE_MPU_READ        8
>>>> +
>>>> +__extension__ void *
>>>> +cmse_check_address_range (void *, size_t, int);
>>>> +
>>>> +#define cmse_check_pointed_object(p, f) \
>>>> +  ((typeof ((p))) cmse_check_address_range ((p), sizeof (*(p)), (f)))
>>>> +
>>>> +#define cmse_nsfptr_create(p) ((typeof ((p))) ((intptr_t) (p) & ~1))
>>>> +
>>>> +#define cmse_is_nsfptr(p) (!((intptr_t) (p) & 1))
>>>> +
>>>> +#endif /* __ARM_FEATURE_CMSE & 1 */
>>>>
>>>>  From my reading of the spec
>>>> (http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf)
>>>>
>>>>
>>>> cmse_nsfptr_create and cmse_is_nsfptr should be defined if bit 1 of
>>>> __ARM_FEATURE_CMSE is set.
>>>> But in your patch they fall under the "#if __ARM_FEATURE_CMSE & 1"
>>>> check which checks bit 0.
>>>> They should be in the "__ARM_FEATURE_CMSE & 2" block. Please double
>>>> check the other defines against the SPEC to make sure they
>>>> match the feature bit in __ARM_FEATURE_CMSE.
>>>>
>>>> The patch is ok with that resolved if bootstrap and test on a normal
>>>> arm-none-linux-gnueabihf configuration
>>>> shows no problems.
>>>> Thanks,
>>>> Kyrill
>>>>
>> Hi,
>>
>> Reworked comments.
>>
>> Is this OK?
> 
> Yes, thanks.
> Please hold off committing until the whole series is approved.
> Kyrill
> 
>> Cheers,
>> Andre
>>
>> *** gcc/ChangeLog ***
>> 2016-10-27  Andre Vieira <andre.simoesdiasvieira@arm.com>
>>               Thomas Preud'homme <thomas.preudhomme@arm.com>
>>
>>           * config.gcc (extra_headers): Added arm_cmse.h.
>>           * config/arm/arm-arches.def (ARM_ARCH):
>>           (armv8-m): Add FL2_CMSE.
>>           (armv8-m.main): Likewise.
>>           (armv8-m.main+dsp): Likewise.
>>           * config/arm/arm-c.c
>>           (arm_cpu_builtins): Added __ARM_FEATURE_CMSE macro.
>>           * config/arm/arm-protos.h
>>           (arm_is_constant_pool_ref): Define FL2_CMSE.
>>           * config/arm.c (arm_arch_cmse): New.
>>           (arm_option_override): New error for unsupported cmse target.
>>           * config/arm/arm.h (arm_arch_cmse): New.
>>           * config/arm/arm.opt (mcmse): New.
>>           * doc/invoke.texi (ARM Options): Add -mcmse.
>>           * config/arm/arm_cmse.h: New file.
>>           * doc/sourcebuild.texi (arm_cmse_ok): Add new effective target.
>>
>> *** libgcc/ChangeLog ***
>> 2016-10-27  Andre Vieira <andre.simoesdiasvieira@arm.com>
>>               Thomas Preud'homme <thomas.preudhomme@arm.com>
>>
>>           * config/arm/cmse.c: Likewise.
>>           * config/arm/t-arm (HAVE_CMSE): New.
>>
>> *** gcc/testsuite/ChangeLog ***
>> 2016-10-27  Andre Vieira <andre.simoesdiasvieira@arm.com>
>>               Thomas Preud'homme <thomas.preudhomme@arm.com>
>>
>>           * gcc.target/arm/cmse/cmse.exp: New.
>>           * gcc.target/arm/cmse/cmse-1.c: New.
>>           * gcc.target/arm/cmse/cmse-12.c: New.
>>           * lib/target-supports.exp
>>           (check_effective_target_arm_cmse_ok): New.
>>
> 

Hi,

Backported this to the embedded-6-branch in revision r243246.

Cheers,
Andre

gcc/ChangeLog.arm:
2016-12-05  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	Backport from mainline
	2016-12-02  Andre Vieira  <andre.simoesdiasvieira@arm.com>
		    Thomas Preud'homme	<thomas.preudhomme@arm.com>

	* config.gcc (extra_headers): Added arm_cmse.h.
	* config/arm/arm-arches.def (ARM_ARCH):
	(armv8-m): Add FL2_CMSE.
	(armv8-m.main): Likewise.
	(armv8-m.main+dsp): Likewise.
	* config/arm/arm-c.c
	(arm_cpu_builtins): Added __ARM_FEATURE_CMSE macro.
	* config/arm/arm-flags.h: Define FL2_CMSE.
	* config/arm.c (arm_arch_cmse): New.
	(arm_option_override): New error for unsupported cmse target.
	* config/arm/arm.h (arm_arch_cmse): New.
	* config/arm/arm.opt (mcmse): New.
	* config/arm/arm_cmse.h: New file.
	* doc/invoke.texi (ARM Options): Add -mcmse.
	* doc/sourcebuild.texi (arm_cmse_ok): Add new effective target.
	* doc/extend.texi: Add ARMv8-M Security Extensions entry.

gcc/testsuite/ChangeLog.arm:
2016-12-05  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	Backport from mainline
	2016-12-02  Andre Vieira  <andre.simoesdiasvieira@arm.com>
		    Thomas Preud'homme	<thomas.preudhomme@arm.com>

	* gcc.target/arm/cmse/cmse.exp: New.
	* gcc.target/arm/cmse/cmse-1.c: New.
	* gcc.target/arm/cmse/cmse-12.c: New.
	* lib/target-supports.exp
	(check_effective_target_arm_cmse_ok): New.

libgcc/ChangeLog.arm:
2016-12-05  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	Backport from mainline
	2016-12-02  Andre Vieira  <andre.simoesdiasvieira@arm.com>
		    Thomas Preud'homme	<thomas.preudhomme@arm.com>

	* config/arm/t-arm (HAVE_CMSE): New.
	* config/arm/cmse.c: New.

Attachment: diff
Description: Text document


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