Skip to contentSkip to conversation

: ELF/MIPS build fix

PATCH Applied Ralf Baechle 3 participants 4 messages May 20, 2016

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

PATCH 1/1 : ELF/MIPS build fix

CONFIG_MIPS32_N32=y but CONFIG_BINFMT_ELF disabled results in the following linker errors:

arch/mips/built-in.o: In function `elf_core_dump':
binfmt_elfn32.c:(.text+0x23dbc): undefined reference to elf_core_extra_phdrs' binfmt_elfn32.c:(.text+0x246e4): undefined reference to elf_core_extra_data_size' binfmt_elfn32.c:(.text+0x248d0): undefined reference to elf_core_write_extra_phdrs' binfmt_elfn32.c:(.text+0x24ac4): undefined reference to elf_core_write_extra_data'

CONFIG_MIPS32_O32=y but CONFIG_BINFMT_ELF disabled results in the following linker errors:

arch/mips/built-in.o: In function `elf_core_dump':
binfmt_elfo32.c:(.text+0x28a04): undefined reference to elf_core_extra_phdrs' binfmt_elfo32.c:(.text+0x29330): undefined reference to elf_core_extra_data_size' binfmt_elfo32.c:(.text+0x2951c): undefined reference to elf_core_write_extra_phdrs' binfmt_elfo32.c:(.text+0x29710): undefined reference to elf_core_write_extra_data'

This is because binfmt_elfn32 and binfmt_elfo32 are using symbols from elfcore but for these configurations elfcore will not be built.

Fixed by making elfcore selectable by a separate config symbol which unlike the current mechanism can also be used from other directories than kernel/, then having each flavor of ELF that relies on elfcore.o, select it in Kconfig, including CONFIG_MIPS32_N32 and CONFIG_MIPS32_O32 which fixes this issue.

---
 arch/mips/Kconfig | 1 +
 fs/Kconfig.binfmt | 8 ++++++++
 kernel/Makefile   | 4 +---
 3 files changed, 10 insertions(+), 3 deletions(-)
arch/mips/Kconfig +1 -0
index 5663f41..f19e15c 100644
@@ -3116,6 +3116,7 @@ config MIPS32_N32
 config BINFMT_ELF32
 	bool
 	default y if MIPS32_O32 || MIPS32_N32
+	select ELFCORE
 
 endmenu
 
fs/Kconfig.binfmt +8 -0
index 2d0cbbd..72c0335 100644
@@ -1,6 +1,7 @@
 config BINFMT_ELF
 	bool "Kernel support for ELF binaries"
 	depends on MMU && (BROKEN || !FRV)
+	select ELFCORE
 	default y
 	---help---
 	  ELF (Executable and Linkable Format) is a format for libraries and
@@ -26,6 +27,7 @@ config BINFMT_ELF
 config COMPAT_BINFMT_ELF
 	bool
 	depends on COMPAT && BINFMT_ELF
+	select ELFCORE
 
 config ARCH_BINFMT_ELF_STATE
 	bool
@@ -34,6 +36,7 @@ config BINFMT_ELF_FDPIC
 	bool "Kernel support for FDPIC ELF binaries"
 	default y
 	depends on (FRV || BLACKFIN || (SUPERH32 && !MMU) || C6X)
+	select ELFCORE
 	help
 	  ELF FDPIC binaries are based on ELF, but allow the individual load
 	  segments of a binary to be located in memory independently of each
@@ -43,6 +46,11 @@ config BINFMT_ELF_FDPIC
 
 	  It is also possible to run FDPIC ELF binaries on MMU linux also.
 
+config ELFCORE
+	bool
+	help
+	  This option enables kernel/elfcore.o.
+
 config CORE_DUMP_DEFAULT_ELF_HEADERS
 	bool "Write ELF core dumps with partial segments"
 	default y
kernel/Makefile +1 -3
index f0c40bf..e2ec54e 100644
@@ -91,9 +91,7 @@ obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
 obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o
 obj-$(CONFIG_TRACEPOINTS) += tracepoint.o
 obj-$(CONFIG_LATENCYTOP) += latencytop.o
-obj-$(CONFIG_BINFMT_ELF) += elfcore.o
-obj-$(CONFIG_COMPAT_BINFMT_ELF) += elfcore.o
-obj-$(CONFIG_BINFMT_ELF_FDPIC) += elfcore.o
+obj-$(CONFIG_ELFCORE) += elfcore.o
 obj-$(CONFIG_FUNCTION_TRACER) += trace/
 obj-$(CONFIG_TRACING) += trace/
 obj-$(CONFIG_TRACE_CLOCK) += trace/
Reviewed-by on v1 1/1
#1 lore raw
Quoted 21 lines · Ralf Baechle

CONFIG_MIPS32_N32=y but CONFIG_BINFMT_ELF disabled results in the following linker errors:

arch/mips/built-in.o: In function `elf_core_dump':
binfmt_elfn32.c:(.text+0x23dbc): undefined reference to elf_core_extra_phdrs' binfmt_elfn32.c:(.text+0x246e4): undefined reference to elf_core_extra_data_size' binfmt_elfn32.c:(.text+0x248d0): undefined reference to elf_core_write_extra_phdrs' binfmt_elfn32.c:(.text+0x24ac4): undefined reference to elf_core_write_extra_data'

CONFIG_MIPS32_O32=y but CONFIG_BINFMT_ELF disabled results in the following linker errors:

arch/mips/built-in.o: In function `elf_core_dump':
binfmt_elfo32.c:(.text+0x28a04): undefined reference to elf_core_extra_phdrs' binfmt_elfo32.c:(.text+0x29330): undefined reference to elf_core_extra_data_size' binfmt_elfo32.c:(.text+0x2951c): undefined reference to elf_core_write_extra_phdrs' binfmt_elfo32.c:(.text+0x29710): undefined reference to elf_core_write_extra_data'

This is because binfmt_elfn32 and binfmt_elfo32 are using symbols from elfcore but for these configurations elfcore will not be built.

Quoted 7 lines

Fixed by making elfcore selectable by a separate config symbol which unlike the current mechanism can also be used from other directories than kernel/, then having each flavor of ELF that relies on elfcore.o, select it in Kconfig, including CONFIG_MIPS32_N32 and CONFIG_MIPS32_O32 which fixes this issue.

FWIW this looks good to me,

Cheers
James

Quoted 73 lines
---
 arch/mips/Kconfig | 1 +
 fs/Kconfig.binfmt | 8 ++++++++
 kernel/Makefile   | 4 +---
 3 files changed, 10 insertions(+), 3 deletions(-)
arch/mips/Kconfig +1 -0
index 5663f41..f19e15c 100644
@@ -3116,6 +3116,7 @@ config MIPS32_N32
 config BINFMT_ELF32
 	bool
 	default y if MIPS32_O32 || MIPS32_N32
+	select ELFCORE
 
 endmenu
 
fs/Kconfig.binfmt +8 -0
index 2d0cbbd..72c0335 100644
@@ -1,6 +1,7 @@
 config BINFMT_ELF
 	bool "Kernel support for ELF binaries"
 	depends on MMU && (BROKEN || !FRV)
+	select ELFCORE
 	default y
 	---help---
 	  ELF (Executable and Linkable Format) is a format for libraries and
@@ -26,6 +27,7 @@ config BINFMT_ELF
 config COMPAT_BINFMT_ELF
 	bool
 	depends on COMPAT && BINFMT_ELF
+	select ELFCORE
 
 config ARCH_BINFMT_ELF_STATE
 	bool
@@ -34,6 +36,7 @@ config BINFMT_ELF_FDPIC
 	bool "Kernel support for FDPIC ELF binaries"
 	default y
 	depends on (FRV || BLACKFIN || (SUPERH32 && !MMU) || C6X)
+	select ELFCORE
 	help
 	  ELF FDPIC binaries are based on ELF, but allow the individual load
 	  segments of a binary to be located in memory independently of each
@@ -43,6 +46,11 @@ config BINFMT_ELF_FDPIC
 
 	  It is also possible to run FDPIC ELF binaries on MMU linux also.
 
+config ELFCORE
+	bool
+	help
+	  This option enables kernel/elfcore.o.
+
 config CORE_DUMP_DEFAULT_ELF_HEADERS
 	bool "Write ELF core dumps with partial segments"
 	default y
kernel/Makefile +1 -3
index f0c40bf..e2ec54e 100644
@@ -91,9 +91,7 @@ obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
 obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o
 obj-$(CONFIG_TRACEPOINTS) += tracepoint.o
 obj-$(CONFIG_LATENCYTOP) += latencytop.o
-obj-$(CONFIG_BINFMT_ELF) += elfcore.o
-obj-$(CONFIG_COMPAT_BINFMT_ELF) += elfcore.o
-obj-$(CONFIG_BINFMT_ELF_FDPIC) += elfcore.o
+obj-$(CONFIG_ELFCORE) += elfcore.o
 obj-$(CONFIG_FUNCTION_TRACER) += trace/
 obj-$(CONFIG_TRACING) += trace/
 obj-$(CONFIG_TRACE_CLOCK) += trace/
#2 lore raw
In reply to Ralf Baechle
Quoted 2 lines · Ralf Baechle

CONFIG_MIPS32_N32=y but CONFIG_BINFMT_ELF disabled results in the following linker errors:

Is this for a configuration with native (n64) ELF disabled, but one or
more compat ELF formats (o32, n32) enabled? An interesting use case then.

Maciej

#3 lore raw
Quoted 5 lines · Maciej W. Rozycki
Quoted 2 lines

CONFIG_MIPS32_N32=y but CONFIG_BINFMT_ELF disabled results in the following linker errors:

Is this for a configuration with native (n64) ELF disabled, but one or
more compat ELF formats (o32, n32) enabled? An interesting use case then.

Yes. Fairly sensible for one of those systems where we only support 64 bit kernels but don't need a 64 bit userland.

Ralf