Skip to contentSkip to conversation

arm64: Set UTS_MACHINE in the Makefile

PATCH New Michal Marek 2 participants 6 messages Aug 30, 2016

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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
index 5b54f8c021d8..ab3df36fdfbb 100644
@@ -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
index 14f7b651c787..7d66bbaafc0c 100644
@@ -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
index 536dce22fe76..c5dd09778c75 100644
@@ -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
#1 lore raw

PATCH 1/1 arm64: Set UTS_MACHINE in the Makefile

Quoted 7 lines · Michal Marek

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.

---

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
index 5b54f8c021d8..ab3df36fdfbb 100644

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

#2 lore raw

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_MACHINE definition. Also, use the variable in arch/arm64/kernel/setup.c, so that it's not accidentally removed in the future.

---

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

#3 lore raw

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_MACHINE definition. Also, use the variable in arch/arm64/kernel/setup.c, so that it's not accidentally removed in the future.

Quoted 8 lines
Quoted 6 lines
Quoted 3 lines

---

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.

Ok, but why doesn't that work for rpm?
Did you see the other part of my reply?

Will

#4 lore raw

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_MACHINE definition. Also, use the variable in arch/arm64/kernel/setup.c, so that it's not accidentally removed in the future.

---

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_MACHINE is 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/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).

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

#5 lore raw

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
index 5b54f8c021d8..ab3df36fdfbb 100644
@@ -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
index 14f7b651c787..7d66bbaafc0c 100644
@@ -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
index 536dce22fe76..c5dd09778c75 100644
@@ -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
index e1c09e2f9be7..b8900db5115a 100755
@@ -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