: ELF/MIPS build fix
Subsystems (3)
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
@@ -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
@@ -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
@@ -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/
Quoted 21 lines · Ralf Baechle
CONFIG_MIPS32_N32=ybutCONFIG_BINFMT_ELFdisabled results in the following linker errors:
arch/mips/built-in.o: In function `elf_core_dump':
binfmt_elfn32.c:(.text+0x23dbc): undefined reference toelf_core_extra_phdrs' binfmt_elfn32.c:(.text+0x246e4): undefined reference toelf_core_extra_data_size' binfmt_elfn32.c:(.text+0x248d0): undefined reference toelf_core_write_extra_phdrs' binfmt_elfn32.c:(.text+0x24ac4): undefined reference toelf_core_write_extra_data'
CONFIG_MIPS32_O32=ybutCONFIG_BINFMT_ELFdisabled results in the following linker errors:
arch/mips/built-in.o: In function `elf_core_dump':
binfmt_elfo32.c:(.text+0x28a04): undefined reference toelf_core_extra_phdrs' binfmt_elfo32.c:(.text+0x29330): undefined reference toelf_core_extra_data_size' binfmt_elfo32.c:(.text+0x2951c): undefined reference toelf_core_write_extra_phdrs' binfmt_elfo32.c:(.text+0x29710): undefined reference toelf_core_write_extra_data'This is because
binfmt_elfn32andbinfmt_elfo32are 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 inKconfig, includingCONFIG_MIPS32_N32andCONFIG_MIPS32_O32which fixes this issue.Signed-off-by Ralf Baechle <[email protected]>
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@@ -3116,6 +3116,7 @@ config MIPS32_N32 config BINFMT_ELF32 bool default y if MIPS32_O32 || MIPS32_N32 + select ELFCORE endmenufs/Kconfig.binfmt +8
-0@@ -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 ykernel/Makefile +1
-3@@ -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/
Quoted 2 lines · Ralf Baechle
CONFIG_MIPS32_N32=ybutCONFIG_BINFMT_ELFdisabled 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
Quoted 5 lines · Maciej W. Rozycki
Quoted 2 lines
CONFIG_MIPS32_N32=ybutCONFIG_BINFMT_ELFdisabled 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