ARM: limit OABI support to StrongARM CPUs

As discussed on the mailing lists, there is no way to build OABI userspace
binaries any more since gcc-4.8, and now support is also getting dropped in
binutils, which will make it impossible to build pure OABI kernels at some
point in the future.

I found no evidence of anyone still sing OABI userspace on embedded systems
that keep getting kernel updates, but there are a few desktop-class machines
that date back to the 1990s using Intel StrongARM processors that were
supported by old versions of Debian, Red Hat or the official Corel
Netwinder distribution.

Add a much stricter Kconfig dependency for both native OABI and OABI_COMPAT
enabled kernels, only allowing either of them to be selected when building
a kernel that targets a StrongARM based machine.

Link: https://lore.kernel.org/lkml/2831c5a6-cfbf-4fe0-b51c-0396e5b0aeb7@app.fastmail.com/
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
Arnd Bergmann 2024-08-20 10:45:38 +02:00
parent 30b1c4a340
commit 25900bd99d
4 changed files with 7 additions and 10 deletions

View File

@ -1151,8 +1151,7 @@ config ARM_PATCH_IDIV
code to do integer division.
config AEABI
bool "Use the ARM EABI to compile the kernel" if !CPU_V7 && \
!CPU_V7M && !CPU_V6 && !CPU_V6K && !CC_IS_CLANG
bool "Use the ARM EABI to compile the kernel" if CPU_SA110 || CPU_SA1100
default y
help
The Arm EABI is the default ABI on all modern Linux
@ -1162,9 +1161,13 @@ config AEABI
Everyone should enable this, as support for OABI user space
was dropped in gcc-4.8 and most distributions after ca. 2013.
Support for OABI mode will be removed from the kernel
once Intel StrongARM CPUs are phased out.
config OABI_COMPAT
bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)"
depends on AEABI && !THUMB2_KERNEL
depends on CPU_SA110 || CPU_SA1100
help
This option preserves the old syscall interface along with the
new (ARM EABI) one. It also provides a compatibility layer to
@ -1177,11 +1180,8 @@ config OABI_COMPAT
selected, since there is no way yet to sensibly distinguish
between calling conventions during filtering.
If you know you'll be using only pure EABI user space then you
can say N here. If this option is not selected and you attempt
to execute a legacy ABI binary then the result will be
UNPREDICTABLE (in fact it can be predicted that it won't work
at all). If in doubt say N.
Support for OABI_COMPAT will be removed from the kernel
once Intel StrongARM CPUs are phased out.
config ARCH_SELECT_MEMORY_MODEL
def_bool y

View File

@ -7,7 +7,6 @@ CONFIG_EXPERT=y
# CONFIG_ARCH_MULTI_V7 is not set
CONFIG_ARCH_PXA=y
CONFIG_ARCH_GUMSTIX=y
# CONFIG_OABI_COMPAT is not set
CONFIG_CMDLINE="console=ttyS0,115200n8 root=1f01 rootfstype=jffs2"
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y

View File

@ -38,7 +38,6 @@ CONFIG_PCIE_AXXIA=y
CONFIG_SMP=y
CONFIG_NR_CPUS=16
CONFIG_HOTPLUG_CPU=y
CONFIG_OABI_COMPAT=y
CONFIG_HIGHMEM=y
CONFIG_ARM_APPENDED_DTB=y
CONFIG_ARM_ATAG_DTB_COMPAT=y

View File

@ -6,7 +6,6 @@ CONFIG_LOG_BUF_SHIFT=14
CONFIG_BLK_DEV_INITRD=y
# CONFIG_ARCH_MULTI_V7 is not set
CONFIG_ARCH_VERSATILE=y
CONFIG_OABI_COMPAT=y
CONFIG_CMDLINE="root=1f03 mem=32M"
CONFIG_FPE_NWFPE=y
CONFIG_VFP=y