Hi Richard,

> -----Original Message-----
> From: Richard Earnshaw <richard.earns...@foss.arm.com>
> Sent: 13 April 2021 14:55
> To: Srinath Parvathaneni <srinath.parvathan...@arm.com>; gcc-
> patc...@gcc.gnu.org
> Cc: Richard Earnshaw <richard.earns...@arm.com>
> Subject: Re: [GCC][Patch] arm: Fix the mve multilib for the broken cmse
> support (pr99939).
> 
> 
> 
> On 12/04/2021 14:04, Srinath Parvathaneni via Gcc-patches wrote:
> > Hi,
> >
> > The current CMSE support in the multilib build for "-march=armv8.1-
> m.main+mve -mfloat-abi=hard -mfpu=auto"
> > is broken as specified in PR99939 and this patch fixes the issue.
> >
> > Regression tested on arm-none-eabi and found no regressions.
> >
> > Ok for master? and Ok for GCC-10 branch?
> >
> > Regards,
> > Srinath.
> >
> > gcc/testsuite/ChangeLog:
> >
> > 2021-04-12  Srinath Parvathaneni  <srinath.parvathan...@arm.com>
> >
> >     PR target/99939
> >     * gcc.target/arm/cmse/cmse-20.c: New test.
> >
> > libgcc/ChangeLog:
> >
> > 2021-04-12  Srinath Parvathaneni  <srinath.parvathan...@arm.com>
> >
> >     PR target/99939
> >     * config/arm/t-arm: Make changes to use cmse.c for all the
> >     armv8.1-m.main mulitlibs.
> >
> >
> >
> > ###############     Attachment also inlined for ease of reply
> ###############
> >
> >
> > diff --git a/gcc/testsuite/gcc.target/arm/cmse/cmse-20.c
> > b/gcc/testsuite/gcc.target/arm/cmse/cmse-20.c
> > new file mode 100644
> > index
> >
> 0000000000000000000000000000000000000000..7e2739e14792624adf5b428
> 0ca58
> > a5d8320acbf0
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/arm/cmse/cmse-20.c
> > @@ -0,0 +1,28 @@
> > +/* { dg-do run } */
> > +/* { dg-additional-options "-mcmse
> > +-Wl,--section-start,.gnu.sgstubs=0x00190000" } */
> > +
> > +#include <arm_cmse.h>
> > +#include <stdlib.h>
> > +#include <stdio.h>
> > +
> > +void __attribute__((cmse_nonsecure_entry))
> > +secure_fun (int a, int *p)
> > +{
> > +  void *b = cmse_check_address_range ((void *)p, a, 1);
> > +
> > +  if (b == NULL)
> > +   __builtin_abort ();
> > +  printf("%d", *((int *)b));
> > +}
> > +
> > +int
> > +main (void)
> > +{
> > +  int *ptr;
> > +  int size = 1;
> > +  ptr = (int *) calloc (1, sizeof(int *));
> > +  *ptr = 1315852292;
> > +  secure_fun (size, ptr);
> > +  free (ptr);
> > +  return 0;
> > +}
> > diff --git a/libgcc/config/arm/t-arm b/libgcc/config/arm/t-arm index
> >
> 3625a2590beec4e4e0e0881be9ad284c595c7190..949e2ee06653680211ff2dcf
> 0b55
> > a41a6aedc31c 100644
> > --- a/libgcc/config/arm/t-arm
> > +++ b/libgcc/config/arm/t-arm
> > @@ -9,11 +9,12 @@ CMSE_OPTS:=-mcmse
> >   endif
> >
> >   ifdef HAVE_CMSE
> > -ifndef HAVE_V81M
> > -libgcc-objects += cmse.o cmse_nonsecure_call.o
> > +libgcc-objects += cmse.o
> >
> >   cmse.o: $(srcdir)/config/arm/cmse.c
> >     $(gcc_compile) -c $(CMSE_OPTS) $<
> > +ifndef HAVE_V81M
> > +libgcc-objects += cmse_nonsecure_call.o
> >   cmse_nonsecure_call.o: $(srcdir)/config/arm/cmse_nonsecure_call.S
> >                    $(gcc_compile) -c $<
> >   endif
> >
> 
> So if I have two object files using CMSE and one is built with v8m, but the
> other with v8.1m, when I link them, the needed additional support for the
> v8m object file will be missing the library support.
> 
> Wouldn't it be better to just build the cmse_nonsecure_call code
> unconditionally?  It won't be called if it's not needed, but will be there if
> something does require it.

I have modified the patch to build the cmse_nonsecure_call code unconditionally,
I have attached the diff and cover letter in this email.

Please let me know if it is ok for master?

Regards,
Srinath.
> 
> R.

Hi,

The current CMSE support in the multilib build for "-march=armv8.1-m.main+mve 
-mfloat-abi=hard -mfpu=auto"
is broken as specified in PR99939 and this patch fixes the issue.

Regression tested on arm-none-eabi and found no regressions.

Ok for master? and Ok for GCC-10 branch?

Regards,
Srinath.

gcc/testsuite/ChangeLog:

2021-06-01  Srinath Parvathaneni  <srinath.parvathan...@arm.com>

        * gcc.target/arm/cmse/cmse-18.c: Modify
        * gcc.target/arm/cmse/cmse-20.c: New test.

libgcc/ChangeLog:

2021-06-01  Srinath Parvathaneni  <srinath.parvathan...@arm.com>

        * config/arm/cmse_nonsecure_call.S: Modify to add
        __ARM_FEATURE_MVE macro check.
        * config/arm/t-arm: Make changes to link cmse.o and
        cmse_nonsecure_call.o on finding -mcmse gcc options.

Attachment: diff (2).patch
Description: diff (2).patch

Reply via email to