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.simoesdiasvie...@arm.com>
             Thomas Preud'homme <thomas.preudho...@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.simoesdiasvie...@arm.com>
             Thomas Preud'homme <thomas.preudho...@arm.com>

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

*** gcc/testsuite/ChangeLog ***
2016-07-25  Andre Vieira <andre.simoesdiasvie...@arm.com>
             Thomas Preud'homme <thomas.preudho...@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.simoesdiasvie...@arm.com>
             Thomas Preud'homme <thomas.preudho...@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.simoesdiasvie...@arm.com>
             Thomas Preud'homme <thomas.preudho...@arm.com>
         * config/arm/cmse.c: Likewise.
         * config/arm/t-arm (HAVE_CMSE): New.


*** gcc/testsuite/ChangeLog ***
2016-07-xx  Andre Vieira <andre.simoesdiasvie...@arm.com>
             Thomas Preud'homme <thomas.preudho...@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


Reply via email to