mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
powerpc/64: Option to build big-endian with ELFv2 ABI
[ Upstream commit 5017b45946 ]
Provide an option to build big-endian kernels using the ELFv2 ABI. This
works on GCC only for now. Clang is rumored to support this, but core
build files need updating first, at least.
This gives big-endian kernels useful advantages of the ELFv2 ABI, e.g.,
less stack usage, -mprofile-kernel support, better compatibility with
eBPF tools.
BE+ELFv2 is not officially supported by the GNU toolchain, but it works
fine in testing and has been used by some userspace for some time (e.g.,
Void Linux).
Tested-by: Michal Suchánek <msuchanek@suse.de>
Reviewed-by: Segher Boessenkool <segher@kernel.crashing.org>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20221128041539.1742489-5-npiggin@gmail.com
Stable-dep-of: 39190ac7cff1 ("powerpc/atomic: Use YZ constraints for DS-form instructions")
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
b986ec200f
commit
8b9f7d8d71
@@ -1,6 +1,9 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
source "arch/powerpc/platforms/Kconfig.cputype"
|
||||
|
||||
config CC_HAS_ELFV2
|
||||
def_bool PPC64 && $(cc-option, -mabi=elfv2)
|
||||
|
||||
config 32BIT
|
||||
bool
|
||||
default y if PPC32
|
||||
@@ -583,6 +586,24 @@ config KEXEC_FILE
|
||||
config ARCH_HAS_KEXEC_PURGATORY
|
||||
def_bool KEXEC_FILE
|
||||
|
||||
config PPC64_BIG_ENDIAN_ELF_ABI_V2
|
||||
bool "Build big-endian kernel using ELF ABI V2 (EXPERIMENTAL)"
|
||||
depends on PPC64 && CPU_BIG_ENDIAN
|
||||
depends on CC_HAS_ELFV2
|
||||
depends on LD_IS_BFD && LD_VERSION >= 22400
|
||||
default n
|
||||
help
|
||||
This builds the kernel image using the "Power Architecture 64-Bit ELF
|
||||
V2 ABI Specification", which has a reduced stack overhead and faster
|
||||
function calls. This internal kernel ABI option does not affect
|
||||
userspace compatibility.
|
||||
|
||||
The V2 ABI is standard for 64-bit little-endian, but for big-endian
|
||||
it is less well tested by kernel and toolchain. However some distros
|
||||
build userspace this way, and it can produce a functioning kernel.
|
||||
|
||||
This requires GCC and binutils 2.24 or newer.
|
||||
|
||||
config RELOCATABLE
|
||||
bool "Build a relocatable kernel"
|
||||
depends on PPC64 || (FLATMEM && (44x || PPC_85xx))
|
||||
|
||||
@@ -585,10 +585,10 @@ config CPU_LITTLE_ENDIAN
|
||||
endchoice
|
||||
|
||||
config PPC64_ELF_ABI_V1
|
||||
def_bool PPC64 && CPU_BIG_ENDIAN
|
||||
def_bool PPC64 && (CPU_BIG_ENDIAN && !PPC64_BIG_ENDIAN_ELF_ABI_V2)
|
||||
|
||||
config PPC64_ELF_ABI_V2
|
||||
def_bool PPC64 && CPU_LITTLE_ENDIAN
|
||||
def_bool PPC64 && !PPC64_ELF_ABI_V1
|
||||
|
||||
config PPC64_BOOT_WRAPPER
|
||||
def_bool n
|
||||
|
||||
Reference in New Issue
Block a user