diff mbox series

[02/15] ARM: limit OABI support to StrongARM CPUs

Message ID 20241204102904.1863796-3-arnd@kernel.org (mailing list archive)
State New
Headers show
Series ARM: platform and feature deprecation | expand

Commit Message

Arnd Bergmann Dec. 4, 2024, 10:28 a.m. UTC
From: Arnd Bergmann <arnd@arndb.de>

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/
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/arm/Kconfig                       | 14 +++++++-------
 arch/arm/configs/am200epdkit_defconfig |  1 -
 arch/arm/configs/axm55xx_defconfig     |  1 -
 arch/arm/configs/footbridge_defconfig  |  2 +-
 arch/arm/configs/neponset_defconfig    |  2 +-
 arch/arm/configs/versatile_defconfig   |  1 -
 6 files changed, 9 insertions(+), 12 deletions(-)

Comments

Linus Walleij Dec. 4, 2024, 1:58 p.m. UTC | #1
On Wed, Dec 4, 2024 at 11:29 AM Arnd Bergmann <arnd@kernel.org> wrote:

> From: Arnd Bergmann <arnd@arndb.de>
>
> 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/
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

For
>  arch/arm/configs/versatile_defconfig   |  1 -

Acked-by: Linus Walleij <linus.walleij@linaro.org>


> diff --git a/arch/arm/configs/footbridge_defconfig b/arch/arm/configs/footbridge_defconfig
(...)
>  CONFIG_ARCH_NETWINDER=y
> +# CONFIG_AEABI is not set
>  CONFIG_FPE_NWFPE=y
>  CONFIG_FPE_NWFPE_XP=y
> -# CONFIG_AEABI is not set

Hm why do we need a separate netwinder_defconfig if this defconfig already
supports it?

I am occasionally booting the NetWinder and then I use this defconfig,
the netwinder_defconfig wasn't even working for me.

Do you want to propose a separate patch to delete netwinder_defconfig,
otherwise I can send one. I think everyone (which is like ... 3 people) are
using footbridge_defconfig.

Yours,
Linus Walleij
Ralph Siemsen Dec. 4, 2024, 2:50 p.m. UTC | #2
On Wed, Dec 4, 2024 at 8:59 AM Linus Walleij <linus.walleij@linaro.org> wrote:

> Hm why do we need a separate netwinder_defconfig if this defconfig already
> supports it?

AFAIK footbridge_defconfig is for the "Compaq Personal Server", which
is different than NetWinder. They could probably be reconciled by
using devicetree and converting any platform devices. However testing
could be a challenge, not sure who has working hardware anymore.

> I am occasionally booting the NetWinder and then I use this defconfig,
> the netwinder_defconfig wasn't even working for me.

Interesting. I successfully used netwinder_defconfig a few years ago.

I have several times thought about updating the netwinder, starting
with a more modern bootloader (I got u-boot working at one point), so
we no longer need ATAGS. However toolchain support is problematic
("bx" hack anyone?) and there are so many cheaper faster boards (RPi
for example) which require much less effort.

Regards
-Ralph
Russell King (Oracle) Dec. 4, 2024, 3:42 p.m. UTC | #3
On Wed, Dec 04, 2024 at 09:50:57AM -0500, Ralph Siemsen wrote:
> On Wed, Dec 4, 2024 at 8:59 AM Linus Walleij <linus.walleij@linaro.org> wrote:
> 
> > Hm why do we need a separate netwinder_defconfig if this defconfig already
> > supports it?
> 
> AFAIK footbridge_defconfig is for the "Compaq Personal Server", which
> is different than NetWinder. They could probably be reconciled by
> using devicetree and converting any platform devices. However testing
> could be a challenge, not sure who has working hardware anymore.

It's entirely possible to build one kernel that supports the EBSA285,
NetWinder and Compaq Personal Server. They're all the same machine at
the end of the day (PCI based SA110.) As long as the boot loaders pass
the correct machine type, the correct board file will be selected to
set things up.

However, if I remember correctly, Compaq seemed to be anti-mainline, so
didn't implement the machine ID and other things. I ended up
implementing a shim around the kernel to make mainline bootable on the
platform to correct the stuff that they couldn't be bothered to
implement. I may be adversely blaming them, as history from back then
is rather fuzzy, but I do remember mainline doesn't work because of all
sorts of weirdness they did.
diff mbox series

Patch

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index f8f127650ace..54f5cc12dea4 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1161,8 +1161,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
@@ -1172,9 +1171,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
@@ -1187,11 +1190,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
diff --git a/arch/arm/configs/am200epdkit_defconfig b/arch/arm/configs/am200epdkit_defconfig
index 22397d45f4a0..55c5c08a5f96 100644
--- a/arch/arm/configs/am200epdkit_defconfig
+++ b/arch/arm/configs/am200epdkit_defconfig
@@ -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
diff --git a/arch/arm/configs/axm55xx_defconfig b/arch/arm/configs/axm55xx_defconfig
index 39b06d59d87a..9d14b987ee94 100644
--- a/arch/arm/configs/axm55xx_defconfig
+++ b/arch/arm/configs/axm55xx_defconfig
@@ -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
diff --git a/arch/arm/configs/footbridge_defconfig b/arch/arm/configs/footbridge_defconfig
index 589b7b1df8c6..e8bf9847d35d 100644
--- a/arch/arm/configs/footbridge_defconfig
+++ b/arch/arm/configs/footbridge_defconfig
@@ -9,9 +9,9 @@  CONFIG_ARCH_MULTI_V4=y
 CONFIG_ARCH_FOOTBRIDGE=y
 CONFIG_ARCH_EBSA285_HOST=y
 CONFIG_ARCH_NETWINDER=y
+# CONFIG_AEABI is not set
 CONFIG_FPE_NWFPE=y
 CONFIG_FPE_NWFPE_XP=y
-# CONFIG_AEABI is not set
 CONFIG_MODULES=y
 CONFIG_PARTITION_ADVANCED=y
 CONFIG_ACORN_PARTITION=y
diff --git a/arch/arm/configs/neponset_defconfig b/arch/arm/configs/neponset_defconfig
index a8833b2ce335..7a7b6a896f85 100644
--- a/arch/arm/configs/neponset_defconfig
+++ b/arch/arm/configs/neponset_defconfig
@@ -6,12 +6,12 @@  CONFIG_ARCH_MULTI_V4=y
 CONFIG_ARCH_SA1100=y
 CONFIG_SA1100_ASSABET=y
 CONFIG_ASSABET_NEPONSET=y
+# CONFIG_AEABI is not set
 CONFIG_ZBOOT_ROM_TEXT=0x80000
 CONFIG_ZBOOT_ROM_BSS=0xc1000000
 CONFIG_ZBOOT_ROM=y
 CONFIG_CMDLINE="console=ttySA0,38400n8 cpufreq=221200 rw root=/dev/mtdblock2 mtdparts=sa1100:512K(boot),1M(kernel),2560K(initrd),4M(root) load_ramdisk=1 prompt_ramdisk=0 mem=32M noinitrd initrd=0xc0800000,3M"
 CONFIG_FPE_NWFPE=y
-# CONFIG_AEABI is not set
 CONFIG_PM=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
diff --git a/arch/arm/configs/versatile_defconfig b/arch/arm/configs/versatile_defconfig
index 8e89debb5a5b..bb9eb9ccbbde 100644
--- a/arch/arm/configs/versatile_defconfig
+++ b/arch/arm/configs/versatile_defconfig
@@ -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