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.
diff (2).patch
Description: diff (2).patch