Skip to contentSkip to conversation

parisc: Switch to generic COMPAT_BINFMT_ELF

PATCH Guenter Roeck 2 participants 3 messages Apr 13, 2018 PA-RISC architecture

lore
Share & tools
lore
#0 lore raw
Quoted 4 lines · Helge Deller

Drop our own compat binfmt implementation in arch/parisc/kernel/binfmt_elf32.c in favour of the generic implementation with CONFIG_COMPAT_BINFMT_ELF.

Quoted 8 lines

While cleaning up the dependencies, I noticed that ELF_PLATFORM was strangely
defined: On a 32-bit kernel, it was defined to "PARISC", while when running in compat mode on a 64-bit kernel it was defined to "PARISC32". Since it doesn't seem to be used in glibc yet, it's now defined in both cases to "PARISC". In any case, it can be distinguished because it's either a 32-bit or a 64-bit ELF file.

This patch results in:

Building parisc:a500_defconfig ... failed
--------------
Error log:
make[2]: *** No rule to make target 'arch/parisc/kernel/binfmt_elf32.o', needed by 'arch/parisc/kernel/built-in.a'. Stop.
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [arch/parisc/kernel] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [sub-make] Error 2
--------------
Building parisc:generic-64bit_defconfig ... failed
--------------
Error log:
make[2]: *** No rule to make target 'arch/parisc/kernel/binfmt_elf32.o', needed by 'arch/parisc/kernel/built-in.a'. Stop.

Indeed, arch/parisc/kernel/binfmt_elf32.o is still listed in Makefile for 64-bit builds.

$ git grep binfmt_elf32.o arch/parisc/
arch/parisc/kernel/Makefile:obj-$(CONFIG_64BIT) += binfmt_elf32.o sys_parisc32.o signal32.o

Guenter

maintainer
#1 lore raw

* Guenter Roeck <[email protected]>:

Quoted 32 lines · Helge Deller
Quoted 4 lines

Drop our own compat binfmt implementation in arch/parisc/kernel/binfmt_elf32.c in favour of the generic implementation with CONFIG_COMPAT_BINFMT_ELF.

Quoted 8 lines

While cleaning up the dependencies, I noticed that ELF_PLATFORM was strangely
defined: On a 32-bit kernel, it was defined to "PARISC", while when running in compat mode on a 64-bit kernel it was defined to "PARISC32". Since it doesn't seem to be used in glibc yet, it's now defined in both cases to "PARISC". In any case, it can be distinguished because it's either a 32-bit or a 64-bit ELF file.

This patch results in:

Building parisc:a500_defconfig ... failed
--------------
Error log:
make[2]: *** No rule to make target 'arch/parisc/kernel/binfmt_elf32.o', needed by 'arch/parisc/kernel/built-in.a'. Stop.
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [arch/parisc/kernel] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [sub-make] Error 2
--------------
Building parisc:generic-64bit_defconfig ... failed
--------------
Error log:
make[2]: *** No rule to make target 'arch/parisc/kernel/binfmt_elf32.o', needed by 'arch/parisc/kernel/built-in.a'. Stop.

Quoted 5 lines

Indeed, arch/parisc/kernel/binfmt_elf32.o is still listed in Makefile for 64-bit builds.

$ git grep binfmt_elf32.o arch/parisc/
arch/parisc/kernel/Makefile:obj-$(CONFIG_64BIT) += binfmt_elf32.o sys_parisc32.o signal32.o

You are right.
I got fooled because I still had the binfmt_elf32.o object in my build directory and so I didn't faced this build error. And even 0-day builds didn't complained...

Thanks for testing!

Patch below fixes it.

Helge
---

[PATCH] parisc: Fix missing binfmt_elf32.o build error

Commit 71d577db01a5 ("parisc: Switch to generic COMPAT_BINFMT_ELF") removed the binfmt_elf32.c source file, but missed to drop the object file from list of object files the Makefile too, which then results in a build error.

Fixes 71d577db01a5 ("parisc: Switch to generic COMPAT_BINFMT_ELF")
arch/parisc/kernel/Makefile +1 -1
index eafd06a..e5de34d 100644
@@ -23,7 +23,7 @@ obj-$(CONFIG_SMP)	+= smp.o
 obj-$(CONFIG_PA11)	+= pci-dma.o
 obj-$(CONFIG_PCI)	+= pci.o
 obj-$(CONFIG_MODULES)	+= module.o
-obj-$(CONFIG_64BIT)	+= binfmt_elf32.o sys_parisc32.o signal32.o
+obj-$(CONFIG_64BIT)	+= sys_parisc32.o signal32.o
 obj-$(CONFIG_STACKTRACE)+= stacktrace.o
 obj-$(CONFIG_AUDIT)	+= audit.o
 obj64-$(CONFIG_AUDIT)	+= compat_audit.o
author Tested-by
#2 lore raw
Quoted 53 lines · Helge Deller

* Guenter Roeck <[email protected]>:

Quoted 32 lines · Helge Deller
Quoted 4 lines

Drop our own compat binfmt implementation in arch/parisc/kernel/binfmt_elf32.c in favour of the generic implementation with CONFIG_COMPAT_BINFMT_ELF.

Quoted 8 lines

While cleaning up the dependencies, I noticed that ELF_PLATFORM was strangely
defined: On a 32-bit kernel, it was defined to "PARISC", while when running in compat mode on a 64-bit kernel it was defined to "PARISC32". Since it doesn't seem to be used in glibc yet, it's now defined in both cases to "PARISC". In any case, it can be distinguished because it's either a 32-bit or a 64-bit ELF file.

This patch results in:

Building parisc:a500_defconfig ... failed
--------------
Error log:
make[2]: *** No rule to make target 'arch/parisc/kernel/binfmt_elf32.o', needed by 'arch/parisc/kernel/built-in.a'. Stop.
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [arch/parisc/kernel] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [sub-make] Error 2
--------------
Building parisc:generic-64bit_defconfig ... failed
--------------
Error log:
make[2]: *** No rule to make target 'arch/parisc/kernel/binfmt_elf32.o', needed by 'arch/parisc/kernel/built-in.a'. Stop.

Quoted 5 lines

Indeed, arch/parisc/kernel/binfmt_elf32.o is still listed in Makefile for 64-bit builds.

$ git grep binfmt_elf32.o arch/parisc/
arch/parisc/kernel/Makefile:obj-$(CONFIG_64BIT) += binfmt_elf32.o sys_parisc32.o signal32.o

You are right.
I got fooled because I still had the binfmt_elf32.o object in my build directory and so I didn't faced this build error. And even 0-day builds didn't complained...

Thanks for testing!

Patch below fixes it.

Helge
---

[PATCH] parisc: Fix missing binfmt_elf32.o build error

Quoted 8 lines

Commit 71d577db01a5 ("parisc: Switch to generic COMPAT_BINFMT_ELF") removed the binfmt_elf32.c source file, but missed to drop the object file from list of object files the Makefile too, which then results in a build error.

Fixes 71d577db01a5 ("parisc: Switch to generic COMPAT_BINFMT_ELF")
Quoted 15 lines
arch/parisc/kernel/Makefile +1 -1
index eafd06a..e5de34d 100644
@@ -23,7 +23,7 @@ obj-$(CONFIG_SMP)	+= smp.o
 obj-$(CONFIG_PA11)	+= pci-dma.o
 obj-$(CONFIG_PCI)	+= pci.o
 obj-$(CONFIG_MODULES)	+= module.o
-obj-$(CONFIG_64BIT)	+= binfmt_elf32.o sys_parisc32.o signal32.o
+obj-$(CONFIG_64BIT)	+= sys_parisc32.o signal32.o
 obj-$(CONFIG_STACKTRACE)+= stacktrace.o
 obj-$(CONFIG_AUDIT)	+= audit.o
 obj64-$(CONFIG_AUDIT)	+= compat_audit.o