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]

Re: [PATCHv2 1/7, GCC, ARM, V8M] Add support for ARMv8-M's Secure Extensions flag and intrinsics


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?

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.

Attachment: diff1
Description: Text document


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