diff mbox series

[GCC-6.4,ARM] enable FL_LPAE flag for armv7ve cores

Message ID 1510117964-4895-1-git-send-email-armccurdy@gmail.com
State New
Headers show
Series [GCC-6.4,ARM] enable FL_LPAE flag for armv7ve cores | expand

Commit Message

Andre McCurdy Nov. 8, 2017, 5:12 a.m. UTC
The following commit added the FL_LPAE flag to FL_FOR_ARCH7VE, but
neglected to also add it to the armv7ve compatible cores defined in
arm-cores.def.

  https://github.com/gcc-mirror/gcc/commit/af2d9b9e58e8be576c53d94f30c48c68146b0c98

The result is that gcc 6.4 now refuses to allow -march=armv7ve and
-mcpu=XXX to be used together, even when -mcpu is set to an armv7ve
compatible core:

  arm-linux-gnueabi-gcc -march=armv7ve -mcpu=cortex-a7 -Werror ...
  error: switch -mcpu=cortex-a7 conflicts with -march=armv7ve switch [-Werror]

This is a regression relative to gcc 6.3.

Fix by defining flags for armv7ve compatible cores directly from
FL_FOR_ARCH7VE, rather than re-creating the armv7ve flags
independently by combining FL_FOR_ARCH7A with the armv7ve specific
FL_THUMB_DIV and FL_ARM_DIV flags.

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
---
 gcc/config/arm/arm-cores.def | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

Comments

Kyrill Tkachov Nov. 8, 2017, 10:03 a.m. UTC | #1
Hi Andre,

On 08/11/17 05:12, Andre McCurdy wrote:
> The following commit added the FL_LPAE flag to FL_FOR_ARCH7VE, but
> neglected to also add it to the armv7ve compatible cores defined in
> arm-cores.def.
>
> https://github.com/gcc-mirror/gcc/commit/af2d9b9e58e8be576c53d94f30c48c68146b0c98
>
> The result is that gcc 6.4 now refuses to allow -march=armv7ve and
> -mcpu=XXX to be used together, even when -mcpu is set to an armv7ve
> compatible core:
>
>   arm-linux-gnueabi-gcc -march=armv7ve -mcpu=cortex-a7 -Werror ...
>   error: switch -mcpu=cortex-a7 conflicts with -march=armv7ve switch 
> [-Werror]
>
> This is a regression relative to gcc 6.3.
>
> Fix by defining flags for armv7ve compatible cores directly from
> FL_FOR_ARCH7VE, rather than re-creating the armv7ve flags
> independently by combining FL_FOR_ARCH7A with the armv7ve specific
> FL_THUMB_DIV and FL_ARM_DIV flags.
>

Thank you for the patch. The change looks reasonable to me.
The way CPUs are defined internally was changed for GCC 7
so later branches won't have this problem.

How has this patch been tested?
This should be ready for committing with a proper
ChangeLog entry [1].

Thanks,
Kyrill

[1] https://gcc.gnu.org/codingconventions.html#ChangeLogs or have a look 
in the ChangeLog files in the gcc/ directory for examples

> Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
> ---
>  gcc/config/arm/arm-cores.def | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/gcc/config/arm/arm-cores.def b/gcc/config/arm/arm-cores.def
> index 829b839..ca37e6f 100644
> --- a/gcc/config/arm/arm-cores.def
> +++ b/gcc/config/arm/arm-cores.def
> @@ -145,12 +145,12 @@ 
> ARM_CORE("cortex-m0plus.small-multiply",cortexm0plussmallmultiply, 
> cortexm0plus,
>  /* V7 Architecture Processors */
>  ARM_CORE("generic-armv7-a",     genericv7a, genericv7a,         
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7A), cortex)
>  ARM_CORE("cortex-a5",           cortexa5, cortexa5,             
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7A), cortex_a5)
> -ARM_CORE("cortex-a7",          cortexa7, cortexa7,             
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | 
> FL_FOR_ARCH7A), cortex_a7)
> +ARM_CORE("cortex-a7",          cortexa7, cortexa7,             
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7VE), cortex_a7)
>  ARM_CORE("cortex-a8",           cortexa8, cortexa8,             
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7A), cortex_a8)
>  ARM_CORE("cortex-a9",           cortexa9, cortexa9,             
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7A), cortex_a9)
> -ARM_CORE("cortex-a12",         cortexa12, cortexa17,           
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | 
> FL_FOR_ARCH7A), cortex_a12)
> -ARM_CORE("cortex-a15",         cortexa15, cortexa15,           
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | 
> FL_FOR_ARCH7A), cortex_a15)
> -ARM_CORE("cortex-a17",         cortexa17, cortexa17,           
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | 
> FL_FOR_ARCH7A), cortex_a12)
> +ARM_CORE("cortex-a12",         cortexa12, cortexa17,           
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7VE), cortex_a12)
> +ARM_CORE("cortex-a15",         cortexa15, cortexa15,           
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7VE), cortex_a15)
> +ARM_CORE("cortex-a17",         cortexa17, cortexa17,           
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7VE), cortex_a12)
>  ARM_CORE("cortex-r4",           cortexr4, cortexr4,             
> 7R,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7R), cortex)
>  ARM_CORE("cortex-r4f",          cortexr4f, cortexr4f,           
> 7R,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7R), cortex)
>  ARM_CORE("cortex-r5",           cortexr5, cortexr5,             
> 7R,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_ARM_DIV | FL_FOR_ARCH7R), 
> cortex)
> @@ -162,8 +162,8 @@ ARM_CORE("cortex-m3", cortexm3, 
> cortexm3,             7M,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED |
>  ARM_CORE("marvell-pj4",         marvell_pj4, marvell_pj4,       
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7A), marvell_pj4)
>
>  /* V7 big.LITTLE implementations */
> -ARM_CORE("cortex-a15.cortex-a7", cortexa15cortexa7, cortexa7,  
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | 
> FL_FOR_ARCH7A), cortex_a15)
> -ARM_CORE("cortex-a17.cortex-a7", cortexa17cortexa7, cortexa7,  
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | 
> FL_FOR_ARCH7A), cortex_a12)
> +ARM_CORE("cortex-a15.cortex-a7", cortexa15cortexa7, cortexa7,  
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7VE), cortex_a15)
> +ARM_CORE("cortex-a17.cortex-a7", cortexa17cortexa7, cortexa7,  
> 7A,     ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7VE), cortex_a12)
>
>  /* V8 Architecture Processors */
>  ARM_CORE("cortex-a32",  cortexa32, cortexa53,   8A, 
> ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a35)
> -- 
> 1.9.1
>
Andre McCurdy Nov. 8, 2017, 7:13 p.m. UTC | #2
On Wed, Nov 8, 2017 at 2:03 AM, Kyrill  Tkachov
<kyrylo.tkachov@foss.arm.com> wrote:
> Hi Andre,
>
> On 08/11/17 05:12, Andre McCurdy wrote:
>>
>> The following commit added the FL_LPAE flag to FL_FOR_ARCH7VE, but
>> neglected to also add it to the armv7ve compatible cores defined in
>> arm-cores.def.
>>
>> https://github.com/gcc-mirror/gcc/commit/af2d9b9e58e8be576c53d94f30c48c68146b0c98
>>
>> The result is that gcc 6.4 now refuses to allow -march=armv7ve and
>> -mcpu=XXX to be used together, even when -mcpu is set to an armv7ve
>> compatible core:
>>
>>   arm-linux-gnueabi-gcc -march=armv7ve -mcpu=cortex-a7 -Werror ...
>>   error: switch -mcpu=cortex-a7 conflicts with -march=armv7ve switch
>> [-Werror]
>>
>> This is a regression relative to gcc 6.3.
>>
>> Fix by defining flags for armv7ve compatible cores directly from
>> FL_FOR_ARCH7VE, rather than re-creating the armv7ve flags
>> independently by combining FL_FOR_ARCH7A with the armv7ve specific
>> FL_THUMB_DIV and FL_ARM_DIV flags.
>>
>
> Thank you for the patch. The change looks reasonable to me.
> The way CPUs are defined internally was changed for GCC 7
> so later branches won't have this problem.
>
> How has this patch been tested?

I've tested to confirm that the error when running the above test
command (ie combining -march=armv7ve and -mcpu=cortex-a7) goes away
and I used the patched gcc to build glibc. I didn't try to run any
test suite, etc.

I didn't try to confirm that code which uses LPAE can now be
successfully built when only -mcpu=XXX is specified.

> This should be ready for committing with a proper
> ChangeLog entry [1].

I'll send a v2 patch with a ChangeLog entry.

> Thanks,
> Kyrill
>
> [1] https://gcc.gnu.org/codingconventions.html#ChangeLogs or have a look in
> the ChangeLog files in the gcc/ directory for examples
>
diff mbox series

Patch

diff --git a/gcc/config/arm/arm-cores.def b/gcc/config/arm/arm-cores.def
index 829b839..ca37e6f 100644
--- a/gcc/config/arm/arm-cores.def
+++ b/gcc/config/arm/arm-cores.def
@@ -145,12 +145,12 @@  ARM_CORE("cortex-m0plus.small-multiply",cortexm0plussmallmultiply, cortexm0plus,
 /* V7 Architecture Processors */
 ARM_CORE("generic-armv7-a",	genericv7a, genericv7a,		7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7A), cortex)
 ARM_CORE("cortex-a5",		cortexa5, cortexa5,		7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7A), cortex_a5)
-ARM_CORE("cortex-a7",		cortexa7, cortexa7,		7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | FL_FOR_ARCH7A), cortex_a7)
+ARM_CORE("cortex-a7",		cortexa7, cortexa7,		7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7VE), cortex_a7)
 ARM_CORE("cortex-a8",		cortexa8, cortexa8,		7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7A), cortex_a8)
 ARM_CORE("cortex-a9",		cortexa9, cortexa9,		7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7A), cortex_a9)
-ARM_CORE("cortex-a12",		cortexa12, cortexa17,		7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | FL_FOR_ARCH7A), cortex_a12)
-ARM_CORE("cortex-a15",		cortexa15, cortexa15,		7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | FL_FOR_ARCH7A), cortex_a15)
-ARM_CORE("cortex-a17",		cortexa17, cortexa17,		7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | FL_FOR_ARCH7A), cortex_a12)
+ARM_CORE("cortex-a12",		cortexa12, cortexa17,		7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7VE), cortex_a12)
+ARM_CORE("cortex-a15",		cortexa15, cortexa15,		7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7VE), cortex_a15)
+ARM_CORE("cortex-a17",		cortexa17, cortexa17,		7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7VE), cortex_a12)
 ARM_CORE("cortex-r4",		cortexr4, cortexr4,		7R,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7R), cortex)
 ARM_CORE("cortex-r4f",		cortexr4f, cortexr4f,		7R,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7R), cortex)
 ARM_CORE("cortex-r5",		cortexr5, cortexr5,		7R,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_ARM_DIV | FL_FOR_ARCH7R), cortex)
@@ -162,8 +162,8 @@  ARM_CORE("cortex-m3",		cortexm3, cortexm3,		7M,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED |
 ARM_CORE("marvell-pj4",		marvell_pj4, marvell_pj4,	7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7A), marvell_pj4)
 
 /* V7 big.LITTLE implementations */
-ARM_CORE("cortex-a15.cortex-a7", cortexa15cortexa7, cortexa7,	7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | FL_FOR_ARCH7A), cortex_a15)
-ARM_CORE("cortex-a17.cortex-a7", cortexa17cortexa7, cortexa7,	7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | FL_FOR_ARCH7A), cortex_a12)
+ARM_CORE("cortex-a15.cortex-a7", cortexa15cortexa7, cortexa7,	7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7VE), cortex_a15)
+ARM_CORE("cortex-a17.cortex-a7", cortexa17cortexa7, cortexa7,	7A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7VE), cortex_a12)
 
 /* V8 Architecture Processors */
 ARM_CORE("cortex-a32",	cortexa32, cortexa53,	8A,	ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a35)