2019-11-09 12:13:34

by Luc Van Oostenryck

[permalink] [raw]
Subject: [PATCH] kbuild: tell sparse about the $ARCH

Sparse uses the same executable for all archs and uses flags
like -m64, -mbig-endian or -D__arm__ for arch-specific parameters.
But Sparse also uses value from the host machine used to build
Sparse as default value for the target machine.

This works, of course, well for native build but can create
problems when cross-compiling, like defining both '__i386__'
and '__arm__' when cross-compiling for arm on a x86-64 machine.

Fix this by explicitely telling sparse the target architecture.

Reported-by: Ben Dooks <[email protected]>
Signed-off-by: Luc Van Oostenryck <[email protected]>
---
Makefile | 3 +++
1 file changed, 3 insertions(+)

diff --git a/Makefile b/Makefile
index 6f54f2f95743..05a8906dde63 100644
--- a/Makefile
+++ b/Makefile
@@ -937,6 +937,9 @@ ifeq ($(CONFIG_RELR),y)
LDFLAGS_vmlinux += --pack-dyn-relocs=relr
endif

+# make the checker run with the right architecture
+CHECKFLAGS += --arch=$(ARCH)
+
# insure the checker run with the right endianness
CHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)

--
2.24.0


2019-11-09 14:27:49

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH] kbuild: tell sparse about the $ARCH

On Sat, Nov 9, 2019 at 9:12 PM Luc Van Oostenryck
<[email protected]> wrote:
>
> Sparse uses the same executable for all archs and uses flags
> like -m64, -mbig-endian or -D__arm__ for arch-specific parameters.
> But Sparse also uses value from the host machine used to build
> Sparse as default value for the target machine.
>
> This works, of course, well for native build but can create
> problems when cross-compiling, like defining both '__i386__'
> and '__arm__' when cross-compiling for arm on a x86-64 machine.
>
> Fix this by explicitely telling sparse the target architecture.
>
> Reported-by: Ben Dooks <[email protected]>
> Signed-off-by: Luc Van Oostenryck <[email protected]>
> ---

Applied to linux-kbuild. Thanks.


> Makefile | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/Makefile b/Makefile
> index 6f54f2f95743..05a8906dde63 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -937,6 +937,9 @@ ifeq ($(CONFIG_RELR),y)
> LDFLAGS_vmlinux += --pack-dyn-relocs=relr
> endif
>
> +# make the checker run with the right architecture
> +CHECKFLAGS += --arch=$(ARCH)
> +
> # insure the checker run with the right endianness
> CHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)
>
> --
> 2.24.0
>


--
Best Regards
Masahiro Yamada