2006-12-01 13:58:21

by Geert Uytterhoeven

[permalink] [raw]
Subject: `make checkstack' and cross-compilation


Makefile has:
| # Use $(SUBARCH) here instead of $(ARCH) so that this works for UML.
| # In the UML case, $(SUBARCH) is the name of the underlying
| # architecture, while for all other arches, it is the same as $(ARCH).
| checkstack:
| $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
| $(PERL) $(src)/scripts/checkstack.pl $(SUBARCH)

While this may fix `make checkstack' for UML, it breaks cross-compilation.
E.g. when cross-compiling for PPC on ia32, ARCH=powerpc, but SUBARCH=i386.

Probably it should use SUBARCH if ARCH=um, and ARCH otherwise?

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- Sony Network and Software Technology Center Europe (NSCE)
[email protected] ------- The Corporate Village, Da Vincilaan 7-D1
Voice +32-2-7008453 Fax +32-2-7008622 ---------------- B-1935 Zaventem, Belgium


2006-12-01 15:34:15

by Jeff Dike

[permalink] [raw]
Subject: Re: `make checkstack' and cross-compilation

On Fri, Dec 01, 2006 at 02:58:16PM +0100, Geert Uytterhoeven wrote:
> Makefile has:
> | # Use $(SUBARCH) here instead of $(ARCH) so that this works for UML.
> | # In the UML case, $(SUBARCH) is the name of the underlying
> | # architecture, while for all other arches, it is the same as $(ARCH).
> | checkstack:
> | $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
> | $(PERL) $(src)/scripts/checkstack.pl $(SUBARCH)
>
> While this may fix `make checkstack' for UML, it breaks cross-compilation.
> E.g. when cross-compiling for PPC on ia32, ARCH=powerpc, but SUBARCH=i386.
>
> Probably it should use SUBARCH if ARCH=um, and ARCH otherwise?

Whoops, you're right.

Do you have a patch? If not, I'll make one.

And, do you have a cross-compilation environment which tests this?

Jeff

--
Work email - jdike at linux dot intel dot com

2006-12-01 16:09:19

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: `make checkstack' and cross-compilation

On Fri, 1 Dec 2006, Jeff Dike wrote:
> On Fri, Dec 01, 2006 at 02:58:16PM +0100, Geert Uytterhoeven wrote:
> > Makefile has:
> > | # Use $(SUBARCH) here instead of $(ARCH) so that this works for UML.
> > | # In the UML case, $(SUBARCH) is the name of the underlying
> > | # architecture, while for all other arches, it is the same as $(ARCH).
> > | checkstack:
> > | $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
> > | $(PERL) $(src)/scripts/checkstack.pl $(SUBARCH)
> >
> > While this may fix `make checkstack' for UML, it breaks cross-compilation.
> > E.g. when cross-compiling for PPC on ia32, ARCH=powerpc, but SUBARCH=i386.
> >
> > Probably it should use SUBARCH if ARCH=um, and ARCH otherwise?
>
> Whoops, you're right.
>
> Do you have a patch? If not, I'll make one.

No.

> And, do you have a cross-compilation environment which tests this?

Yes :-)

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- Sony Network and Software Technology Center Europe (NSCE)
[email protected] ------- The Corporate Village, Da Vincilaan 7-D1
Voice +32-2-7008453 Fax +32-2-7008622 ---------------- B-1935 Zaventem, Belgium

2006-12-05 18:14:16

by Jeff Dike

[permalink] [raw]
Subject: Re: `make checkstack' and cross-compilation

On Fri, Dec 01, 2006 at 05:09:17PM +0100, Geert Uytterhoeven wrote:
> On Fri, 1 Dec 2006, Jeff Dike wrote:
> > And, do you have a cross-compilation environment which tests this?
>
> Yes :-)

Can you test this patch? It works for UML and native x86_64 - if it works
for your cross-build, I'll send it in.

Jeff

Index: linux-2.6.18-mm/Makefile
===================================================================
--- linux-2.6.18-mm.orig/Makefile 2006-11-24 14:36:32.000000000 -0500
+++ linux-2.6.18-mm/Makefile 2006-12-05 13:08:20.000000000 -0500
@@ -1390,12 +1390,18 @@ endif #ifeq ($(mixed-targets),1)

PHONY += checkstack kernelrelease kernelversion

-# Use $(SUBARCH) here instead of $(ARCH) so that this works for UML.
-# In the UML case, $(SUBARCH) is the name of the underlying
-# architecture, while for all other arches, it is the same as $(ARCH).
+# UML needs a little special treatment here. It wants to use the host
+# toolchain, so needs $(SUBARCH) passed to checkstack.pl. Everyone
+# else wants $(ARCH), including people doing cross-builds, which means
+# that $(SUBARCH) doesn't work here.
+ifeq ($(ARCH), um)
+CHECKSTACK_ARCH := $(SUBARCH)
+else
+CHECKSTACK_ARCH := $(ARCH)
+endif
checkstack:
$(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
- $(PERL) $(src)/scripts/checkstack.pl $(SUBARCH)
+ $(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)

kernelrelease:
$(if $(wildcard include/config/kernel.release), $(Q)echo $(KERNELRELEASE), \


--
Work email - jdike at linux dot intel dot com

2006-12-06 09:35:25

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: `make checkstack' and cross-compilation

On Tue, 5 Dec 2006, Jeff Dike wrote:
> On Fri, Dec 01, 2006 at 05:09:17PM +0100, Geert Uytterhoeven wrote:
> > On Fri, 1 Dec 2006, Jeff Dike wrote:
> > > And, do you have a cross-compilation environment which tests this?
> >
> > Yes :-)
>
> Can you test this patch? It works for UML and native x86_64 - if it works
> for your cross-build, I'll send it in.

Thanks, works fine for cross-compiling for powerpc.

Acked-by: Geert Uytterhoeven <[email protected]>

> Index: linux-2.6.18-mm/Makefile
> ===================================================================
> --- linux-2.6.18-mm.orig/Makefile 2006-11-24 14:36:32.000000000 -0500
> +++ linux-2.6.18-mm/Makefile 2006-12-05 13:08:20.000000000 -0500
> @@ -1390,12 +1390,18 @@ endif #ifeq ($(mixed-targets),1)
>
> PHONY += checkstack kernelrelease kernelversion
>
> -# Use $(SUBARCH) here instead of $(ARCH) so that this works for UML.
> -# In the UML case, $(SUBARCH) is the name of the underlying
> -# architecture, while for all other arches, it is the same as $(ARCH).
> +# UML needs a little special treatment here. It wants to use the host
> +# toolchain, so needs $(SUBARCH) passed to checkstack.pl. Everyone
> +# else wants $(ARCH), including people doing cross-builds, which means
> +# that $(SUBARCH) doesn't work here.
> +ifeq ($(ARCH), um)
> +CHECKSTACK_ARCH := $(SUBARCH)
> +else
> +CHECKSTACK_ARCH := $(ARCH)
> +endif
> checkstack:
> $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
> - $(PERL) $(src)/scripts/checkstack.pl $(SUBARCH)
> + $(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
>
> kernelrelease:
> $(if $(wildcard include/config/kernel.release), $(Q)echo $(KERNELRELEASE), \

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- Sony Network and Software Technology Center Europe (NSCE)
[email protected] ------- The Corporate Village, Da Vincilaan 7-D1
Voice +32-2-7008453 Fax +32-2-7008622 ---------------- B-1935 Zaventem, Belgium