arm64: Set UTS_MACHINE in the Makefile
PATCH 1/1 arm64: Set UTS_MACHINE in the Makefile
The make rpm target depends on proper UTS_MACHINE definition. Also, use the variable in arch/arm64/kernel/setup.c, so that it's not accidentally removed in the future.
--- arch/arm64/Makefile | 2 ++ arch/arm64/kernel/Makefile | 2 ++ arch/arm64/kernel/setup.c | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-)
arch/arm64/Makefile +2 -0
@@ -38,10 +38,12 @@ ifeq ($(CONFIG_CPU_BIG_ENDIAN), y) KBUILD_CPPFLAGS += -mbig-endian AS += -EB LD += -EB +UTS_MACHINE := aarch64_be else KBUILD_CPPFLAGS += -mlittle-endian AS += -EL LD += -EL +UTS_MACHINE := aarch64 endif CHECKFLAGS += -D__aarch64__
arch/arm64/kernel/Makefile +2 -0
@@ -10,6 +10,8 @@ CFLAGS_REMOVE_ftrace.o = -pg CFLAGS_REMOVE_insn.o = -pg CFLAGS_REMOVE_return_address.o = -pg +CFLAGS_setup.o = -DUTS_MACHINE='"$(UTS_MACHINE)"' + # Object file lists. arm64-obj-y := debug-monitors.o entry.o irq.o fpsimd.o \ entry-fpsimd.o process.o ptrace.o setup.o signal.o \
arch/arm64/kernel/setup.c +1 -1
@@ -228,7 +228,7 @@ void __init setup_arch(char **cmdline_p) {pr_info ("Boot CPU: AArch64 Processor [%08x]\n" ,read_cpuid_id ()); -sprintf (init_utsname ()->machine,ELF_PLATFORM ); +sprintf (init_utsname ()->machine,UTS_MACHINE ); init_mm.start_code = (unsigned long ) _text; init_mm.end_code = (unsigned long ) _etext; init_mm.end_data = (unsigned long ) _edata;
Signature · 1 line
2.6.6
PATCH 1/1 arm64: Set UTS_MACHINE in the Makefile
Quoted 7 lines · Michal Marek
The make rpm target depends on proper
UTS_MACHINEdefinition. Also, use the variable inarch/arm64/kernel/setup.c, so that it's not accidentally removed in the future.Reported-and-tested-by Fabian Vogt <[email protected]>Signed-off-by Michal Marek <[email protected]>---
What exactly do you mean by "proper", here? Is it just the endianness suffix that you need?
Quoted 10 lines
arch/arm64/Makefile | 2 ++ arch/arm64/kernel/Makefile | 2 ++ arch/arm64/kernel/setup.c | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-)arch/arm64/Makefile +0
-0
arch/arm64/Makefile ifeq ($(CONFIG_CPU_BIG_ENDIAN), y) · line 47
Quoted 10 lines
arch/arm64/Makefile +2
-0@@ -38,10 +38,12 @@ ifeq ($(CONFIG_CPU_BIG_ENDIAN), y) KBUILD_CPPFLAGS += -mbig-endian AS += -EB LD += -EB +UTS_MACHINE := aarch64_be else KBUILD_CPPFLAGS += -mlittle-endian AS += -EL LD += -EL +UTS_MACHINE := aarch64 endif
I think we're be better off changing scripts/package/Makefile to map UTS_MACHINE into whatever rpm requires, just like scripts/package/builddeb already does this for .deb (which I think ends up broken with your patch applied).
Will
PATCH 1/1 arm64: Set UTS_MACHINE in the Makefile
Quoted 11 lines · Will Deacon
Quoted 7 lines · Michal Marek
The make rpm target depends on proper
UTS_MACHINEdefinition. Also, use the variable inarch/arm64/kernel/setup.c, so that it's not accidentally removed in the future.Reported-and-tested-by Fabian Vogt <[email protected]>Signed-off-by Michal Marek <[email protected]>---
What exactly do you mean by "proper", here? Is it just the endianness suffix that you need?
The default for UTS_MACHINE is the kbuild arch name, which would be arm64.
Michal
PATCH 1/1 arm64: Set UTS_MACHINE in the Makefile
Quoted 6 lines · Michal Marek
Quoted 5 lines · Will Deacon
Quoted 4 lines · Michal Marek
The make rpm target depends on proper
UTS_MACHINEdefinition. Also, use the variable inarch/arm64/kernel/setup.c, so that it's not accidentally removed in the future.
Quoted 8 lines
Quoted 6 lines
Quoted 3 lines
Reported-and-tested-by Fabian Vogt <[email protected]>Signed-off-by Michal Marek <[email protected]>---
What exactly do you mean by "proper", here? Is it just the endianness suffix that you need?
The default for
UTS_MACHINEis the kbuild arch name, which would be arm64.
Ok, but why doesn't that work for rpm?
Did you see the other part of my reply?
Will
PATCH 1/1 arm64: Set UTS_MACHINE in the Makefile
Quoted 11 lines · Will Deacon
Quoted 10 lines · Michal Marek
Quoted 9 lines · Will Deacon
Quoted 7 lines · Michal Marek
The make rpm target depends on proper
UTS_MACHINEdefinition. Also, use the variable inarch/arm64/kernel/setup.c, so that it's not accidentally removed in the future.Reported-and-tested-by Fabian Vogt <[email protected]>Signed-off-by Michal Marek <[email protected]>---
Quoted 6 lines
Quoted 4 lines
Quoted 2 lines
What exactly do you mean by "proper", here? Is it just the endianness suffix that you need?
The default for
UTS_MACHINEis the kbuild arch name, which would be arm64.Ok, but why doesn't that work for rpm?
It does not work for rpm, because the arch/* subdirectory names are unknown to userspace. rpmbuild --target ... expects the uname -m string of the target architecture. What other architectures do is that they change the UTS_MACHINE definition if it differs from the kbuild architecture name (e.g. x86, power, s390).
Quoted 1 line
Did you see the other part of my reply?
Oops, I haven't.
Quoted 4 lines · Will Deacon
I think we're be better off changing
scripts/package/Makefileto mapUTS_MACHINEinto whatever rpm requires, just likescripts/package/builddebalready does this for .deb (which I think ends up broken with your patch applied).
As explained above, rpm requires the UTS_MACHINE definition that other architectures set in their Makefiles. Debian architectures use a slightly different naming than the uname -m string, so a mapping is needed. You are right about the breakage, I will send a v2.
Michal
PATCH v2 1/1 arm64: Set UTS_MACHINE in the Makefile
UTS_MACHINE is set to the kbuild architecture name by the main Makefile, and optionally adjusted by the arch Makefiles, so that it holds the architecture name as presented to userspace (uname -m). In particular, the make rpm target relies on proper UTS_MACHINE definition. Do the same in the arm64 Makefile and also, use the variable in arch/arm64/kernel/setup.c, so that it's not accidentally removed in the future. Meanwhile, the make deb-pkg target adapted to the wrong UTS_MACHINE definition, fix that as well.
---
v2: Explain the problem more in the changelog and also fix make deb-pkg
(thanks to Will Deacon)
arch/arm64/Makefile | 2 ++ arch/arm64/kernel/Makefile | 2 ++ arch/arm64/kernel/setup.c | 2 +- scripts/package/builddeb | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-)
arch/arm64/Makefile +2 -0
@@ -38,10 +38,12 @@ ifeq ($(CONFIG_CPU_BIG_ENDIAN), y) KBUILD_CPPFLAGS += -mbig-endian AS += -EB LD += -EB +UTS_MACHINE := aarch64_be else KBUILD_CPPFLAGS += -mlittle-endian AS += -EL LD += -EL +UTS_MACHINE := aarch64 endif CHECKFLAGS += -D__aarch64__
arch/arm64/kernel/Makefile +2 -0
@@ -10,6 +10,8 @@ CFLAGS_REMOVE_ftrace.o = -pg CFLAGS_REMOVE_insn.o = -pg CFLAGS_REMOVE_return_address.o = -pg +CFLAGS_setup.o = -DUTS_MACHINE='"$(UTS_MACHINE)"' + # Object file lists. arm64-obj-y := debug-monitors.o entry.o irq.o fpsimd.o \ entry-fpsimd.o process.o ptrace.o setup.o signal.o \
arch/arm64/kernel/setup.c +1 -1
@@ -228,7 +228,7 @@ void __init setup_arch(char **cmdline_p) {pr_info ("Boot CPU: AArch64 Processor [%08x]\n" ,read_cpuid_id ()); -sprintf (init_utsname ()->machine,ELF_PLATFORM ); +sprintf (init_utsname ()->machine,UTS_MACHINE ); init_mm.start_code = (unsigned long ) _text; init_mm.end_code = (unsigned long ) _etext; init_mm.end_data = (unsigned long ) _edata;
scripts/package/builddeb +1 -1
@@ -51,7 +51,7 @@ set_debarch() { debarch=hppa ;; mips*) debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo el || true) ;; - arm64) + aarch64*) debarch=arm64 ;; arm*) if grep -q CONFIG_AEABI=y $KCONFIG_CONFIG; then
Signature · 1 line
2.6.6