* [Buildroot] [PATCH RFC 0/4] Basic support for 64-bit kernel and 32-bit userland @ 2021-05-18 11:36 Thomas De Schampheleire 2021-05-18 11:36 ` [Buildroot] [PATCH 1/4] arch: move definition of KERNEL_ARCH to Config.in.<arch> files Thomas De Schampheleire ` (3 more replies) 0 siblings, 4 replies; 18+ messages in thread From: Thomas De Schampheleire @ 2021-05-18 11:36 UTC (permalink / raw) To: buildroot From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> Hello, Even though there are already cases where a 64-bit kernel is combined with 32-bit userland, like MIPS64n32, that Buildroot can support out-of-the-box, there are other combinations that don't currently work. At work, we have two such cases: - 64-bit x86_64 kernel with 32-bit i386 userspace - 64-bit aarch64 kernel with 32-bit arm userspace This series adds basic support for these cases, with the limitation that the user still needs to know what they are doing. Patch 1 is a general improvement and can land even if you don't agree with the rest. Patch 2 handles the realization that 'KERNEL_ARCH' can mean two different things, and that we need two separate variables. Patch 3 makes it possible for users to specify the kernel architecture that differs from the Buildroot notion of userspace architecture. Patch 4 fixes the build of perf in this mixed 64-bit-kernel+32-bit-userspace case. As hinted above, users that would like to employ such scenarios still need to know what they are doing: - the correct value of BR2_KERNEL_ARCH_OVERRIDE is to be known by the user - the toolchain should be capable of generating both 64-bit (kernel) output as well as 32-bit userspace output. This is typically done with a multilib toolchain, where the default output is 64-bit so that the kernel build does not require additional changes, while passing the correct '-mXXX' flag as BR2_TARGET_OPTIMIZATION for the userspace compilations. - it is not possible to create one multilib toolchain that supports Aarch64 and (32-bit) ARM output. We have solved it by packaging two individual toolchains in one archive, with symlinks at top-level to the 32-bit toolchain, and some additional changes in Buildroot to make sure the 64-bit toolchain is used where needed (kernel, bootloader) - BR2_KERNEL_64_USERLAND_32 is not automatically passed. An alternative implementation would be to explicitly support certain combinations, but this is less flexible. Best regards, Thomas Thomas De Schampheleire (4): arch: move definition of KERNEL_ARCH to Config.in.<arch> files core: introduce NORMALIZED_ARCH as non-kernel replacement for KERNEL_ARCH core: introduce BR2_KERNEL_ARCH_OVERRIDE perf: fix compilation in case of i386 userspace with x86_64 kernel Makefile | 22 +++++-------------- arch/Config.in | 18 +++++++++++++++ arch/Config.in.arc | 3 +++ arch/Config.in.arm | 4 ++++ arch/Config.in.csky | 3 +++ arch/Config.in.m68k | 3 +++ arch/Config.in.microblaze | 3 +++ arch/Config.in.mips | 3 +++ arch/Config.in.nds32 | 3 +++ arch/Config.in.nios2 | 3 +++ arch/Config.in.or1k | 3 +++ arch/Config.in.powerpc | 3 +++ arch/Config.in.riscv | 3 +++ arch/Config.in.s390x | 3 +++ arch/Config.in.sh | 3 +++ arch/Config.in.sparc | 4 ++++ arch/Config.in.x86 | 4 ++++ arch/Config.in.xtensa | 3 +++ boot/barebox/barebox.mk | 10 ++++----- boot/uboot/uboot.mk | 6 ++--- package/busybox/busybox.mk | 2 +- .../environment-setup/environment-setup.mk | 2 +- package/kvmtool/kvmtool.mk | 4 ++-- package/libselinux/libselinux.mk | 2 +- package/linux-tools/linux-tool-perf.mk.in | 7 ++++-- .../linux-tools/linux-tool-selftests.mk.in | 6 ++--- package/olsr/olsr.mk | 4 ++-- package/pciutils/pciutils.mk | 2 +- package/uboot-tools/uboot-tools.mk | 10 ++++----- 29 files changed, 104 insertions(+), 42 deletions(-) -- 2.26.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [Buildroot] [PATCH 1/4] arch: move definition of KERNEL_ARCH to Config.in.<arch> files 2021-05-18 11:36 [Buildroot] [PATCH RFC 0/4] Basic support for 64-bit kernel and 32-bit userland Thomas De Schampheleire @ 2021-05-18 11:36 ` Thomas De Schampheleire 2022-01-13 20:48 ` Romain Naour 2021-05-18 11:36 ` [Buildroot] [PATCH 2/4] core: introduce NORMALIZED_ARCH as non-kernel replacement for KERNEL_ARCH Thomas De Schampheleire ` (2 subsequent siblings) 3 siblings, 1 reply; 18+ messages in thread From: Thomas De Schampheleire @ 2021-05-18 11:36 UTC (permalink / raw) To: buildroot From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> Similar to other arch-specific strings, the 'KERNEL_ARCH' variable can be determined from Config.in.<arch> files. Besides aligning with similar strings, this also means simplification: the big 'sed' covers several architectures not even supported by Buildroot. Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> --- Makefile | 17 +---------------- arch/Config.in | 3 +++ arch/Config.in.arc | 3 +++ arch/Config.in.arm | 4 ++++ arch/Config.in.csky | 3 +++ arch/Config.in.m68k | 3 +++ arch/Config.in.microblaze | 3 +++ arch/Config.in.mips | 3 +++ arch/Config.in.nds32 | 3 +++ arch/Config.in.nios2 | 3 +++ arch/Config.in.or1k | 3 +++ arch/Config.in.powerpc | 3 +++ arch/Config.in.riscv | 3 +++ arch/Config.in.s390x | 3 +++ arch/Config.in.sh | 3 +++ arch/Config.in.sparc | 4 ++++ arch/Config.in.x86 | 4 ++++ arch/Config.in.xtensa | 3 +++ 18 files changed, 55 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index c3305f46e9..7b6998fde6 100644 --- a/Makefile +++ b/Makefile @@ -433,22 +433,7 @@ QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q) # Strip off the annoying quoting ARCH := $(call qstrip,$(BR2_ARCH)) - -KERNEL_ARCH := $(shell echo "$(ARCH)" | sed -e "s/-.*//" \ - -e s/i.86/i386/ -e s/sun4u/sparc64/ \ - -e s/arcle/arc/ \ - -e s/arceb/arc/ \ - -e s/arm.*/arm/ -e s/sa110/arm/ \ - -e s/aarch64.*/arm64/ \ - -e s/nds32.*/nds32/ \ - -e s/or1k/openrisc/ \ - -e s/parisc64/parisc/ \ - -e s/powerpc64.*/powerpc/ \ - -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \ - -e s/riscv.*/riscv/ \ - -e s/sh.*/sh/ \ - -e s/s390x/s390/ \ - -e s/microblazeel/microblaze/) +KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) ZCAT := $(call qstrip,$(BR2_ZCAT)) BZCAT := $(call qstrip,$(BR2_BZCAT)) diff --git a/arch/Config.in b/arch/Config.in index 155403c363..7575acf48c 100644 --- a/arch/Config.in +++ b/arch/Config.in @@ -326,6 +326,9 @@ config BR2_ARCH_NEEDS_GCC_AT_LEAST_10 config BR2_ARCH string +config BR2_KERNEL_ARCH + string + config BR2_ENDIAN string diff --git a/arch/Config.in.arc b/arch/Config.in.arc index f7a6d920b5..cc55c9e68f 100644 --- a/arch/Config.in.arc +++ b/arch/Config.in.arc @@ -62,6 +62,9 @@ config BR2_ARCH default "arc" if BR2_arcle default "arceb" if BR2_arceb +config BR2_KERNEL_ARCH + default "arc" + config BR2_arc bool default y if BR2_arcle || BR2_arceb diff --git a/arch/Config.in.arm b/arch/Config.in.arm index 4c0910e4f8..0f50512fad 100644 --- a/arch/Config.in.arm +++ b/arch/Config.in.arm @@ -822,6 +822,10 @@ config BR2_ARCH default "aarch64" if BR2_aarch64 default "aarch64_be" if BR2_aarch64_be +config BR2_KERNEL_ARCH + default "arm" if BR2_arm || BR2_armeb + default "arm64" if BR2_aarch64 || BR2_aarch64_be + config BR2_ENDIAN default "LITTLE" if (BR2_arm || BR2_aarch64) default "BIG" if (BR2_armeb || BR2_aarch64_be) diff --git a/arch/Config.in.csky b/arch/Config.in.csky index 7e2029f759..df9e7ab75b 100644 --- a/arch/Config.in.csky +++ b/arch/Config.in.csky @@ -39,6 +39,9 @@ config BR2_GCC_TARGET_FLOAT_ABI config BR2_ARCH default "csky" +config BR2_KERNEL_ARCH + default "csky" + config BR2_ENDIAN default "LITTLE" diff --git a/arch/Config.in.m68k b/arch/Config.in.m68k index 275f47f1d3..7f3aec7232 100644 --- a/arch/Config.in.m68k +++ b/arch/Config.in.m68k @@ -1,6 +1,9 @@ config BR2_ARCH default "m68k" if BR2_m68k +config BR2_KERNEL_ARCH + default "m68k" + config BR2_ENDIAN default "BIG" diff --git a/arch/Config.in.microblaze b/arch/Config.in.microblaze index 5fe2906d40..52aa252a2c 100644 --- a/arch/Config.in.microblaze +++ b/arch/Config.in.microblaze @@ -2,6 +2,9 @@ config BR2_ARCH default "microblazeel" if BR2_microblazeel default "microblaze" if BR2_microblazebe +config BR2_KERNEL_ARCH + default "microblaze" + config BR2_ENDIAN default "LITTLE" if BR2_microblazeel default "BIG" if BR2_microblazebe diff --git a/arch/Config.in.mips b/arch/Config.in.mips index 619456c2d5..b4923f8484 100644 --- a/arch/Config.in.mips +++ b/arch/Config.in.mips @@ -235,6 +235,9 @@ config BR2_ARCH default "mips64" if BR2_mips64 default "mips64el" if BR2_mips64el +config BR2_KERNEL_ARCH + default "mips" + config BR2_ENDIAN default "LITTLE" if BR2_mipsel || BR2_mips64el default "BIG" if BR2_mips || BR2_mips64 diff --git a/arch/Config.in.nds32 b/arch/Config.in.nds32 index 322ff49f2e..61fc346260 100644 --- a/arch/Config.in.nds32 +++ b/arch/Config.in.nds32 @@ -1,6 +1,9 @@ config BR2_ARCH default "nds32le" +config BR2_KERNEL_ARCH + default "nds32" + config BR2_GCC_TARGET_ARCH default "v3" diff --git a/arch/Config.in.nios2 b/arch/Config.in.nios2 index aae435fa17..c77b1a1c59 100644 --- a/arch/Config.in.nios2 +++ b/arch/Config.in.nios2 @@ -1,6 +1,9 @@ config BR2_ARCH default "nios2" +config BR2_KERNEL_ARCH + default "nios2" + config BR2_ENDIAN default "LITTLE" diff --git a/arch/Config.in.or1k b/arch/Config.in.or1k index abdf498fb8..ef1bded453 100644 --- a/arch/Config.in.or1k +++ b/arch/Config.in.or1k @@ -1,6 +1,9 @@ config BR2_ARCH default "or1k" +config BR2_KERNEL_ARCH + default "openrisc" + config BR2_ENDIAN default "BIG" diff --git a/arch/Config.in.powerpc b/arch/Config.in.powerpc index ba56c9c721..33b2471cf9 100644 --- a/arch/Config.in.powerpc +++ b/arch/Config.in.powerpc @@ -157,6 +157,9 @@ config BR2_ARCH default "powerpc64" if BR2_powerpc64 default "powerpc64le" if BR2_powerpc64le +config BR2_KERNEL_ARCH + default "powerpc" + config BR2_ENDIAN default "BIG" if BR2_powerpc || BR2_powerpc64 default "LITTLE" if BR2_powerpc64le diff --git a/arch/Config.in.riscv b/arch/Config.in.riscv index 1fc20e5de7..e8b6ddc833 100644 --- a/arch/Config.in.riscv +++ b/arch/Config.in.riscv @@ -116,6 +116,9 @@ config BR2_ARCH default "riscv32" if !BR2_ARCH_IS_64 default "riscv64" if BR2_ARCH_IS_64 +config BR2_KERNEL_ARCH + default "riscv" + config BR2_ENDIAN default "LITTLE" diff --git a/arch/Config.in.s390x b/arch/Config.in.s390x index ad866b421e..bf4b70f957 100644 --- a/arch/Config.in.s390x +++ b/arch/Config.in.s390x @@ -17,6 +17,9 @@ endchoice config BR2_ARCH default "s390x" if BR2_s390x +config BR2_KERNEL_ARCH + default "s390" + config BR2_ENDIAN default "BIG" diff --git a/arch/Config.in.sh b/arch/Config.in.sh index b5cce18e22..fde42dfce2 100644 --- a/arch/Config.in.sh +++ b/arch/Config.in.sh @@ -24,6 +24,9 @@ config BR2_ARCH default "sh4a" if BR2_sh4a default "sh4aeb" if BR2_sh4aeb +config BR2_KERNEL_ARCH + default "sh" + config BR2_ENDIAN default "LITTLE" if BR2_sh4 || BR2_sh4a default "BIG" if BR2_sh2a || BR2_sh4eb || BR2_sh4aeb diff --git a/arch/Config.in.sparc b/arch/Config.in.sparc index 4c4dc61745..b91df6892b 100644 --- a/arch/Config.in.sparc +++ b/arch/Config.in.sparc @@ -21,6 +21,10 @@ config BR2_ARCH default "sparc" if BR2_sparc default "sparc64" if BR2_sparc64 +config BR2_KERNEL_ARCH + default "sparc" if BR2_sparc + default "sparc64" if BR2_sparc64 + config BR2_ENDIAN default "BIG" diff --git a/arch/Config.in.x86 b/arch/Config.in.x86 index 7aae3cafb7..88ac9cdc44 100644 --- a/arch/Config.in.x86 +++ b/arch/Config.in.x86 @@ -266,6 +266,10 @@ config BR2_ARCH default "i686" if BR2_x86_athlon_4 default "x86_64" if BR2_x86_64 +config BR2_KERNEL_ARCH + default "i386" if !BR2_x86_64 + default "x86_64" if BR2_x86_64 + config BR2_ENDIAN default "LITTLE" diff --git a/arch/Config.in.xtensa b/arch/Config.in.xtensa index a79d906985..acc340eca6 100644 --- a/arch/Config.in.xtensa +++ b/arch/Config.in.xtensa @@ -48,6 +48,9 @@ config BR2_ENDIAN config BR2_ARCH default "xtensa" if BR2_xtensa +config BR2_KERNEL_ARCH + default "xtensa" + config BR2_READELF_ARCH_NAME default "Tensilica Xtensa Processor" -- 2.26.3 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [Buildroot] [PATCH 1/4] arch: move definition of KERNEL_ARCH to Config.in.<arch> files 2021-05-18 11:36 ` [Buildroot] [PATCH 1/4] arch: move definition of KERNEL_ARCH to Config.in.<arch> files Thomas De Schampheleire @ 2022-01-13 20:48 ` Romain Naour 0 siblings, 0 replies; 18+ messages in thread From: Romain Naour @ 2022-01-13 20:48 UTC (permalink / raw) To: Thomas De Schampheleire, buildroot Cc: ARC Maintainers, Guo Ren, Mark Corbin, Alexander Egorenkov, Nylon Chen, Thomas Petazzoni, Spenser Gilliland, Cyril Bur, Thomas De Schampheleire Hi Thomas, Le 18/05/2021 à 13:36, Thomas De Schampheleire a écrit : > From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > Similar to other arch-specific strings, the 'KERNEL_ARCH' variable can be > determined from Config.in.<arch> files. > > Besides aligning with similar strings, this also means simplification: the > big 'sed' covers several architectures not even supported by Buildroot. > Reviewed-by: Romain Naour <romain.naour@gmail.com> Best regards, Romain > Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > --- > Makefile | 17 +---------------- > arch/Config.in | 3 +++ > arch/Config.in.arc | 3 +++ > arch/Config.in.arm | 4 ++++ > arch/Config.in.csky | 3 +++ > arch/Config.in.m68k | 3 +++ > arch/Config.in.microblaze | 3 +++ > arch/Config.in.mips | 3 +++ > arch/Config.in.nds32 | 3 +++ > arch/Config.in.nios2 | 3 +++ > arch/Config.in.or1k | 3 +++ > arch/Config.in.powerpc | 3 +++ > arch/Config.in.riscv | 3 +++ > arch/Config.in.s390x | 3 +++ > arch/Config.in.sh | 3 +++ > arch/Config.in.sparc | 4 ++++ > arch/Config.in.x86 | 4 ++++ > arch/Config.in.xtensa | 3 +++ > 18 files changed, 55 insertions(+), 16 deletions(-) > > diff --git a/Makefile b/Makefile > index c3305f46e9..7b6998fde6 100644 > --- a/Makefile > +++ b/Makefile > @@ -433,22 +433,7 @@ QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q) > > # Strip off the annoying quoting > ARCH := $(call qstrip,$(BR2_ARCH)) > - > -KERNEL_ARCH := $(shell echo "$(ARCH)" | sed -e "s/-.*//" \ > - -e s/i.86/i386/ -e s/sun4u/sparc64/ \ > - -e s/arcle/arc/ \ > - -e s/arceb/arc/ \ > - -e s/arm.*/arm/ -e s/sa110/arm/ \ > - -e s/aarch64.*/arm64/ \ > - -e s/nds32.*/nds32/ \ > - -e s/or1k/openrisc/ \ > - -e s/parisc64/parisc/ \ > - -e s/powerpc64.*/powerpc/ \ > - -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \ > - -e s/riscv.*/riscv/ \ > - -e s/sh.*/sh/ \ > - -e s/s390x/s390/ \ > - -e s/microblazeel/microblaze/) > +KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) > > ZCAT := $(call qstrip,$(BR2_ZCAT)) > BZCAT := $(call qstrip,$(BR2_BZCAT)) > diff --git a/arch/Config.in b/arch/Config.in > index 155403c363..7575acf48c 100644 > --- a/arch/Config.in > +++ b/arch/Config.in > @@ -326,6 +326,9 @@ config BR2_ARCH_NEEDS_GCC_AT_LEAST_10 > config BR2_ARCH > string > > +config BR2_KERNEL_ARCH > + string > + > config BR2_ENDIAN > string > > diff --git a/arch/Config.in.arc b/arch/Config.in.arc > index f7a6d920b5..cc55c9e68f 100644 > --- a/arch/Config.in.arc > +++ b/arch/Config.in.arc > @@ -62,6 +62,9 @@ config BR2_ARCH > default "arc" if BR2_arcle > default "arceb" if BR2_arceb > > +config BR2_KERNEL_ARCH > + default "arc" > + > config BR2_arc > bool > default y if BR2_arcle || BR2_arceb > diff --git a/arch/Config.in.arm b/arch/Config.in.arm > index 4c0910e4f8..0f50512fad 100644 > --- a/arch/Config.in.arm > +++ b/arch/Config.in.arm > @@ -822,6 +822,10 @@ config BR2_ARCH > default "aarch64" if BR2_aarch64 > default "aarch64_be" if BR2_aarch64_be > > +config BR2_KERNEL_ARCH > + default "arm" if BR2_arm || BR2_armeb > + default "arm64" if BR2_aarch64 || BR2_aarch64_be > + > config BR2_ENDIAN > default "LITTLE" if (BR2_arm || BR2_aarch64) > default "BIG" if (BR2_armeb || BR2_aarch64_be) > diff --git a/arch/Config.in.csky b/arch/Config.in.csky > index 7e2029f759..df9e7ab75b 100644 > --- a/arch/Config.in.csky > +++ b/arch/Config.in.csky > @@ -39,6 +39,9 @@ config BR2_GCC_TARGET_FLOAT_ABI > config BR2_ARCH > default "csky" > > +config BR2_KERNEL_ARCH > + default "csky" > + > config BR2_ENDIAN > default "LITTLE" > > diff --git a/arch/Config.in.m68k b/arch/Config.in.m68k > index 275f47f1d3..7f3aec7232 100644 > --- a/arch/Config.in.m68k > +++ b/arch/Config.in.m68k > @@ -1,6 +1,9 @@ > config BR2_ARCH > default "m68k" if BR2_m68k > > +config BR2_KERNEL_ARCH > + default "m68k" > + > config BR2_ENDIAN > default "BIG" > > diff --git a/arch/Config.in.microblaze b/arch/Config.in.microblaze > index 5fe2906d40..52aa252a2c 100644 > --- a/arch/Config.in.microblaze > +++ b/arch/Config.in.microblaze > @@ -2,6 +2,9 @@ config BR2_ARCH > default "microblazeel" if BR2_microblazeel > default "microblaze" if BR2_microblazebe > > +config BR2_KERNEL_ARCH > + default "microblaze" > + > config BR2_ENDIAN > default "LITTLE" if BR2_microblazeel > default "BIG" if BR2_microblazebe > diff --git a/arch/Config.in.mips b/arch/Config.in.mips > index 619456c2d5..b4923f8484 100644 > --- a/arch/Config.in.mips > +++ b/arch/Config.in.mips > @@ -235,6 +235,9 @@ config BR2_ARCH > default "mips64" if BR2_mips64 > default "mips64el" if BR2_mips64el > > +config BR2_KERNEL_ARCH > + default "mips" > + > config BR2_ENDIAN > default "LITTLE" if BR2_mipsel || BR2_mips64el > default "BIG" if BR2_mips || BR2_mips64 > diff --git a/arch/Config.in.nds32 b/arch/Config.in.nds32 > index 322ff49f2e..61fc346260 100644 > --- a/arch/Config.in.nds32 > +++ b/arch/Config.in.nds32 > @@ -1,6 +1,9 @@ > config BR2_ARCH > default "nds32le" > > +config BR2_KERNEL_ARCH > + default "nds32" > + > config BR2_GCC_TARGET_ARCH > default "v3" > > diff --git a/arch/Config.in.nios2 b/arch/Config.in.nios2 > index aae435fa17..c77b1a1c59 100644 > --- a/arch/Config.in.nios2 > +++ b/arch/Config.in.nios2 > @@ -1,6 +1,9 @@ > config BR2_ARCH > default "nios2" > > +config BR2_KERNEL_ARCH > + default "nios2" > + > config BR2_ENDIAN > default "LITTLE" > > diff --git a/arch/Config.in.or1k b/arch/Config.in.or1k > index abdf498fb8..ef1bded453 100644 > --- a/arch/Config.in.or1k > +++ b/arch/Config.in.or1k > @@ -1,6 +1,9 @@ > config BR2_ARCH > default "or1k" > > +config BR2_KERNEL_ARCH > + default "openrisc" > + > config BR2_ENDIAN > default "BIG" > > diff --git a/arch/Config.in.powerpc b/arch/Config.in.powerpc > index ba56c9c721..33b2471cf9 100644 > --- a/arch/Config.in.powerpc > +++ b/arch/Config.in.powerpc > @@ -157,6 +157,9 @@ config BR2_ARCH > default "powerpc64" if BR2_powerpc64 > default "powerpc64le" if BR2_powerpc64le > > +config BR2_KERNEL_ARCH > + default "powerpc" > + > config BR2_ENDIAN > default "BIG" if BR2_powerpc || BR2_powerpc64 > default "LITTLE" if BR2_powerpc64le > diff --git a/arch/Config.in.riscv b/arch/Config.in.riscv > index 1fc20e5de7..e8b6ddc833 100644 > --- a/arch/Config.in.riscv > +++ b/arch/Config.in.riscv > @@ -116,6 +116,9 @@ config BR2_ARCH > default "riscv32" if !BR2_ARCH_IS_64 > default "riscv64" if BR2_ARCH_IS_64 > > +config BR2_KERNEL_ARCH > + default "riscv" > + > config BR2_ENDIAN > default "LITTLE" > > diff --git a/arch/Config.in.s390x b/arch/Config.in.s390x > index ad866b421e..bf4b70f957 100644 > --- a/arch/Config.in.s390x > +++ b/arch/Config.in.s390x > @@ -17,6 +17,9 @@ endchoice > config BR2_ARCH > default "s390x" if BR2_s390x > > +config BR2_KERNEL_ARCH > + default "s390" > + > config BR2_ENDIAN > default "BIG" > > diff --git a/arch/Config.in.sh b/arch/Config.in.sh > index b5cce18e22..fde42dfce2 100644 > --- a/arch/Config.in.sh > +++ b/arch/Config.in.sh > @@ -24,6 +24,9 @@ config BR2_ARCH > default "sh4a" if BR2_sh4a > default "sh4aeb" if BR2_sh4aeb > > +config BR2_KERNEL_ARCH > + default "sh" > + > config BR2_ENDIAN > default "LITTLE" if BR2_sh4 || BR2_sh4a > default "BIG" if BR2_sh2a || BR2_sh4eb || BR2_sh4aeb > diff --git a/arch/Config.in.sparc b/arch/Config.in.sparc > index 4c4dc61745..b91df6892b 100644 > --- a/arch/Config.in.sparc > +++ b/arch/Config.in.sparc > @@ -21,6 +21,10 @@ config BR2_ARCH > default "sparc" if BR2_sparc > default "sparc64" if BR2_sparc64 > > +config BR2_KERNEL_ARCH > + default "sparc" if BR2_sparc > + default "sparc64" if BR2_sparc64 > + > config BR2_ENDIAN > default "BIG" > > diff --git a/arch/Config.in.x86 b/arch/Config.in.x86 > index 7aae3cafb7..88ac9cdc44 100644 > --- a/arch/Config.in.x86 > +++ b/arch/Config.in.x86 > @@ -266,6 +266,10 @@ config BR2_ARCH > default "i686" if BR2_x86_athlon_4 > default "x86_64" if BR2_x86_64 > > +config BR2_KERNEL_ARCH > + default "i386" if !BR2_x86_64 > + default "x86_64" if BR2_x86_64 > + > config BR2_ENDIAN > default "LITTLE" > > diff --git a/arch/Config.in.xtensa b/arch/Config.in.xtensa > index a79d906985..acc340eca6 100644 > --- a/arch/Config.in.xtensa > +++ b/arch/Config.in.xtensa > @@ -48,6 +48,9 @@ config BR2_ENDIAN > config BR2_ARCH > default "xtensa" if BR2_xtensa > > +config BR2_KERNEL_ARCH > + default "xtensa" > + > config BR2_READELF_ARCH_NAME > default "Tensilica Xtensa Processor" > > _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 18+ messages in thread
* [Buildroot] [PATCH 2/4] core: introduce NORMALIZED_ARCH as non-kernel replacement for KERNEL_ARCH 2021-05-18 11:36 [Buildroot] [PATCH RFC 0/4] Basic support for 64-bit kernel and 32-bit userland Thomas De Schampheleire 2021-05-18 11:36 ` [Buildroot] [PATCH 1/4] arch: move definition of KERNEL_ARCH to Config.in.<arch> files Thomas De Schampheleire @ 2021-05-18 11:36 ` Thomas De Schampheleire 2022-01-13 21:30 ` Romain Naour 2021-05-18 11:36 ` [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE Thomas De Schampheleire 2021-05-18 11:36 ` [Buildroot] [PATCH 4/4] perf: fix compilation in case of i386 userspace with x86_64 kernel Thomas De Schampheleire 3 siblings, 1 reply; 18+ messages in thread From: Thomas De Schampheleire @ 2021-05-18 11:36 UTC (permalink / raw) To: buildroot From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> The variable 'KERNEL_ARCH' is actually a normalized version of 'ARCH'/'BR2_ARCH'. For example, 'arcle' and 'arceb' both become 'arc', just as all powerpc variants become 'powerpc'. It is presumably called 'KERNEL_ARCH' because the Linux kernel is typically the first place where support for a new architecture is added, and thus is the entity that defines the normalized name. However, the term 'KERNEL_ARCH' can also be interpreted as 'the architecture used by the kernel', which need not be exactly the same as 'the normalized name for a certain arch'. In particular, for cases where a 64-bit architecture is running a 64-bit kernel but 32-bit userspace. Examples include: * aarch64 architecture, with aarch64 kernel and 32-bit (ARM) userspace * x86_64 architecture, with x86_64 kernel and 32-bit (i386) userspace In such cases, the 'architecture used by the kernel' needs to refer to the 64-bit name (aarch64, x86_64), whereas all userspace applications need to refer the, potentially normalized, 32-bit name. This means that there need to be two different variables: KERNEL_ARCH: the architecture used by the kernel NORMALIZED_ARCH: the normalized name for the current userspace architecture At this moment, both will actually have the same content. But a subsequent patch will add basic support for situations described above, in which KERNEL_ARCH may become overwritten to the 64-bit architecture, while NORMALIZED_ARCH needs to remain the same (32-bit) case. This commit replaces use of KERNEL_ARCH where actually the userspace arch is needed. Places that use KERNEL_ARCH in combination with building of kernel modules are not touched. There may be cases where a package builds both a kernel module as userspace, in which case it may need to know about both KERNEL_ARCH and NORMALIZED_ARCH, for the case where they differ. But this is to be fixed on a per-need basis. Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> --- Makefile | 1 + boot/barebox/barebox.mk | 10 +++++----- boot/uboot/uboot.mk | 6 +++--- package/busybox/busybox.mk | 2 +- package/environment-setup/environment-setup.mk | 2 +- package/kvmtool/kvmtool.mk | 4 ++-- package/libselinux/libselinux.mk | 2 +- package/linux-tools/linux-tool-perf.mk.in | 4 ++-- package/linux-tools/linux-tool-selftests.mk.in | 6 +++--- package/olsr/olsr.mk | 4 ++-- package/pciutils/pciutils.mk | 2 +- package/uboot-tools/uboot-tools.mk | 10 +++++----- 12 files changed, 27 insertions(+), 26 deletions(-) diff --git a/Makefile b/Makefile index 7b6998fde6..c5399e9a35 100644 --- a/Makefile +++ b/Makefile @@ -433,6 +433,7 @@ QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q) # Strip off the annoying quoting ARCH := $(call qstrip,$(BR2_ARCH)) +NORMALIZED_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) ZCAT := $(call qstrip,$(BR2_ZCAT)) diff --git a/boot/barebox/barebox.mk b/boot/barebox/barebox.mk index 8f02f9f9e1..6506294d6d 100644 --- a/boot/barebox/barebox.mk +++ b/boot/barebox/barebox.mk @@ -59,16 +59,16 @@ ifneq ($$(BR2_TARGET_$(1)_BAREBOXENV),y) $(1)_INSTALL_TARGET = NO endif -ifeq ($$(KERNEL_ARCH),i386) +ifeq ($$(NORMALIZED_ARCH),i386) $(1)_ARCH = x86 -else ifeq ($$(KERNEL_ARCH),x86_64) +else ifeq ($$(NORMALIZED_ARCH),x86_64) $(1)_ARCH = x86 -else ifeq ($$(KERNEL_ARCH),powerpc) +else ifeq ($$(NORMALIZED_ARCH),powerpc) $(1)_ARCH = ppc -else ifeq ($$(KERNEL_ARCH),arm64) +else ifeq ($$(NORMALIZED_ARCH),arm64) $(1)_ARCH = arm else -$(1)_ARCH = $$(KERNEL_ARCH) +$(1)_ARCH = $$(NORMALIZED_ARCH) endif $(1)_MAKE_FLAGS = ARCH=$$($(1)_ARCH) CROSS_COMPILE="$$(TARGET_CROSS)" diff --git a/boot/uboot/uboot.mk b/boot/uboot/uboot.mk index dbe82e65b1..77df9c8bba 100644 --- a/boot/uboot/uboot.mk +++ b/boot/uboot/uboot.mk @@ -139,12 +139,12 @@ endif # The kernel calls AArch64 'arm64', but U-Boot calls it just 'arm', so # we have to special case it. Similar for i386/x86_64 -> x86 -ifeq ($(KERNEL_ARCH),arm64) +ifeq ($(NORMALIZED_ARCH),arm64) UBOOT_ARCH = arm -else ifneq ($(filter $(KERNEL_ARCH),i386 x86_64),) +else ifneq ($(filter $(NORMALIZED_ARCH),i386 x86_64),) UBOOT_ARCH = x86 else -UBOOT_ARCH = $(KERNEL_ARCH) +UBOOT_ARCH = $(NORMALIZED_ARCH) endif UBOOT_MAKE_OPTS += \ diff --git a/package/busybox/busybox.mk b/package/busybox/busybox.mk index e979ac4f4b..456ed04a73 100644 --- a/package/busybox/busybox.mk +++ b/package/busybox/busybox.mk @@ -99,7 +99,7 @@ endif BUSYBOX_MAKE_OPTS = \ CC="$(TARGET_CC)" \ - ARCH=$(KERNEL_ARCH) \ + ARCH=$(NORMALIZED_ARCH) \ PREFIX="$(TARGET_DIR)" \ EXTRA_LDFLAGS="$(BUSYBOX_LDFLAGS)" \ CROSS_COMPILE="$(TARGET_CROSS)" \ diff --git a/package/environment-setup/environment-setup.mk b/package/environment-setup/environment-setup.mk index fcad013f0d..8e0fdff208 100644 --- a/package/environment-setup/environment-setup.mk +++ b/package/environment-setup/environment-setup.mk @@ -11,7 +11,7 @@ define HOST_ENVIRONMENT_SETUP_INSTALL_CMDS for var in $(TARGET_CONFIGURE_OPTS); do \ printf "export \"$$var\"\n" >> $(ENVIRONMENT_SETUP_FILE); \ done - printf "export \"ARCH=$(KERNEL_ARCH)\"\n" >> $(ENVIRONMENT_SETUP_FILE) + printf "export \"ARCH=$(NORMALIZED_ARCH)\"\n" >> $(ENVIRONMENT_SETUP_FILE) printf "export \"CROSS_COMPILE=$(TARGET_CROSS)\"\n" >> $(ENVIRONMENT_SETUP_FILE) printf "export \"CONFIGURE_FLAGS=--target=$(GNU_TARGET_NAME) \ --host=$(GNU_TARGET_NAME) \ diff --git a/package/kvmtool/kvmtool.mk b/package/kvmtool/kvmtool.mk index 2984817c7e..df6ae7e0f1 100644 --- a/package/kvmtool/kvmtool.mk +++ b/package/kvmtool/kvmtool.mk @@ -25,11 +25,11 @@ KVMTOOL_MAKE_OPTS = \ WERROR=0 define KVMTOOL_BUILD_CMDS - $(TARGET_MAKE_ENV) ARCH=$(KERNEL_ARCH) $(MAKE) -C $(@D) $(KVMTOOL_MAKE_OPTS) + $(TARGET_MAKE_ENV) ARCH=$(NORMALIZED_ARCH) $(MAKE) -C $(@D) $(KVMTOOL_MAKE_OPTS) endef define KVMTOOL_INSTALL_TARGET_CMDS - $(TARGET_MAKE_ENV) ARCH=$(KERNEL_ARCH) $(MAKE) -C $(@D) \ + $(TARGET_MAKE_ENV) ARCH=$(NORMALIZED_ARCH) $(MAKE) -C $(@D) \ $(KVMTOOL_MAKE_OPTS) install DESTDIR=$(TARGET_DIR) prefix=/usr endef diff --git a/package/libselinux/libselinux.mk b/package/libselinux/libselinux.mk index fdd13aa942..5a62b8d829 100644 --- a/package/libselinux/libselinux.mk +++ b/package/libselinux/libselinux.mk @@ -18,7 +18,7 @@ LIBSELINUX_INSTALL_STAGING = YES # we won't have to use a relative path in 0002-revert-ln-relative.patch LIBSELINUX_MAKE_OPTS = \ $(TARGET_CONFIGURE_OPTS) \ - ARCH=$(KERNEL_ARCH) \ + ARCH=$(NORMALIZED_ARCH) \ SHLIBDIR=/usr/lib LIBSELINUX_MAKE_INSTALL_TARGETS = install diff --git a/package/linux-tools/linux-tool-perf.mk.in b/package/linux-tools/linux-tool-perf.mk.in index efa747cf8d..4e28129f50 100644 --- a/package/linux-tools/linux-tool-perf.mk.in +++ b/package/linux-tools/linux-tool-perf.mk.in @@ -8,10 +8,10 @@ LINUX_TOOLS += perf PERF_DEPENDENCIES = host-flex host-bison -ifeq ($(KERNEL_ARCH),x86_64) +ifeq ($(NORMALIZED_ARCH),x86_64) PERF_ARCH=x86 else -PERF_ARCH=$(KERNEL_ARCH) +PERF_ARCH=$(NORMALIZED_ARCH) endif PERF_MAKE_FLAGS = \ diff --git a/package/linux-tools/linux-tool-selftests.mk.in b/package/linux-tools/linux-tool-selftests.mk.in index c4e5bf0fea..b824c11bd6 100644 --- a/package/linux-tools/linux-tool-selftests.mk.in +++ b/package/linux-tools/linux-tool-selftests.mk.in @@ -6,13 +6,13 @@ LINUX_TOOLS += selftests -ifeq ($(KERNEL_ARCH),x86_64) +ifeq ($(NORMALIZED_ARCH),x86_64) SELFTESTS_ARCH=x86 else -ifeq ($(KERNEL_ARCH),i386) +ifeq ($(NORMALIZED_ARCH),i386) SELFTESTS_ARCH=x86 else -SELFTESTS_ARCH=$(KERNEL_ARCH) +SELFTESTS_ARCH=$(NORMALIZED_ARCH) endif endif diff --git a/package/olsr/olsr.mk b/package/olsr/olsr.mk index b2c8e7e001..4ad88991f2 100644 --- a/package/olsr/olsr.mk +++ b/package/olsr/olsr.mk @@ -27,10 +27,10 @@ OLSR_PLUGINS += pud endif define OLSR_BUILD_CMDS - $(TARGET_CONFIGURE_OPTS) $(MAKE) ARCH=$(KERNEL_ARCH) \ + $(TARGET_CONFIGURE_OPTS) $(MAKE) ARCH=$(NORMALIZED_ARCH) \ CFLAGS="$(OLSR_CFLAGS)" -C $(@D) olsrd $(foreach p,$(OLSR_PLUGINS), \ - $(TARGET_CONFIGURE_OPTS) $(MAKE) ARCH=$(KERNEL_ARCH) \ + $(TARGET_CONFIGURE_OPTS) $(MAKE) ARCH=$(NORMALIZED_ARCH) \ CFLAGS="$(OLSR_CFLAGS)" -C $(@D)/lib/$(p) ) endef diff --git a/package/pciutils/pciutils.mk b/package/pciutils/pciutils.mk index 9b83b62b55..67defcc743 100644 --- a/package/pciutils/pciutils.mk +++ b/package/pciutils/pciutils.mk @@ -12,7 +12,7 @@ PCIUTILS_LICENSE = GPL-2.0+ PCIUTILS_LICENSE_FILES = COPYING PCIUTILS_MAKE_OPTS = \ CROSS_COMPILE="$(TARGET_CROSS)" \ - HOST="$(KERNEL_ARCH)-linux" \ + HOST="$(NORMALIZED_ARCH)-linux" \ OPT="$(TARGET_CFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS)" \ DNS=no \ diff --git a/package/uboot-tools/uboot-tools.mk b/package/uboot-tools/uboot-tools.mk index 8963d6182e..d60aaa7668 100644 --- a/package/uboot-tools/uboot-tools.mk +++ b/package/uboot-tools/uboot-tools.mk @@ -206,14 +206,14 @@ $(eval $(host-generic-package)) MKIMAGE = $(HOST_DIR)/bin/mkimage # mkimage supports arm blackfin m68k microblaze mips mips64 nios2 powerpc ppc sh sparc sparc64 x86 -# KERNEL_ARCH can be arm64 arc arm blackfin m68k microblaze mips nios2 powerpc sh sparc i386 x86_64 xtensa -# For arm64, arc, xtensa we'll just keep KERNEL_ARCH +# NORMALIZED_ARCH can be arm64 arc arm blackfin m68k microblaze mips nios2 powerpc sh sparc i386 x86_64 xtensa +# For arm64, arc, xtensa we'll just keep NORMALIZED_ARCH # For mips64, we'll just keep mips # For i386 and x86_64, we need to convert -ifeq ($(KERNEL_ARCH),x86_64) +ifeq ($(NORMALIZED_ARCH),x86_64) MKIMAGE_ARCH = x86 -else ifeq ($(KERNEL_ARCH),i386) +else ifeq ($(NORMALIZED_ARCH),i386) MKIMAGE_ARCH = x86 else -MKIMAGE_ARCH = $(KERNEL_ARCH) +MKIMAGE_ARCH = $(NORMALIZED_ARCH) endif -- 2.26.3 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [Buildroot] [PATCH 2/4] core: introduce NORMALIZED_ARCH as non-kernel replacement for KERNEL_ARCH 2021-05-18 11:36 ` [Buildroot] [PATCH 2/4] core: introduce NORMALIZED_ARCH as non-kernel replacement for KERNEL_ARCH Thomas De Schampheleire @ 2022-01-13 21:30 ` Romain Naour 2022-01-14 12:27 ` Thomas De Schampheleire 0 siblings, 1 reply; 18+ messages in thread From: Romain Naour @ 2022-01-13 21:30 UTC (permalink / raw) To: Thomas De Schampheleire, buildroot Cc: Marcus Folkesson, Antoine Tenart, Yann E. MORIN, Clayton Shotwell, Matt Weber, Thomas De Schampheleire Le 18/05/2021 à 13:36, Thomas De Schampheleire a écrit : > From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > The variable 'KERNEL_ARCH' is actually a normalized version of > 'ARCH'/'BR2_ARCH'. For example, 'arcle' and 'arceb' both become 'arc', just > as all powerpc variants become 'powerpc'. > > It is presumably called 'KERNEL_ARCH' because the Linux kernel is typically > the first place where support for a new architecture is added, and thus is > the entity that defines the normalized name. > > However, the term 'KERNEL_ARCH' can also be interpreted as 'the architecture > used by the kernel', which need not be exactly the same as 'the normalized > name for a certain arch'. In particular, for cases where a 64-bit > architecture is running a 64-bit kernel but 32-bit userspace. Examples > include: > * aarch64 architecture, with aarch64 kernel and 32-bit (ARM) userspace > * x86_64 architecture, with x86_64 kernel and 32-bit (i386) userspace > > In such cases, the 'architecture used by the kernel' needs to refer to the > 64-bit name (aarch64, x86_64), whereas all userspace applications need to > refer the, potentially normalized, 32-bit name. > > This means that there need to be two different variables: > > KERNEL_ARCH: the architecture used by the kernel > NORMALIZED_ARCH: the normalized name for the current userspace architecture > > At this moment, both will actually have the same content. But a subsequent > patch will add basic support for situations described above, in which > KERNEL_ARCH may become overwritten to the 64-bit architecture, while > NORMALIZED_ARCH needs to remain the same (32-bit) case. > > This commit replaces use of KERNEL_ARCH where actually the userspace arch is > needed. Places that use KERNEL_ARCH in combination with building of kernel > modules are not touched. > There may be cases where a package builds both a kernel module as userspace, > in which case it may need to know about both KERNEL_ARCH and > NORMALIZED_ARCH, for the case where they differ. But this is to be fixed on > a per-need basis. While reviewing this patch, I noticed that LINUX_ARCH_PATH [1] is wrong for sparc64 LINUX_ARCH_PATH = $(LINUX_DIR)/arch/$(KERNEL_ARCH) Indeed: $ make O=test/qemu_sparc64_sun4u_defconfig printvars VARS=LINUX_ARCH_PATH LINUX_ARCH_PATH=/home/kubu/buildroot/test/qemu_sparc64_sun4u_defconfig/build/linux-5.15/arch/sparc64 But since LINUX_ARCH_PATH is not used for this architecture, it was not noticed. [1] https://git.buildroot.net/buildroot/tree/linux/linux.mk?h=2021.11#n226 Remaining packages using KERNEL_ARCH actually build an out of tree kernel module: jailhouse, linux-fusion, openpowerlink. Reviewed-by: Romain Naour <romain.naour@gmail.com> > > Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > --- > Makefile | 1 + > boot/barebox/barebox.mk | 10 +++++----- > boot/uboot/uboot.mk | 6 +++--- > package/busybox/busybox.mk | 2 +- > package/environment-setup/environment-setup.mk | 2 +- > package/kvmtool/kvmtool.mk | 4 ++-- > package/libselinux/libselinux.mk | 2 +- > package/linux-tools/linux-tool-perf.mk.in | 4 ++-- > package/linux-tools/linux-tool-selftests.mk.in | 6 +++--- > package/olsr/olsr.mk | 4 ++-- > package/pciutils/pciutils.mk | 2 +- > package/uboot-tools/uboot-tools.mk | 10 +++++----- > 12 files changed, 27 insertions(+), 26 deletions(-) > > diff --git a/Makefile b/Makefile > index 7b6998fde6..c5399e9a35 100644 > --- a/Makefile > +++ b/Makefile > @@ -433,6 +433,7 @@ QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q) > > # Strip off the annoying quoting > ARCH := $(call qstrip,$(BR2_ARCH)) > +NORMALIZED_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) > KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) > > ZCAT := $(call qstrip,$(BR2_ZCAT)) > diff --git a/boot/barebox/barebox.mk b/boot/barebox/barebox.mk > index 8f02f9f9e1..6506294d6d 100644 > --- a/boot/barebox/barebox.mk > +++ b/boot/barebox/barebox.mk > @@ -59,16 +59,16 @@ ifneq ($$(BR2_TARGET_$(1)_BAREBOXENV),y) > $(1)_INSTALL_TARGET = NO > endif > > -ifeq ($$(KERNEL_ARCH),i386) > +ifeq ($$(NORMALIZED_ARCH),i386) > $(1)_ARCH = x86 > -else ifeq ($$(KERNEL_ARCH),x86_64) > +else ifeq ($$(NORMALIZED_ARCH),x86_64) > $(1)_ARCH = x86 > -else ifeq ($$(KERNEL_ARCH),powerpc) > +else ifeq ($$(NORMALIZED_ARCH),powerpc) > $(1)_ARCH = ppc > -else ifeq ($$(KERNEL_ARCH),arm64) > +else ifeq ($$(NORMALIZED_ARCH),arm64) > $(1)_ARCH = arm > else > -$(1)_ARCH = $$(KERNEL_ARCH) > +$(1)_ARCH = $$(NORMALIZED_ARCH) > endif > > $(1)_MAKE_FLAGS = ARCH=$$($(1)_ARCH) CROSS_COMPILE="$$(TARGET_CROSS)" > diff --git a/boot/uboot/uboot.mk b/boot/uboot/uboot.mk > index dbe82e65b1..77df9c8bba 100644 > --- a/boot/uboot/uboot.mk > +++ b/boot/uboot/uboot.mk > @@ -139,12 +139,12 @@ endif > > # The kernel calls AArch64 'arm64', but U-Boot calls it just 'arm', so > # we have to special case it. Similar for i386/x86_64 -> x86 > -ifeq ($(KERNEL_ARCH),arm64) > +ifeq ($(NORMALIZED_ARCH),arm64) > UBOOT_ARCH = arm > -else ifneq ($(filter $(KERNEL_ARCH),i386 x86_64),) > +else ifneq ($(filter $(NORMALIZED_ARCH),i386 x86_64),) > UBOOT_ARCH = x86 > else > -UBOOT_ARCH = $(KERNEL_ARCH) > +UBOOT_ARCH = $(NORMALIZED_ARCH) > endif > > UBOOT_MAKE_OPTS += \ > diff --git a/package/busybox/busybox.mk b/package/busybox/busybox.mk > index e979ac4f4b..456ed04a73 100644 > --- a/package/busybox/busybox.mk > +++ b/package/busybox/busybox.mk > @@ -99,7 +99,7 @@ endif > > BUSYBOX_MAKE_OPTS = \ > CC="$(TARGET_CC)" \ > - ARCH=$(KERNEL_ARCH) \ > + ARCH=$(NORMALIZED_ARCH) \ > PREFIX="$(TARGET_DIR)" \ > EXTRA_LDFLAGS="$(BUSYBOX_LDFLAGS)" \ > CROSS_COMPILE="$(TARGET_CROSS)" \ > diff --git a/package/environment-setup/environment-setup.mk b/package/environment-setup/environment-setup.mk > index fcad013f0d..8e0fdff208 100644 > --- a/package/environment-setup/environment-setup.mk > +++ b/package/environment-setup/environment-setup.mk > @@ -11,7 +11,7 @@ define HOST_ENVIRONMENT_SETUP_INSTALL_CMDS > for var in $(TARGET_CONFIGURE_OPTS); do \ > printf "export \"$$var\"\n" >> $(ENVIRONMENT_SETUP_FILE); \ > done > - printf "export \"ARCH=$(KERNEL_ARCH)\"\n" >> $(ENVIRONMENT_SETUP_FILE) > + printf "export \"ARCH=$(NORMALIZED_ARCH)\"\n" >> $(ENVIRONMENT_SETUP_FILE) > printf "export \"CROSS_COMPILE=$(TARGET_CROSS)\"\n" >> $(ENVIRONMENT_SETUP_FILE) > printf "export \"CONFIGURE_FLAGS=--target=$(GNU_TARGET_NAME) \ > --host=$(GNU_TARGET_NAME) \ > diff --git a/package/kvmtool/kvmtool.mk b/package/kvmtool/kvmtool.mk > index 2984817c7e..df6ae7e0f1 100644 > --- a/package/kvmtool/kvmtool.mk > +++ b/package/kvmtool/kvmtool.mk > @@ -25,11 +25,11 @@ KVMTOOL_MAKE_OPTS = \ > WERROR=0 > > define KVMTOOL_BUILD_CMDS > - $(TARGET_MAKE_ENV) ARCH=$(KERNEL_ARCH) $(MAKE) -C $(@D) $(KVMTOOL_MAKE_OPTS) > + $(TARGET_MAKE_ENV) ARCH=$(NORMALIZED_ARCH) $(MAKE) -C $(@D) $(KVMTOOL_MAKE_OPTS) > endef > > define KVMTOOL_INSTALL_TARGET_CMDS > - $(TARGET_MAKE_ENV) ARCH=$(KERNEL_ARCH) $(MAKE) -C $(@D) \ > + $(TARGET_MAKE_ENV) ARCH=$(NORMALIZED_ARCH) $(MAKE) -C $(@D) \ > $(KVMTOOL_MAKE_OPTS) install DESTDIR=$(TARGET_DIR) prefix=/usr > endef > > diff --git a/package/libselinux/libselinux.mk b/package/libselinux/libselinux.mk > index fdd13aa942..5a62b8d829 100644 > --- a/package/libselinux/libselinux.mk > +++ b/package/libselinux/libselinux.mk > @@ -18,7 +18,7 @@ LIBSELINUX_INSTALL_STAGING = YES > # we won't have to use a relative path in 0002-revert-ln-relative.patch > LIBSELINUX_MAKE_OPTS = \ > $(TARGET_CONFIGURE_OPTS) \ > - ARCH=$(KERNEL_ARCH) \ > + ARCH=$(NORMALIZED_ARCH) \ > SHLIBDIR=/usr/lib > > LIBSELINUX_MAKE_INSTALL_TARGETS = install > diff --git a/package/linux-tools/linux-tool-perf.mk.in b/package/linux-tools/linux-tool-perf.mk.in > index efa747cf8d..4e28129f50 100644 > --- a/package/linux-tools/linux-tool-perf.mk.in > +++ b/package/linux-tools/linux-tool-perf.mk.in > @@ -8,10 +8,10 @@ LINUX_TOOLS += perf > > PERF_DEPENDENCIES = host-flex host-bison > > -ifeq ($(KERNEL_ARCH),x86_64) > +ifeq ($(NORMALIZED_ARCH),x86_64) > PERF_ARCH=x86 > else > -PERF_ARCH=$(KERNEL_ARCH) > +PERF_ARCH=$(NORMALIZED_ARCH) > endif > > PERF_MAKE_FLAGS = \ > diff --git a/package/linux-tools/linux-tool-selftests.mk.in b/package/linux-tools/linux-tool-selftests.mk.in > index c4e5bf0fea..b824c11bd6 100644 > --- a/package/linux-tools/linux-tool-selftests.mk.in > +++ b/package/linux-tools/linux-tool-selftests.mk.in > @@ -6,13 +6,13 @@ > > LINUX_TOOLS += selftests > > -ifeq ($(KERNEL_ARCH),x86_64) > +ifeq ($(NORMALIZED_ARCH),x86_64) > SELFTESTS_ARCH=x86 > else > -ifeq ($(KERNEL_ARCH),i386) > +ifeq ($(NORMALIZED_ARCH),i386) > SELFTESTS_ARCH=x86 > else > -SELFTESTS_ARCH=$(KERNEL_ARCH) > +SELFTESTS_ARCH=$(NORMALIZED_ARCH) > endif > endif > > diff --git a/package/olsr/olsr.mk b/package/olsr/olsr.mk > index b2c8e7e001..4ad88991f2 100644 > --- a/package/olsr/olsr.mk > +++ b/package/olsr/olsr.mk > @@ -27,10 +27,10 @@ OLSR_PLUGINS += pud > endif > > define OLSR_BUILD_CMDS > - $(TARGET_CONFIGURE_OPTS) $(MAKE) ARCH=$(KERNEL_ARCH) \ > + $(TARGET_CONFIGURE_OPTS) $(MAKE) ARCH=$(NORMALIZED_ARCH) \ > CFLAGS="$(OLSR_CFLAGS)" -C $(@D) olsrd > $(foreach p,$(OLSR_PLUGINS), \ > - $(TARGET_CONFIGURE_OPTS) $(MAKE) ARCH=$(KERNEL_ARCH) \ > + $(TARGET_CONFIGURE_OPTS) $(MAKE) ARCH=$(NORMALIZED_ARCH) \ > CFLAGS="$(OLSR_CFLAGS)" -C $(@D)/lib/$(p) > ) > endef > diff --git a/package/pciutils/pciutils.mk b/package/pciutils/pciutils.mk > index 9b83b62b55..67defcc743 100644 > --- a/package/pciutils/pciutils.mk > +++ b/package/pciutils/pciutils.mk > @@ -12,7 +12,7 @@ PCIUTILS_LICENSE = GPL-2.0+ > PCIUTILS_LICENSE_FILES = COPYING > PCIUTILS_MAKE_OPTS = \ > CROSS_COMPILE="$(TARGET_CROSS)" \ > - HOST="$(KERNEL_ARCH)-linux" \ > + HOST="$(NORMALIZED_ARCH)-linux" \ > OPT="$(TARGET_CFLAGS)" \ > LDFLAGS="$(TARGET_LDFLAGS)" \ > DNS=no \ > diff --git a/package/uboot-tools/uboot-tools.mk b/package/uboot-tools/uboot-tools.mk > index 8963d6182e..d60aaa7668 100644 > --- a/package/uboot-tools/uboot-tools.mk > +++ b/package/uboot-tools/uboot-tools.mk > @@ -206,14 +206,14 @@ $(eval $(host-generic-package)) > MKIMAGE = $(HOST_DIR)/bin/mkimage > > # mkimage supports arm blackfin m68k microblaze mips mips64 nios2 powerpc ppc sh sparc sparc64 x86 > -# KERNEL_ARCH can be arm64 arc arm blackfin m68k microblaze mips nios2 powerpc sh sparc i386 x86_64 xtensa > -# For arm64, arc, xtensa we'll just keep KERNEL_ARCH > +# NORMALIZED_ARCH can be arm64 arc arm blackfin m68k microblaze mips nios2 powerpc sh sparc i386 x86_64 xtensa > +# For arm64, arc, xtensa we'll just keep NORMALIZED_ARCH > # For mips64, we'll just keep mips > # For i386 and x86_64, we need to convert This part needs to be fixed due to a recent change. Best regards, Romain > -ifeq ($(KERNEL_ARCH),x86_64) > +ifeq ($(NORMALIZED_ARCH),x86_64) > MKIMAGE_ARCH = x86 > -else ifeq ($(KERNEL_ARCH),i386) > +else ifeq ($(NORMALIZED_ARCH),i386) > MKIMAGE_ARCH = x86 > else > -MKIMAGE_ARCH = $(KERNEL_ARCH) > +MKIMAGE_ARCH = $(NORMALIZED_ARCH) > endif > _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Buildroot] [PATCH 2/4] core: introduce NORMALIZED_ARCH as non-kernel replacement for KERNEL_ARCH 2022-01-13 21:30 ` Romain Naour @ 2022-01-14 12:27 ` Thomas De Schampheleire 2022-01-15 14:55 ` Romain Naour 0 siblings, 1 reply; 18+ messages in thread From: Thomas De Schampheleire @ 2022-01-14 12:27 UTC (permalink / raw) To: Romain Naour Cc: Marcus Folkesson, Antoine Tenart, Yann E. MORIN, buildroot, Clayton Shotwell, Matt Weber, Thomas De Schampheleire Hi Romain, El jue, 13 ene 2022 a las 22:30, Romain Naour (<romain.naour@gmail.com>) escribió: > > Le 18/05/2021 à 13:36, Thomas De Schampheleire a écrit : > > From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > > > The variable 'KERNEL_ARCH' is actually a normalized version of > > 'ARCH'/'BR2_ARCH'. For example, 'arcle' and 'arceb' both become 'arc', just > > as all powerpc variants become 'powerpc'. > > > > It is presumably called 'KERNEL_ARCH' because the Linux kernel is typically > > the first place where support for a new architecture is added, and thus is > > the entity that defines the normalized name. > > > > However, the term 'KERNEL_ARCH' can also be interpreted as 'the architecture > > used by the kernel', which need not be exactly the same as 'the normalized > > name for a certain arch'. In particular, for cases where a 64-bit > > architecture is running a 64-bit kernel but 32-bit userspace. Examples > > include: > > * aarch64 architecture, with aarch64 kernel and 32-bit (ARM) userspace > > * x86_64 architecture, with x86_64 kernel and 32-bit (i386) userspace > > > > In such cases, the 'architecture used by the kernel' needs to refer to the > > 64-bit name (aarch64, x86_64), whereas all userspace applications need to > > refer the, potentially normalized, 32-bit name. > > > > This means that there need to be two different variables: > > > > KERNEL_ARCH: the architecture used by the kernel > > NORMALIZED_ARCH: the normalized name for the current userspace architecture > > > > At this moment, both will actually have the same content. But a subsequent > > patch will add basic support for situations described above, in which > > KERNEL_ARCH may become overwritten to the 64-bit architecture, while > > NORMALIZED_ARCH needs to remain the same (32-bit) case. > > > > This commit replaces use of KERNEL_ARCH where actually the userspace arch is > > needed. Places that use KERNEL_ARCH in combination with building of kernel > > modules are not touched. > > There may be cases where a package builds both a kernel module as userspace, > > in which case it may need to know about both KERNEL_ARCH and > > NORMALIZED_ARCH, for the case where they differ. But this is to be fixed on > > a per-need basis. > > While reviewing this patch, I noticed that LINUX_ARCH_PATH [1] is wrong for sparc64 > > LINUX_ARCH_PATH = $(LINUX_DIR)/arch/$(KERNEL_ARCH) > > Indeed: > > $ make O=test/qemu_sparc64_sun4u_defconfig printvars VARS=LINUX_ARCH_PATH > LINUX_ARCH_PATH=/home/kubu/buildroot/test/qemu_sparc64_sun4u_defconfig/build/linux-5.15/arch/sparc64 > > But since LINUX_ARCH_PATH is not used for this architecture, it was not noticed. > > [1] https://git.buildroot.net/buildroot/tree/linux/linux.mk?h=2021.11#n226 > Are you sure that this is a problem? In the kernel Makefile, some 'ARCH' strings are treated specially: # Additional ARCH settings for x86 ifeq ($(ARCH),i386) SRCARCH := x86 endif ifeq ($(ARCH),x86_64) SRCARCH := x86 endif # Additional ARCH settings for sparc ifeq ($(ARCH),sparc32) SRCARCH := sparc endif ifeq ($(ARCH),sparc64) SRCARCH := sparc endif # Additional ARCH settings for parisc ifeq ($(ARCH),parisc64) SRCARCH := parisc endif So compiling the kernel with ARCH=sparc64 is accepted, and the arch directory will be arch/sparc . Similar to how compiling with ARCH=x86_64 works even though arch/x86_64 does not (no longer) exist. While I'm not familiar with sparc64, there does not seem to be a bug to me. Thanks, Thomas _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Buildroot] [PATCH 2/4] core: introduce NORMALIZED_ARCH as non-kernel replacement for KERNEL_ARCH 2022-01-14 12:27 ` Thomas De Schampheleire @ 2022-01-15 14:55 ` Romain Naour 0 siblings, 0 replies; 18+ messages in thread From: Romain Naour @ 2022-01-15 14:55 UTC (permalink / raw) To: Thomas De Schampheleire Cc: Marcus Folkesson, Antoine Tenart, Yann E. MORIN, buildroot, Clayton Shotwell, Matt Weber, Thomas De Schampheleire Hi Thomas, Le 14/01/2022 à 13:27, Thomas De Schampheleire a écrit : > Hi Romain, > > El jue, 13 ene 2022 a las 22:30, Romain Naour > (<romain.naour@gmail.com>) escribió: >> >> Le 18/05/2021 à 13:36, Thomas De Schampheleire a écrit : >>> From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> >>> >>> The variable 'KERNEL_ARCH' is actually a normalized version of >>> 'ARCH'/'BR2_ARCH'. For example, 'arcle' and 'arceb' both become 'arc', just >>> as all powerpc variants become 'powerpc'. >>> >>> It is presumably called 'KERNEL_ARCH' because the Linux kernel is typically >>> the first place where support for a new architecture is added, and thus is >>> the entity that defines the normalized name. >>> >>> However, the term 'KERNEL_ARCH' can also be interpreted as 'the architecture >>> used by the kernel', which need not be exactly the same as 'the normalized >>> name for a certain arch'. In particular, for cases where a 64-bit >>> architecture is running a 64-bit kernel but 32-bit userspace. Examples >>> include: >>> * aarch64 architecture, with aarch64 kernel and 32-bit (ARM) userspace >>> * x86_64 architecture, with x86_64 kernel and 32-bit (i386) userspace >>> >>> In such cases, the 'architecture used by the kernel' needs to refer to the >>> 64-bit name (aarch64, x86_64), whereas all userspace applications need to >>> refer the, potentially normalized, 32-bit name. >>> >>> This means that there need to be two different variables: >>> >>> KERNEL_ARCH: the architecture used by the kernel >>> NORMALIZED_ARCH: the normalized name for the current userspace architecture >>> >>> At this moment, both will actually have the same content. But a subsequent >>> patch will add basic support for situations described above, in which >>> KERNEL_ARCH may become overwritten to the 64-bit architecture, while >>> NORMALIZED_ARCH needs to remain the same (32-bit) case. >>> >>> This commit replaces use of KERNEL_ARCH where actually the userspace arch is >>> needed. Places that use KERNEL_ARCH in combination with building of kernel >>> modules are not touched. >>> There may be cases where a package builds both a kernel module as userspace, >>> in which case it may need to know about both KERNEL_ARCH and >>> NORMALIZED_ARCH, for the case where they differ. But this is to be fixed on >>> a per-need basis. >> >> While reviewing this patch, I noticed that LINUX_ARCH_PATH [1] is wrong for sparc64 >> >> LINUX_ARCH_PATH = $(LINUX_DIR)/arch/$(KERNEL_ARCH) >> >> Indeed: >> >> $ make O=test/qemu_sparc64_sun4u_defconfig printvars VARS=LINUX_ARCH_PATH >> LINUX_ARCH_PATH=/home/kubu/buildroot/test/qemu_sparc64_sun4u_defconfig/build/linux-5.15/arch/sparc64 >> >> But since LINUX_ARCH_PATH is not used for this architecture, it was not noticed. >> >> [1] https://git.buildroot.net/buildroot/tree/linux/linux.mk?h=2021.11#n226 >> > > Are you sure that this is a problem? > In the kernel Makefile, some 'ARCH' strings are treated specially: > > # Additional ARCH settings for x86 > ifeq ($(ARCH),i386) > SRCARCH := x86 > endif > ifeq ($(ARCH),x86_64) > SRCARCH := x86 > endif > > # Additional ARCH settings for sparc > ifeq ($(ARCH),sparc32) > SRCARCH := sparc > endif > ifeq ($(ARCH),sparc64) > SRCARCH := sparc > endif > > # Additional ARCH settings for parisc > ifeq ($(ARCH),parisc64) > SRCARCH := parisc > endif > > > So compiling the kernel with ARCH=sparc64 is accepted, and the arch > directory will be arch/sparc . Similar to how compiling with > ARCH=x86_64 works even though arch/x86_64 does not (no longer) exist. > > While I'm not familiar with sparc64, there does not seem to be a bug to me. I mean LINUX_ARCH_PATH is a Buildroot variable from linux.mk used to copy some files from the kernel build directory. For now LINUX_ARCH_PATH is not used for sparc64 target but if it happens it will break. Best regards, Romain > > Thanks, > Thomas > _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 18+ messages in thread
* [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE 2021-05-18 11:36 [Buildroot] [PATCH RFC 0/4] Basic support for 64-bit kernel and 32-bit userland Thomas De Schampheleire 2021-05-18 11:36 ` [Buildroot] [PATCH 1/4] arch: move definition of KERNEL_ARCH to Config.in.<arch> files Thomas De Schampheleire 2021-05-18 11:36 ` [Buildroot] [PATCH 2/4] core: introduce NORMALIZED_ARCH as non-kernel replacement for KERNEL_ARCH Thomas De Schampheleire @ 2021-05-18 11:36 ` Thomas De Schampheleire 2022-01-09 23:27 ` Romain Naour 2022-01-13 22:05 ` Romain Naour 2021-05-18 11:36 ` [Buildroot] [PATCH 4/4] perf: fix compilation in case of i386 userspace with x86_64 kernel Thomas De Schampheleire 3 siblings, 2 replies; 18+ messages in thread From: Thomas De Schampheleire @ 2021-05-18 11:36 UTC (permalink / raw) To: buildroot From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> There are cases where a 64-bit architecture is running a 64-bit kernel but 32-bit userspace. Examples include: * aarch64 architecture, with aarch64 kernel and 32-bit (ARM) userspace * x86_64 architecture, with x86_64 kernel and 32-bit (i386) userspace In Buildroot, the ARCH/BR2_ARCH and NORMALIZED_ARCH variables will refer to the 32-bit architecture, but the kernel needs to be built with the 64-bit architecture. Make it possible to define the correct architecture to be used for the kernel, in a new config option 'BR2_KERNEL_ARCH_OVERRIDE'. The user is expected to know the valid values. Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> --- Makefile | 4 ++++ arch/Config.in | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/Makefile b/Makefile index c5399e9a35..d09cf7c958 100644 --- a/Makefile +++ b/Makefile @@ -434,7 +434,11 @@ QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q) # Strip off the annoying quoting ARCH := $(call qstrip,$(BR2_ARCH)) NORMALIZED_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) +ifeq ($(call qstrip,$(BR2_KERNEL_ARCH_OVERRIDE)),) KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) +else +KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH_OVERRIDE)) +endif ZCAT := $(call qstrip,$(BR2_ZCAT)) BZCAT := $(call qstrip,$(BR2_BZCAT)) diff --git a/arch/Config.in b/arch/Config.in index 7575acf48c..c82100f541 100644 --- a/arch/Config.in +++ b/arch/Config.in @@ -329,6 +329,21 @@ config BR2_ARCH config BR2_KERNEL_ARCH string +config BR2_KERNEL_ARCH_OVERRIDE + string "Kernel architecture override" + help + Normally, the correct kernel architecture value is derived + from the selected architecture, and you should keep this + option empty. + However, there are cases where you may want to enter a custom + value, for example when using a 64-bit architecture but + running userspace in 32-bit mode. + As an example, in case of an x86_64 processor where you want + 32-bit userspace, BR2_ARCH will be 'i386'/'i486'/'i686' and + BR2_KERNEL_ARCH_OVERRIDE should be set to 'x86_64'. Note that + in this example you will also need a multilib toolchain and + pass '-m32' via BR2_TARGET_OPTIMIZATION. + config BR2_ENDIAN string -- 2.26.3 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE 2021-05-18 11:36 ` [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE Thomas De Schampheleire @ 2022-01-09 23:27 ` Romain Naour 2022-01-12 11:04 ` Thomas De Schampheleire 2022-01-13 22:05 ` Romain Naour 1 sibling, 1 reply; 18+ messages in thread From: Romain Naour @ 2022-01-09 23:27 UTC (permalink / raw) To: Thomas De Schampheleire, buildroot; +Cc: Thomas De Schampheleire Hello Thomas, Le 18/05/2021 à 13:36, Thomas De Schampheleire a écrit : > From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > There are cases where a 64-bit architecture is running a 64-bit kernel but > 32-bit userspace. Examples include: > * aarch64 architecture, with aarch64 kernel and 32-bit (ARM) userspace > * x86_64 architecture, with x86_64 kernel and 32-bit (i386) userspace Can you provide a new qemu defconfig that cover this use case? This is for gitlab-ci runtime testing. Best regards, Romain PS: (This email doesn't count as a review of this series :)) > > In Buildroot, the ARCH/BR2_ARCH and NORMALIZED_ARCH variables will refer to > the 32-bit architecture, but the kernel needs to be built with the 64-bit > architecture. > > Make it possible to define the correct architecture to be used for the > kernel, in a new config option 'BR2_KERNEL_ARCH_OVERRIDE'. The user is > expected to know the valid values. > > Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > --- > Makefile | 4 ++++ > arch/Config.in | 15 +++++++++++++++ > 2 files changed, 19 insertions(+) > > diff --git a/Makefile b/Makefile > index c5399e9a35..d09cf7c958 100644 > --- a/Makefile > +++ b/Makefile > @@ -434,7 +434,11 @@ QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q) > # Strip off the annoying quoting > ARCH := $(call qstrip,$(BR2_ARCH)) > NORMALIZED_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) > +ifeq ($(call qstrip,$(BR2_KERNEL_ARCH_OVERRIDE)),) > KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) > +else > +KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH_OVERRIDE)) > +endif > > ZCAT := $(call qstrip,$(BR2_ZCAT)) > BZCAT := $(call qstrip,$(BR2_BZCAT)) > diff --git a/arch/Config.in b/arch/Config.in > index 7575acf48c..c82100f541 100644 > --- a/arch/Config.in > +++ b/arch/Config.in > @@ -329,6 +329,21 @@ config BR2_ARCH > config BR2_KERNEL_ARCH > string > > +config BR2_KERNEL_ARCH_OVERRIDE > + string "Kernel architecture override" > + help > + Normally, the correct kernel architecture value is derived > + from the selected architecture, and you should keep this > + option empty. > + However, there are cases where you may want to enter a custom > + value, for example when using a 64-bit architecture but > + running userspace in 32-bit mode. > + As an example, in case of an x86_64 processor where you want > + 32-bit userspace, BR2_ARCH will be 'i386'/'i486'/'i686' and > + BR2_KERNEL_ARCH_OVERRIDE should be set to 'x86_64'. Note that > + in this example you will also need a multilib toolchain and > + pass '-m32' via BR2_TARGET_OPTIMIZATION. > + > config BR2_ENDIAN > string > > _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE 2022-01-09 23:27 ` Romain Naour @ 2022-01-12 11:04 ` Thomas De Schampheleire 2022-01-12 19:10 ` Arnout Vandecappelle 0 siblings, 1 reply; 18+ messages in thread From: Thomas De Schampheleire @ 2022-01-12 11:04 UTC (permalink / raw) To: Romain Naour, Thomas Petazzoni; +Cc: Thomas De Schampheleire, buildroot Hi Romain, El lun, 10 ene 2022 a las 0:27, Romain Naour (<romain.naour@smile.fr>) escribió: > > Hello Thomas, > > Le 18/05/2021 à 13:36, Thomas De Schampheleire a écrit : > > From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > > > There are cases where a 64-bit architecture is running a 64-bit kernel but > > 32-bit userspace. Examples include: > > * aarch64 architecture, with aarch64 kernel and 32-bit (ARM) userspace > > * x86_64 architecture, with x86_64 kernel and 32-bit (i386) userspace > > Can you provide a new qemu defconfig that cover this use case? > This is for gitlab-ci runtime testing. > > Best regards, > Romain > > PS: (This email doesn't count as a review of this series :)) Thanks for your interest in this series :-) Currently the qemu defconfig that I use uses an external toolchain built via crosstool-ng. Crosstool-ng is capable of creating a multilib toolchain supporting 32-bit and 64-bit binaries. However, Buildroot does not currently support this for internal toolchains. How do you suggest to proceed here? Could we perhaps add a crosstool-ng-built multilib toolchain to the Bootlin toolchains? Thanks, Thomas _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE 2022-01-12 11:04 ` Thomas De Schampheleire @ 2022-01-12 19:10 ` Arnout Vandecappelle 2022-01-12 20:06 ` Romain Naour 0 siblings, 1 reply; 18+ messages in thread From: Arnout Vandecappelle @ 2022-01-12 19:10 UTC (permalink / raw) To: Thomas De Schampheleire, Romain Naour, Thomas Petazzoni Cc: Thomas De Schampheleire, buildroot On 12/01/2022 12:04, Thomas De Schampheleire wrote: > Hi Romain, > > El lun, 10 ene 2022 a las 0:27, Romain Naour (<romain.naour@smile.fr>) escribió: >> >> Hello Thomas, >> >> Le 18/05/2021 à 13:36, Thomas De Schampheleire a écrit : >>> From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> >>> >>> There are cases where a 64-bit architecture is running a 64-bit kernel but >>> 32-bit userspace. Examples include: >>> * aarch64 architecture, with aarch64 kernel and 32-bit (ARM) userspace >>> * x86_64 architecture, with x86_64 kernel and 32-bit (i386) userspace >> >> Can you provide a new qemu defconfig that cover this use case? >> This is for gitlab-ci runtime testing. >> >> Best regards, >> Romain >> >> PS: (This email doesn't count as a review of this series :)) > > > Thanks for your interest in this series :-) > > Currently the qemu defconfig that I use uses an external toolchain > built via crosstool-ng. Crosstool-ng is capable of creating a multilib > toolchain supporting 32-bit and 64-bit binaries. > However, Buildroot does not currently support this for internal > toolchains. How do you suggest to proceed here? > Could we perhaps add a crosstool-ng-built multilib toolchain to the > Bootlin toolchains? Bootlin toolchains no - they are generated by Buildroot. However, it would be useful to have such a toolchain as an autobuilder toolchain. We could use it both in a 32-bit and 64-bit config. We can simply add your binary to autobuild.buildroot.org/toolchains/tarballs and add two config fragments to support/config-fragments/autobuild. The same toolchain tarball can then also be used for a runtime test. Regards, Arnout _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE 2022-01-12 19:10 ` Arnout Vandecappelle @ 2022-01-12 20:06 ` Romain Naour 0 siblings, 0 replies; 18+ messages in thread From: Romain Naour @ 2022-01-12 20:06 UTC (permalink / raw) To: Arnout Vandecappelle, Thomas De Schampheleire, Thomas Petazzoni Cc: Thomas De Schampheleire, buildroot Hello Thomas, Arnout, Le 12/01/2022 à 20:10, Arnout Vandecappelle a écrit : > > > On 12/01/2022 12:04, Thomas De Schampheleire wrote: >> Hi Romain, >> >> El lun, 10 ene 2022 a las 0:27, Romain Naour (<romain.naour@smile.fr>) escribió: >>> >>> Hello Thomas, >>> >>> Le 18/05/2021 à 13:36, Thomas De Schampheleire a écrit : >>>> From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> >>>> >>>> There are cases where a 64-bit architecture is running a 64-bit kernel but >>>> 32-bit userspace. Examples include: >>>> * aarch64 architecture, with aarch64 kernel and 32-bit (ARM) userspace >>>> * x86_64 architecture, with x86_64 kernel and 32-bit (i386) userspace >>> >>> Can you provide a new qemu defconfig that cover this use case? >>> This is for gitlab-ci runtime testing. >>> >>> Best regards, >>> Romain >>> >>> PS: (This email doesn't count as a review of this series :)) >> >> >> Thanks for your interest in this series :-) >> >> Currently the qemu defconfig that I use uses an external toolchain >> built via crosstool-ng. Crosstool-ng is capable of creating a multilib >> toolchain supporting 32-bit and 64-bit binaries. >> However, Buildroot does not currently support this for internal >> toolchains. How do you suggest to proceed here? >> Could we perhaps add a crosstool-ng-built multilib toolchain to the >> Bootlin toolchains? > > Bootlin toolchains no - they are generated by Buildroot. Indeed. > However, it would be useful to have such a toolchain as an autobuilder > toolchain. We could use it both in a 32-bit and 64-bit config. We can simply add > your binary to autobuild.buildroot.org/toolchains/tarballs and add two config > fragments to support/config-fragments/autobuild. > > The same toolchain tarball can then also be used for a runtime test. Agree, but we have to be able to rebuild them when needed. A script or a simple text would be ok. Best regards, Romain > > Regards, > Arnout > _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE 2021-05-18 11:36 ` [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE Thomas De Schampheleire 2022-01-09 23:27 ` Romain Naour @ 2022-01-13 22:05 ` Romain Naour 2022-01-15 19:31 ` Thomas De Schampheleire 2022-01-15 19:45 ` Thomas De Schampheleire 1 sibling, 2 replies; 18+ messages in thread From: Romain Naour @ 2022-01-13 22:05 UTC (permalink / raw) To: Thomas De Schampheleire, buildroot; +Cc: Thomas De Schampheleire Hi Thomas, Le 18/05/2021 à 13:36, Thomas De Schampheleire a écrit : > From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > There are cases where a 64-bit architecture is running a 64-bit kernel but > 32-bit userspace. Examples include: > * aarch64 architecture, with aarch64 kernel and 32-bit (ARM) userspace > * x86_64 architecture, with x86_64 kernel and 32-bit (i386) userspace > > In Buildroot, the ARCH/BR2_ARCH and NORMALIZED_ARCH variables will refer to > the 32-bit architecture, but the kernel needs to be built with the 64-bit > architecture. > > Make it possible to define the correct architecture to be used for the > kernel, in a new config option 'BR2_KERNEL_ARCH_OVERRIDE'. The user is > expected to know the valid values. > > Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > --- > Makefile | 4 ++++ > arch/Config.in | 15 +++++++++++++++ > 2 files changed, 19 insertions(+) > > diff --git a/Makefile b/Makefile > index c5399e9a35..d09cf7c958 100644 > --- a/Makefile > +++ b/Makefile > @@ -434,7 +434,11 @@ QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q) > # Strip off the annoying quoting > ARCH := $(call qstrip,$(BR2_ARCH)) > NORMALIZED_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) > +ifeq ($(call qstrip,$(BR2_KERNEL_ARCH_OVERRIDE)),) > KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) > +else > +KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH_OVERRIDE)) > +endif > > ZCAT := $(call qstrip,$(BR2_ZCAT)) > BZCAT := $(call qstrip,$(BR2_BZCAT)) > diff --git a/arch/Config.in b/arch/Config.in > index 7575acf48c..c82100f541 100644 > --- a/arch/Config.in > +++ b/arch/Config.in > @@ -329,6 +329,21 @@ config BR2_ARCH > config BR2_KERNEL_ARCH > string > > +config BR2_KERNEL_ARCH_OVERRIDE > + string "Kernel architecture override" Maybe it would be better to add architecture dependencies here (BR2_ARCH_IS_64) > + help > + Normally, the correct kernel architecture value is derived > + from the selected architecture, and you should keep this > + option empty. > + However, there are cases where you may want to enter a custom > + value, for example when using a 64-bit architecture but > + running userspace in 32-bit mode. > + As an example, in case of an x86_64 processor where you want > + 32-bit userspace, BR2_ARCH will be 'i386'/'i486'/'i686' and > + BR2_KERNEL_ARCH_OVERRIDE should be set to 'x86_64'. Note that > + in this example you will also need a multilib toolchain and > + pass '-m32' via BR2_TARGET_OPTIMIZATION. Adding -m32 will force the mulitilib toolchain to produce 32bits binary. But -m64 is also added to the toolchain wrapper for x86_64. Mixing -m64 and -m32 doesn't seems a good idea. Best regards, Romain > + > config BR2_ENDIAN > string > > _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE 2022-01-13 22:05 ` Romain Naour @ 2022-01-15 19:31 ` Thomas De Schampheleire 2022-01-15 19:45 ` Thomas De Schampheleire 1 sibling, 0 replies; 18+ messages in thread From: Thomas De Schampheleire @ 2022-01-15 19:31 UTC (permalink / raw) To: Romain Naour; +Cc: Thomas De Schampheleire, buildroot El jue, 13 ene 2022 a las 23:05, Romain Naour (<romain.naour@gmail.com>) escribió: > > Hi Thomas, > > Le 18/05/2021 à 13:36, Thomas De Schampheleire a écrit : > > From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > > > There are cases where a 64-bit architecture is running a 64-bit kernel but > > 32-bit userspace. Examples include: > > * aarch64 architecture, with aarch64 kernel and 32-bit (ARM) userspace > > * x86_64 architecture, with x86_64 kernel and 32-bit (i386) userspace > > > > In Buildroot, the ARCH/BR2_ARCH and NORMALIZED_ARCH variables will refer to > > the 32-bit architecture, but the kernel needs to be built with the 64-bit > > architecture. > > > > Make it possible to define the correct architecture to be used for the > > kernel, in a new config option 'BR2_KERNEL_ARCH_OVERRIDE'. The user is > > expected to know the valid values. > > > > Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > --- > > Makefile | 4 ++++ > > arch/Config.in | 15 +++++++++++++++ > > 2 files changed, 19 insertions(+) > > > > diff --git a/Makefile b/Makefile > > index c5399e9a35..d09cf7c958 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -434,7 +434,11 @@ QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q) > > # Strip off the annoying quoting > > ARCH := $(call qstrip,$(BR2_ARCH)) > > NORMALIZED_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) > > +ifeq ($(call qstrip,$(BR2_KERNEL_ARCH_OVERRIDE)),) > > KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) > > +else > > +KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH_OVERRIDE)) > > +endif > > > > ZCAT := $(call qstrip,$(BR2_ZCAT)) > > BZCAT := $(call qstrip,$(BR2_BZCAT)) > > diff --git a/arch/Config.in b/arch/Config.in > > index 7575acf48c..c82100f541 100644 > > --- a/arch/Config.in > > +++ b/arch/Config.in > > @@ -329,6 +329,21 @@ config BR2_ARCH > > config BR2_KERNEL_ARCH > > string > > > > +config BR2_KERNEL_ARCH_OVERRIDE > > + string "Kernel architecture override" > > Maybe it would be better to add architecture dependencies here (BR2_ARCH_IS_64) > > > + help > > + Normally, the correct kernel architecture value is derived > > + from the selected architecture, and you should keep this > > + option empty. > > + However, there are cases where you may want to enter a custom > > + value, for example when using a 64-bit architecture but > > + running userspace in 32-bit mode. > > + As an example, in case of an x86_64 processor where you want > > + 32-bit userspace, BR2_ARCH will be 'i386'/'i486'/'i686' and > > + BR2_KERNEL_ARCH_OVERRIDE should be set to 'x86_64'. Note that > > + in this example you will also need a multilib toolchain and > > + pass '-m32' via BR2_TARGET_OPTIMIZATION. > > Adding -m32 will force the mulitilib toolchain to produce 32bits binary. > But -m64 is also added to the toolchain wrapper for x86_64. > Mixing -m64 and -m32 doesn't seems a good idea. Well, the last entry on the command-line counts, and since BR2_TARGET_OPTIMIZATION is passed _after_ -m64, the -m32 wins as expected. It would be possible to avoid passing the -m64 but then I think we'll have to make some assumptions about the value of KERNEL_ARCH_OVERRIDE or only cover specific cases. Best regards, Thomas _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE 2022-01-13 22:05 ` Romain Naour 2022-01-15 19:31 ` Thomas De Schampheleire @ 2022-01-15 19:45 ` Thomas De Schampheleire 1 sibling, 0 replies; 18+ messages in thread From: Thomas De Schampheleire @ 2022-01-15 19:45 UTC (permalink / raw) To: Romain Naour; +Cc: Thomas De Schampheleire, buildroot El jue, 13 ene 2022 a las 23:05, Romain Naour (<romain.naour@gmail.com>) escribió: > > Hi Thomas, > > Le 18/05/2021 à 13:36, Thomas De Schampheleire a écrit : > > From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > > > There are cases where a 64-bit architecture is running a 64-bit kernel but > > 32-bit userspace. Examples include: > > * aarch64 architecture, with aarch64 kernel and 32-bit (ARM) userspace > > * x86_64 architecture, with x86_64 kernel and 32-bit (i386) userspace > > > > In Buildroot, the ARCH/BR2_ARCH and NORMALIZED_ARCH variables will refer to > > the 32-bit architecture, but the kernel needs to be built with the 64-bit > > architecture. > > > > Make it possible to define the correct architecture to be used for the > > kernel, in a new config option 'BR2_KERNEL_ARCH_OVERRIDE'. The user is > > expected to know the valid values. > > > > Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > --- > > Makefile | 4 ++++ > > arch/Config.in | 15 +++++++++++++++ > > 2 files changed, 19 insertions(+) > > > > diff --git a/Makefile b/Makefile > > index c5399e9a35..d09cf7c958 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -434,7 +434,11 @@ QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q) > > # Strip off the annoying quoting > > ARCH := $(call qstrip,$(BR2_ARCH)) > > NORMALIZED_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) > > +ifeq ($(call qstrip,$(BR2_KERNEL_ARCH_OVERRIDE)),) > > KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH)) > > +else > > +KERNEL_ARCH := $(call qstrip,$(BR2_KERNEL_ARCH_OVERRIDE)) > > +endif > > > > ZCAT := $(call qstrip,$(BR2_ZCAT)) > > BZCAT := $(call qstrip,$(BR2_BZCAT)) > > diff --git a/arch/Config.in b/arch/Config.in > > index 7575acf48c..c82100f541 100644 > > --- a/arch/Config.in > > +++ b/arch/Config.in > > @@ -329,6 +329,21 @@ config BR2_ARCH > > config BR2_KERNEL_ARCH > > string > > > > +config BR2_KERNEL_ARCH_OVERRIDE > > + string "Kernel architecture override" > > Maybe it would be better to add architecture dependencies here (BR2_ARCH_IS_64) > Note that BR2_ARCH and BR2_ARCH_IS_64 refer to the architecture Buildroot really uses, which in these scenarios is the 32-bit architecture. So letting BR2_KERNEL_ARCH_OVERRIDE depend on BR2_ARCH_IS_64 is not possible. If we restrict the whole feature to specific cases (e.g. the two ones that I currently need) and extend on case-by-case basis, we could be more specific here. Best regards, Thomas _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 18+ messages in thread
* [Buildroot] [PATCH 4/4] perf: fix compilation in case of i386 userspace with x86_64 kernel 2021-05-18 11:36 [Buildroot] [PATCH RFC 0/4] Basic support for 64-bit kernel and 32-bit userland Thomas De Schampheleire ` (2 preceding siblings ...) 2021-05-18 11:36 ` [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE Thomas De Schampheleire @ 2021-05-18 11:36 ` Thomas De Schampheleire 2022-01-13 22:15 ` Romain Naour 3 siblings, 1 reply; 18+ messages in thread From: Thomas De Schampheleire @ 2021-05-18 11:36 UTC (permalink / raw) To: buildroot From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> If a 64-bit kernel is combined with 32-bit userspace, and this is achieved via a multilib toolchain that defaults to 64-bit with '-m32' in BR2_TARGET_OPTIMIZATION, the '<cross>-ld' command will still default to 64-bit output. In this case, packages that use 'ld' directly need to be instructed to use the correct ABI via the '-m' parameter. 'perf' is one such package. Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> --- package/linux-tools/linux-tool-perf.mk.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package/linux-tools/linux-tool-perf.mk.in b/package/linux-tools/linux-tool-perf.mk.in index 4e28129f50..b84b5fd415 100644 --- a/package/linux-tools/linux-tool-perf.mk.in +++ b/package/linux-tools/linux-tool-perf.mk.in @@ -45,6 +45,9 @@ PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf32ltsmipn32" else PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf64ltsmip" endif +# case for x86 toolchain that defaults to 64-bit output +else ifeq ($(BR2_i386):$(call qstrip,$(BR2_KERNEL_ARCH_OVERRIDE)),y:x86_64) +PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf_i386" endif # The call to backtrace() function fails for ARC, because for some -- 2.26.3 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [Buildroot] [PATCH 4/4] perf: fix compilation in case of i386 userspace with x86_64 kernel 2021-05-18 11:36 ` [Buildroot] [PATCH 4/4] perf: fix compilation in case of i386 userspace with x86_64 kernel Thomas De Schampheleire @ 2022-01-13 22:15 ` Romain Naour 2022-01-14 9:33 ` Thomas De Schampheleire 0 siblings, 1 reply; 18+ messages in thread From: Romain Naour @ 2022-01-13 22:15 UTC (permalink / raw) To: Thomas De Schampheleire, buildroot; +Cc: Yann E. MORIN, Thomas De Schampheleire Hello Thomas, Le 18/05/2021 à 13:36, Thomas De Schampheleire a écrit : > From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > If a 64-bit kernel is combined with 32-bit userspace, and this is achieved > via a multilib toolchain that defaults to 64-bit with '-m32' in > BR2_TARGET_OPTIMIZATION, the '<cross>-ld' command will still default to > 64-bit output. > > In this case, packages that use 'ld' directly need to be instructed to use > the correct ABI via the '-m' parameter. 'perf' is one such package. > > Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > --- > package/linux-tools/linux-tool-perf.mk.in | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/package/linux-tools/linux-tool-perf.mk.in b/package/linux-tools/linux-tool-perf.mk.in > index 4e28129f50..b84b5fd415 100644 > --- a/package/linux-tools/linux-tool-perf.mk.in > +++ b/package/linux-tools/linux-tool-perf.mk.in > @@ -45,6 +45,9 @@ PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf32ltsmipn32" > else > PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf64ltsmip" > endif > +# case for x86 toolchain that defaults to 64-bit output > +else ifeq ($(BR2_i386):$(call qstrip,$(BR2_KERNEL_ARCH_OVERRIDE)),y:x86_64) > +PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf_i386" Do you know why the ARM toolchain doesn't need a similar handling ? Best regards, Romain > endif > > # The call to backtrace() function fails for ARC, because for some > _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Buildroot] [PATCH 4/4] perf: fix compilation in case of i386 userspace with x86_64 kernel 2022-01-13 22:15 ` Romain Naour @ 2022-01-14 9:33 ` Thomas De Schampheleire 0 siblings, 0 replies; 18+ messages in thread From: Thomas De Schampheleire @ 2022-01-14 9:33 UTC (permalink / raw) To: Romain Naour; +Cc: Yann E. MORIN, Thomas De Schampheleire, buildroot Hi Romain, El jue, 13 ene 2022 a las 23:17, Romain Naour (<romain.naour@gmail.com>) escribió: > > Hello Thomas, > > Le 18/05/2021 à 13:36, Thomas De Schampheleire a écrit : > > From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > > > If a 64-bit kernel is combined with 32-bit userspace, and this is achieved > > via a multilib toolchain that defaults to 64-bit with '-m32' in > > BR2_TARGET_OPTIMIZATION, the '<cross>-ld' command will still default to > > 64-bit output. > > > > In this case, packages that use 'ld' directly need to be instructed to use > > the correct ABI via the '-m' parameter. 'perf' is one such package. > > > > Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > --- > > package/linux-tools/linux-tool-perf.mk.in | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/package/linux-tools/linux-tool-perf.mk.in b/package/linux-tools/linux-tool-perf.mk.in > > index 4e28129f50..b84b5fd415 100644 > > --- a/package/linux-tools/linux-tool-perf.mk.in > > +++ b/package/linux-tools/linux-tool-perf.mk.in > > @@ -45,6 +45,9 @@ PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf32ltsmipn32" > > else > > PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf64ltsmip" > > endif > > +# case for x86 toolchain that defaults to 64-bit output > > +else ifeq ($(BR2_i386):$(call qstrip,$(BR2_KERNEL_ARCH_OVERRIDE)),y:x86_64) > > +PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf_i386" > > Do you know why the ARM toolchain doesn't need a similar handling ? If you are referring to the ARM toolchain that I am using, then yes. For Aarch64, it seems not possible to produce a multilib toolchain supporting ARM (32-bit) and Aarch64 (64-bit). I don't know the details about why. In order to support that case, we actually pack two separate toolchains into one 'toolchain' archive, and point Buildroot to the 32-bit one (the top-level directories bin/ lib/ etc. correspond to the 32-bit one). For Linux/u-boot we specifically point to the 64-bit toolchain. So since they are separate toolchains, there is no '-m32' anywhere: either toolchain has a fixed bitness. How we could handle this situation in Buildroot is to be discussed. These changes are not in this series. Best regards, Thomas _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2022-01-15 19:45 UTC | newest] Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-05-18 11:36 [Buildroot] [PATCH RFC 0/4] Basic support for 64-bit kernel and 32-bit userland Thomas De Schampheleire 2021-05-18 11:36 ` [Buildroot] [PATCH 1/4] arch: move definition of KERNEL_ARCH to Config.in.<arch> files Thomas De Schampheleire 2022-01-13 20:48 ` Romain Naour 2021-05-18 11:36 ` [Buildroot] [PATCH 2/4] core: introduce NORMALIZED_ARCH as non-kernel replacement for KERNEL_ARCH Thomas De Schampheleire 2022-01-13 21:30 ` Romain Naour 2022-01-14 12:27 ` Thomas De Schampheleire 2022-01-15 14:55 ` Romain Naour 2021-05-18 11:36 ` [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE Thomas De Schampheleire 2022-01-09 23:27 ` Romain Naour 2022-01-12 11:04 ` Thomas De Schampheleire 2022-01-12 19:10 ` Arnout Vandecappelle 2022-01-12 20:06 ` Romain Naour 2022-01-13 22:05 ` Romain Naour 2022-01-15 19:31 ` Thomas De Schampheleire 2022-01-15 19:45 ` Thomas De Schampheleire 2021-05-18 11:36 ` [Buildroot] [PATCH 4/4] perf: fix compilation in case of i386 userspace with x86_64 kernel Thomas De Schampheleire 2022-01-13 22:15 ` Romain Naour 2022-01-14 9:33 ` Thomas De Schampheleire
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.