diff mbox

[v2,1/3] ARM: iwmmxt: Fix Makefile rules for building iwmmxt for Thumb-2

Message ID 1315497854-13311-2-git-send-email-dave.martin@linaro.org
State New
Headers show

Commit Message

Dave Martin Sept. 8, 2011, 4:04 p.m. UTC
Because gcc/gas have no sane way to turn on individual CPU
extensions from the command-line, iwmmxt.S was previously built
with -mcpu=iwmmxt.  Unfortunately, this also downgrades the CPU to
v5, with the result that this file fails to build for a Thumb-2
kernel.

New versions of the tools support -march=<base arch>+iwmmxt, and it
seems reasonable to require up-to-date tools when building in
Thumb-2.  So, this patch uses -march=armv7-a+iwmmxt for
CONFIG_THUMB2_KERNEL=y.

Signed-off-by: Dave Martin <dave.martin@linaro.org>
---
 arch/arm/kernel/Makefile |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

Comments

Arnd Bergmann Sept. 8, 2011, 4:45 p.m. UTC | #1
On Thursday 08 September 2011, Dave Martin wrote:
> Because gcc/gas have no sane way to turn on individual CPU
> extensions from the command-line, iwmmxt.S was previously built
> with -mcpu=iwmmxt.  Unfortunately, this also downgrades the CPU to
> v5, with the result that this file fails to build for a Thumb-2
> kernel.
> 
> New versions of the tools support -march=<base arch>+iwmmxt, and it
> seems reasonable to require up-to-date tools when building in
> Thumb-2.  So, this patch uses -march=armv7-a+iwmmxt for
> CONFIG_THUMB2_KERNEL=y.
> 
> Signed-off-by: Dave Martin <dave.martin@linaro.org>

Ok. More complex than I would have liked, but this definitely does
the right thing in every case, as far as I can tell.

Acked-by: Arnd Bergmann <arnd@arndb.de>
Nicolas Pitre Sept. 8, 2011, 5:09 p.m. UTC | #2
On Thu, 8 Sep 2011, Dave Martin wrote:

> Because gcc/gas have no sane way to turn on individual CPU
> extensions from the command-line, iwmmxt.S was previously built
> with -mcpu=iwmmxt.  Unfortunately, this also downgrades the CPU to
> v5, with the result that this file fails to build for a Thumb-2
> kernel.
> 
> New versions of the tools support -march=<base arch>+iwmmxt, and it
> seems reasonable to require up-to-date tools when building in
> Thumb-2.  So, this patch uses -march=armv7-a+iwmmxt for
> CONFIG_THUMB2_KERNEL=y.
> 
> Signed-off-by: Dave Martin <dave.martin@linaro.org>

I like this one better.

Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org>

As you said, this should be merged with #2/3.



> ---
>  arch/arm/kernel/Makefile |   12 ++++++++++++
>  1 files changed, 12 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
> index f7887dc..e03691e 100644
> --- a/arch/arm/kernel/Makefile
> +++ b/arch/arm/kernel/Makefile
> @@ -66,6 +66,18 @@ obj-$(CONFIG_IWMMXT)		+= iwmmxt.o
>  obj-$(CONFIG_CPU_HAS_PMU)	+= pmu.o
>  obj-$(CONFIG_HW_PERF_EVENTS)	+= perf_event.o
>  AFLAGS_iwmmxt.o			:= -Wa,-mcpu=iwmmxt
> +ifdef CONFIG_CPU_V7
> +AFLAGS_iwmmxt.o			:= $(call cc-option,-Wa$(comma)-march=armv7-a+iwmmxt,-DIWMMXT_LEGACY_ASSEMBLER)
> +ifeq ($(AFLAGS_iwmmxt.o),-DIWMMXT_LEGACY_ASSEMBLER)
> +ifdef CONFIG_THUMB2_KERNEL
> +$(error Newer binutils is needed to build iwmmxt support for Thumb-2 kernels.)
> +else
> +$(warning Warning: Building legacy pre-v7 iwmmxt code for a v7 target.\
> +  This is inadvisable.  Please upgrade to newer binutils.)
> +AFLAGS_iwmmxt.o			+= -Wa,-mcpu=iwmmxt
> +endif
> +endif
> +endif # CONFIG_CPU_V7
>  
>  ifneq ($(CONFIG_ARCH_EBSA110),y)
>    obj-y		+= io.o
> -- 
> 1.7.4.1
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
Dave Martin Sept. 8, 2011, 5:14 p.m. UTC | #3
On Thu, Sep 08, 2011 at 06:45:32PM +0200, Arnd Bergmann wrote:
> On Thursday 08 September 2011, Dave Martin wrote:
> > Because gcc/gas have no sane way to turn on individual CPU
> > extensions from the command-line, iwmmxt.S was previously built
> > with -mcpu=iwmmxt.  Unfortunately, this also downgrades the CPU to
> > v5, with the result that this file fails to build for a Thumb-2
> > kernel.
> > 
> > New versions of the tools support -march=<base arch>+iwmmxt, and it
> > seems reasonable to require up-to-date tools when building in
> > Thumb-2.  So, this patch uses -march=armv7-a+iwmmxt for
> > CONFIG_THUMB2_KERNEL=y.
> > 
> > Signed-off-by: Dave Martin <dave.martin@linaro.org>
> 
> Ok. More complex than I would have liked, but this definitely does
> the right thing in every case, as far as I can tell.

Actually, there is still one problem, which is that the errors/warnings
will be triggered even if iwmmxt is not being built.

This is straightforward to work around, and I have a local fix for it
which I'll incorporate in v3.

> Acked-by: Arnd Bergmann <arnd@arndb.de>

Thanks

I certainly agree with the comment about complexity -- if anyone
has any better ideas, I'm still interested...

We should eventually be able to get rid of this, but not for years
(until currentl binutils versions are effecitvely obsolete).

Cheers
---Dave
diff mbox

Patch

diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
index f7887dc..e03691e 100644
--- a/arch/arm/kernel/Makefile
+++ b/arch/arm/kernel/Makefile
@@ -66,6 +66,18 @@  obj-$(CONFIG_IWMMXT)		+= iwmmxt.o
 obj-$(CONFIG_CPU_HAS_PMU)	+= pmu.o
 obj-$(CONFIG_HW_PERF_EVENTS)	+= perf_event.o
 AFLAGS_iwmmxt.o			:= -Wa,-mcpu=iwmmxt
+ifdef CONFIG_CPU_V7
+AFLAGS_iwmmxt.o			:= $(call cc-option,-Wa$(comma)-march=armv7-a+iwmmxt,-DIWMMXT_LEGACY_ASSEMBLER)
+ifeq ($(AFLAGS_iwmmxt.o),-DIWMMXT_LEGACY_ASSEMBLER)
+ifdef CONFIG_THUMB2_KERNEL
+$(error Newer binutils is needed to build iwmmxt support for Thumb-2 kernels.)
+else
+$(warning Warning: Building legacy pre-v7 iwmmxt code for a v7 target.\
+  This is inadvisable.  Please upgrade to newer binutils.)
+AFLAGS_iwmmxt.o			+= -Wa,-mcpu=iwmmxt
+endif
+endif
+endif # CONFIG_CPU_V7
 
 ifneq ($(CONFIG_ARCH_EBSA110),y)
   obj-y		+= io.o